예시 상황

ex count =5, process A : count ++, process B: count --

Process A : register = count;

Process A : register = register +1;

Process B : register = count;

Process B : register = register -1;

Process B : count = register;

Process A : count = register;

 

Critical Section

  • 여러 프로세스나 스레드가 공유 자원에 접근하는 코드의 영역 

예시 상황의 count

 

 

Race Condition

  •  process가 shared resource(공유 변수)에 접근하는 순서에 따라 프로그램의 수행 결과가 달라 지는 현상

예시 상황에서 현재 Race Condition 발생

 

Race Condition 예방법

Critical Section Problem

  • Race Condition이 발생하지 않도록 하기 위한 일종의 모델링 방법
    1.  Mutual Exclusion (상보 배제) : Critical Section에는 오직 하나의 프로세스만이 수행되어야 한다. (하나의 프로세스가 수행 중일 때는 다른 프로세스가 접근하면 안된다.)
    2.  Progress : 대기하는 프로세스가 존재할 때는 어떠한 프로세스는 반드시 Critical Section에 진입하여야 한다. 
    3.  Bounded Waiting : 대기하는 프로세스가 있을 때에는 진입 횟수에 한도가 존재해야 한다. (대기를 하고 있을 때는 무한정 기다려서는 안된다.)

보통 Critical Section을 화장실에 많이 비유함 -> 한 사람이 오직 key를 들고 화장실(공유변수)에 접근하는 듯한 비유

이러한 Critical Section을 보장 하는 방법 -> Binary Semaphore

 

 

Semaphore vs mutex(Binary Semaphore)

  • 세마포어와 뮤텍스 모두 Critical Section(공유자원)에 접근을 제한하기 위한 수단
  • 일반 적인 세마포어(Counting Sematphore)는 변수값에 제한이 없고 변수의 크기 만큼 공유자원에 접근이 가능하여 mutual exclusion을 보장할 수 없음.
  • 뮤텍스는 binary semaphore라고도 불리며 오직 하나의 프로세스만이 공유자원에 접근을 가능하게 하여 mutual exclusion을 보장 가능. (뮤텍스, 즉 binary semaphore는 0과 1로 공유자원의 접근을 제한한다)

'Cs > OS' 카테고리의 다른 글

Process, Thread  (0) 2021.09.07

+ Recent posts