[운영체제] Synchronization (1) - Race Condition, Critical Section
Race Condition
- 두 개 이상 프로세스/스레드가
shared resource
에 동시에
concurrent하게 접근
함으로써 결과 값이 확정 되지가 않고, 그때 그때 실행할 때마다 조금씩 바뀌는 현상
Critical Section
- 코드에서 두개 이상의 프로세스가 동시에 리소스를 업데이트 할 수 있는 구간
- 각 프로세스에서 공유 데이터에 접근하는 프로그램 코드 부분
- 여러 개의 스레드가 수행되는 프로그램에서 각 프로세스/스레드들이 공유하는 데이터 등을 변경하는 코드 영역
critical section을 보호하기 위해 반드시 지켜져야 하는 3가지
Mutual exclusion
critical section에 오직 한번에 하나의 프로세스만 들어갈 수 있다. 한 프로세스가 수행 중인 상태에서는 다른 프로세스가 절대 수행 중인 critical section에 접근할 수 없다.
Progress
lock에 대해서 여러개가 요청했을 때, lock을 잡고 있는 사람이 아무도 없는 경우에는 요청한 여러 개 중에 하나는 반드시 lock을 잡을 수 있어야 한다. critical section에 들어갈 수 있어야 한다.
Bounded waiting
lock을 잡으려고 하는데 한명이 계속 lock을 못 잡는 상황 발생하면 안된다. starvaiton 현상 예방할 수 있어야 한다. 즉, critical section에 들어가고자 하는 프로세스는 언젠가는 꼭 진입할 수 있어야 한다.