OS - PCB와 Context Switching 학습 지도
OS - PCB와 Context Switching 학습 지도
운영체제는 CPU를 여러 프로세스가 번갈아 쓰게 하기 위해, 지금 실행 중인 프로세스의 **이어 하기 정보(Context)**를 안전하게 저장하고 다음 프로세스의 정보를 복원한다. 프로세스별 관리 정보가 모여 있는 운영체제의 기록이 PCB이고, 저장·교체·복원해서 실행 주체를 바꾸는 일이 Context Switching이다.
이 폴더는 용어를 따로 외우는 방식이 아니라, 아래의 한 가지 사건을 끝까지 따라가도록 구성했다.
음악을 듣고, 브라우저로 검색하고, 코드를 실행하는데 CPU가 하나뿐이라면 어떻게 셋이 동시에 움직이는 것처럼 보일까?
정답은 “CPU가 매우 빠르게 차례를 바꾸기 때문”이다. 그런데 차례만 바꾸면 끝이 아니다. 수학 문제를 풀던 학생을 갑자기 자리에서 일으키면, 몇 번 문제를 풀고 있었는지, 계산 중간값이 무엇인지, 어느 책을 펼쳤는지를 남겨야 나중에 정확히 이어서 풀 수 있다. 컴퓨터에서도 이 책갈피가 필요하다.
전체 서사
flowchart LR
A["CPU는 한 코어에서<br/>한 순간에 한 실행 흐름만 처리"] --> B["프로그램 A가 입출력을 기다리거나<br/>정해진 시간을 다 씀"]
B --> C["운영체제가 CPU 제어권을 얻음"]
C --> D["A의 이어 하기 정보 저장"]
D --> E["스케줄러가 다음 실행 대상 B 선택"]
E --> F["B의 이어 하기 정보 복원"]
F --> G["CPU가 B의 다음 명령부터 실행"]
G --> H["사용자는 여러 프로그램이<br/>동시에 움직인다고 느낌"]
이 흐름을 이해하기 위해 다음 질문을 순서대로 푼다.
- 왜 프로그램 하나만 계속 실행하지 않았을까?
- 프로그램과 프로세스는 무엇이 다를까?
- 멈췄다가 이어서 실행하려면 무엇을 기억해야 할까?
- 그 정보를 운영체제는 어디에 보관할까?
- 누가, 언제, 어떤 순서로 다음 프로세스로 바꿀까?
- 바꾸는 데 왜 시간이 들까?
- Process 전환과 Thread 전환은 무엇이 다를까?
추천 학습 순서
1회독: 30분 안에 큰 흐름 잡기
아래 문서에서는 세부 용어를 전부 외우지 말고, “왜 저장해야 하고 어떻게 다시 시작하는가”만 붙잡는다.
- 01. 탄생 배경 - CPU를 나눠 쓰게 된 이유
- 02. 프로세스와 CPU 상태 - 멈춘 실행을 되살리는 정보
- 03. PCB - 프로세스의 보관함
- 04. Context Switching - 실제 전환 12단계
- 10. 한 장 요약 - 이야기와 면접 답변
2회독: 사건을 직접 추적하기
- 05. 스케줄러와 상태 전이 - 다음 차례를 고르는 법
- 06. 실전 추적 - A B C가 번갈아 실행되는 20ms
- 09. 헷갈리는 개념 - Mode Switch부터 Interrupt까지
3회독: 차이와 성능까지 연결하기
각 문서에서 먼저 맨 위의 핵심 문장, 그림, 마지막의 스스로 설명하기만 읽는다. 그다음 두 번째 읽을 때 표와 세부 단계를 본다.
먼저 알아둘 여섯 단어
| 단어 | 지금은 이렇게 이해하면 충분하다 |
|---|---|
| CPU | 명령어를 실제로 실행하는 일꾼 |
| Register | CPU 안에 있는 매우 작고 빠른 임시 메모 |
| Program Counter, PC | 다음에 실행할 명령어의 위치를 가리키는 책갈피 |
| Process | 실행 중인 프로그램과 그 실행에 필요한 자원·상태를 합친 것 |
| Kernel | 하드웨어와 프로세스를 관리하는 운영체제의 핵심 영역 |
| Scheduler | 준비된 실행 대상 중 다음 차례를 고르는 운영체제 구성 요소 |
PCB와 Context의 관계를 먼저 한 번 보기
프로세스 A
├─ 코드와 데이터, Heap, Stack ← 프로세스의 메모리
├─ 열린 파일과 권한, 스케줄 정보 ← 운영체제가 관리하는 정보
└─ 지금 CPU에서 실행하던 중간 상태 ← PC, SP, Register, Flags ...
│
▼
PCB 및 연결된 커널 자료구조에 기록
Context Switching
1) A의 필요한 Context를 저장
2) 다음 실행 대상 B를 선택
3) B의 Context를 복원
정확히 말하면 Context는 “다시 이어 실행하는 데 필요한 상태”이고, PCB는 “운영체제가 프로세스를 관리하기 위해 유지하는 기록”이다. 둘은 아주 가깝지만 완전히 같은 말은 아니다. 실제 운영체제에서는 저장 정보가 PCB에 해당하는 구조체와 커널 스택 등 여러 곳에 나뉠 수도 있다.
이 단원을 다 공부한 뒤 답할 수 있어야 하는 것
- CPU 코어 하나에서 왜 진짜로 두 프로세스를 같은 순간에 실행할 수 없는가?
- CPU가 입출력을 기다릴 때 다른 프로세스를 실행하면 왜 이득인가?
- PC와 Register를 저장하지 않으면 어떤 오류가 생기는가?
- PCB에는 왜 실행 상태뿐 아니라 스케줄링·메모리·파일 정보도 들어가는가?
- Timer Interrupt 이후 A에서 B로 바뀌는 과정을 순서대로 말할 수 있는가?
- System Call이 발생했다고 항상 Context Switch가 일어나는 것은 아닌 이유는?
- Process 전환이 같은 Process 안의 Thread 전환보다 보통 더 무거운 이유는?
이 질문에 자기 말로 답할 수 있다면 큰 흐름은 제대로 잡힌 것이다.
가장 중요한 오해 하나만 미리 막기
CPU 코어 하나는 한 순간에 하나의 실행 흐름만 실행한다. 아주 짧은 시간 간격으로 A, B, C를 번갈아 실행하면 사람에게 동시에 움직이는 것처럼 보인다. 이것은 Concurrency, 동시성이다. 여러 코어가 같은 순간에 실제로 여러 실행 흐름을 처리하는 것은 Parallelism, 병렬성이다.
멀티코어 컴퓨터에서도 각 코어는 수많은 프로세스와 스레드를 맡기 때문에 Context Switching은 여전히 필요하다.
다음 문서: 01. 탄생 배경 - CPU를 나눠 쓰게 된 이유