세마포어
- 병행처리를 위한 프로세스 동기화 기법
- 운영체제의 자원을 경쟁적으로 사용하는 다중 프로세스에서, 행동을 조정하거나 동기화하는 기술
- 다익스트라가 제안
- 세마포어는 Busy-waiting을 피한다.
세마포어를 이용한 상호배제(Mutual Exclusion)
<세마포어 함수 정의>
- semWait 연산 : 세마포어 값을 확인한다. 세마포어 값을 확인해서 0이면, semWait를 호출한 프로세스를 세마포어 큐에 넣고 블록상태로 전이시킨다.
만약 세마포어 값이 1이면, 값을 0으로 변경시키고 프로세스는
계속 수행된다.
- semSignal 연산 : 블록되어 있는 프로세스가 존재하는지 확인한다. 만일 블록되어 있는 프로세스가 존재하면 그 프로세스를 깨운다. 반면 블록되어 있는 프로세스가 존재하지 않으면 세마포어 값을 1로 설정한다.
< 세마포어를 이용한 상호배제 >
강성 세마포어 & 약성 세마포어
- 강성 세마포어 : 큐에 연결된 프로세스들을 깨울 때 선입선출(FIFO) 정책을 사용하는 세마포어.
- 약성 세마포어 : 큐에 연결된 프로세스들을 깨울 때 순서를 특별히 명시하지 않은 세마포어.
세마포어의 유형
- Binary Semaphore
목적 : 상호배제, 프로세스 동기화
세마포어 변수: 0 or 1
- Count Semaphore(general semaphore)
목적 : 초기에 동시에 진행가능한 프로세스 개수 정의 가능
세마포어 변수 : 0,1,2 ....
세마포어와 Mutex의 차이
- mutex는 객체를 얻거나 반납할 때 사용하는 프로그래밍 플래그이다. 사용하려는 데이터가 공유될 수 없거나 또는 연산이 동시에 수행될 수 없는 경우, mutex가 설정되고 접근/연산을 시도한 프로세스들은 블록된다. 데이터에 대한 접근이 더 이상 필요 없거나 또는 연산이 완료되면 mutex의 락은 해제된다.
- mutex와 이진 세마포어의 핵심 차이는 mutex의 경우 락을 설정한(값을 0으로 설정한) 프로세스만이 락을 해제할 수 있다. 반면, 이진 세마포어의 경우 락을 설정한 프로세스와 해제하는 프로세스가 서로 다를 수 있다.
'운영체제' 카테고리의 다른 글
캐시 메모리(Cache Memory) (0) | 2018.08.28 |
---|---|
교착상태(Deadlock) (0) | 2018.08.28 |
병행성과 상호배제&상호배제 알고리즘 (0) | 2018.08.26 |
Thread (0) | 2018.08.24 |
Context Switch (문맥 교환) (0) | 2018.08.23 |