Synchronization(1)

Critical Section Problem


The Problem of Concurrency(동시성 문제)

Background of Concurrency Issue

Solution

Peterson's Solution


Peterson's Solution

Critical Section에 대한 Software-based Solution이다.

Proof of Peterson's Solution

  1. Mutual Exclusion조건을 만족하는가?
    • 두 개의 프로세스가 critical section에 접근하려 한다고 하자.
    • 프로세스 icritical section으로 진입하기 위한 조건은 아래와 같다.
      • flag[i] == TRUE && flag[j] == FALSE && turn == i
    • 프로세스 jcritical section으로 진입하기 위한 조건은 아래와 같다.
      • flag[j] == TRUE && flag[i] == FALSE && turn == j
    • 위의 두 조건의 경우에만 프로세스 i, j가 각각 critical section에 진입 가능하다.
    • 두 조건을 제외하고는 프로세스 i, j모두 critical section에 진입할 수 없다.
    • 두 조건은 서로 일치하는 조건이 아니므로 두 프로세스가 동시에 critical section에 진입할 수 없다.
    • 따라서 Peterson's SolutionMutual Exclusion조건을 만족한다.
  2. Progress조건을 만족하는가?
    • 프로세스 j가 준비되지 않은 경우 프로세스 i는 즉시 critical section에 진입할 수 있다.
      • 프로세스 j가 준비되지 않은 경우란 flag[j] == fasle인 경우를 말한다.
      • 동일한 이유로 프로세스 i가 준비되지 않은 경우에도 프로세스 j가 즉시 critical section에 진입할 수 있다.
    • 프로세스 j가 준비된 상태이고, 프로세스 j의 while루프를 순회하면서 대기 중이라고 하자.
      • 이 경우 turn == i라면 프로세스 i는 지연 없이 critical section에 진입할 수 있다.
      • 마찬가지로 turn == j라면 프로세스 j는 지연 없이 critical section에 진입할 수 있다.
    • 위의 두 상황에 대해 대기 중인 프로세스가 없을 경우, 지연 없이 프로세스가 critical section에 진입 가능함을 확인 가능하다.
    • 대기 중인 프로세스는 critical section에서 실행중인 프로세스가 Exit Section에서 플래그 값을 변경하면 그 즉시 critical section으로 진입할 수 있다.
    • 따라서 Peterson's SolutionProgress조건을 만족한다.
  3. Bounded Waiting조건을 만족하는가?
    • 프로세스 j의 플래그가 true로 설정된 후, trun값을 i로 갱신한다.
    • while문의 조건에 의해 프로세스 jcritical section접근이 종료된 후에 프로세스 i가 대기중인 상황이라면, 그 즉시 critical section으로 진입할 수 있다.
    • 프로세스 i는 최악의 경우에도 프로세스 j가 한 번 실행된 이후에 실행이 보장된다.
    • 따라서 Peterson's SolutionBounded Waiting을 보장한다.

사실 대부분의 critical section solution은 Mutual Exclusion 조건은 만족시킨다. Progress조건과 Bounded Waiting조건을 만족시키는지 자세히 살펴보는 것이 중요하다.