상 | Semaphore | [정의]운영체제또는프로그램내에서공유자원에대한접속을제어하기위해사용되는신호로병행내지병렬로동작되는둘이상의프로세스사이에서공유자원의사용을통제하는방법 [키워드] P, V 연산, 2가지 세마포어 유형 이진, 계수형세마포어 |
토픽 이름 | 세마포어(Semaphore) |
분류 | OS > 병행 제어 > Semaphore |
키워드(암기) | P(), V(), S |
암기법(해당경우) |
기출문제
번호 | 문제 | 회차 |
1 | 세마포어(Semaphore)의 P 연산과 V 연산을 설명하시오 | 기86-관-1-2 |
2 | 세마포어(Semaphore)와 모니터(Monitor)의 상호관계를 설명하시오. | 기98-응-1-11 |
3 | 계수형 세마포어(Countin semaphore)에 대하여 설명하시오 | 기99-관-1-9 |
4 | 세마포어(Semaphore)를 이용한 리소스 공유 방법과 태스크간 동기화 방법에 대하여 설명하시오. | 기108-응-3-4 |
5 | 12. 세마포어(Semaphore)와 뮤텍스(Mutex)를 비교 설명하시오. | 기120-응-1 |
6 | 세마포어(Semaphore)와 모니터(Monitor) | 기122-관-1 |
I. 상호배제 원리를 응용한 busy waiting 해결책, 세마포어 개요
가. 세마포어 정의
- 운영 체제 또는 프로그램 내에서 공유 자원에 대한 접속을 제어하기 위해 사용되는 신호로 병행 내지 병렬로 동작되는 둘 이상의 프로세스 사이에서 공유 자원의 사용을 통제하는 방법
나. 세마포어 특징
특 징 | 설 명 |
병렬 프로세스 동기화 | 프로세스간의 접근을 동기화 처리 |
원자적 실행 | P연산과 V연산은 하나의 과정으로 수행 |
교착상태 방지 | 자원이 사용중일 때 다른 프로세스의 접근을 막고 끝난 후 접근 허용 |
II. 세마포어의 동작 원리 및 유형
가. 세마포어의 동작 원리
![]() |
종류 | 의미 | 내용 |
초기화 | Initialize | - 세마포어(S)에 하나의 대기 큐를 할당하고 초기화 - S = 1 |
P 연산 | Wait | - P(S) 연산(wait()) 수행 - 변수의 값을 하나 줄인 후 변수의 값이 0보다 작으면 프로세스를 대기열에 집어 넣음 - S = S – 1 - S < 0 : 프로세스를 대기열에 넣음 - S > 0 : 프로세스는 계속 진행 - S=0, 자원 할당 상태 |
V 연산 | Signal | - V(S) 연산(Signal()) 수행 - 0보다 크면 프로세스를 계속 진행, V명령은 변수의 값을 하나 증가 - 변수가 음이면 대기, 양수이면 실행을 의미 - S = S+1 - S > 0 : 프로세스 계속 진행 - S < 0 : 대기열의 프로세스 하나를 준비상태로 프로세스 계속 - S=1, 자원 해제 상태 |
- 세마포어 s는 정수값을 가지며 p와 v에 의해서만 접근되는 정수형 공용변수
나. 세마포어의 유형
유형 | 목적 | 내용 |
이진 세마포어 Binary Semaphore |
- Semaphore 변수가 0과 1 두 종류의 값만 갖는 경우 - 상호배제, 프로세스 동기화 |
세마포어 변수 : 0 or 1 |
계수형 세마포어 Count Semaphore |
- Semaphore 변수가 0 이상의 모든 정수 값을 가질 수 있는 경우 - 초기에 동시 진행 가능한 프로세스 개수를 정의 가능 |
0,1,2, … |
III. 세마포어를 이용한 리소스 공유 방법
가. 리소스 공유 메커니즘

