0507 OS 수업 노트 (ch6.1)

Ji·2021년 5월 7일
0

Chapter 6: Process Synchronization


Shared data among producer and consumer

Producer and Consumer Code

  • Producer: 버퍼 용량이 꽉 차 있으면, do nothing / 버퍼 용량이 남아 있는 경우, data를 넣고 'counter' 증가.
  • Consumer: 버퍼가 비어있으면, do nothing / 버퍼에 1개 이상의 data가 있다면, 그 data를 반환하고 counter 증가.

but 문제가 있음. counter++와 counter--는 기계어로 구현될 때,

reg1 = counter 
reg1 = reg1 + 1 
counter = reg1

///

reg1 = counter 
reg1 = reg1 + 1 
counter = reg1

요런식으로 구현이 되는데, 이 때 이 문장의 순서가 뒤죽박죽 실행되면 부정확한 값이 나올 수 있음. 이렇게 나오는 원인은 두 개 이상의 프로세스가 동시에 counter(공유변수)를 참조, 변경하기 때문
-> 따라서, 하나의 프로세스만이 공유변수에 접근, 조작할 수 있게 해야함. Soulution : Process Synchronization

Race Condition

  • Race Condition(경쟁조건): 공유 자원에 대해 둘 이상의 프로세스가 동시에 접근할 떄, 타이밍이나 순서 등이 결과 값에 영향을 주는 상태. (프로세스 실행의 특정 순서에 따라 결과가 달라지는 상황)
  • 공유 데이터 조작을 원자적 연산 (atomic)으로 처리: 다른 interrupt로 인해 preemptive 당하지 않음 -> race condition 은 발생 X

Critical Section

  • 동일 자원을 동시에 접근하는 작업을 실행하는 코드 영역
  • When OS 여러 프로세스가 데이터를 공유하면서 수행, 각 프로세스에서 공유 데이터를 액세스하는 코드 영역
  • 공유 자원의 독점을 보장
  • race condition을 막는 solution

Critical section의 3가지

  • Mutual Exclusion(상호 배제): P1이 critical section 영역을 수행 중이면, 다른 프로세스들은 그 critical section에 접근 X
  • Progress(진행) : critical section에 실행 중인 프로세스가 없다면, process 들 중 하나는 유한한 시간 내에 critical section 으로 진입할 수 있어야 함.
  • Bounded Waiting(한정된 대기) : 프로세스가 critical section 으로 들어가기 위해서는 Starvation이 없어야 함.

->이를 모두 만족시켜야 유효한 알고리즘이라 할 수 있음.

profile
공부방

0개의 댓글