운영체제

[운영체제] 세마포어(Semaphore)

ssh9308 2024. 6. 4. 09:00
반응형

세마포어(Semaphore)의 기본 개념

 

세마포어는 다중 프로세스 환경에서 공유 자원에 대한 접근을 제어하기 위해 사용되는 변수다.

 

이는 상호 배제(Mutual Exclusion, 뮤텍스)를 보장하여

 

여러 프로세스가 동시에 공유 자원을 사용할 때

 

발생할 수 있는 경쟁 상태(Race Condition)를 방지한다.

 

 

 

직관적인 예시 - 프린터실과 열쇠


회사에서 여러 직원이 공유 프린터를 사용한다고 가정해 보자.

 

프린터는 한 번에 한 사람만 사용할 수 있는 제한된 자원이다.

 

만약 프린터가 제한된 자원이 아니라고 하면,

 

여러 직원들이 한 번에 프린터를 사용하여 예상하지 못한 결과를 출력할 수 있다.

 

그러므로 아래와 같이 프린터를 사용하려면 프린터 방에 들어가서

 

한 명씩 프린터를 사용하도록 해야 한다.

 

 

여기서 세마포어는 프린터실의 열쇠로 비유할 수 있다.


공유 자원: 프린터


프로세스: 프린터를 사용하려는 직원


세마포어(열쇠): 프린터실 접근 권한


대기 큐: 프린터를 기다리는 직원들의 줄


운영체제(열쇠 관리자): 열쇠의 배부를 관리

 


직원 A가 프린터를 사용하려면 열쇠 관리자(운영체제)에게 열쇠(세마포어)를 요청한다.

 

열쇠가 사용 가능하면, 직원 A는 프린터실에 들어가 문서를 인쇄할 수 있다.

 

이 기간 동안 다른 직원은 대기해야 하며,

 

직원 A가 작업을 마치고 열쇠를 반납하면 다음 직원이 프린터를 사용할 수 있다.

 

 

위의 그림을 실제 운영체제 환경으로 도식화하면 아래와 같다.

 

 

 

 


세마포어의 작동

세마포어는 기본적으로 두 가지 주요 연산으로 구성된다.

 

1) wait() (P 연산)

 

세마포어를 감소시키는 연산으로, 값이 0보다 크면 감소시키고,

 

0이면 프로세스를 대기 상태로 전환한다.

 

 

2) signal() (V 연산)

 

세마포어를 증가시키는 연산으로, 대기 중인 프로세스가 있다면 활성화시킨다.

 

 

 

 

 

 

 

세마포어의 형태

 

1) 이진 세마포어 (뮤텍스)

 

값이 0 또는 1인 세마포어로, 단일 자원에 대한 접근을 제어.

 


2) 카운팅 세마포어

 

값이 정수인 세마포어로, 제한된 수의 동시 접근을 허용한다.

 

예를 들어, 두 대의 프린터가 있을 때 세마포어의 값은 2가 될 수 있다.

 

 

 

 


주의사항과 한계

 

세마포어를 사용할 때는 wait()와 signal()의 순서를 정확히 유지해야 한다.

 

잘못된 사용은 데드락이나 세마포어 값의 오류를 초래할 수 있다.

 

예를 들어, signal()을 두 번 연속으로 호출하거나

 

wait()을 건너뛰는 실수는 시스템의 안정성을 해칠 수 있다.

 

 

 

 


결론

세마포어는 복잡한 멀티프로세스 환경에서 안정적인 동기화를 제공하는 효율적인 도구다.

 

그러나 이를 올바르게 사용하기 위해서는 신중한 설계와 구현이 필요하며,

 

프로세스 간의 정확한 조정을 요구한다.

반응형