Search
⚠️

Critical Section, Mutex, Semaphore

Critical-Section 이란?

임계영역은 shared data 에 접근, 조작하는 코드 부분을 이르는 말로, 이 시스템의 중요한 특징은 한 프로세스가 자신의 임계구역에서 수행하는 동안에는 다른 프로세스들은 그들의 임계구역에 들어갈 수 없다는 사실이다.

Critical-Section Problem 의 해결 조건

1.
상호 배제 (Mutual Exclusion)
프로세스 Pi 가 자기의 임계구역에서 실행된다면, 다른 프로세스들은 그들 자신의 임계구역에서 실행될 수 없다.즉, 동시 접근을 배제한다
2.
진행 (Progress)
임계구역에서 실행되고 있는 프로세스가 없다면, 다른 프로세스의 임계구역으로의 진입을 막아서는 안된다.
3.
한정된 대기( Bounded Waiting )
프로세스가 자신의 임계구역에 진입하려는 요청을 한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 그들 자신의 임계구역에 진입하도록 허용되는 횟수에 한계가 있어야한다.
즉, 무한정 기다리는 상황이 있어서는 안된다

SemaPhore 란?

운영체제가 제공하는 일종의 동기화 tool. 임계영역 문제를 해결하는데 도움을 준다.
Semaphore S;
C
복사
Semaphore : 동기화 API 에서 제공하는 데이터 타입으로 정수형 값들이 저장된다.
wait() : 동기화 API 에서 제공하는 임계영역 진입 함수
signal() : 동기화 API 에서 제공하는 임계영역 탈출 함수

Binary Semaphore 란?

0 또는 1 의 정수값 만이 저장될 수 있는 세마포어 주로
mutex locks 라고 부른다.
하나의 프로세스만이 임계영역에 존재할 수 있도록 할 때 사용 ( Ex : Writer )

Counting Semaphore 란?

제한 없는 범위의 정수값이 저장되는 세마포어
주로 여러 프로세스가 자원에 접근가능하게 하도록할 때 사용 ( Ex : Reader )

Classical Problems of Synchronization

Bounded Buffer problem

Shared data 가 저장될 수 있는 메모리 공간이 한정되어 있는경우에 발생하는 문제이다
이는 아래 2개의 추가 세마포어 변수를 선언함으로써 해결이 가능하다
1.
full : 초기값 = 0
a.
채워져있는 공간의 수를 의미
2.
empty : 초기값 = N
a.
비어있는 공간의 수를 의미
Producer
Consumer

Readers Writers Problem

Reader 는 데이터를 읽기만 하는 프로세스
Writer 는 데이터를 읽고 쓰는 프로세스
문제상황은 이러하다.
1.
여러개의 Reader 프로세스가 동시에 읽는 것은 가능하다
2.
오직 하나의 Writer 프로세스 만이 동시에 쓸 수 있다.
이는 마찬가지로 두개의 세마포어 변수를 사용하여 해결이 가능하다
1.
wrt : 초기값 = 1
a.
접근 가능항 상태인지를 나타냄
i.
1 이면 쓰기 가능
ii.
0 이면 쓰기 불가
2.
readcount : 초기값 = 0
a.
현재 읽고있는 프로세스의 수를 의미
Writer
Reader

Dining Philoshophers Problem