CS/OS

[OS] 임계구역 접근방법 - 뮤텍스(Mutex)와 세마포어(Semaphore)

Deveun 2021. 8. 30. 06:15

임계구역 (Critical Section)

: 여러 프로세스가 특정 공유자원을 병행하며 읽고 쓰면 "경쟁조건이 발생했다" 라고 말한다.

이 때, 프로그램의 결과는 자원에 접근한 프로세스의 순서에 따라서 달라지는데, 이러한 영역을 임계구역이라고 한다.

 

ex) 생산자-소비자 문제

 - Producer는 물건을 생산하는 input method 를 호출한 뒤 sum을 하나 증가시킨다.

 - Consumer는 물건을 소비하는 output method를 호출한 뒤 sum을 하나 감소시킨다.

이 때, 둘 다 sum = 3인 상태에서 동시에 전역 변수 sum에 접근하여 (1) Producer는 sum = 4, (2) Consumer는 sum = 2로 업데이트 하려고 하면  (1)->(2) or (2)->(1) 어떤 순서로 작업이 진행되는지에 따라 최종 sum에 저장되는 값이 달라진다.


임계구역 문제 해결 조건 3가지

 

o 상호배제 (Mutual Exclusion)

: 한 프로세스가 임계구역에 들어가면 다른 프로세스는 접근 불가

o 한정대기 (Bounced Waiting)

: 특정 프로세스가 임계구역에 접근하지 못하는 무한대기는 발생하면 안됨

o 진행의 융통성 (Progress Flexibility)

: 한 프로세스가 다른 프로세스를 방해해서는 안됨


임계구역 해결 알고리즘 - 뮤텍스(Mutex)와 세마포어(Semaphore)

 

o 뮤텍스(Mutex)

: 하나의 프로세스가 임계구역에 진입할 때 lock을 수행 --> 임계구역을 빠져나올 수 때 unlock을 수행하여 상호배제를 가능하게 한다. 

o 세마포어(Semaphore)

: 하나의 프로세스가 임계구역에 진입할 때 사용가능한 resource의 cnt를 하나 감소시키고 --> 임계구역을 빠져나올 때 다시 cnt를 하나 증가시킨다. 세마포어는 cnt<=0일 때 lock을 발생시키고 다시 cnt>0일 때 unlock을 발생시킨다.

(세마포어의 cnt가 1이면 뮤텍스처럼 동작한다.)

 

 

 

[뮤텍스와 세마포어를 화장실사용에 비교한 설명]

참고: https://worthpreading.tistory.com/90