← Back to Blog

[운영체제] 피터슨 알고리즘 vs 바이너리 세마포어

computer science > operating system

2026-06-012 min read

#CS #OS #Thread #Synchronization

Peterson's Algorithm vs Binary Semaphore

Peterson's Algorithm은 임계 구역 문제를 소프트웨어만으로 해결하기 위한 대표적인 알고리즘이다. 반면 Binary Semaphore는 운영체제가 제공하는 동기화 기법으로, 실제 시스템에서 상호 배제를 구현할 때 사용된다.

둘 다 Mutual Exclusion(상호 배제)를 보장한다는 공통점이 있지만 구현 방식과 사용 목적에는 큰 차이가 존재한다.


Peterson's Algorithm

Peterson's Algorithm은 두 개의 프로세스가 공유 자원에 접근할 때 상호 배제를 보장하기 위해 설계된 알고리즘이다.

bool flag[2];
int turn;

두 개의 변수를 사용한다.

프로세스 i는 임계 구역 진입 전에 다음과 같은 코드를 수행한다.

flag[i] = true;
turn = j;

while(flag[j] && turn == j);

상대 프로세스도 진입을 원하고 있으며 상대방 차례라면 대기한다.

Peterson's Algorithm은 다음 세 가지 조건을 모두 만족한다.

하지만 다음과 같은 한계가 존재한다.

따라서 실제 운영체제보다는 임계 구역 문제의 개념을 설명하기 위한 교육용 알고리즘으로 사용된다.


Binary Semaphore

Binary Semaphore는 값이 0 또는 1만 가질 수 있는 세마포어이다.

Semaphore mutex = 1;

임계 구역 진입 시

wait(mutex);

임계 구역 종료 시

signal(mutex);

를 수행한다.

동시에 하나의 프로세스만 임계 구역에 진입할 수 있으므로 Mutex와 유사하게 동작한다.

Binary Semaphore는 일반적으로 운영체제가 제공하는 대기 큐를 사용한다.

wait()
↓
진입 불가
↓
Sleep 상태
↓
signal()
↓
Wake Up

따라서 대기 중인 프로세스는 CPU를 소비하지 않는다.


Busy Waiting의 차이

Peterson's Algorithm은 Busy Waiting 기반으로 동작한다.

while(flag[j] && turn == j);

임계 구역에 진입할 수 있을 때까지 계속 조건을 검사한다.

대기
↓
조건 검사
↓
대기
↓
조건 검사

CPU를 지속적으로 사용하게 된다.

반면 Binary Semaphore는 진입이 불가능한 경우 프로세스를 Block 상태로 전환한다.

대기 큐 진입
↓
Sleep
↓
Wake Up

따라서 불필요한 CPU 사용이 발생하지 않는다.


프로세스 수

Peterson's Algorithm

P1
P2

두 개의 프로세스만 고려한다.

Binary Semaphore

P1
P2
P3
...
Pn

여러 프로세스 및 스레드를 지원할 수 있다.


실제 사용 여부

Peterson's Algorithm은 임계 구역 문제를 설명하기 위한 이론적 해결책에 가깝다.

반면 Binary Semaphore는 운영체제에서 실제로 제공하는 동기화 기법이며, 다양한 시스템 자원에 대한 접근 제어에 사용된다.

예를 들어

등에 활용된다.


정리

항목Peterson's AlgorithmBinary Semaphore
구현 방식Software AlgorithmOS Synchronization Primitive
프로세스 수2개여러 개
Busy WaitingOX
Sleep / Wake UpXO
Mutual ExclusionOO
ProgressO구현에 따라 O
Bounded WaitingO구현에 따라 O
실제 사용거의 없음매우 많음

Peterson's Algorithm은 임계 구역 문제를 해결하는 대표적인 소프트웨어 알고리즘이며, Binary Semaphore는 이를 실제 시스템 환경에서 사용할 수 있도록 발전한 동기화 기법이라고 볼 수 있다.