임계 구역

IT 위키
(임계구역에서 넘어옴)
Critical Section; 임계 영역
둘 이상의 프로세스나 스레드가 공유 자원에 접근하는 코드 영역으로, 한 번에 하나만 실행되어야 하는 부분
  • 공유 변수, 공유 파일, 입출력 장치처럼 동시에 접근하면 결과가 달라지는 자원을 다루는 구간이다.
  • 여러 프로세스가 임계 구역에 동시에 들어가면 실행 순서에 따라 결과가 바뀌는
 경쟁 상태(Race Condition)가 발생한다.
  • 다중 스레드 프로그램에서 C전역 변수는 모든 스레드가 공유하므로 임계 구역의
 대상이 된다. 지역 변수와 함수 인자는 스레드마다 스택에 따로 잡히므로 해당하지 않는다.

해결 조건

[편집 | 원본 편집]

임계 구역 문제의 해법은 세 가지를 모두 만족해야 한다.

  • 상호 배제(Mutual Exclusion) : 한 프로세스가 임계 구역에 있으면 다른 프로세스는 들어갈 수 없다.
  • 진행(Progress) : 임계 구역이 비어 있으면, 들어가려는 프로세스 중에서 누가 들어갈지를
 임계 구역 밖에 있는 프로세스가 방해해서는 안 된다.
  • 한정 대기(Bounded Waiting) : 대기 시간이 유한해야 한다. 특정 프로세스가 무한정 밀리면 안 된다.

프로세스의 상대적인 실행 속도나 프로세서 수에 대해서는 어떤 가정도 해서는 안 된다. 속도를 가정한 해법은 환경이 바뀌면 깨진다.

해결 방법

[편집 | 원본 편집]
  • 소프트웨어 해법 : 데커 알고리즘, 피터슨 알고리즘, 램포트의 베이커리 알고리즘
  • 하드웨어 해법 : TestAndSet, Swap 같은 원자적 명령어
  • 운영체제·언어 수준 : 세마포어, 뮤텍스, 모니터

같이 보기

[편집 | 원본 편집]