본문 바로가기

교재 목차

프로세스·스레드·스케줄링·동기화·메모리·파일·입출력을 연결해 운영체제가 자원을 관리하는 원리를 익힙니다.

코드를 작성했습니다.

터미널에서 실행 명령을 입력합니다.

프로그램이 동작합니다.

이 당연한 과정의 이면에는 운영체제라는 거대한 소프트웨어가 작동하고 있습니다.

여러 프로그램이 CPU의 실행 자원을 어떻게 나누어 쓰며, 여러 코어에서는 어떻게 함께 실행될까요?

malloc()으로 메모리를 할당하면 물리적으로 어디에 생기는 걸까요?

파일을 저장하면 디스크의 어디에 어떤 형태로 기록되는 걸까요?

이 교재는 이런 질문들에 대한 답을 계층적으로 풀어갑니다.

운영체제의 정의와 역할에서 출발하여, 프로세스와 스레드의 관리, CPU 스케줄링, 메모리 관리, 파일 시스템까지 OS가 하드웨어와 소프트웨어 사이에서 어떤 책임을 맡는지 체계적으로 이해할 수 있습니다.

이론으로 끝나지 않습니다.

C와 Python 예제로 fork() 같은 프로세스 API를 사용하고 뮤텍스·세마포어로 공유 자원을 조율합니다. 리눅스 명령어로 시스템 상태를 살펴보고, Docker와 Kubernetes가 OS의 기능을 어떻게 이용하는지도 연결합니다.

각 장의 개념은 서로 떨어져 있지 않습니다.

사용자 프로그램의 요청이 시스템 콜을 지나 커널로 들어가고, 커널이 프로세스, 메모리, 파일 시스템, 네트워크를 함께 조정한다는 연결을 잡으면 뒤의 목차가 훨씬 선명해집니다.

첫 관찰을 준비하는 방법

1–12장에서 프로세스·스레드·스케줄링·동기화·메모리·파일·입출력·보안의 원리를 이어 읽습니다. C 예제에는 변수·함수·포인터와 메모리 할당의 기초가 필요합니다. 터미널에서 파일을 저장한 폴더와 실행 경로를 확인하는 방법도 함께 익혀 둡니다.

첫 관찰은 시스템 콜과 hello.c에서 시작합니다. 이 예제는 Linux의 C 컴파일러 gcc와 시스템 콜 추적 도구 strace를 사용합니다. 두 도구가 준비된 환경에서 본문의 hello.c를 저장하고 컴파일·추적 순서대로 진행합니다.

표준 출력의 Hello, OS!와 추적 결과의 write(1, ...)를 함께 찾아봅니다. 여기서 1은 표준 출력의 파일 디스크립터입니다. printf()는 사용자 공간의 C 라이브러리 함수이고, write 시스템 콜은 커널에 쓰기를 요청하는 경계입니다. 프로그램 시작 때 나타나는 다른 호출이나 호출 순서·횟수는 환경에 따라 달라질 수 있습니다.

명령을 찾을 수 없으면 gcc·strace의 준비 상태를, 파일을 찾지 못하면 현재 폴더와 hello.c·실행 파일의 경로를 먼저 확인합니다. 도구가 준비되지 않았다면 코드와 시스템 콜 흐름부터 읽습니다. 커널 모듈 코드는 구조를 살펴보는 예시이므로 첫 관찰을 위해 모듈을 로드할 필요는 없습니다.

8장의 메모리 관리 기초를 읽은 뒤에는 같은 버퍼에 두 번 쓰기에서 페이지 폴트 횟수와 과거 최대 RSS를 비교합니다. 정해진 숫자를 맞추기보다 두 값이 무엇을 세는지 설명해 봅니다. 13장의 가상화·컨테이너와 14장의 실무 진단은 관심 있는 사용 상황에 따라 이어 읽습니다.

추가 관찰은 격리 Linux 권한 실습에서 파일·디렉터리 권한을 분리하고, 분산·다중처리에서 여러 컴퓨터의 자원·부분 장애 경계를 비교합니다. Linux 실험과 설명용 Python 상태 모델의 검증 범위를 서로 구분합니다.

Python 함수·예외와 SQL 기본 키·트랜잭션을 익힌 뒤에는 지속 저장과 안전한 재시도로 진행합니다. 같은 로컬 DB의 효과·완료 기록을 함께 저장하고 worker 프로세스 종료·동시 요청·입력 충돌·보관 기간을 추적합니다. 실제 네트워크 유실이나 외부 결제의 원자성을 이 실험의 결과로 주장하지 않습니다. 여러 DB의 최종 결정은 XA 복구에서 따로 읽습니다.


전체 목차

각 장에서는 개념을 읽고 시스템에서 보이는 현상을 관찰한 뒤, 짧은 코드나 명령으로 동작을 확인합니다.

프로세스·메모리·파일·장치를 따로 외우기보다 운영체제가 자원을 어떻게 추상화하고 배분하며 보호하는지 같은 질문으로 연결해 복습합니다.

이 페이지 목차

이 페이지 목차