- 동기화
- 공동의 목적을 위해 동시에 수행되는 프로세스
- 프로세스들의 수행 시기를 맞추는 것
- 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기
- 상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기
- 실행 순서 제어를 위한 동기화 : reader writer problem
- writer : Book.txt 파일에 값을 저장하는 프로세스
- Reader : Book.txt 파일에 저장된 값을 읽어 들이는 프로세스
- reader와 writer프로세스는 무작정 아무렇게나 실행되어선 안된다 실행의 순서가 있기 때문
- Reader프로세스는 Book.txt 안에 값이 존재한다는 특정 조건이 만족되어야만 실행 가능
- 상호 배제를 위한 동기화 : Bank account problem
- 공유가 불가능한 자원의 동시 사용을 피하기 위한 동기화
- 한 번에 하나의 프로세스만 접근해야 하는 자원에 동시 접근을 피하기 위한 동기화
- 현재 계좌에 잔액 : 10만원
- 프로세스 A는 현재 잔액에 2만원을 추가하는 프로세스
- 프로세스 B는 현재 잔액에 5만원을 추가하는 프로세스
- A가 끝나기 전에 B가 접근해버리면 잔액이 제대로 계산이 안될 수도 있음
- 공유 자원 : 여러 프로세스 혹은 스레드가 공유하는 자원
- 전역 변수, 파일, 입출력장치, 보조기억장치, …
- 임계 구역 : 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역
- 앞선 예시의 총합 변수, 잔액 변수 …
- 임계 구역에 동시에 접근하면 자원의 일관성이 깨질 수 있다 이를 레이스 컨디션 이라고 한다.
- 운영체제가 임계 구역 문제를 해결하는 세 가지 원칙
- 상호배제 - 한 프로세스가 임게 구역에 진입했다면 다른 프로세스는 들어올 수 없다.
- 진행 - 임계구역에 어떤 프로세스도 진입하지 않았다면 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
- 유한 대기 - 한 프로세스가 임계구역에 진입하고 싶다면 언젠가는 임계 구역에 들어올 수 있어야 한다. ( 임계구역에 들어오기 위해 무한정 대기해서는 안 된다.