1부. 하드웨어
소프트웨어 개발자가 하드웨어에 대해 깊게 알 필요는 없다. 하지만 최소한 자신이 작성한 프로그램이 실행되는 하드웨어가 어떤 원리로 동작하는지를 알고 있는 사람과 그렇지 못한 사람은 결정적인 순간에 차이가 난다.
1장. 모든 정보를 2진수로 표현하는 컴퓨터
컴퓨터는 사람과는 다른 방식인 2진수 형태로 정보를 표현한다. 이 장에서는 문자, 정수, 실수 등의 데이터를 컴퓨터 내부에서 어떻게 표현하는지에 대해 살펴본다.
2장. 컴퓨터 내부에서의 정수 연산과 실수 연산
컴퓨터 내의 정수와 실수 등 정보를 표현하는 방법이 사람이 사용하는 것과는 차이가 있듯이, 컴퓨터 내에서의 연산 역시 사람이 종이와 연필을 이용해서 하는 연산과는 차이가 있다. 이 장에서는 실제 하드웨어가 덧셈, 뺄셈, 곱셈, 나눗셈을 어떻게 효율적으로 수행하는지에 대해 살펴본다.
3장. 프로그램을 실행하는 CPU
컴퓨터의 핵심적인 일은 프로그램을 실행하는 일이다. 이런 프로그램을 실행하기 위해서는 메인 메모리, 입출력 장치, 버스 등의 장치도 있어야 하지만 CPU가 가장 중요한 역할을 담당한다. CPU는 자신이 이해할 수 있는 프로그램 명령어들을 해석하고 실행하는 장치로 이 장에서는 CPU가 어떻게 동작하는지에 대해 살펴본다.
4장. CPU 속도를 빠르게 하는 파이프라이닝과 수퍼스칼라
컴퓨터 시스템 개발자들의 가장 큰 관심사는 좀 더 빠른 컴퓨터를 개발하는 것이다. 이런 관심 하에 CPU의 속도를 빠르게 하는 많은 기술들이 개발되었는데, 대표적인 것으로는 파이프라이닝과 수퍼스칼라가 있으며, 이에 대해 살펴본다.
5장. 계층적으로 구성된 메모리
메모리는 캐시 메모리, 메인 메모리, 하드 디스크 등으로 계층적으로 구성된다. 이런 메모리 계층 구조에 대해 살펴보고 메인 메모리에 데이터가 어떻게 저장되고 저장된 데이터를 어떻게 읽는지에 대해 살펴본다. 그리고 캐시 메모리가 어떻게 동작하는지도 살펴본다.
6장. 여러 개의 CPU로 구성된 멀티프로세서
여러 개의 CPU로 구성된 시스템을 멀티프로세서라 하는데, 여러 프로그램을 동시에 실행하거나 한 프로그램을 여러 부분으로 분할해 동시에 실행한다. 이런 멀티프로세서에의 다양한 주제에 대해 살펴본다.
2부. 운영체제
리눅스 사용자든 윈도우 사용자든 특정 운영체제를 기반으로 개발을 진행할 것이다. 그러므로 프로그램이 운영되는 운영체제에 대한 이해가 기반이 된다면 프로그램을 보다 효율적으로 개발할 수 있을 것이다.
7장. 실행중인 프로그램인 프로세스
실행되기 위해 메모리에 올라가 있는 프로그램을 프로세스라 하는데, 프로세스의 생성, 실행, 종료 등 프로세스에 대한 모든 관리는 운영체제에 의해 이루어진다. 운영체제가 프로세스를 어떻게 관리하는지 살펴본다.
8장. 프로세스의 실행 순서를 정하는 프로세스 스케줄링
실행을 기다리는 프로세스가 여러 개 있을 경우에는 어떤 프로세스가 먼저 실행될지를 정해줘야 하는데, 이런 규칙을 프로세스 스케줄링이라 한다. 운영체제가 프로세스 스케줄링을 담당하는데, 이에 대해 살펴본다.
9장. 프로세스 동기와 통신
프로세스 동기란 한 프로세스가 사용해야만 하는 데이터를 임의의 프로세스가 사용하고 있을 때 같은 데이터의 사용을 원하는 다른 프로세스는 기다리게 하는 개념이고, 프로세스간 통신이란 프로세스와 프로세스 간에 데이터를 주고받는 동작을 의미한다. 이런 기능을 운영체제에서 제공하는데, 이에 대해 살펴본다.
10장. 메모리 관리하기
운영체제와 CPU는 상호 협조 하에 가상 메모리라는 개념을 이용해 메모리를 관리한다. 가상 메모리란 당장 실행에 필요한 부분만 메인 메모리에 저장하고, 나머지 부분은 하드디스크에 넣어 두고 동작하는 개념인데, 이에 대해 살펴본다.
11장. 디스크에 파일 저장하기
디스크에 파일을 저장하고 디스크로부터 파일을 읽는 동작은 운영체제가 담당하는데, 이 장에서는 실제 윈도우와 유닉스(리눅스)에서 파일을 디스크에 어떻게 저장하고 관리하는지에 대해 살펴본다.
3부. 네트워크
이제 네트워크는 모든 분야에서 필수 사항이 되었기 때문에 네트워크 관련 종사자가 아니더라도 네트워크 환경에서 어떤 원리로 데이터 전송이 이루어지는지 정도는 기본으로 알고 있어야 한다.
12장. 네트워크를 통한 데이터 전송 과정
PC 1에서 네트워크로 연결된 PC 2로 데이터를 전송하는 과정을 단계 단계별 상세한 그림을 통해 살펴봄으로써 네트워크 동작 원리에 대해 명확하게 이해한다.
13장. 네트워크 주소
통신을 원하는 모든 기기는 IP 주소가 부여되어야 한다. 그렇다고 아무렇게나 IP 주소를 부여할 수 있는 것이 아니라 원칙이 있는데, 이에 대해 살펴본다.
14장. 네트워크에서의 오류 검출과 오류 정정
네트워크는 송신측에서 수신측으로 정확하게 데이터를 전송할 수 있어야 하는데, 여러 요인에 의해 데이터가 변경되거나 유실될 수 있다. 이에 네트워크 시스템에서는 이런 오류를 검출하거나 정정할 수 있는 기법을 지니고 있는데 이에 대해 살펴본다.