[CS/운영체제] - 임계영역 (Critical Section)

황제연·2025년 6월 22일
0

CS학습

목록 보기
113/193
post-thumbnail

임계영역 (Critical Section)

임계영역은 여러 프로세스가 공유 자원에 접근할 때 오직 하나의 프로세스만 접근하도록
보장하는 코드 영역입니다
임계영역을 잘못 처리하면 Race Condition이 발생해서 데이터 무결성이 깨질 수 있습니다

Race Condition

두 개 이상의 프로세스가 동시에 하나의 공유 데이터에 접근해 연산 결과가 달리자는 상태를 의미합니다

임계영역 문제해결 조건

임계영역을 다룰 때는 반드시 다음 4가지 조건을 만족해야합니다

상호배제 (Mutual Exclusion)

한번에 하나의 프로세스만 임계영역에 진입할 수 있습니다

진행 (Progress)

임계 영역에 진입한 프로세스가 없으면 진입 대기중인 프로세스가 들어갈 수 있어야 합니다

유한 대기 (Bounded Waiting)

프로세스가 무한히 기다리지 않고, 진입을 보장받아야 합니다

무간섭 (Non-Interference)

임계 영역 바깥 프로세스가 내부의 프로세스 수행을 방해해서 안됩니다

임계영역 해결 기법

소프트웨어적 접근

  • 피터슨 알고리즘: 두 개의 프로세스간 임계영역 문제를 소프트웨어적으로 해결한 알고리즘
do {
	flag[i] = true; turn = j;
	while(flag[j] && turn == j);
	// critical section
	flag[i] = false;
	// remainder section
}while(true)

하드웨어적 접근

  • TestAndSet, CompareAndSwap 연산: 원자적 연산을 제공하여 하드웨어적 동기화로 경쟁상태를 방지합니다
boolean testAndSet(boolean *target){
	boolean rv = *target;
	*target = TRUE;
	return rv;
}

do {
	while(testAndSet(&lock)){
		CRITICAL SECTION
		lock = FALSE;
		REMAINDER SECTION
	}
}

운영체제가 제공하는 동기화 메커니즘

세마포어(Semaphore)

정수형 변수와 두가지 원자적 연산(wait, signal)을 이용한 동기화 메커니즘입니다

뮤텍스(Mutext)

이진 세마포어(0과 1만 가능)의 특별한 형태로 임계 영역 보호에 최적화되어있습니다

모니터 (Monitor)

고급언어 차원에서 제공하는 동기화 구조로, 자동적으로 상호배제를 보장합니다
Java의 synchronized블록이나 메소드가 대표적입니다

profile
Software Developer

0개의 댓글