카테고리 없음

크리티컬 섹션, 뮤텍스, 세마포어, busy-wait, spin-lock

흰색남자 2022. 7. 14. 14:50

경쟁상태 ( race condition ) : 자원에 여러 쓰레드가 동시에 접근할때 실행 순서에 따라 결과가 달라짐.
경쟁상태를 해결하기 위해 나온게 크리티컬 섹션
크리티컬 섹션 ( 임계영역 ) : 하나의 프로세스에서 하나의 크리티컬 섹션에 하나의 쓰레드만 접근가능함.// 동기화

뮤텍스 : 여러 프로세스에서 하나의 크리티컬 섹션에 하나의 쓰레드만 접근 가능함 << 계속 확인을 함// 스핀락

세마포어 : 여러 프로세스에서 여러개의 크리티컬 섹션의 동기화를 관리함

critical section을 처리하는 방식에는 2가지가 있다.
block & wakeup
busy waiting

Busy-Wait v.s. Block & Wakeup
block & wakeup이 일반적으로 cpu 이용시간도 좋고, 쓸데없는 연산을 반복하지 않아서 좋다.
단, block & wakeup의 경우 프로세스의 상태변화(ready ←→ suspend)의 overhead가 있다. (문맥교환 비용)
Critical Section의 길이가 매우 짧아서 빈번하게 프로세스가 바뀌는 경우 Block & wakeup의 오버헤드가 Busy-Wait의 오버헤드보다 커질수 있다.

// 상황에 따라 방식을 선택해야함.

뮤텍스: 한 쓰레드, 프로세스에 의해 소유될 수 있는 Key를 기반으로 한 상호배제기법
세마포어: Signaling mechanism. 현재 공유자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타내는 값을 두어 상호배제를 달성하는 기법