[ 이화여대 운영체제 - 반효경 교수님 강의 ]
CH6. Process Synchronization
데이터의 접근
- 누가 먼저 읽었는지에 따라 문제가 생길 수 있음 -> Synchronization
Race Condition
여러 주체가 하나의 데이터에 동시에 접근하려고 할 때 Race Condition 생길 수 있음
- 멀티프로세에서 메모리를 공유한다면 race condition 문제 발생할 수 있음
OS에서 Race Condition
1. 커널 모드로 수행 중 인터럽트가 발생하는 경우
- 의도된 동작은 count++과 count--가 모두 반영되어 count가 초기값을 유지하는 것
- 만약 Load를 한 후에 인터럽트가 발생하는 경우 인터럽트의 결과는 반영되지 않고 count++만 반영된다.
- 커널 모드의 수행이 끝나기 전에는 인터럽트를 받지 않도록 하는 방법(disable/enable)으로 문제를 해결할 수 있다.
2. 프로세스가 시스템 콜을 호출해서 커널 모드로 수행 중인데 Context switch가 발생하는 경우
- 해결책 : 커널 모드를 수행 중일 땐 CPU가 preempt 되지 않도록 하고, 커널 모드에서 유저 모드로 돌아갈 때 preempt
3. 멀티 프로세서에서 공유 메모리 내의 커널 데이터에 접근하는 경우
어떤 CPU가 마지막으로 Count를 저장했는가 -> race condition
싱글 프로세서인 경우 1번에서와 같이 인터럽트 disable/enable 방법으로는 해결할 수 있지만 멀티 프로세서인 경우 인터럽트 제어로는 해결할 수 없다.
방법1. 한 번에 한 CPU만 커널에 들어갈 수 있도록 하는 방법
- 비효율적이다.
- 만약 두 프로세서가 서로 다른 데이터에 접근하여 Race condition의 가능성이 없음에도 불구하고 한 번에 한 CPU만 커널에 들어갈 수 있기 때문이다.
방법2. 커널 내부에 있는 각 공유 데이터에 접근할 때마다 그 데이터에 대해서만 lock/unlock을 하는 방식으로 해결할 수 있다.