기본 콘텐츠로 건너뛰기

[OS] Synchronization

*목적 

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로 이동

댓글