임계구역 문제 (Critical Section Problem)
Jan 27, 2026
핵심 개념
섹션 제목: “핵심 개념”임계구역(Critical Section)이란 공유 데이터에 접근하는 코드 영역이다. 여러 프로세스가 동시에 임계구역을 실행하면 Race Condition이 발생하여 데이터 일관성이 깨질 수 있다. 임계구역 문제란, 이 영역을 안전하게 실행하기 위한 프로토콜을 설계하는 문제이다.
비유하면 화장실 칸이 하나인 상황과 같다. 한 명이 사용 중이면 다른 사람은 기다려야 하고, 비어 있으면 누군가는 반드시 들어가야 하며, 아무리 오래 기다려도 언젠가는 내 차례가 와야 한다.
동작 원리
섹션 제목: “동작 원리”코드 구조
섹션 제목: “코드 구조”while (true) { /* entry section */ // 진입 구역: 임계구역 진입 허가 요청 critical section // 임계구역: 공유 데이터 접근 /* exit section */ // 퇴출 구역: 진입 허가 반납 remainder section // 나머지 구역}프로세스는 진입 구역에서 허가를 요청하고, 허가를 받으면 임계구역을 실행한 뒤, 퇴출 구역에서 허가를 반납한다. 이 프로토콜이 올바르려면 3가지 요구사항을 만족해야 한다.
3가지 필수 요구사항
섹션 제목: “3가지 필수 요구사항”| 요구사항 | 설명 | 화장실 비유 |
|---|---|---|
| Mutual Exclusion (상호배제) | 한 프로세스가 임계구역 실행 중이면, 다른 프로세스는 진입 불가 | 한 명만 사용 가능 |
| Progress (진행) | 임계구역에 아무도 없고 진입 원하는 프로세스가 있으면, 진입 결정이 무한히 연기되면 안 됨 | 비어있으면 누군가는 반드시 들어감 |
| Bounded Waiting (유한대기) | 진입 요청 후, 다른 프로세스가 진입할 수 있는 횟수에 상한이 있어야 함 | 아무리 오래 기다려도 언젠가는 내 차례 |
세 조건 중 하나라도 만족하지 못하면 올바른 해결책이 아니다.
선점형 커널 vs 비선점형 커널
섹션 제목: “선점형 커널 vs 비선점형 커널”| 유형 | 특징 | 장단점 |
|---|---|---|
| Non-preemptive | 커널 모드에서 선점 불가 | Race condition 없음, 응답성 낮음 |
| Preemptive | 커널 모드에서도 선점 가능 | 응답성 높음, 설계 복잡, 실시간 시스템에 적합 |
비선점형 커널은 커널 모드에서 한 프로세스가 자발적으로 CPU를 반납할 때까지 다른 프로세스가 끼어들 수 없으므로, 커널 데이터에 대한 race condition이 본질적으로 발생하지 않는다. 하지만 응답성이 떨어져 현대 OS 대부분은 선점형 커널을 사용한다.
운영체제 내부에서 임계구역이 필요한 실제 상황:
- fork() 시스템 콜: 새 프로세스에 PID를 할당할 때, 여러 프로세스가 동시에 fork()를 호출하면 같은 PID가 중복 할당될 수 있다
- 열린 파일 목록 수정: 커널이 관리하는 파일 테이블에 동시 접근 시 일관성 문제 발생
- 공유 메모리 업데이트: 두 프로세스가 동시에 같은 변수를 수정하면 결과가 예측 불가