: 여러 프로세스들이 동시에 공유 데이터를 접근하는 상황
데이터의 최종 연산 결과는 마지막에 그 데이터를 다룬 프로세스에 따라 달라짐
(1) 커널 모드 실행 중 인터럽트가 발생하는 경우(둘 다 커널 코드이므로 kernel address space 공유)
=> 커널 모드에서 데이터를 다루고 있을 때는 인터럽트 처리를 하지 않게 함
(2) 프로세스가 system call을 하여 커널 모드로 수행 중인데 context switch가 일어나는 경우
=> 커널 모드에서 수행 중일 때는 할당 시간이 지나도 CPU를 뺏지 않게 함
(3) Multiprocessor에서 shared memory 내의 kernel data
=> 한 번에 하나의 CPU만이 커널에 들어갈 수 있게 함
=> 커널 내부에 있는 각 공유 데이터에 접근할 때마다 그 데이터에 대한 lock/unlock을 함
: 공유 데이터를 접근하는 코드
: n 개의 프로세스가 공유 데이터를 동시에 사용하기를 원하는 경우
: Critical section에 들어가는 프로세스는 lock을 획득하고(true), critical section을 빠져나올 때 lock을 방출(false)함으로써 동시에 접근할 수 없도록 한다
P(S) : while (S <= 0) do no-op
S--
---critical section---
V(S) : S++