동기화의 문제
- 공유 자원에 대해 여러 프로세스가 동시에 접근할때, 결과값에 영향을 줄 수 있는 상태
- 데이터의 최종 연산 결과는 그 데이터를 마지막에 다른 프로세스에 따라 달라짐
- Race Condition을 막기 위해 Concurrent Process는 동기화되어야함
- Kernel 수행 중 인터럽트 발생 시
- 커널 모드에서 데이터 조작하다가 인터럽트 발생해서 같은 데이터 조작하는 경우
- 해결책 : 커널모드에서 작업 수행하는 동안에는 인터럽트를 disable 시켜 CPU 제어권을 가져가지 못하도록 함
- 프로세스가 시스템 콜해서 커널
- A가 사용자모드에서 실행중이다가 시스템콜해서 커널모드로 변경됐는데 그때 인터럽트(Timer 인터럽트 등..) 발생
- 해결책 : 커널모드에서 수행중일 때에는 CPU를 선점하지 않음. 사용자모드로 돌아갈 때 선점함.
- 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할때
- 각각의 프로세서들이 시스템콜해서 OS의 데이터에 접근할 때 문제가 생김
- 해결책 : 한번에 하나의 CPU만 커널에 들어갈수있게 하는 방법 / 커널의 공유 데이터에 접근할때마다 그 데이터를 lock/unlock하는 방법
-
여러 프로세스가 공유 데이터를 동시에 사용하고자 하는 경우, 각 프로세스의 Code segment에는 공유 데이터를 접근하는 코드인 Critical section존재
-
하나의 프로세스가 Critical Section에 있을때 다른 모든 프로세스는 Critical section에 들어갈수없어야함
-
ex) critical section 전에 예외처리를 해서 lock걸려있으면 기다리게 하는 등..