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