728x90
Critical Section Problem
n개의 프로세스가 공유데이터를 동시에 사용하기를 원하는 경우 발생하는 문제 각 프로세스의에서 공유 데이터를 접근하는 코드를 critical section 이라고 한다. 하나의 프로세스가 critical section 에 있을 때 다른 모든 프로세스는 critical section에 들어갈 수 없어야 한다.
임계 구역 문제를 'Software' 적으로 해결하는 방법
- Mutual exclusion (상호 배타) : 한 프로세스가 critical section 부분을 수행하고 있다면, 다른 프로세스들은 그들의 critical section 에 들어가지 않는다. 즉, critical section에 꼭 하나의 프로세스만이 진입할 수 있다는 조건이다.
- Progress (진행): 아무도 critical section에 있지 않은 상태에서 critical section에 들어가고자 하는 프로세스가 있으면 critical section에 들어가게 해주어야 한다.
- Bounded waiting (유한 대기): 프로세스가 critical section에 들어가려고 요청한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 critical section에 들어가는 횟수에 제한이 있어야 한다. 특정 프로세스 입장에서 지나치게 오래 기다리는 starvation 발생하지 말아야 한다.
뮤텍스 (Mutex)
Critical Section을 가진 thread들의 실행시간이 겹치지 않고 각각 실행될 수 있도록 상호배제를 시키는 기법이다. 뮤텍스는 Mutual Exclusion (상호배제)의 약자이다.
한 process에 의해 소유될 수 있는 key를 기반으로 한 상호배제 기법이며, key에 해당하는 객체가 있으며, 이 객체를 통해 공유자원에 접근할 수 있다.
공유 데이터에 대한 접근을 조율하기 위해 lock을 사용한다. 한 프로세스는 critical section에 진입하기 이전에 반드시 lock을 얻어야하며, critical section을 나갈 때 lock을 해제한다.
do {
entry section // lock 을 얻는다
critical section // 임계구역
exit section // lock을 해제한다
remainder section
} while(1);
공유 데이터에 접근하는 코드 (critical section)가 실행되기 이전에 entry section에서 lock을 걸어서 다른 프로세스가 접근하지 못하도록 방지해야 한다. 그리고 exit section에서 lock을 푼다. 다른 process가 critical section에 들어갈 수 있도록 한다.
728x90
'Computer Science > 운영체제' 카테고리의 다른 글
[운영체제] 교착상태 (0) | 2023.08.08 |
---|---|
[운영체제] 14. 세마포어와 동기화 문제와 해결 (Bounded-Buffer, Readers-Writers Problem, 식사하는 철학자 문제) (0) | 2023.07.30 |
[운영체제] 11. CPU Scheduling (2) - CPU 스케줄링 알고리즘 : Multilevel Queue & Multilevel Feedback Queue (0) | 2023.06.25 |
[운영체제] 10. CPU Scheduling (0) | 2023.06.25 |
[운영체제] 9 (2) Process Management (0) | 2023.06.25 |