Semaphores
정수 값을 가지며, 두 가지 연산인 P, V 연산에 의해서만 접근 가능한, 다중 프로그래밍 환경에서 공유 자원에 대한 접근을 제어하기 위한 동기화 도구 중 하나이다.
Busy wait 방식
P(S) : while ( S<= 0) do no-op;
S--; // if positive, decrement & enter. otherwise, wait until positive ( busy -wait)
V(S) : S++;
Block and Wake up 방식
Semahpore를 다음과 같이 정의
typedef struct
{ int value; /* semapohre */
struct process *L ; /*process wait queue */
} semapohre;
Block과 wakeup을 다음과 같이 가정
- Block : 커널은 block을 호출한 프로세스를 suspend 시킴, 이 프로세스의 PCB를 Semaphore에 대한 wait queue에 넣넣음
- Wakeup(P) : block된 프로세스 P를 wakeup 시킴, 이 프로세스의 PCB를 ready queue로 옮김
P(S) : S.value -- ; /* prepare to enter */
if( S.value < 0 ) /* negative, I can't enter */
{ //add this process to S. L;
block();
}
V(S) : S.value ++ ;
if(S.value<=0)
{ //remove a process P from S.L;
wakeup(P);
}
Busy- wait vs Block / wakeup
- Critical Section의 길이가 긴 경우 Block / wakeup이 적당
- 매우 짧으면 Block / wakeup 오버헤드가 Busy-wait 오버헤드보다 더 커질 수 있음
- 보통의 경우엔 Block / wakeup 방식이 더 효율적이다.
세마포어에는 두 종류가 있다
- Counting Semaphore
- 도메인이 0 이상인 임의의 정수값
- 주로 resource counting에 사용
- Binary Semaphore ( = mutex)
- 0 또는 1 값만 가질 수 있는 Semaphore
- 주로 Mutual Exclusion ( lock / unlock)에 사용
Semaphore의 단점, 문제점
- 코딩하기 힘들다
- 정확성 ( correctness ) 의 입증이 어렵다
- 자발적 협력 ( voluntary cooperation )이 필요하다
- 한번의 실수가 모든 시스템에 치명적 영향
Monitor
- 동시 수행중인 프로세스 사이에서 abstract data type의 안전한 공유를 보장하기 위한 high - level synchronization construct
- 모니터 내에서는 한번에 하나의 프로세스만이 활동가능
- 프로그래머가 동기화 제약조건을 명시적으로 코딩할 필요없음
- Lock을 거는 코드가 없다
이 포스팅은 이화여대에서 무료로제공하는 반효경님의 운영체제강의를 수강하며 정리한 내용입니다.
필자가 잘 이해하지 못해서 잘못된 내용이 있을 수 있으므로 주의바라며, 발견되면 알려주시면 감사하겠습니다.
http://www.kocw.net/home/search/kemView.do?kemId=1046323
운영체제
운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각
www.kocw.net
'CS > 운영체제' 카테고리의 다른 글
운영체제 (10) - Deadlock (데드락) (1) | 2023.10.08 |
---|---|
운영체제(9) - 고전적인 동기화 문제들 (2) | 2023.10.05 |
운영체제(7) - Race condition과 임계구역(Critical-Section problem) (1) | 2023.10.03 |
운영체제(6) - CPU 스케줄링 (0) | 2023.09.22 |
운영체제(5) - 프로세스의 생성과 관련 시스템콜 (1) | 2023.09.22 |