Process Synchronization(Mutex)

이희제·2021년 9월 25일
3

Operating System

목록 보기
10/12

Introduction

  • multiple processes들은 multipleprogramming 시스템에 존재하고 있다.
  • 각 process는 독립적으로 동작한다. => 즉 각각 동기화가 되어 있지 않다.
  • 이로 인해 공유 자원이나 데이터에 접근할 때 문제가 발생할 수 있다.

➡️ Concurrent하게 공유 데이터에 접근하면 데이터가 일관되지 않을 수 있다. 따라서 Process Synchronization이 필요하다.


Race Condition

  • 여러 process가 같은 데이터에 동시에(concurrent) 접근하거나 조작하는 상황을 의미한다.

예시)

➡️ count 변수를 2개의 프로세스가 접근하여 증가시키는 상황이다. 증가하는 로직은 그림과 같이 3가지의 기계어 명령으로 구성되어 있다.

➡️ 명령어를 수행 중에 interrupt가 되면 count의 값이 예상과 다르게 나올 수 있다. => Data Inconsistency


Critical Section

  • 공유 데이터에 접근하는 코드 영역을 의미한다.

Mutual Exclusion(Mutex)

  • 2개 이상의 process가 동시에 Critical Section에 진입하는 것을 방지하는 것

  • Process Synchronization이 필요하다.


1. Mututal exclusion Methods

Mutual exclusion primitives (기본연산)

  • enterCS() primitive
    • Critical section 진입 전 검사
    • 다른 프로세스가 Critical Section 안에 있는지 검사
  • exitCS() primitive
    • Critical section을 벗어날 때의 후처리 과정
    • Critical section을 벗어남을 알림

2. Requirements for Mutex primitives

  • Mutual Exclusion(상호배제)

  • Progress(진행) => 무기한 대기 X

    • Critical section이 비어있다면 다른 프로세스가 진입할 수 있어야 한다. => 방해 X
  • Bounded Waiting(한정대기)

    • Process는 유한 시간 내에 Crtical Section에 들어갈 수 있어야 한다.

3. Two Process Mutual Exclusion

1. Version-1


2. Version-2

  • 각 프로세스가 flag[0], flag[1]의 boolean 값을 가짐

➡️ Mutual Exclusion 조건을 만족하지 못한다.

예시 상황)

1. flag[0], flag[1] 둘다 False
2. P0가 flag[0] = True 전에 interrupt
3. p1 실행이 되고 flag[1] = True를 하고 Critical Section에 진입
4. p1이 Critical Section에서 interrupt
5. 다시 p[0]가 실행되고 flag[0] = True로 만들고 Critical Section에 진입

즉, p0, p1 둘 다 Critical Section에 진입이 되어 상호 배제 조건 만족 불가능

3. Version-3

  • flag 값 변경을 먼저하는 방식.

➡️ 진행되어야 된다는 조건을 만족하지 못한다.


예시 상황)

1. flag[0], flag[1] 둘다 False
2. p0가 flag[0] = True로 만들고 interrupt
3. p1이 실행되면 flag[1]=True하고  while에서 대기 => time quantum 등을 소모
4. p0이 실행되면 while에서 대기 

즉, p0, p1 둘 다 Critical Section에 진입 불가

4. Dekker's Alogorithm

  • turn이라는 변수를 사용한다.


5. Peterson's Alogorithm

profile
그냥 하자

0개의 댓글