Critical Section (임계 영역)
동일한 자원을 동시에 접근하는 작업 (ex 공유하는 병수 사용, 동일 파일을 사용 등)을 실행하는 코드 영역.
Critical Section Problem (임계 영역 문제)
프로세스들이 Critical Section을 함께 사용할 수 있는 프로토콜을 설계하는 것.
해결을 위해 필요한 기본 조건
- Mutual Excusion (상호 배제)
프로세스 P1이 critical section에서 실행중이라면 다른 프로세스들은 critical section에서 실행될 수 없다.
즉, 한번에 하나의 프로세스만이 동작할 수 있다.
- Progress (진행)
critical section에서 실행 중인 프로세스가 없는 경우 어떤 프로세스가 critical section에 진입하려 할때 막아서는 안된다.
- Bound Waiting (한정된 대기)
프로세스가 critical section에 들어가길 요구한 때부터 그것이 받아들여질 때까지 다른 프로세스들이 critical section에 진입하는 횟수에 제한이 있어야 한다.
즉, 기다림에 bound가 필요하다.
해결책
락 (Lock)
하드웨어 기반의 해결책으로, 동시에 공유자원에 접근하는 것을 막기위해 critical section에 진입하는 프로세스는 Lock을 획득하고 이를 빠져나올 때 Lock을 다시 해제해 더이상 critical section에 진입할 수 없게한다.
한계 : 다중처리기 환경에선 시간적인 효율성 면에서 적용될 수 없다.
세마포어 (Semaphores)
소프트웨어상의 해결책으로 busy waiting이 요구되지 않는다.
종류
- 카운팅 세마포어 : 가용한 개수를 가진 자원에 대한 접근 제어용으로 사용된다. 세마포어는 그 가용한 자원의 개수로 초기화되고 자원을 사용하면 세마포어가 감소하게 되고 방출하면 세마포어가 증가한다. 어떤 int값이든 가질 수 있다.
- 이진 세마포어 : 0 또는 1의 값만 가질 수 있다. 이는 다중 프로세스들 사이의 critical section 문제 해결을 위해 사용된다.
Busy Waiting
critical section에 진입하고자하는 프로세스가 반복문을 통해 진입 코드를 계속 반복실행하며 CPU 시간을 낭비하는것.
세마포어는 critical section에 진입을 시도했으나 실패한 경우 그에 대해 Block 시킨 뒤 critical section에 자리가 날 때 깨우는 방식을 사용하여 busy waiting으로 인한 시간낭비 문제를 해결한다.
교착상태 (Deadlock)
세마포어가 Ready Queue를 가지고 있고 둘 이상의 프로세스가 critical section진입을 무한정 기다리고 있고 critical section에서 실행되는 프로세스는 진입대기중인 프로세스가 실행되어야만 빠져나올 수 있는 상황
모니터
하이레벨 프로그래밍 언어가 제공하는 것으로 개발자의 코드를 상호배제하도록 만든 추상화된 데이터 형태.
공유자원에 접근하기 위한 키 획득과 자원 사용 후 해제를 모두 처리한다.
CS 면접 대비를 위해 아래 깃허브를 기반으로 작성 되었습니다.
github.com/JaeYeopHan/Interview_Question_for_Beginner
'Computer Science > 운영체제' 카테고리의 다른 글
[운영체제] 메모리 관리 전략 (0) | 2021.05.15 |
---|---|
[운영체제] 교착상태 (Deadlock) 및 기아상태(Starvation) (0) | 2021.05.15 |
[운영체제] 동기와 비동기 (0) | 2021.05.14 |
[운영체제] CPU 스케줄러 (0) | 2021.05.14 |
[운영체제] 스케줄러 (0) | 2021.05.14 |