뮤텍스 세마포어 크리티컬 섹션

2018. 10. 2. 01:50프로그래밍

반응형

세마포어(semaphore)

공유자원에 여러 프로세스가 접근하는 것을 막는 것

세마포어는 int, char 처럼 추상적인  한 자료형이다.

커널에 저장되어있는 변수이며 시스템 콜을 통해서만 값을 수정할 수 있다.

리소스의 상태를 나타내는 간단한 카운터

이진 세마포어



뮤텍스(mutual exclusion = mutex)

공유자원에 여러 쓰레드가 접근하는 것을 막는 것


크리티컬 섹션(critical section) = 임계영역

임계영역이란 둘 이상의 쓰레드가 동시에 접근해서는 안되는 겅유자원을 접근하는 코드의 일종



뮤텍스는 세마포어가 될 수 없지만 세마포어는 뮤텍스가 될 수 있다


그 이유는 뮤텍스는 항상 하나의 열쇠를 가지고 있고 세마포어는 여러개의 열쇠를 들고있다

만약 세마포어가 하나의 열쇠를 가지고 있다면 뮤텍스와 같다


세마포어 값이 0이면 자원에 접근할 수 없고 세마포어 값이 0보다 큰 정수면 해당 크기만큼 프로세스에 접근할 수 있다

위에 세마포어는 시스템 콜을 통해서만 값을 수정할 수 있다고 했는데

이는 up과 down으로 볼 수 있다.


down 의 상태를 보면

세마포어 값이 0이면 해당 프로세스를 블락시켜 잠들게 한다.

세마포어 값이 0이 아니면 값만 줄이고 하던 일을 계속한다.

up 의 상태를 보면

블락된 프로세스가 있다면 해당 프로세스를 깨운다.

블락된 프로세스가 없다면 값만 증가시킨다.


자원에 접근하면 세마포어 값을 1 다운 시키고 세마포어 값을 0으로 만들어 다른 프로세스 자원에 접근 할 수 없도록한다.

자원의 사용이 끝나면 다시 세마포어 값을 1업 시키고 다른 프로세스가 자원을 사용할 수 있도록 해준다.


이렇게 세마포어를 이용하여 보호해야 하는 자원과 연산이 포함된 영역을 임계영역(critical section)이라고 한다.

반응형