CS/운영체제

[운영체제] 세마포어 : 세마포어를 사용한 프로세스 동기화

vision333 2022. 4. 7. 22:24
728x90

세마포어

세 개의 특수한 명령들만 접근할 수 있게 허용되는 보호된 변수

높은 수준 (프로그래밍 언어와 운영체제 수준에서 병행성을 위해 제공되는 기법) 에서 상호배제 명령을 구현할 수 있음

 

무슨말이지?

 

소프트웨어상에서임계구역 문제를 해결하기 위한 동기화 도구

멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법

 

공유된 자원에 여러 프로세스가 동시에 접근하면서 문제가 발생할 수 있다.

이때 공유된 자원의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 둬야 한다.

이를 위해 나온 것이 바로 '세마포어'

 


세마포어의 종류

 

변수가 가질 수 있는 값의 범위에 따라 종류가 구분된다.

이진 세마포어 : 세마포어가 0, 1 값을 가짐

계수(Counting) / 정수(Integer) 세마포어 : 세마포어가 음이 아닌 모든 정수 값을 가짐

 

세마 포어를 위한 명령 = 비분리(Indivisble)명령 = 동시에 일어나지 않는다

 

세마포어 값을 초기화 하는 명령 : P명령, V명령

(P명령 = wait, signal / V명령 = down, up 으로 쓰기도 함)

한 프로세스가 P 혹은 V를 수행하고 있는 동안 프로세스가 인터럽트 당하지 않게 된다.

 

P명령과 V명령은 세마포어인 S만을 매개변수로 한다 ( == S에 대한 접근은 P, V명령으로만 가능하다)

 


세마포어 구현 방법

 

P(S);

// --- 임계 구역 ---

V(S);

P와 V를 사용하여 임계 구역에 대한 상호배제 구현 가능

P(S) if (S > 0) {
	then S = S - 1;
    	else S > 0; // 조건이 만족될 때까지 큐에서 대기
}

// 임계 구역

V(S) if (큐에서 대기 중인 프로세스들이 존재) {
	then 그 중의 한 프로세스를 준비 또는 준비에 아무도 없으면 실행 상태로 만듦;
    	else S = S + 1;
}

P명령 (최초 S값은 1이다)

S가 0보다 크면 S를 1 감소시킨다.

그렇지 않으면 S가 0보다 크길 기다린다. (이진 세마포어일 때는 1이길 기다림)

S를 0으로 만든다 = 다른 프로세스가 들어오지 못하게 한다.

 

V명령

프로세스들이 존재하면 그 중 한 프로세스를 준비, 준비에 아무도 없으면 실행상태로 만든다.

그렇지 않으면 S를 1 증가시킨다.

S를 1로 만든다 = 원위치

 

최초 S 값은 1이고, 현재 해당 구역을 수행할 프로세스 A, B가 있다고 가정하자

  1. 먼저 도착한 A가 P(S)를 실행하여 S를 0으로 만들고 임계구역에 들어감
  2. 그 뒤에 도착한 B가 P(S)를 실행하지만 S가 0이므로 대기 상태
  3. A가 임계구역 수행을 마치고 V(S)를 실행하면 S는 다시 1이 됨
  4. B는 이제 P(S)에서 while문을 빠져나올 수 있고, 임계구역으로 들어가 수행함

Busy wait 방식

 

어떤 조건을 만족하지 못할 경우에, 그 조건을 만족할 때 까지 다른 작업을 수행하지 않고 기다리는 경우

세마포어가 0 이하라면 CPU는 하염없이 기다려야 한다...

 

Block & Wake up (Sleep)

 

어떤 조건을 만족시키지 못하면 특정 시간동안 sleep상태로 프로세스를 두고, 이후에 조건을 확인하는 방식

세마포어에서 임계구역 진입을 시도했지만 실패한 프로세스에 대해 Block 시키고 임계구역에 자리가 날 때 다시 깨운다.

 


Busy wait vs Block & Wake up 장단점

 

  Busy wait Block & Wake up
장점 일이 끝나면 지체없이 바로 다음 실행 cpu 활용
단점 cpu 낭비 ( 프로세스가 계속해서 condition검사 ) wake up -> ready 과정으로 즉각적인 반응과 실행 불가
OS개입 필요 (커널 개입 필요)

 

 

 

참고

책 ) 누워서 보는 운영체제 이야기

블로그 ) https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Operating%20System/Semaphore%20%26%20Mutex.md

블로그 ) https://velog.io/@youngminss/OS-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%8F%99%EA%B8%B0%ED%99%942

728x90
반응형