-
컴퓨터 시스템 딥 다이브 : C 언어부터 어셈블리, 아키텍처, OS까지 한 꺼풀씩 벗겨보는 컴퓨터 시스템코딩_Coding_Dev책_정리/C++&_C언어_Coding_Book 2023. 12. 27. 16:17728x90
eBook)
컴퓨터 시스템 딥 다이브 : C 언어부터 어셈블리, 아키텍처, OS까지 한 꺼풀씩 벗겨보는 컴퓨터 시스템 [ PDF ]
수잰 J. 매슈스,티아 뉴홀,케빈 C. 웹 저 / 김모세,권성환 역 | 한빛미디어 | 2024년 01월 08일
https://m.yes24.com/p/124429581
종이책
컴퓨터 시스템 딥 다이브 : C 언어부터 어셈블리, 아키텍처, OS까지 한 꺼풀씩 벗겨보는 컴퓨터 시스템
수잰 J. 매슈스,티아 뉴홀,케빈 C. 웹 저 / 김모세,권성환 역 | 한빛미디어 | 2023년 12월 30일
https://m.yes24.com/Goods/Detail/124301248- 목차
Chapter 0 시작하며 _0.1 컴퓨터 시스템이란 무엇인가? _0.2 현대의 컴퓨터 시스템은 어떤 모습일까? _0.3 이 책에서 배울 내용 _0.4 이 책을 시작하기에 앞서 __0.4.1 리눅스, C 및 GNU 컴파일러 __0.4.2 기타 표기법과 설명선 PART I C 프로그래밍 언어 Chapter 1 C 프로그래밍 기초 _1.1 C 프로그래밍 시작하기 __1.1.1 C 프로그램의 컴파일과 실행 __1.1.2 변수와 C의 숫자 타입 __1.1.3 C의 데이터 타입 _1.2 입력과 출력 __1.2.1 printf __1.2.2 scanf _1.3 조건문과 반복문 __1.3.1 C의 부울값 __1.3.2 C의 반복문 _1.4 함수 __1.4.1 스택 _1.5 배열과 문자열 __1.5.1 배열 소개 __1.5.2 배열 접근 방법 __1.5.3 배열과 함수 __1.5.4 문자열과 C 문자열 라이브러리 소개 _1.6 구조체 __1.6.1 구조체 타입의 정의 __1.6.2 구조체 타입의 변수 선언 __1.6.3 필드 값 접근 __1.6.4 함수에 구조체 전달 _1.7 정리 Chapter 2 C 프로그래밍 심화 _2.1 프로그램 메모리와 범위 _2.2 C의 포인터 변수 __2.2.1 포인터 변수 _2.3 포인터와 함수 _2.4 동적 메모리 할당 __2.4.1 힙 메모리 __2.4.2 malloc과 free __2.4.3 동적 할당된 배열과 문자열 __2.4.4 힙 메모리와 함수를 위한 포인터 _2.5 C의 배열 __2.5.1 1차원 배열 __2.5.2 2차원 배열 _2.6 문자열과 문자열 라이브러리 __2.6.1 정적으로 할당된 문자열(문자 배열) __2.6.2 동적으로 문자열 할당 __2.6.3 C 문자열과 문자를 조작하기 위한 라이브러리 _2.7 C 구조체 __2.7.1 C struct 타입 리뷰 __2.7.2 포인터와 구조체 __2.7.3 구조체의 포인터 필드 __2.7.4 구조체 배열 __2.7.5 자기 참조 구조체 _2.8 C의 입출력(표준 및 파일) __2.8.1 표준 입출력 __2.8.2 파일 입출력 __2.8.3 C에서 텍스트 파일 사용 __2.8.4 stdio.h의 표준 및 파일 I/O 함수 _2.9 일부 고급 C 기능 __2.9.1 switch 구문 __2.9.2 커맨드 라인 인수 __2.9.3 void * 타입과 타입 리캐스팅 __2.9.4 포인터 산술 __2.9.5 C 라이브러리: 사용, 컴파일, 연결 __2.9.6 나만의 C 라이브러리 작성 및 사용 __2.9.7 C를 어셈블리로 컴파일 _2.10 정리 Chapter 3 C 디버깅 도구 _3.1 GDB로 디버깅 __3.1.1 GDB 시작하기 __3.1.2 GDB 예시 _3.2 GDB 명령어의 세부 사항 __3.2.1 GDB의 키보드 단축키 __3.2.2 자주 쓰는 GDB 명령어 _3.3 발그린드로 메모리 디버깅 __3.3.1 힙 메모리 접근 오류가 있는 예시 프로그램 __3.3.2 Memcheck를 사용하는 방법 _3.4 고급 GDB 기능 __3.4.1 GDB와 make __3.4.2 실행 중인 프로세스에 GDB 연결 __3.4.3 포크에서 프로세스 따라가기 __3.4.4 시그널 제어 __3.4.5 DDD 설정 및 버그 수정 _3.5 어셈블리 코드 디버깅 __3.5.1 GDB를 사용한 바이너리 코드 검사 __3.5.2 DDD를 사용한 어셈블리 디버깅 __3.5.3 GDB 어셈블리 디버깅 명령어 및 예시 __3.5.4 어셈블리 디버깅에서 자주 사용하는 명령어 요약 _3.6 GDB로 멀티스레드 프로그램 디버깅 __3.6.1 GDB와 Pthreads __3.6.2 GDB 스레드 관련 명령어 __3.6.3 예시 _3.7 정리 PART II 컴퓨터 시스템 기초 Chapter 4 바이너리와 데이터 표현 _4.1 숫자의 밑과 부호가 없는 정수 __4.1.1 10진수 __4.1.2 부호가 없는 2진수 __4.1.3 16진수 __4.1.4 저장 공간 제한 _4.2 진수 변환 __4.2.1 2진수와 16진수 변환 __4.2.2 10진수로 변환 __4.2.3 10진수를 변환 _4.3 부호가 있는 2진수 정수 __4.3.1 부호가 있는 수 __4.3.2 2의 보수 _4.4 2진 정수 산술 연산 __4.4.1 덧셈 __4.4.2 뺄셈 __4.4.3 곱셈과 나눗셈 _4.5 정수 오버플로 __4.5.1 총 주행 거리계 비유 __4.5.2 2진수 정수 오버플로 __4.5.3 오버플로 요약 __4.5.4 오버플로에 따른 결과 _4.6 비트와이즈 연산자 __4.6.1 비트와이즈 AND __4.6.2 비트와이즈 OR __4.6.3 비트와이즈 XOR __4.6.4 비트와이즈 NOT __4.6.5 비트 시프트 _4.7 정수 바이트 오더 _4.8 2진수에서의 실수 __4.8.1 고정 소수점 표현 __4.8.2 부동 소수점 표현 __4.8.3 올림의 영향 _4.9 정리 Chapter 5 컴퓨터 아키텍처 _5.1 현대 컴퓨팅 아키텍처의 기원 __5.1.1 튜링 머신 __5.1.2 초기의 전기 컴퓨터 __5.1.3 그래서 폰 노이만은 무엇을 알았나? _5.2 폰 노이만 아키텍처 __5.2.1 CPU __5.2.2 처리 장치 __5.2.3 제어 장치 __5.2.4 기억 장치 __5.2.5 입력 및 출력(I/O) 장치 __5.2.6 폰 노이만 머신 _5.3 논리 게이트 __5.3.1 기본 논리 게이트 __5.3.2 그 외 논리 게이트 _5.4 회로 __5.4.1 산술 및 논리 회로 __5.4.2 제어 회로 __5.4.3 저장 회로 _5.5 프로세서 만들기: 종합하기 __5.5.1 ALU __5.5.2 레지스터 파일 __5.5.3 CPU _5.6 프로세서의 프로그램 명령 실행 __5.6.1 클럭 주도 실행 __5.6.2 정리: 완전한 컴퓨터에서의 CPU _5.7 파이프라이닝: CPU를 더 빠르게 _5.8 고급 파이프라인 명령 고려 사항 __5.8.1 데이터 해저드 __5.8.2 제어 해저드 _5.9 미래를 내다보기: 오늘날의 CPU __5.9.1 명령 수준 병렬화 __5.9.2 멀티코어 및 하드웨어 멀티스레딩 __5.9.3 예시 프로세서 _5.10 정리 PART III 어셈블리 프로그래밍 Chapter 6 C 아래로: 어셈블리에 뛰어들기 _6.1 어셈블리 학습의 이점 __6.1.1 가치 있는 프로그램의 세부 사항을 감추는 고수준의 추상화 __6.1.2 리소스가 제한돼 컴파일러를 사용할 수 없는 컴퓨팅 시스템 __6.1.3 취약점 분석 __6.1.4 시스템 수준 소프트웨어에서 중요한 코드 순서 _6.2 후속 장들에서 학습할 내용 Chapter 7 64비트 X86 어셈블리(X86-64) _7.1 어셈블리 살펴보기: 기본 __7.1.1 레지스터 __7.1.2 고급 레지스터 표기 __7.1.3 명령 구조 __7.1.4 피연산자가 포함된 예시 __7.1.5 명령 접미사 _7.2 흔히 사용하는 명령 __7.2.1 한층 구체적인 예시 _7.3 산술 명령 __7.3.1 비트 시프트 명령 __7.3.2 비트와이즈 명령 __7.3.3 부하 효과 주소 명령 _7.4 조건부 제어와 반복문 __7.4.1 사전 준비 __7.4.2 어셈블리에서의 if 구문 __7.4.3 어셈블리에서의 for 반복문 _7.5 어셈블리에서의 함수 __7.5.1 함수 매개변수 __7.5.2 예시 추적 __7.5.3 main 추적 _7.6 재귀 __7.6.1 애니메이션: 콜 스택 변화 _7.7 배열 _7.8 행렬 __7.8.1 연속적인 2차원 배열 __7.8.2 비연속적 행렬 _7.9 어셈블리에서의 구조체 __7.9.1 데이터 정렬과 구조체 _7.10 실제 사례: 버퍼 오버플로 __7.10.1 유명한 버퍼 오버플로 악용 사례 __7.10.2 살펴보기: 추측 게임 __7.10.3 자세히 살펴보기 __7.10.4 버퍼 오버플로: 첫 번째 시도 __7.10.5 현명한 버퍼 오버플로: 두 번째 시도 __7.10.6 버퍼 오버플로에서 보호하기 Chapter 8 32비트 X86 어셈블리(Ia32) Chapter 9 ARM 어셈블리 Chapter 10 어셈블리 핵심 교훈 _10.1 공통 특징 _10.2 더 읽어보기 PART IV 성능 최적화 및 관리 Chapter 11 저장소와 메모리 계층 _11.1 메모리 계층 _11.2 저장소 __11.2.1 1차 저장소 __11.2.2 2차 저장소 _11.3 지역성 __11.3.1 코드에서의 지역성 예 __11.3.2 지역성부터 캐시까지 __11.3.3 시간적 지역성 __11.3.4 공간적 지역성 _11.4 CPU 캐시 __11.4.1 다이렉트 맵트 캐시 __11.4.2 캐시 실패 및 어소시에이티브 설계 __11.4.3 셋 어소시에이티브 캐시 _11.5 캐시 분석과 발그린드 __11.5.1 이론적 분석과 벤치마킹 __11.5.2 실세계에서의 캐시 분석: 캐시그린드 _11.6 예측하기: 멀티코어 프로세서에서의 캐싱 __11.6.1 캐시 일관성 __11.6.2 MSI 프로토콜 __11.6.3 캐시 일관성 프로토콜 구현 __11.6.4 멀티코어 캐싱과 관련된 더 많은 정보 _11.7 정리 Chapter 12 코드 최적화 _12.1 코드 최적화 첫 단계: 코드 프로파일링 __12.1.1 콜그린드를 사용한 프로파일링 __12.1.2 루프 불변 코드 이동 _12.2 그 외 컴파일러 최적화 __12.2.1 함수 인라이닝 __12.2.2 루프 언롤링 _12.3 메모리 고려 사항 __12.3.1 루프 상호 교환 __12.3.2 지역성을 개선하는 컴파일러 최적화: 분열과 융합 __12.3.3 massif를 사용한 메모리 프로파일링 _12.4 핵심 교훈 __12.4.1 좋은 데이터 구조와 알고리즘 선택하기 __12.4.2 가능한 표준 라이브러리 함수 사용하기 __12.4.3 느낌이 아닌 데이터에 기반한 최적화 __12.4.4 복잡한 코드는 여러 함수로 분할하기 __12.4.5 코드 가독성을 우선시하기 __12.4.6 메모리 사용에 주의하기 __12.4.7 컴파일러는 계속해서 개선되고 있다 Chapter 13 운영 체제 _13.1 OS의 동작과 실행 __13.1.1 OS 부팅 __13.1.2 인터럽트와 트랩 _13.2 프로세스 __13.2.1 멀티프로그래밍과 컨텍스트 스위칭 __13.2.2 프로세스 상태 __13.2.3 프로세스 생성 및 파기 __13.2.4 fork __13.2.5 exec __13.2.6 exit와 wait _13.3 가상 메모리 __13.3.1 메모리 주소 __13.3.2 가상 주소를 물리 주소로 변환 __13.3.3 페이징 __13.3.4 메모리 효율성 _13.4 프로세스 간 통신 __13.4.1 시그널 __13.4.2 메시지 전달 __13.4.3 공유 메모리 _13.5 정리 및 기타 OS 기능 PART V 병렬 프로그래밍 Chapter 14 멀티코어 시대의 공유 메모리 활용 _14.1 멀티코어 시스템 프로그래밍 __14.1.1 멀티코어 시스템이 프로세스 실행에 미치는 영향 __14.1.2 스레드를 사용한 프로세스 실행 가속화 _14.2 첫 번째 멀티스레드 프로그램 작성 __14.2.1 스레드 생성과 조인 __14.2.2 스레드 함수 __14.2.3 코드 실행 __14.2.4 스칼라 곱셈 다시 살펴보기 __14.2.5 스칼라 곱셈 계산: 다중 인수 _14.3 스레드 동기화 __14.3.1 상호 배제 __14.3.2 세마포어 __14.3.3 기타 동기화 구조체 _14.4 병렬 프로그램의 성능 측정 __14.4.1 병렬 프로그램의 성능 __14.4.2 더 살펴볼 주제 _14.5 캐시 일관성과 거짓 공유 __14.5.1 멀티코어 시스템에서의 캐시 __14.5.2 거짓 공유 __14.5.3 거짓 공유 수정 _14.6 스레드 안전성 __14.6.1 스레드 안전성 문제 해결 _14.7 OpenMP를 사용한 암시적 스레딩 __14.7.1 프라그마 __12.7.2 헬로 스레딩: OpenMP 버전 __14.7.3 더 복잡한 예시: OpenMP에서의 CountSort __14.7.4 OpenMP에 대해 자세히 알아보기 _14.8 정리 __14.8.1 주요 요점 __14.8.2 더 읽어보기 Chapter 15 기타 병렬 시스템 및 병렬 프로그래밍 모델 _15.1 이종 컴퓨팅: 하드웨어 가속기, 범용 GPU 컴퓨팅, CUDA __15.1.1 하드웨어 가속기 __15.1.2 GPU 아키텍처 개요 __15.1.3 GPGPU 컴퓨팅 __15.1.4 CUDA __15.1.5 기타 GPGPU 프로그래밍 언어 _15.2 분산 메모리 시스템, 메시지 전달 및 MPI __15.2.1 병렬 및 분산 처리 모델 __15.2.2 통신 프로토콜 __15.2.3 메시지 전달 인터페이스 __15.2.4 MPI 헬로 월드 __15.2.5 MPI 스칼라 곱셈 __15.2.6 분산 시스템의 과제 _15.3 엑사스케일 그 이상: 클라우드 컴퓨팅, 빅 데이터, 그리고 컴퓨팅의 미래 __15.3.1 클라우드 컴퓨팅 __15.3.2 맵리듀스 __15.3.3 미래를 바라보며: 기회와 도전
해외원서
Suzanne J. Matthews 및 2개 추가
Dive Into Systems: A Gentle Introduction to Computer Systems
https://www.amazon.com/-/ko/gp/aw/d/B09B1MM2SS/ref=tmm_kin_swatch_0?ie=UTF8&qid=&sr=반응형'코딩_Coding_Dev책_정리 > C++&_C언어_Coding_Book' 카테고리의 다른 글
ebook) 모두를 위한 리눅스 프로그래밍 : 리눅스 구조와 C 언어로 배우는 리눅스 첫걸음 [ PDF ] (0) 2024.03.08 구조를 알아야 개발이 보인다 (윈도우편) : C++로 풀어보는 윈도우 구조 [ PDF ] (0) 2024.02.15 Qt 4를 이용한 C++ GUI 프로그래밍 [ 2판, ] | 자스민 블랑쉐,마크 서머필드 공저 / (2) 2024.02.10 QT6 C++ GUI Programming Cookbook: (0) 2024.02.10 eBook) 혼자 공부하는 C 언어 (개정판) : 1:1 과외하듯 배우는 프로그래밍 자습서 [ PDF ] (0) 2023.11.27 eBook) 코딩 원리를 쉽게 배우기 위한 게임으로 C 프로그래밍 마스터하기 : 코딩 원리를 쉽게 배우기 위한 [ PDF ] (2) 2023.11.15 C++입문서C++ Primer (0) 2023.11.09 유료$Inflearn❤️독하게 되새기는 C 프로그래밍 (0) 2023.09.04