*목적
Race Condition방지, data corruption 방지
*Race condition
특정 접근 순서에 따라서 실행결과가 달라지는 경우
*silient corruption
data corruption을 운이좋게 피해간 경우
*Non-preemptive kernel
no race condition. 평균 대기시간 증가
*Critical Section
process들이 공유변수들을 수정할수 있는 코드의 영역
*Critical Section Problem
critical section에는 오직 한 process만 실행되도록 하는 문제
Requirement :
1) mutual exclusion : critical section에는 오직 한 process만이 실행될수 있다.
2) progress : 어떤 process가 임계영역에 들어가려 할때, 무기한 연기가 되어서는 안된다.
3) Bounded Waiting : 어떤 process가 임계영역에 들어가기 위해 대기하는 시간은 유한해야한다.
구현방법:
Static Alternation
- progress requirement를 만족하지 않음. 한 프로세스가 실행되고나서 다른 process가 실행되기 전까지는 무기한 연기됨.
Peterson’s algorithm
- progress, Bounded waiting 모두 만족
Special H/W instruction
- atomic operation을 코드로 구현하는 것이 아니라, 하나의 instruction으로 구현.
Mutex Locks
- critical section 문제를 해결하기 위한 SW tool
- 문제점 : busy waiting이 발생함
- bush waiting이란 instruction을 수행하면서 기다림(CPU cycle 낭비)
- 해결책 :
- 1) process를 semaphore의 waiting queue에 넣고 wait state로 전환
- 2) CPU schedular가 다른 process를 schedule
- 3) 다른 process가 signal 함수를 호출하면 ready queue로 이동
댓글
댓글 쓰기