동기화 도구
경쟁 조건 (Race Condition)
경쟁 조건은 여러 프로세스가 동일한 데이터를 동시에 액세스하고 조작할 때 발생하며, 실행 순서에 따라 결과가 달라지는 상황을 의미합니다. 예를 들어, 생산자와 소비자 프로세스가 공유 버퍼의 항목 수를 나타내는 count
변수를 동시에 증가/감소시킬 경우, 최종 count
값은 예상치 못한 엉뚱한 값이 될 수 있습니다. 이는 고수준 언어의 간단한 명령문(예: count++
)이 여러 개의 기계어 명령어로 변환되어 실행되는 과정에서 발생할 수 있습니다. 이러한 경쟁 조건을 방지하려면 프로세스들이 동기화되어 공유 데이터에 대한 접근을 제어해야 합니다.
임계 구역 문제 (The Critical-Section Problem)
운영체제에서 동시 실행 중인 여러 프로세스가 공유 데이터를 접근하고 업데이트하는 코드 부분을 **임계 구역(Critical Section)**이라고 합니다. 임계 구역 문제의 핵심은 한 프로세스가 임계 구역에서 실행 중일 때, 다른 어떤 프로세스도 자신의 임계 구역에 들어갈 수 없도록 하는 프로토콜을 설계하는 것입니다.
임계 구역 문제의 해결책은 다음 세 가지 조건을 만족해야 합니다.
상호 배제(Mutual Exclusion): 한 프로세스가 임계 구역에 있으면, 다른 프로세스는 임계 구역에 들어갈 수 없습니다.
진행(Progress): 임계 구역에 있는 프로세스가 없고, 일부 프로세스가 임계 구역에 진입하려 할 때, 나머지 구역에 있지 않은 프로세스들만이 임계 구역에 진입할 프로세스를 결정해야 하며, 이 결정은 무한정 연기될 수 없습니다.
한정된 대기(Bounded Waiting): 한 프로세스가 임계 구역에 진입하려는 요청을 한 후부터 그 요청이 허용될 때까지, 다른 프로세스들이 임계 구역에 진입하는 횟수에 제한이 있어야 합니다.
단일 프로세서 환경에서는 인터럽트를 비활성화하여 임계 구역 문제를 간단히 해결할 수 있지만, 다중 프로세서 환경에서는 모든 프로세서의 인터럽트를 비활성화해야 하므로 효율적이지 않습니다.
선점형 및 비선점형 커널
임계 구역을 다루는 운영체제 커널에는 선점형 커널과 비선점형 커널 두 가지 유형이 있습니다.
비선점형 커널은 커널 모드에서 실행 중인 프로세스를 선점할 수 없도록 합니다. 이 방식은 커널 데이터 구조에 대한 경쟁 조건이 발생할 위험이 적어 커널 설계가 간단해집니다.
선점형 커널은 커널 모드에서 실행 중인 프로세스도 선점될 수 있도록 허용하여 시스템 응답성을 높이지만, 공유 커널 데이터에 대한 경쟁 조건을 막기 위해 세심한 설계가 필요합니다.
Last updated