1장 프로그래밍 언어부터 프로그램 실행까지, 이렇게 진행된다
1.1 여러분이 프로그래밍 언어를 발명한다면?
__1.1.1 창세기: CPU는 똑똑한 바보
__1.1.2 어셈블리어 등장
__1.1.3 저수준 계층의 세부 사항 대 고수준 계층의 추상화
__1.1.4 가득한 규칙: 고급 프로그래밍 언어의 시작
__1.1.5 <인셉션>과 재귀: 코드 본질
__1.1.6 컴퓨터가 재귀를 이해하도록 만들기
__1.1.7 우수한 번역가: 컴파일러
__1.1.8 해석형 언어의 탄생
1.2 컴파일러는 어떻게 작동하는 것일까?
__1.2.1 컴파일러는 그저 일반적인 프로그램일 뿐, 대단하지 않다
__1.2.2 각각의 토큰 추출하기
__1.2.3 토큰이 표현하고자 하는 의미
__1.2.4 생성된 구문 트리에 이상은 없을까?
__1.2.5 구문 트리를 기반으로 중간 코드 생성하기
__1.2.6 코드 생성
1.3 링커의 말할 수 없는 비밀
__1.3.1 링커는 이렇게 일한다
__1.3.2 심벌 해석: 수요와 공급
__1.3.3 정적 라이브러리, 동적 라이브러리, 실행 파일
__1.3.4 동적 라이브러리의 장단점
__1.3.5 재배치: 심벌의 실행 시 주소 결정하기
__1.3.6 가상 메모리와 프로그램 메모리 구조
1.4 컴퓨터 과학에서 추상화가 중요한 이유
__1.4.1 프로그래밍과 추상화
__1.4.2 시스템 설계와 추상화
1.5 요약
2장 프로그램이 실행되었지만, 뭐가 뭔지 하나도 모르겠다
2.1 운영 체제, 프로세스, 스레드의 근본 이해하기
__2.1.1 모든 것은 CPU에서 시작된다
__2.1.2 CPU에서 운영 체제까지
__2.1.3 프로세스는 매우 훌륭하지만, 아직 불편하다
__2.1.4 프로세스에서 스레드로 진화
__2.1.5 다중 스레드와 메모리 구조
__2.1.6 스레드 활용 예
__2.1.7 스레드 풀의 동작 방식
__2.1.8 스레드
비유와 그림으로 쉽게 배우는
컴퓨터 시스템의 본질
컴퓨터 내부를 이해하면 코드가 바뀐다
컴퓨터 시스템의 원리와 메커니즘에 대해 심층적으로 이해하고 있다면 작성하는 코드의 가독성 및 유지 관리 가능성을 개선할 수 있다. 이뿐만 아니라 프로그램 성능을 효과적으로 최적화할 수 있으며, 코드 실행 오류나 비정상적인 시스템 동작을 신속히 찾아내 해결할 수도 있다.
컴퓨터 시스템의 원리에 대해 심층적으로 이해한다
계층별로 추상화되어 있는 컴퓨터 시스템의 구조를 하나씩 뜯어보고, 프로그래밍 언어와 컴파일러로 시작하여 운영 체제와 프로세스, 스레드와 코루틴, 동기화, 메모리에 대해 알아본다. 더불어 CPU와 캐시, 입출력을 구현하는 원리와 파일 시스템, 네트워크와 통신, 보안과 암호화, 병렬 컴퓨팅에 대해서도 함께 배운다.