공부기록
세마포어 본문
- 세마포어
- 운영체제와 프로그램 언어 수준에서 병행성을 위해 제공되는 기법
- 세마포어
- 모니터
- 메세지 전달
- Dijkstra 기법의 기본적인 원리 - 세마포어
- 두 개 이상의 프로세스들은 간단한 형태의 신호를 이용해 협력
- 한 프로세스가 특정 신호를 수신할 때까지 정해진 위치에서 중지하도록 강제하는 것
- 신호를 보내고 받기 위해 세마포어라 불리는 특수 변수들을 사용
- semSignal(s) : 세마포어 s를 통해 신호를 전송
- semWait(s) : 세마포어 s를 통해 신호를 수신
- 특정 신호를 받으려는 프로세스에게 아직 해당 신호가 전달되지 않았다면, 전달될 때까지 프로세스의 수행은 보류됨
- 세마포어
- 정수값을 가지는 변수
- 세가지 연산을 통해 접근
- 세마포어 초기화 : 세마포어는 음이 아닌 값으로 초기화
- semWait
- 세마포어 값을 감소, 값이 음수가 되면 semWait을 호출한 프로세스는 블록됨, 음수가 아니면 프로세스는 계속 수행될 수 있음
- semSignal
- 세마포어 값을 증가시킴, 만일 값이 양수가 아니면 semWait 연산에 의해 블록된 프로세스들을 깨움
- 이진 세마포어 (binary semaphore)
- 이진 세마포어는 오직 0과 1만 유지
- 세가지 연산에 의해 정의
- 세마포어 초기화 : 0 또는 1로 초기화
- semWaitB
- 값이 0 이면 semWaitB를 호출한 프로세스는 블록
- 값이 1 이면 값을 0으로 변경시키고 프로세스는 계속 수행
- seSignalB
- 블록되어 있는 프로세스가 존재하는 지 확인
- 블록되어 있는 프로세스가 존재 시 프로세스를 깨움
- 블록되어 있는 프로세스가 존재하지 않으면 세마포어 값을 1로 설정
- 이진 세마포어 vs 범용 세마포어
- 이진 세마포어가 구현하기 더 쉬움
- 범용 세마포어와 같은 표현력을 가질 수 있음
- mutual exclution lock (mutex)
- 이진 세마포어와 비슷
- 하지만 한 프로세스가 lock 하면 그 프로세스가 반드시 unlock 해줘야함
- 이진 프로세스는 한 프로세스가 0 하면 다른 프로세스가 1 해줄 수 있다.
- 운영체제와 프로그램 언어 수준에서 병행성을 위해 제공되는 기법
- 세마포어는 블록된 프로세스들을 관리하기 위해 큐를 사용한다.
- 강성 세마포어 : 블록된 프로세스들을 큐에서 제거하는 순서를 명시
- 장점
- 기아상태 X
- 직관적, 구현이 편리
- 장점
- 약성 세마포어 : 순서가 명시되어 있지 않음
- 강성 세마포어 : 블록된 프로세스들을 큐에서 제거하는 순서를 명시