임계 구역 문제

임계 구역 문제

이 섹션은 동시성(Concurrency)과 병렬성(Parallelism)을 다루는 현대 운영체제에서 공유 데이터에 대한 접근을 제어하는 방법에 대해 설명합니다.

임계 구역 (Critical Section)

여러 프로세스가 동시에 접근하여 조작할 수 있는 공유 데이터가 있는 경우, 이 데이터를 조작하는 코드 부분을 **임계 구역(Critical Section)**이라고 합니다. 임계 구역 문제의 핵심은 한 프로세스가 임계 구역에서 실행 중일 때, 다른 어떤 프로세스도 임계 구역에 들어갈 수 없도록 하는 프로토콜을 설계하는 것입니다.

임계 구역 문제의 해결책은 다음 세 가지 요구 사항을 충족해야 합니다.

  1. 상호 배제 (Mutual Exclusion): 한 프로세스가 임계 구역에서 실행 중일 경우, 다른 어떤 프로세스도 자신의 임계 구역에 들어갈 수 없습니다.

  2. 진행 (Progress): 임계 구역에서 실행 중인 프로세스가 없고, 일부 프로세스가 임계 구역에 진입하기를 원할 때, 임계 구역에 있지 않은 프로세스들만이 다음 진입할 프로세스를 결정해야 하며, 이 결정은 무한정 연기될 수 없습니다.

  3. 한정된 대기 (Bounded Waiting): 한 프로세스가 임계 구역 진입을 요청한 후부터 그 요청이 허용될 때까지, 다른 프로세스들이 임계 구역에 진입하는 횟수에 제한이 있어야 합니다.

커널의 역할

운영체제 커널의 코드 역시 임계 구역 문제에 직면할 수 있습니다. 커널 데이터 구조(예: 열린 파일 목록, 메모리 할당 테이블)는 여러 프로세스에 의해 동시에 접근될 수 있으므로, 경쟁 조건이 발생하지 않도록 보호되어야 합니다.

커널은 임계 구역을 처리하는 방식에 따라 **선점형 커널(Preemptive Kernel)**과 **비선점형 커널(Nonpreemptive Kernel)**로 나뉩니다.

  • 비선점형 커널: 커널 모드에서 실행 중인 프로세스를 선점하지 않습니다. 따라서 커널 데이터 구조에 대한 경쟁 조건이 발생할 위험이 적어 커널 설계가 비교적 단순합니다.

  • 선점형 커널: 커널 모드에서 실행 중인 프로세스도 선점될 수 있습니다. 이 방식은 시스템의 응답성을 높이지만, 공유 커널 데이터에 대한 접근을 보호하기 위해 동기화 메커니즘을 사용해야 하므로 설계가 더 복잡합니다.

Last updated