- N개의 Task와 M개의 Resource를 공유할 때, 세마포어(계수형) 초기값을 N개로 설정
나. 리소스 공유 절차
![]() |
- Task가 세마포어를 획득하여도 Mutex를 획득해야 리소스 접근 가능
IV. 세마포어를 이용한 태스크간 동기화 방법
![]() |
1. TaskA가 동기화 전처리를 시작 2. TaskB는 동기화 세마포어가 POST 시그널 줄 때까지 WAIT 3. TaskA가 동기화 전처리를 완료 4. TaskA, Taskb 동기화 완료 |
- 태스크간 동기화(Synchronization) : 여러 개의 Task가 공유 데이터에 접근하는 경우 동일한 값을 얻을 수 있도록 맞추는 작업
- 계수형 세마포어인 경우, TaskA의 전처리 결과에 따라 계수가 증가하고 Task는 누적된 계수만큼 처리 수행
V. 세마포어의 사용시기 및 비교
가. 세마포어의 사용시기
구분 | 설명 | 비고 |
메시지 전송 | 프로세스 간 메시지를 전송하거나, 혹은 공유메모리를 통해서 특정 data를 공유하게 될 경우 발생하는 문제는, 공유된 자원에 여러 개의 프로세스가 동시에 접근 하면서 발생한다. 단지, 한번에 하나의 프로세스만 접근 가능하도록 만들어 줘야 하고, 이때 Semaphore를 쓴다. | Data 공유 |
사용 특화 | Thread 에서는 뮤텍스, 프로세스에서는 세마포어 | 뮤텍스, 세마포어 |
교착상태 방지 | 교착상태를 방지하기 위해, A 프로세스가 접근했을 때 다른 프로세스의 접근을 막고, 끝난 후 접근을 풀어준다. 이때 세마포어로 접근을 막고 접근을 허용할 수 있다 | Dead Lock 방지 |
나. 세마포어와 뮤텍스 비교
구분 | 세마포어(Semaphore) | 뮤텍스(Mutex) |
원리 | 화장실이 n칸(접근할 수 있는 최대 허용치 만큼 동시에 사용자 접근을 할 수 있게 함), 세마포어 카운트가 0이면 대기 | 화장실에 들어가기 위한 열쇠를 한 사람이 가지고 있다면, 그 사람만이 들어갈 수 있다 대기열(큐)에 기다리게 됨. → 세마포어의 일종. |
목적 | Dead Lock을 피하기 위한 기술 중 하나 | Critical Section을 가진 Thread 들이 running time이 서로 겹치지 않게, 각각 단독으로 실행하게 하는 기술 |
특징 | 공유 리소스에 접근할 수 있는 최대 허용치 만큼 동시에 사용자 접근을 할 수 있게 하는 기술 동기화 대상이 여러 개일 경우에 사용 |
한 번에 하나의 Thread만이 실행되도록 하는 재 입장할 수 있는 코드 섹션 직렬화된 접근이 가능하게 할 때 사용 뮤텍스 객체는 제어되는 섹션에 하나의 Thread만을 허용하기 때문에 해당 섹션에 접근하려는 다른 Thread들을 강제적으로 막음으로써 첫 번째 Thread가 해당 세션을 빠져 나올 때까지 기다린다. |
다. Semaphore와 Event Count/Sequence 비교
구분 | 특징 및 설명 |
Semaphore | - 긴급 영역과 상호배제 원리를 지키기 위한 방법 - 무기한 연기의 문제점 - Semaphore 큐에서 대기중의 프로세스들의 Wake up 순서는 결정 되지 않음 |
Event Count/Sequence | - Busy Waiting 문제 해결 - FIFO 스케쥴링에 의해서 Block 된 순서대로 Wake up 됨 - 무기한 연기의 문제점 해결 |
“끝”
[참고] 강멘토님 교재

라. 작동 원리 설명
- 최초 S 값은 1
- P(S)를 먼저 수행하는 프로세스가 S를 0으로 해놓고, Critical Section 진입
- 나중에 도착하는 프로세스는 P에서 더 이상 진행하지 못하고 대기함
- 먼저 들어갔던 프로세스가 V(S)를 하면 P(S)에서 대기하고 있던 프로세스가 그때 Critical Section에 들어갈 수 있음
- S의 초기값을 “N”으로 하면 최대 N개의 프로세스가 P(S)를 통과하게 됨 이것을 계수(Counting) Semaphore 라고 하며, 자원할당에 사용
'정보관리기술사 > CA_OS' 카테고리의 다른 글
교착상태(Deadlock) (0) | 2023.11.25 |
---|---|
우선순위 역전 (0) | 2023.11.24 |
Mutual Exclusion(상호배제)/뮤텍스 (1) | 2023.11.22 |
RAID (1) | 2023.11.21 |
HA(High Availability) (1) | 2023.11.20 |