Synchronization
다중 프로그래밍 환경에서 여러 프로세스나 스레드가 제한된 자원을 공유하며 실행될 때, 데이터의 일관성을 유지하고 실행 순서를 제어하는 메커니즘이다.
동기화의 핵심 목적
섹션 제목: “동기화의 핵심 목적”동기화는 크게 두 가지 관점에서 실행 흐름을 제어한다.
- 실행 순서 제어: 프로세스들이 올바른 순서대로 실행되도록 조정(예: Reader 프로세스는 Writer 프로세스가 데이터를 다 쓴 후 작업)
- 상호 배제(Mutual Exclusion): 동시에 접근해서는 안 되는 공유 자원에 대해 한 번에 하나의 프로세스만 접근하도록 통제
공유 자원과 임계 구역 (Critical Section)
섹션 제목: “공유 자원과 임계 구역 (Critical Section)”- 공유 자원(Shared Resource): 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등의 자원
- 임계 구역(Critical Section): 공유 자원에 접근하는 코드 영역으로, 두 개 이상의 프로세스가 동시에 실행하면 안 되는 구역
- 경쟁 상태(Race Condition): 여러 프로세스가 동기화 없이 임계 구역에 동시 접근하여, 자원의 최종 값이 실행 순서(타이밍)에 따라 달라지는 문제 상황
임계 구역 문제 해결의 3가지 조건
섹션 제목: “임계 구역 문제 해결의 3가지 조건”운영체제가 임계 구역 문제를 해결하고 데이터 일관성을 보장하기 위해서는 다음 세 가지 조건이 반드시 충족되어야 한다.
- 상호 배제(Mutual Exclusion): 한 프로세스가 임계 구역에서 실행 중이면, 다른 어떤 프로세스도 해당 구역에 진입할 수 없음
- 진행(Progress): 임계 구역이 비어있고 진입하려는 프로세스가 있다면, 잔류 중인 프로세스가 없는 한 즉시 진입 허용(데드락 방지)
- 유한 대기(Bounded Waiting): 프로세스가 임계 구역 진입 요청을 한 후부터 승인될 때까지 다른 프로세스들이 진입 횟수 제한(기아 현상 방지)
flowchart LR Start([프로세스 시작]) --> EntrySection[진입 구역: 잠금 시도] EntrySection --> CriticalSection[임계 구역: 공유 자원 사용] CriticalSection --> ExitSection[퇴출 구역: 잠금 해제] ExitSection --> RemainderSection[나머지 구역] RemainderSection --> Start동기화 기법
섹션 제목: “동기화 기법”운영체제에서는 프로세스 동기화를 위해 다양한 도구를 제공한다.
- 뮤텍스 락
- 설명
- 뮤텍스(Mutex)는 Mutual Exclusion의 약자로, 자원에 대한 상호 배제를 보장하는 동기화 기법
- 뮤텍스 락은 하나의 스레드 또는 프로세스가 공유 자원에 접근하는 동안 다른 스레드나 프로세스가 그 자원에 접근하지 못하도록 차단
- 오직 하나의 스레드만 자원을 사용하도록 보장하여 데이터의 일관성과 무결성을 유지
- 동작 방법
- 잠금(Lock): 스레드가 자원에 접근하려고 하면, 뮤텍스 락 획득(잠긴 경우 대기)
- 자원 사용: 뮤텍스를 성공적으로 잠근 스레드는 자원에 접근하여 작업을 수행
- 잠금 해제(Unlock): 자원의 사용이 끝나면, 뮤텍스 락을 해제하고, 대기 중인 다른 스레드 중 하나가 자원에 접근할 수 있도록 함
- 설명
- 세마포(Semaphore)
- 설명
- 세마포는 자원의 접근을 계수로 제어하는 동기화 기법
- 세마포는 일반적으로 정수 값을 가지고 있으며, 이 값을 통해 여러 스레드나 프로세스가 제한된 수의 자원에 접근할 수 있도록 관리
- 세마포는 뮤텍스와 달리 다수의 자원에 대한 접근을 관리할 수 있으며, 카운팅 세마포와 바이너리 세마포로 구분
- 동작 방법
- P(Wait): 스레드가 자원에 접근하려고 할 때, 세마포 값을 확인하여 0보다 크면 값을 1 감소시키고 자원에 접근(0인 경우 대기)
- V(Signal): 스레드가 자원의 사용을 마치면 세마포 값을 1 증가 시킴
- 설명
뮤텍스와 세마포의 차이점
섹션 제목: “뮤텍스와 세마포의 차이점”두 기법은 비슷해 보이지만 소유권과 관리 범위에서 결정적인 차이가 있다.
| 특징 | 뮤텍스(Mutex) | 세마포(Semaphore) |
|---|---|---|
| 소유권 | 락을 획득한 스레드만 락 해제 가능 | 락 해제는 특정 소유권 없음 |
| 관리 범위 | 단일 자원 관리 | 다수의 자원 관리 가능 |
| 사용 목적 | 상호 배제가 필요한 경우 | 다수의 자원에 대한 접근 제어 |
| 동작 방식 | 하나의 스레드만 자원에 접근 허용 | 다수의 스레드가 제한된 자원 수만큼 접근 가능 |
| 대기 상태 | 자원이 잠겨 있을 때 스레드 대기 | 자원이 부족할 때 스레드 대기 |