본문 바로가기

프로그래밍/운영체제

[운영체제] Process Synchronization 2

세마포어 - 추상 자료형

세마포어 자료형은 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