-
프로세스 혹은 스레드의 동기화 목적은 공유 데이터에 대한 경쟁 상태를 제어하기 위함이다.
-
경쟁 상태의 문제점을 실 서비스에서 생각해보면 입금과 출금이라는 두 작업이 동시에 일어나지 않고 입금을 처리하는 로직의 스레드 실행 도중 출금을 처리하는 로직의 스레드로 문맥 교환이 일어나서 처리가 제대로 되지 않아 고객의 자산에 손해를 끼칠 수도 있다.
-
특정 코드 영역을 임계 영역으로 설정하고 해당 영역에 한 프로세스 혹은 스레드가 접근한 상태라면 다른 프로세스 혹은 스레드는 접근하지 않도록 하는 방법으로 데이터를 동기화하는 방법이다.
-
임계 영역을 설정하여 경쟁 상태를 해결하기 위해서는 필요한 요소 3가지가 있다.
-
상호 배제 (Mutual Exclusion) - 한 프로세스가 임계 영역에서 실행 중이라면 다른 프로세스는 임계 영역을 실행할 수 없다.
-
교착 상태 방지 - 여러 프로세스가 교착 상태에 빠져 무한대로 임계 영역에 진입하려고 대기하는 상황을 방지해야 한다.
-
기아 방지 - 몇몇 프로세스가 우선 순위에서 밀려 임계 영역에 계속 접근하지 못하는 상황을 방지해야 한다.
- 비선점형 커널은 경쟁 상태가 발생하지 않는다. 선점형 커널은 선점이 가능하기 때문에 프로세스 혹은 스레드 간 경쟁 상태가 발생할 수 있다. 그렇지만 응답성이 더 좋기 때문에 선점형 커널을 사용하고 경쟁 상태를 해결하는 방법이 채택되었다.