프로세스 동기화
1. 실행 순서 제어: 프로세스를 올바른 순서로 실행하기
2. 상호 배제: 동시에 접근해서는 안되는 자원에 하나만 접근하기
레이스 컨디션(race condition)
- 임계 구역을 동시에 설정하여 발생하는 문제. (상호 배제)
생산자와 소비자 문제
동기화가 이루어지지 않았을 경우 발생할 수 있는 문제를 보여주는 고전적 문제
- producer: 생상을 하는 프로세스(혹은 스레드)
- consumer: 소비를 하는 프로세스(혹은 스레드)
뮤텍스와 세마포어
뮤텍스 락 (Mutex Lock)
- 자물쇠 역할: 프로세스들이 공유하는 전역변수 lock
- 자물쇠 잠그기: acquire 함수
- 자물쇠 열기: release 함수
(잠겨있는지 계속 확인하는 방법: busy waiting)
세마포(semaphore)
- 뮤텍스 락은 기본적으로 공유 자원이 하나일 경우 상정
- 변수 S: 임계 구역에 진입할 수 있는 프로세스의 개수(사용 가능한 공유 자원의 개수)
- wait 함수: 임계구역에 들어가도 좋은지, 기다려야 할지를 알려주는 함수 (is S > 0?)
- signal 함수: 임계구역 앞에서 기다리는 프로세스에게 '이제 가도 좋다'고 신호를 주는 함수 ( S-=1)
동기화와 교착상태 (Deadlock)
프로세스는 실행을 위해 자원이 필요하다. 그런데 서로의 자원을 무한히 기다리기만 한다면?
일어나지 않을 사건을 기다리며 무한 루프를 도는 상태.
교착 상태 발생 조건
1. 상호 배제: 동시에 자원 사용이 불가능한 경우
2. 점유와 대기: 자원을 할당받은 채 다른 자원의 할당을 기다리는경우
3. 비선점: 강제로 자원을 빼앗을 수 없는 경우
4. 원형 대기: 자원을 원형으로 대기할 경우
교착 상태 예방
- 발생 조건 하나 없애기.
교착 상태 회피
- 교착 상태가 발생하는 이유를 자원의 무분별한 할당으로 간주.
- P2 P1 P3 순으로 실행하면 교착 상태 회피 가능

* 교착 상태가 발생할 수 있는 지 없는 지 판단하는 알고리즘 == 은행원 알고리