예시 상황
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 발생
Critical Section Problem
- Race Condition이 발생하지 않도록 하기 위한 일종의 모델링 방법
- Mutual Exclusion (상보 배제) : Critical Section에는 오직 하나의 프로세스만이 수행되어야 한다. (하나의 프로세스가 수행 중일 때는 다른 프로세스가 접근하면 안된다.)
- Progress : 대기하는 프로세스가 존재할 때는 어떠한 프로세스는 반드시 Critical Section에 진입하여야 한다.
- 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 |
---|