Bryant & O'Hallaron의 Computer Systems: A Programmer's Perspective(3rd Global Edition, 2016)를 한국어로 다시 쓴 학습 노트. 원서의 구조를 따라가되, 표현은 가볍고 직설적으로. 각 챕터는 "왜 이게 중요한가"를 먼저 깔고, 그다음에 "어떻게 동작하는가"로 넘어간다.
비트, 바이트, 정수, 부동소수점. 컴퓨터가 숫자를 어떻게 들고 있는지, 그리고 왜 x < x+1 이 항상 참이 아닌지.
x86-64 어셈블리. C 코드가 어떻게 어셈블리로 풀리는지, 스택 프레임은 어떻게 쌓이는지, 버퍼 오버플로는 왜 무서운지.
12개 절 CHAPTER 04Y86-64라는 장난감 ISA로 프로세서를 직접 설계한다. SEQ에서 PIPE까지, 파이프라이닝의 함정과 해결책을 따라가는 여정.
6개 절 CHAPTER 05컴파일러가 못 해주는 최적화는 사람이 해야 한다. 루프 언롤링, 다중 누산기, 분기 예측 — 현대 CPU에 맞게 코드를 쥐어짜는 기술.
15개 절 CHAPTER 06왜 행 우선 순회가 열 우선보다 빠를까? 캐시, 지역성, 메모리 마운틴. 같은 알고리즘인데 100배 차이가 나는 이유.
7개 절오브젝트 파일이 어떻게 모여 실행 파일이 되는가. 정적 라이브러리와 동적 라이브러리, 심볼 충돌, 위치 독립 코드(PIC).
15개 절 CHAPTER 08인터럽트, 시스템 콜, 시그널, fork/execve. 프로그램이 갑자기 흐름을 바꿔야 할 때 OS와 하드웨어가 협력하는 방식.
각 프로세스가 자기만의 거대한 주소 공간을 갖는 마법. 페이지 테이블, TLB, malloc 구현, 가비지 컬렉터까지.
12개 절Unix I/O의 본질. 파일 디스크립터, read/write의 짧은 read 문제, RIO 패키지, 표준 I/O와의 관계.
소켓 API. 클라이언트-서버 모델, IP/TCP 위에서 echo 서버와 mini 웹 서버를 직접 짠다.
7개 절 CHAPTER 12프로세스, I/O 멀티플렉싱, 스레드. 세마포어로 경쟁 조건을 길들이는 방법, 그리고 데드락이 왜 머리 아픈지.
8개 절