동기화(Synchronization)
- 프로세스/스레드들이 실행되는 시점을 조절하여 서로가 알고 있는 데이터를 일치시킴으로써 공유 자원의 일관성을 유지하는 것
- 실행 순서 제어를 위한 동기화 = 프로세스/스레드를 올바른 순서대로 실행하게 하는 것
- 상호 배제를 위한 동기화 = 동시에 접근하면 안되는 자원에 접근할 때 한 개의 프로세스/스레드만 접근하도록 하는 것
임계 구역(Critical Section)
- 동시에 실행하면 문제가 발생하는 공유 자원에 접근하는 코드 영역
- 임계 구역에 진입한 프로세스/스레드가 있다면 다른 프로세스/스레드는 임계 구역 밖에서 대기해야 함
- 레이스 컨디션(Race Condition) = 잘못된 실행으로 인하여 여러 프로세스/스레드가 동시에 임계 구역에 접근하는 상황
=> 데이터의 일관성이 깨지는 문제 발생
※ 공유 자원으로 전역 변수, 파일, 입출력장치, 보조기억장치가 될 수 있음
동기화의 3가지 조건
- 상호 배제(Mutual Exclusion) = 한 프로세스/스레드가 임계 구역에서 작업 중이면 다른 프로세스/스레드는 임계 구역에 들어갈 수 없도록 제어하는 것
- 진행(Progress) = 임계 구역에 어떠한 프로세스/스레드도 진입하고 있지 않으면 진입하고자 하는 프로세스/스레드는 진입이 가능해야 함
- 유한 대기(Bounded Waiting) = 한 프로세스/스레드가 임계 구역에 진입하고 싶다면 그 프로세스/스레드는 언젠가는 임계 구역에 진입할 수 있어야 함
스레드 안전(Thread Safety)
- 여러 스레드에서 동시에 실행되어도 문제가 발생하지 않는 코드의 속성
- 동기화는 스레드 안전을 위한 하나의 수단
뮤텍스와 세마포어
- 어떤 프로세스/스레드가 이미 사용중인 임계 구역에 대한 접근을 차단함으로써 공유 자원에 대한 접근을 제어하는 동기화 도구
뮤텍스(Mutex)
- 동기화 대상(공유 자원)이 오직 한 개일 때만 사용 가능 (Locking 메커니즘)
- 좌물쇠가 있는 화장실이 한 개만 존재하는 상황
- 전역 변수 lock = 자물쇠 역할
- acquire 함수 = 임계 구역을 잠그는 역할
- release 함수 = 임계 구역 잠금을 해제하는 역할
- 바쁜 대기(Busy Waiting) = 임계 구역이 잠겨 있는지 계속 반복적으로 확인하는 방식
- 락을 건 프로세스/스레드 만이 해당 락을 해제할 수 있음
세마포어(Semaphore)
- 뮤텍스와는 달리 동기화 대상(공유 자원)이 1개 이상일 때 사용 가능 (Signaling 메커니즘)
- 뮤텍스와는 달리 세마포어를 설정한 프로세스/스레드가 아닌 다른 프로세스/스레드도 세마포어를 해제할 수 있음
- 세마포어는 뮤텍스가 될 수 있음 (동기화 대상이 1개인 경우) => 반대는 불가능
교착 상태(Deadlock)
- 둘 이상의 프로세스/스레드가 다른 프로세스/스레드가 점유하고 있는 자원을 무한적으로 기다리는 현상
데드락의 발생 조건 4가지 (모든 조건을 만족해야 발생)
- 상호 배제(Mutual Exclusion) = 한 프로세스/스레드가 사용하고 있는 자원을 다른 프로세스/스레드가 사용할 수 없어야 함
- 점유 대기(Hold and Wait) = 최소 하나의 자원을 점유하고 있는 상태에서 다른 프로세스/스레드의 자원을 할당받도록 기다리는 프로세스/스레드가 존재해야 함
- 비선점(Nonpreemptive) = 어떤 프로세스/스레드도 다른 프로세스/스레드의 자원을 강제로 빼앗을 수 없음
- 순환 대기(Circular Wait) = 프로세스/스레드들은 순환 형태로 자원을 대기해야 함
데드락 해결 방법
- 예방(Prevention) = 발생 조건 4개 중 하나를 제거 (자원 낭비가 심함)
=> 한 번에 여러 프로세스가 공유 자원을 사용할 수 있게(상호 배제), 프로세스/스레드 실행전 모든 자원 할당(점유 대기), 선점 허용(비선점), 자원에 고유번호 할당 후 순서대로 자원 요구(순환 대기)
- 회피(Avoidance) = 교착 상태가 발생하지 않도록 안전 상태 유지
- 탐지(Detection) = 교착 상태 발생 여부를 주기적으로 검사 (오버헤드 발생)
- 회복(Recovery) = 교착 상태를 일으킨 프로세스를 종료하거나 할당된 자원을 해제시킴
댓글