Mutex 와 세마포어 (Semaphore)
* Critical Section (임계 구역)에 대한 접근을 막기 위해 LOCKING 매커니즘이 필요
- Mutex (binary semaphore) : 임계구역에 하나의 스레드만 들어갈 수 있음
- Semaphore : 임계구역에 여러 스레드가 들어갈 수 있음
: counter를 두어서 동시에 리소스에 접근할 수 있는 허용 가능한 스레드 수를 제어
세마포어 (Semaphore)
* P : 검사 (임계영역에 들어갈 때)
- S값이 1 이상이면 임계 영역 진입 후 S값 1 차감 (S값이 0이면 대기)
* V : 증가 (임계영역에서 나올 때)
- S값을 1 더하고 임계 영역을 나옴
* S : 세마포어 값 (초기 값만큼 여러 프로세스가 동시 임계 영역 접근 가능)
* 바쁜 대기 : wait()은 S가 0이라면 임계 영역에 들어가기 위해 반복문수행
- 바쁜 대기, busy waiting
* 프로그래밍은 근본적으로는 중단이 없음. 끊임없이 코드 실행
- 중단은 대부분 loop로 표현 / loop는 CPU에 부하를 걸리게 함
참고 : 주요 세마포어 함수 (POSIX 세마포어)
* sem_open() : 세마포어를 생성
* sem_wait() : 임계영역 접근 전, 세마포어를 잠그고, 세마포어가 잠겨 있다면, 풀릴 때 까지 대기
* sem_post() : 공유자원에 대한 접근이 끝났을 때 세마포어 잠금을 해제한다
교착상태(Deadlock)
* 무한 대기 상태 : 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 가다리고 있기 때문에
다음 단계로 진행하지 못하는 상태
* 교착상태 발생 조건
1. 상호배제 (Mutual exclusion) : 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다
2. 점유대기 (Hold and wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다
3. 비선점 (No preemption) : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뻇을 수 없다
4. 순환대기 (Circular wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다
교착상태 해결 방법
1. 교착상태 예방 : 교착 상태 발생 4 가지 조건 중 하나를 제거하는 방법
2. 교착상태 회피 : 교착상태 조건 중 4번만 제거 / 자원 할당 순서를 정의하지 않음
3. 교착상태 발견 : 교착상태가 발생했는지 점검하여 교착 상태에 있는 프로세스와 자원을 발견하는 것
4. 교착상태 회복 : 교착 상태를 일으킨 프로세스를 종료하거나
교착상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것
1) 상호배제 조건의 제거 : 임계 영역 제거
2) 점유와 대기 조건의 제거 : 한번에 모든 필요 자원 점유 및 해제
3) 비선점 조건 제거 : 선점 가능 기법을 만들어 줌
4) 순환 대기 조건 제거 : 자원 유형에 따라 순서를 매김
기아상태 (Starvation)
* 특정 프로세스의 우선순위가 낮아서 원하는 자원을 계혹 할당 받지 못하는 상태
* 교착상태와 기아상태
- 교착상태는 여러 프로세스가 동일 자원 점유를 요청할 때 발생
- 기아상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정
프로세스는 영원히 자원 할당이 안되는 경우를 주로 의미함
기아상태 해결 방안
* 우선순위 변경
- 프로세스 우선순위를 수시로 변경해서 각 프로세스가 높은 우선순위를 가질 기회를 주기
- 오래 기다린 프로세스의 우선순위를 높여주기
- 우선순위가 아닌, 요청 순서대로 처리하는 FIFO 기반 요청큐 사용
출처 : 제로베이스
'공부 Note > 운영체제' 카테고리의 다른 글
Chapter 05 가상 메모리 (2) (0) | 2022.01.04 |
---|---|
Chapter 05 가상 메모리 (1) (0) | 2022.01.04 |
Chapter 04 쓰레드의 이해 (2) (0) | 2021.12.30 |
Chapter 04 쓰레드의 이해 (1) (0) | 2021.12.30 |
Chapter 03 프로세스 & 스케쥴러 (8) (0) | 2021.12.30 |