Process Synchronization 1

zioo·2022년 9월 8일
1
post-custom-banner

[ 이화여대 운영체제 - 반효경 교수님 강의 ]

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을 하는 방식으로 해결할 수 있다. 

post-custom-banner

0개의 댓글