본문 바로가기
CS/운영체제

동기화

by Mecodata 2023. 1. 23.

동기화(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) = 교착 상태를 일으킨 프로세스를 종료하거나 할당된 자원을 해제시킴

'CS > 운영체제' 카테고리의 다른 글

CPU 스케줄링  (0) 2023.01.16
스레드  (0) 2023.01.04
프로세스  (0) 2023.01.02
운영체제의 정의  (1) 2023.01.02

댓글