Critical Section 문제

이찬영·2021년 8월 16일
0

OS

목록 보기
9/35

Critical Section (임계 영역)이란?

임계영역이란 한 프로세스가 정해진 임계구역에서 수행하는 동안 다른 프로세스는 해당 임계구역에 진입할 수 없더록 만든 코드 영역이다. 임계 영역의 구조는 임계 영역에 진입 요청을하는 entry section(진입 영역)과 임계 영역을 나가는 exit section(퇴출 영역)이 있다. 이후 코드의 나머지 부분들을 칭하는 remainder serction(나머지 영역)이 있다.

프로세스의 일반적인 구조는 아래와 같다.

while(true){
	entry section{
		critical section{...}
	}
    
	exit section{
		remainder section{...}
	}
}

Critical Section 문제 해결 조건

Mutual exclusion (상호 배제)

프로세스 자신의 임계 영역에서 실행된다면 다른 프로세스들은 그들 자신의 임계 영역에서 실행될 수 없다.

Progress (진행)

임계 영역에서 실행되는 프로세스가 없고 자신의 임계 영역으로 진입하려고 하는 프로세스들이 있다면, 나머지 영역에서 실행 중이지 않은 프로세스들만 다음에 임계 영역으로 진입할 수 있는지 결정하는데 참여할 수 있다. 이 선택은 무한정 연기되면 안된다.

Bounded waiting (한정된 대기)

프로세스가 자신의 임계 영역에 진입하려는 요청을 한 후부터 그 요청이 허용될 때 까지 다른 프로세스들이 각자의 임계 영역에 진입하도록 허용되는 횟수에 한계가 있어야한다.

운영체제 내에서 임계 영역을 다루는 방법

선점형 커널

프로세스가 커널 모드에서 수행되는 동안 선점되는것을 허용.
커널 내 실행 중인 프로세스가 여러개이므로 레이스 컨디션을 고려하며 설계해야한다.
SMP 구조에서는 선점형 커널을 설계하는 것은 쉽지 않다.
대부분 선점형 커널을 선호한다. 이유로는 커널 모드 프로세스가 대기 중인 프로세스에 CPU를 양도하기 전에 오래동안 실행할 위험이 적기 때문에 응답이 민첩하다.

비선점형 커널

프로세스가 커널 모드에서 수행되는 동안 선점되는것을 허용하지 않고 커널 모드 프로세스는 커널을 빠져나갈 때, 블락될때, 자발적으로 CPU 제어를 양보할때까지 계속 수행한다.
커널 내 실행 중인 프로세스가 하나만 존재하기 때문에 레이스 컨디션을 고려할 필요가 없다.

0개의 댓글