세마포어

2020. 7. 7. 23:02컴퓨터언어/운영체제

728x90
반응형

 

👍 세마포어란?

세마포어는 임계구역을 지키기 위한 기존 상호배제 알고리즘이 바쁜대기 현상을 야기하는 것을 방지하고자 개발된 알고리즘이다.

바쁜대기 현상이란 실행중인 프로세스가 질질 끌기 때문에 다른 프로세스가 자기도 CPU할당을 받고자 계속 기웃거리면서 전력낭비를 초래하는 것인데,

세마포어는 프로세스가 이러한 쓸데없는 기웃거림을 못하도록 그냥 재워버리고 나중에 깨워주는 방식을 채택하였다.

 

예를 들면 다음과 같다.

어느 미용실에 한 명의 미용사(CPU)와 하나의 미용의자(임계구역)가 있다.

어느 날 손님 한명이 와서 머리를 자르고 있는데, 또다른 손님이 등장하였다.

미용실 카운터(운영체제)는 현재 자리가 하나밖에 없으니 기다리셔야 한다고 막았다(상호배제).

그래서 손님은 자리가 찬 것을 확인하고 나갔다.

잠시 후 아까 그 손님이 또 와서 두리번거리더니, 손님이 아직도 이발하고 있는 것을 확인하고 도로 나갔다.

이처럼 현재 손님이 아직 다 끝나지도 않았는데 다음 손님이 계속 두리번거리는 것을 "바쁜 대기"현상이라고 한다.

이때 미용실 카운터(운영체제)가 새로운 방법을 고안해냈다.

손님들이 계속 불필요한 정찰을 하는 것을 막기 위해, 기웃거릴 필요가 없도록 그냥 각자 집에서 자고 있도록 허용한 것이다.

이를 Sleep(Wait, P)이라고 한다.

그러다가 현재 손님의 이발이 끝나면, 미용사 카운터가 다음 손님에게 전화로 깨워 이제 와도 된다고 말하면 서로 편하다.

이를 Wake(Signal, V)라고 한다.

손님 입장 뿐만 아니라, 미용사 입장에서도 손님이 언제 오나 계속 두리번거리는 것이 아니라 손님이 와서 직접 깨우는 방식을 사용하면 전력낭비를 줄일 수 있다.

세마포어의 원리가 바로 이런 것이다.

세마포어 중에서도 방금처럼 미용실 자리가 하나뿐인 하나의 임계구역에 대한 상호배제 방안을 "이진형 세마포어"라고 하고,

여러 개의 공유자원에 대한 상호배제 방안을 "계수형(산술형) 세마포어"라고 한다.

728x90
반응형