CS:APP 한글 노트
목차

컴퓨터 시스템: 프로그래머의 관점

Bryant & O'Hallaron의 Computer Systems: A Programmer's Perspective(3rd Global Edition, 2016)를 한국어로 다시 쓴 학습 노트. 원서의 구조를 따라가되, 표현은 가볍고 직설적으로. 각 챕터는 "왜 이게 중요한가"를 먼저 깔고, 그다음에 "어떻게 동작하는가"로 넘어간다.

file:// 로 그냥 열어도 동작합니다. 좌우 화살표 키로 챕터 이동, 우측 상단 버튼으로 라이트/다크 토글.

PART 0 · OVERVIEW
CHAPTER 01

컴퓨터 시스템 둘러보기

A Tour of Computer Systems

hello.c 한 줄짜리 프로그램이 컴파일되고, 메모리에 적재되고, CPU에서 돌아가기까지의 전 과정을 따라간다. 책 전체의 지도(地圖).

10개 절
PART I · PROGRAM STRUCTURE AND EXECUTION
CHAPTER 02

정보의 표현과 처리

Representing and Manipulating Information

비트, 바이트, 정수, 부동소수점. 컴퓨터가 숫자를 어떻게 들고 있는지, 그리고 왜 x < x+1 이 항상 참이 아닌지.

5개 절
CHAPTER 03

프로그램의 기계 수준 표현

Machine-Level Representation of Programs

x86-64 어셈블리. C 코드가 어떻게 어셈블리로 풀리는지, 스택 프레임은 어떻게 쌓이는지, 버퍼 오버플로는 왜 무서운지.

12개 절
CHAPTER 04

프로세서 구조

Processor Architecture

Y86-64라는 장난감 ISA로 프로세서를 직접 설계한다. SEQ에서 PIPE까지, 파이프라이닝의 함정과 해결책을 따라가는 여정.

6개 절
CHAPTER 05

프로그램 성능 최적화

Optimizing Program Performance

컴파일러가 못 해주는 최적화는 사람이 해야 한다. 루프 언롤링, 다중 누산기, 분기 예측 — 현대 CPU에 맞게 코드를 쥐어짜는 기술.

15개 절
CHAPTER 06

메모리 계층

The Memory Hierarchy

왜 행 우선 순회가 열 우선보다 빠를까? 캐시, 지역성, 메모리 마운틴. 같은 알고리즘인데 100배 차이가 나는 이유.

7개 절
PART II · RUNNING PROGRAMS ON A SYSTEM
CHAPTER 07

링킹

Linking

오브젝트 파일이 어떻게 모여 실행 파일이 되는가. 정적 라이브러리와 동적 라이브러리, 심볼 충돌, 위치 독립 코드(PIC).

15개 절
CHAPTER 08

예외적 제어 흐름

Exceptional Control Flow

인터럽트, 시스템 콜, 시그널, fork/execve. 프로그램이 갑자기 흐름을 바꿔야 할 때 OS와 하드웨어가 협력하는 방식.

8개 절
CHAPTER 09

가상 메모리

Virtual Memory

각 프로세스가 자기만의 거대한 주소 공간을 갖는 마법. 페이지 테이블, TLB, malloc 구현, 가비지 컬렉터까지.

12개 절
PART III · INTERACTION AND COMMUNICATION BETWEEN PROGRAMS
CHAPTER 10

시스템 수준 입출력

System-Level I/O

Unix I/O의 본질. 파일 디스크립터, read/write의 짧은 read 문제, RIO 패키지, 표준 I/O와의 관계.

12개 절
CHAPTER 11

네트워크 프로그래밍

Network Programming

소켓 API. 클라이언트-서버 모델, IP/TCP 위에서 echo 서버와 mini 웹 서버를 직접 짠다.

7개 절
CHAPTER 12

병행 프로그래밍

Concurrent Programming

프로세스, I/O 멀티플렉싱, 스레드. 세마포어로 경쟁 조건을 길들이는 방법, 그리고 데드락이 왜 머리 아픈지.

8개 절