세마포어 - 추상 자료형
세마포어 자료형은 P 연산과 V 연산 이렇게 2가지로 정의가 된다.
세마포어를 왜 사용하냐면 , 락을 걸고 락을 풀고 , 이걸 프로그래머에게 간단하게 제공할 수 있다.
공유 자원을 획득하고 반납하는걸 세마포어가 처리해주는것.
P 연산은 세마포어 변수를 획득하는 과정이고 , 공유 데이터를 획득하는 과정이고 (락을 거는과정)
V 는 다 사용하고나서 반납하는 과정이다.(락을 푸는 과정)
세마포어 변수 mutex 를 1로 두면
P 연산으로 락을걸고 CS 를 쓰고 V 로 반납하는 과정을 거친다.
세마포어를 획득할 수 없으면 프로세스를 block 시켜버린다.
그러다 세마포어가 반납된곳이 있으면 wakeup 으로 깨워서 레디 큐로 옮긴다.
P 연산 (자원을 획득하는 과정)
자원의 여분이 없으면 재운다 block으로
V 연산
자원이 반납되면 잠들어있던 프로세스를 깨워주는 작업이 들어가있다.
S 가 Q 를 원하고 Q 가 S 를 원하는 상황에서
각 프로세스가 S , Q 하나씩을 잡고있고,
V 로 반납을 하고 있지 않으니까 데드락 상황에 걸려버린다.
S,Q 로 순서를 맞춰주게 되면 해결될 수 있다.
-starvation 문제
특정 친구가 자원을 획득하지 못하고 무한히 기다리는 상황
특정 프로세스만 자원을 공유하면서 다른 프로세스 차례가 못오게 하는 현상
- 식사하는 철학자 문제로 봐볼 수 있다.
식사를 할때 양쪽 젓가락을 써야된다고 할때
6시 방향 친구가 먹기전에 양옆에 친구들이 번갈아가면서 계속 사용하게 되면
6시 는 굶어 죽게된다.
'프로그래밍 > 운영체제' 카테고리의 다른 글
[운영체제] Deadlock (0) | 2020.06.17 |
---|---|
[운영체제] Process Synchronization3 (0) | 2020.06.17 |
[운영체제] Process Synchronization (0) | 2020.06.15 |
[운영체제] CPU Scheduling 2 (0) | 2020.06.15 |
[운영체제] CPU Scheduling (0) | 2020.06.15 |