728x90
데드락(교착상태)이란, wait 상태인 thread 혹은 프로세스가 다시 자기 상태를 바꾸지 못하는 상태를 뜻한다. 즉 대기만 무한히 하는 상태를 말한다.
데드락의 충족 조건은 4가지이다.
- Mutual Exclusion (상호 배제)
자원은 한 번에 한 프로세스만 사용할 수 있어야 한다. - Hold and wait (점유 & 대기)
최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해서는 대기상태인 프로세스가 있다. - No preemption (비선점)
다른 프로세스에 할당 된 자원은 강제로 빼앗을 수 없다. - Circular wait (순환 대기)
프로세스의 집합이 순환하며 점유 & 대기를 하야한다.
그러면 데드락을 어떻게 핸들링 해야할까?
- ignore
(그럼 속이 편~하지 😇)
예방 또는 회피하는 로직이 성능에 큰 영향을 끼칠 수 있다. 데드락이 발생하는 빈도가 매우 낮아 그냥 무시할 수 있다. - prevent
데드락이 충족되는 4가지 조건을 중 하나만 막으면 데드락 발생 가능성을 차단할 수 있다.
방법은 아래와 같다.- Mutual Exclusion -> 고려하지 말자! 하기 힘드렁
- Hold and wait -> 점유를 위해 wait 상태를 만들지 않도록, 점유된 프로세스의 작업이 끝나면 모든 프로세스를 다 내려놓고 다시 점유하도록 한다.
- No preemption -> 높은 우선순위의 프로세스가 해당 자원을 선점할 수 있도록 한다.
- Circular wait -> 자원 순서를 매기자, 일정한 한쪽 방향으로만 자원을 요구하도록 한다.
- avoid
데드락을 회피하기 위해서는 차례로 모두에게 할당 할 수 있는 안정 상태에 있다면 가능하다.
Bank's Algorithm 등을 이용하여 안정상태를 갖출 수 있다. - detect, recover
데드락을 탐지하고 이를 회복시키는 순서로 진행된다.
데드락 탐지는 현재 시스템의 자원 할당 상태로 파악할 수 있다. (Bank's Algorithm처럼)
데드락에서 순환 대기 조건을 탈피하여 회복시키는 방법이 있다.
728x90
'STUDY > 운영체제' 카테고리의 다른 글
[운영체제] 메인 메모리 (0) | 2022.02.21 |
---|---|
[운영체제] 프로세스 동기화 (0) | 2022.02.06 |
[운영체제] CPU 스케줄링 (0) | 2022.01.17 |
[운영체제] 쓰레드 (thread) (0) | 2022.01.10 |
[운영체제] 프로세스 간의 통신 (IPC) (0) | 2021.12.29 |