OS Synchronization

경쟁 조건과 임계 영역의 세 조건 검증

동기화 문제는 공유 데이터에 대한 실행 순서가 결과를 바꾸는 경쟁 조건에서 시작하고, 임계 영역 해법은 상호 배제·진행·한정 대기를 만족해야 한다.

01

공유 상태 발견

여러 스레드가 같은 변수, 파일, 버퍼, 장치 상태를 읽고 쓰는 지점을 찾는다.

shared data
02

비원자 연산 분해

count++ 같은 한 줄도 load, add, store로 나뉘어 중간에 끼어들 수 있다.

interleaving
03

임계 영역 보호

공유 상태를 바꾸는 최소 구간을 mutex, semaphore, monitor로 보호한다.

critical section
04

세 조건 검증

한 번에 하나만 들어가고, 들어갈 수 있으면 누군가 진행하며, 무한히 밀리지 않아야 한다.

3 requirements
상호 배제
동시에 두 실행 흐름이 임계 영역에 들어가지 못한다. 정확성의 기본 조건이지만 이것만으로 충분하지 않다.
exclusive
진행
임계 영역이 비어 있으면 진입 결정이 무한히 미뤄지지 않는다. 관련 없는 스레드가 진입 결정을 막으면 안 된다.
progress
한정 대기
요청한 스레드가 유한한 차례 안에 들어갈 수 있어야 한다. 공정성 없는 락은 starvation을 만들 수 있다.
bounded waiting

동기화 설계 체크

보호 범위 공유 상태를 읽는 곳과 쓰는 곳이 같은 규칙으로 보호된다.
교착 회피 락 여러 개를 잡을 때 전역 순서를 정한다.
성능 임계 영역이 너무 넓어 병렬성을 죽이지 않는지 본다.

경쟁 조건

Thread A: load count -> add -> store
Thread B: load count -> add -> store
interleaving can lose one update