process의 실행 순서와 자원의 일관성을 보장하기 위해 process의 수행 시기를 맞추는 것
실행 순서 제어를 위한 동기화와 상호 배제를 위한 동기화 2종류가 있다.
상호 배제를 위한 동기화에 대해서는 생산자와 소비자 문제가 있다.
생산자와 소비자가 총합 이라는 데이터를 공유하고 있는 경우, 생산자는 총합에 1을 증가시키고 소비자는 1을 감소 시킨다.
여기서 만약 생산자를 100번, 소비자를 100번 동시에 실행시키는 경우, 실행 결과가 초기 값이 아닌 다른 값이 나오거나 오류가 날 수 있는데, 이는 생산자 process와 소비자 process가 제대로 동기화되지 않아서 발생하는 문제이다.
생산자와 소비자는 동시에 접근하면 안되는 자원에 동시에 접근했기 때문에 발생한 문제라고 볼 수 있다.
이전 경우에서 생산자와 소비자 모두 총합 이라는 공동의 자원을 두고 작업을 했다.
이러한 자원을 Shared resource라고 부르며, 이는 전역 변수가 될 수도 있고 파일이 될 수도 있으며 IO장치, 보조기억장치가 될 수도 있다.
또한 동시에 실행하면 문제가 생기는 자원에 접근하는 코드 영역을 Critical Section이라고 부른다.
두 개 이상의 process가 critical section에 진입하려고 할 때는 둘 중 하나는 대기해야하고 먼저 진입한 process가 작업을 마무리해야 그 다음 process가 진입해서 작업을 할 수 있다.
만약 잘못된 실행으로 인해 여러 process가 동시 다발적으로 critical section에 접근하여 코드를 실행해 문제를 발생시키는 경우를 race condition이라고 부른다.
이 경우에는 데이터의 일관성이 깨지는 문제가 발생하고 이때 상호 배제를 위한 동기화 작업은 2개 이상의 process가 critical section에 접근하지 못하도록 관리하는 것을 의미한다.
OS는 이러한 race condition이 일어나지 않도록 아래 3가지 원칙 하에 문제를 다룬다.