프로세스가 올바르게 실행되기 위해서는 동기화가 필수이다.
프로세스 동기화는 프로세스 간의 실행 시기를 맞추는 것을 의미한다.
동기화는 크게 두 가지를 말한다.
실행 순서 제어 : 프로세스를 올바른 순서대로 실행
예를 들어 하나의 파일에 입력을 수행하는 프로세스, 출력을 수행하는 프로세스가 있다면, 먼저 값을 입력해야 출력 또한 가능할 것이다. 그러므로 입력 -> 출력 순으로 올바르게 실행하는 것이 첫번째 프로세스 동기화이다.
상호 배제 : 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근 가능
상호 배제(mutual exclusion)는 공유하면 안되는 자원의 동시 사용을 피하기 위해 사용하는 알고리즘이다. 같은 자원에 두 개의 프로세스가 동시에 입출력을 수행하면 올바른 결과가 이루어지지 않는다. 이를 방지하기 위해 상호 배제를 사용한다.
공유 자원(shared resource)는 말 그대로 프로세스들의 공동의 자원이다. 공유 자원은 전역 변수가 될 수도 있고, 파일이 될 수도 있고, 입출력 장치가 될 수도 있다.
두 개 이상의 프로세스를 동시에 실행할 때 문제가 발생하는 자원이 꼭 있기마련인데, 이렇게 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역을 임계 구역(critical section)이라고 한다.
두 개 이상의 프로세스가 임계 구역에 들어가기를 원한다면 둘 중 하나는 대기해야 한다.
먼저 들어간 프로세스의 작업이 마무리되면 그 다음 프로세스가 임계 구역에 진입한다.
임계 구역은 여러 프로세스가 동시에 실행하면 안 된다, 그러나 잘못된 실행으로 인해 여러 프로세스가 동시에 임계 구역의 코드를 실행하면 문제가 발생한다. 이를 레이스 컨디션(race condition)이라고 한다.
상호 배제 동기화는 이와 같은 문제가 발생하지 않도록 여러 프로세스가 임계 구역에 동시에 들어가지 못하도록 관리한다.
이를 위해 운영체제는 아래와 같은 세 가지 원칙 하에 해결한다.