본문/내용
임계영역과 임계영역 해결 방법에 대한 심층 분석
1. 임계영역 (Critical Section) 개념
1.1. 정의 및 특징
정의: 둘 이상의 프로세스 또는 스레드가 공유 자원(shared resource)에 접근할 때, 동시 접근으로 인해 데이터 불일치나 예측 불가능한 결과를 초래할 수 있는 코드 영역을 의미합니다.
특징:
상호 배제 (Mutual Exclusion): 한 번에 오직 하나의 프로세스 또는 스레드만 임계영역에 진입하여 공유 자원에 접근할 수 있습니다.
진행 (Progress): 임계영역에 진입하려는 프로세스 또는 스레드가 없다면, 다른 프로세스 또는 스레드는 임계영역에 진입할 수 있어야 합니다. 즉, 임계영역 외부에 있는 프로세스나 스레드가 임계영역 진입을 무한정 blocking 해서는 안 됩니다.
한정된 대기 (Bounded Waiting): 임계영역에 진입하려는 모든 프로세스 또는 스레드는 유한 시간 내에 임계영역에 진입할 수 있어야 합니다. 즉, 특정 프로세스 또는 스레드가 임계영역에 대한 접근을 독점하거나 특정 프로세스 또는 스레드가 무한정 대기하는 상황을 방지해야 합니다.
1.2. 발생 배경 및 문제점
발생 배경: 멀티프로그래밍 환경에서 여러 프로세스가 동시에 실행되면서 공유 자원에 대한 경쟁이 발생합니다. 이때, 적절한 동기화 메커니즘 없이 공유 자원에 접근하면 데이터 손실, 불일치, 데드락 등 심각한 문제가 발생할 수 있습니다.
문제점:
Race Condition: 여러 프로세스 또는 스레드가 동시에 공유 자원에 접근하여 값을 변경하려고 할 때 발생하는 문제입니다. 결과는 어떤 프로세스 또는 스레드가 먼저 값을 변경하느냐에 따라 달라지므로 예측 불가능한 결과를 초래할 수 있습니다.
데드락 (Deadlock): 두 개 이상의 프로세스 또는 스레드가 서로 다른 자원을 점유하고, 상대방이 점유한 자원을 기다리면서 발생하는 교착 상태입니다. 이 상태에서는 어떤 프로세스 또는 스레드도 더 이상 진행할 수 없게 됩니다.
…
…