CS/운영체제

[운영체제] 세마포어와 모니터

happy_life 2022. 7. 18. 13:04

목차

1. 세마포어

2. 뮤텍스

3. 모니터

 

 

 

세마포어

특징

●  동시에 접근할 수 있는 '허용 가능한 개수'를 가지고 있는 Counter 변수가 존재한다. 예를 들어, 화장실이 3칸이고, 열쇠가 3개라면 3명은 대기없이 바로 화장실을 사용할 수 있다. 

 

● 세마포어는 Counter의 개수에 따라 두 가지로 나뉘는데, 1개이면 뮤텍스, 나머지를 세마포어라고 한다.

 

● 세마포어는 소유할 수 없다. 따라서 세마포어를 소유하지 않은 쓰레드가 세마포어를 해제할 수 있는 문제가 발생한다. 

세마포어를 소유하지 않은 쓰레드가 해제 가능

 

 

● busywaiting은 예전의 metaphores의 문제며, 현재는 진입하지 못하면 blocked가 기본이고, busywaiting이 blocked 보다 더 자원을 덜 쓸 경우에만 busywaiting을 사용한다.

 

 

뮤텍스

특징

●  뮤텍스는 상호배제이다. 따라서 세마포어와의 가장 큰 차이점은 ownership에 있다. 뮤텍스에서는 locked 되어서 기다렸던 쓰레드가 아니면 세마포어를 해제할 수 없다. 

 

●  뮤텍스는 또한 Counter가 하나이다. 따라서 lock을 가진 사람만 키를 반환할 수 있다.

 

 

모니터

특징

●  java의 Synchronized method가 모니터의 예시이다.

 

●  모니터는 공유 데이터를 캡슐화한 모듈이라고 생각하면 된다. 그 모듈 안이 동기화 되는 것이다.

 

●  모니터 안에는 단 하나의 프로세스만 들어갈 수 있다.

 

● 어떤 구조체로서 안에, condition과 절차들을 가지고 있다.

Monitor

 

procedure는 자바에서 보는 wait(), signal()같은 것으로, 모니터 외부에서 사용 가능하다.

condition은 특정 큐를 지정해주는 것으로 c1.wait()을 호출하면 c1라는 큐에 프로세스를 대기상태로 넣을 수 있다.

 

장점

모니터를 사용하면, 병렬 프로그래밍을 좀 더 쉽게할 수 있으며, 실수를 줄일 수 있다.

 

단점

Monitor는 프로그래밍 언어의 일부처럼 실행된다. 따라서 컴파일러가 Monitor와 관련된 코드를 실행해야 한다. 이것이 컴파일러에게 부담을 준다.