❗참고
리눅스 시스템에서 컴파일하고 실행된 많은 프로그램 예제를 포함하고 있다. 이러한 머신을 사용할 수 있으며, 로그인해서 파일 리스트를 출력하고 디렉토리를 변경하는 것과 같은 간단한 작업을 할 수 있다고 가정
❗체크 방법
★ 몇 분 소요. 프로그래밍이 거의 필요없음
★★ 최대 20분 소요. 코드 작성하고 테스트해야 하는 경우도 있음
★★★ 상당한 노력이 필요함. 약 1~2시간 정도.
★★★★ 실습과제. 10시간 정도의 노력이 필요함
1장
간단한 "hello, world"프로그램의 일생 주기를 추적해서 컴퓨터 시스템에서의 주요 아이디어와 주제들을 소개2장
정보의 표현과 처리. 컴퓨터 산술연산에 대해 설명하며, 특히 프로그래머에게 영향을 미치는 비부호형과 2의 보수 표시의 특성을 강조3장
프로그램의 기계 수준 표현. C 컴파일러가 만든 x86-64 기계어코드를 이해하는 방법4장
프로세서 구조. 기본적인 조합 및 순차 논리 회로들을 다루며, 회로들이 어떻게 "Y86-64"라고 부르는 x86-64 인스트럭션 집합의 일부를 실행할 수 있는 데이터 경로에 연결될 수 있는지 보임5장
프로그램 성능 최적화하기. 코드의 성능을 개선하기 위한 여러가지 기술들을 소개. 컴파일러가 효율적인 머신 코드를 생성할 수 있는 방식으로 C 코드를 작성하기 위해서 프로그래머가 배워야 하는 아이디어들도 학습6장
메모리 계층 구조. 메모리 시스템은 응용 프로그래머가 가장 잘 볼 수 있는 컴퓨터 시스템의 한 부분. RAM과 ROM 메모리에 대해 배우게 되며, 자기 디스크와 solid state 드라이브의 구조와 구성에 대해 다룸7장
링커. 정적 및 동적 링킹 과정 모두를 다루며, 재배치 가능 및 실행 목적 파일, 심볼 해석, 재배치, 정적 라이브러리, 공유 객체 파일, 위치 독립성 코드, 라이브러리 삽입이 포함8장
예외적인 제어흐름. 단일 프로그램 모델을 넘어서, 예외적인 제어흐름의 일반적인 개념을 소개. 시스템의 전체 수준에서의 예외적인 제어프름들을 다루게 되며, 하위 하드웨어 예외나 인터럽트에서부터 동시성 프로세스들 간의 문맥 전환, 리눅스 시그널의 수신으로 인해 발생한 갑작스런 제어 프름의 변경, 스택 운용방식을 깨뜨리는 C에서의 비지역성 점프까지 포함9장
가상메모리. 가상메모리 시스템의 작동 방식과 특성을 이해시키는 것이 목적. 표준 라이브러리 함수인 malloc과 free연산과 같은 저장 장치 할당기들에서의 연산에 대해 설명10장
시스템 수준 입출력. 파일과 식별자와 같은 Unix I/O의 기본 개념들을 다룸. 어떻게 파일이 공유되고, I/O 재설정이 동작하며, 메타 데이터를 어떻게 접근하는지에 대해 설명11장
네트워크 프로그래밍. 네트워크는 프로그래밍하기에 재밌는 I/O 디바이스로, 앞의 장에서 배우는 프로세스, 시그널, 바이트 순서, 메모리 매핑, 동적 저장 장치 할당과 같은 여러 개념을 함께 적용12장
동시성 프로그래밍. 동기를 부여하는 예제로 인터넷 서버 설계를 이용해서 동시성 프로그래밍을 소개.