⚡ 운영체제 - 프로세스 동기화와 교착상태
⚡ 운영체제 - 프로세스 동기화와 교착상태
🔹 프로세스 동기화란?
- 여러 프로세스나 스레드가 공유 자원을 동시에 사용할 때, 데이터의 일관성과 안정성을 유지하기 위해 필요한 기술이다.
- 예를 들어, 두 개의 스레드가 동시에 같은 파일에 접근해서 수정하려 하면, 예기치 않은 결과가 발생할 수 있다.
- 이를 막기 위해 동기화 메커니즘이 사용된다.
🔹 주요 동기화 메커니즘
▫️ 세마포어(Semaphore
)
- 정수 값을 기반으로 한 동기화 도구
- 두 가지 기본 연산:
wait(P)
와signal(V)
- 카운터를 사용해 여러 프로세스의 접근을 제어할 수 있다
- 바쁜 대기(
Spinlock
) 또는 블로킹 방식 사용 가능
▫️ 뮤텍스(Mutex
)
Mutual Exclusion
의 줄임말- 공유 자원에 하나의 스레드만 접근하도록 보장
- 락을 획득한 스레드만 자원을 사용할 수 있으며, 나머지는 대기
- 보통 쓰레드 단위의 동기화에 적합
▫️ 모니터(Monitor
)
- 고급 동기화 도구로, 언어나 시스템 수준에서 제공
- 뮤텍스와 조건 변수(
Condition Variable
)를 함께 관리 - 자바에서는
synchronized
키워드로 구현
🔹 세마포어 vs 뮤텍스
항목 | 세마포어 | 뮤텍스 |
---|---|---|
구조 | 정수 기반 | 객체 기반 |
접근 제어 | 여러 개 가능 | 하나만 가능 |
용도 | 프로세스 간 또는 스레드 간 | 주로 스레드 간 |
잠금 해제 | 다른 프로세스/스레드 가능 | 락을 획득한 스레드만 가능 |
🔹 교착 상태(Deadlock
)란?
- 여러 프로세스가 자원을 획득한 상태에서, 서로 상대방의 자원을 기다리며 무한 대기하는 상황을 말한다.
- 프로그램이 더 이상 진행되지 않고 멈춘다.
▫️ 교착 상태 발생 조건
- 다음 4가지 조건이 동시에 만족될 때 교착상태가 발생할 수 있다.
▫️ 상호 배제 (Mutual Exclusion
)
- 자원은 한 번에 하나의 프로세스만 사용할 수 있다.
▫️ 점유와 대기 (Hold and Wait
)
- 자원을 점유한 프로세스가 다른 자원을 기다린다.
▫️ 비선점 (No Preemption
)
- 할당된 자원을 강제로 뺏을 수 없다.
▫️ 환형 대기 (Circular Wait
)
- 프로세스들이 자원을 순환적으로 기다린다. (
A → B → C → A
)
🔹 교착 상태 해결 전략
▫️ 예방 (Prevention
)
- 4가지 조건 중 하나라도 미리 제거해 교착 상태가 발생하지 않도록 설계
- 자원을 한번에 모두 할당하거나, 순서를 정해 요청하도록 할 수 있다.
▫️ 회피 (Avoidance
)
- 실행 전 자원 상태를 분석해 교착 상태가 발생하지 않는 경로만 선택
- 대표 알고리즘에는
Banker's Algorithm
이 있다.
▫️ 탐지 (Detection
)
- 교착 상태가 발생했는지 감시하고, 발생 시 해결
- 자원 할당 그래프를 사용해 주기적으로 탐지
▫️ 복구 (Recovery
)
- 교착상태 발생 후 자원 회수 또는 프로세스 종료 등으로 회복
- 우선순위 낮은 프로세스 강제 종료하는 등의 처리를 할 수 있다.
🔹 마무리
- 프로세스 동기화는 병렬 환경에서의 안정성과 성능을 위한 핵심 기술이며, 교착 상태는 그 과정에서 반드시 고려해야 할 문제다.
- 동기화 메커니즘을 정확히 이해하고, 교착 상태의 조건과 해결 방법을 숙지하는 것이 운영체제 면접에서 매우 중요하다.
This post is licensed under CC BY 4.0 by the author.