728x90
반응형
공유 자원, 동기화, 스레드 안전, 교착 상태까지 완벽 정리
운영체제나 멀티스레드 프로그래밍에서 자원 공유와 동기화 문제는 매우 중요한 이슈입니다. 이 글에서는 공유 자원(Shared Resource), 임계 구역(Critical Section), 레이스 컨디션(Race Condition), 동기화 기법, 스레드 안전(Thread Safety), 그리고 교착 상태(Deadlock)까지 핵심 개념을 총정리합니다.
✅ 공유 자원이란?
공유 자원(Shared Resource)이란 여러 프로세스나 스레드가 동시에 접근할 수 있는 자원을 의미합니다.
- 메모리
- 파일
- 전역 변수
- 입출력 장치 등
동시에 접근하면 충돌이 발생할 수 있어 동기화가 필요합니다.
🚨 임계 구역(Critical Section)과 레이스 컨디션
임계 구역
- 공유 자원에 접근하는 코드 중, 동시에 실행되면 문제가 발생하는 부분
레이스 컨디션 (Race Condition)
- 두 개 이상의 프로세스/스레드가 임계 구역에 동시에 진입하여 자원의 일관성이 깨지는 문제
동기화를 통해 임계 구역 접근을 제어해야 합니다.
🔐 동기화(Synchronization)란?
동기화는 아래 두 가지 조건을 만족해야 합니다:
- 실행 순서 제어: 코드가 정확한 순서로 실행되도록 보장
- 상호 배제(Mutual Exclusion): 하나의 프로세스/스레드만 자원에 접근
🔧 동기화 기법
1. 뮤텍스 락 (Mutex Lock)
- 상호 배제를 보장하는 대표적인 동기화 도구
lock.acquire()
로 락 획득,lock.release()
로 해제
lock.acquire()
# 임계 구역
lock.release()
2. 세마포어 (Semaphore)
- 여러 개의 공유 자원을 동시 접근 제어 가능
- 카운팅 세마포: S 값 자유
- 이진 세마포: S = 0 또는 1 (뮤텍스와 유사)
wait() {
S--;
if (S < 0) sleep();
}
signal() {
S++;
if (S <= 0) wakeup();
}
3. 조건 변수 (Condition Variable)
- 실행 순서 제어 목적의 동기화 도구
wait()
와signal()
로 상태 기반 실행 제어
4. 모니터 (Monitor)
- 공유 자원 + 동기화된 인터페이스로 구성
- 큐(Queue) 방식으로 내부 프로세스 순차 실행
- 실행 순서 + 상호 배제 동기화 모두 가능
🧵 스레드 안전(Thread Safety)
- 멀티스레드 환경에서 동시 접근 시에도 문제가 없는 함수나 변수 상태
- 레이스 컨디션이 발생하지 않음
예시 (Java)
synchronized
키워드로 스레드 안전 보장=> vector 의 add 메서드ArrayList의 add메서드
는 스레드 안전하지 않음 => synchronized 메서드에 포함되지않음
💣 교착 상태(Deadlock)
정의
- 자원을 서로 점유한 상태에서 상대 자원이 해제되기만을 기다려 프로세스가 멈추는 상태
예시
- 프로세스 A는 자원 X 점유 중 → 자원 Y 기다림
- 프로세스 B는 자원 Y 점유 중 → 자원 X 기다림
4가지 발생 조건
조건 | 설명 |
---|---|
상호 배제 | 자원을 하나만 점유 가능 |
점유와 대기 | 점유한 상태로 다른 자원 대기 |
비선점 | 자원을 강제로 뺏을 수 없음 |
원형 대기 | 자원을 서로 순환하며 대기 |
🧯 교착 상태 해결 방법
1. 교착 상태 예방
- 발생 조건 중 하나 이상을 충족하지 않게 설계
- 자원을 순서대로 할당해 원형 대기 방지
2. 교착 상태 회피
- 자원 상태를 미리 파악하고 판단
- 대표 알고리즘: 은행가 알고리즘 (Banker's Algorithm)
3. 교착 상태 검출 후 회복
- 발생을 허용, 이후 상태를 검사
- 교착 상태 발생 시:
- 자원 선점
- 프로세스 강제 종료
📌 핵심 정리
개념 | 설명 |
---|---|
공유 자원 | 여러 프로세스/스레드가 접근하는 자원 |
임계 구역 | 동시에 접근하면 충돌 발생하는 코드 영역 |
레이스 컨디션 | 임계 구역 충돌로 데이터 손상 가능성 |
동기화 | 실행 순서 제어 + 상호 배제 |
스레드 안전 | 여러 스레드가 동시에 접근해도 안전 |
교착 상태 | 자원을 점유한 채 서로 대기 중 정지된 상태 |
728x90
반응형
'CS전공지식' 카테고리의 다른 글
[CS 전공지식] 프로세스와 스레드 (0) | 2025.03.26 |
---|---|
[CS전공지식] 운영체제 시스템 콜과 이중모드 (0) | 2025.03.26 |
[CS전공지식] 운영체제 (0) | 2025.03.26 |
댓글