-
[OS] 데드락 (Deadlock) - 교착상태OS 2021. 8. 16. 15:59
데드락 (Deadlock)
Deadlock (교착상태) 란?
프로세스나 스레드가 결코 일어날 수 없는 특정 이벤트를 무한정 기다리는 상태를 말한다.
👌 데드락의 발생조건 4가지
데드락에 걸리기 위해서는 4가지 요건이 필요합니다.
1. 상호 배제 조건 (Mutual exclusion condition)
프로세스는 한번에 하나의 자원만 사용 할 수 있다. 사용 중인자원을 다른 프로세스가 사용하기 위해서는 사용중인 자원이 해제될 때까지 기다려야 한다.
2. 점유와 대기 조건 (hold-and-wait condition)
자원을 최소한 하나 보유하고 다른 프로세스에 할당되어 사용중인 자원을점유하기 위해 기다려야 한다.
3. 비선점 조건(nopreemption condition)
이미 할당되어 사용중인 자원을 다른 프로세스가 선점할 수 없다.
4. 순환 대기 조건 (circular-wait condition )
대기 프로세스의 집합이 순환 형태로 자원을 사용하기 위해 대기하고 있어야 한다.
👊 데드락 해결방법 4가지
1. 데드락 상태 예방
데드락의 발생조건 4가지 중 하나라도 발생하지 못하게 하면 데드락이 발생하지 않습니다. 즉, 데드락의 발생조건을 방지하여 데드락이 일어날 가능성을 예방합니다.
- 자원의 상호 배제 조건
- 한 번에 여러 프로세스가 공유 자원을 사용할 수 있게 합니다.
- 동기화(synchronization)문제가 발생할 수 있습니다.
- 점유 대기 조건 방지
- 프로세스 실행에 필요한 모든 자원을 한꺼번에 요구하고 허용할 때까지 작업을 보류해서, 나중에 또다른 자원을 점유하기 위한 대기 조건을 성립하지 않도록 합니다.
- 비선점 조건 방지
- 다른 프로세스에게 할당된 자원이 선점권이 없다고 가정할 때, 높은 우선순위의 프로세스가 해당 자원을 선점할 수 있도록 합니다.
- 순환 대기 조건 방지
- 자원을 순환 형태로 대기하지 않도록 일정한 한 쪽 방향으로만 자원을 요구할 수 있도록 합니다.
위에서 언급한 방법으로 예방하게 되면 시스템의 처리량이나 효율성을 떨어트리는 문제점이 발생할 수 있습니다.
2. 데드락 상태 회피
교착 상태를 인정하고 피해가는 방법입니다.
시스템의 프로세스들이 요청하는 모든 자원을, 데드락을 발생시키지 않으면서도 차례로 모두에게 할당해 줄 수 있다면 안정 상태에 있다고 말합니다. 특정한 순서로 프로세스들에게 자원을 할당, 실행 및 종료 등의 작업을 할 때 데드락이 발생하지 않는 순서를 안전 순서라고 부릅니다. 반면 데드락 발생 가능성이 있는 상황을 불안정 상태라고 합니다.
시스템이 항상 안정 상태에 있을 수 있도록 자원 할당을 하는것이 특징입니다. 대표적으로 사용되는 알고리즘으로 은행원 알고리즘이 있습니다.
3. 데드락 탐지 및 복구
데드락이 자주 발생하는 시스템에서 사용하는 방법입니다. 보통 예방과 회피보다 탐지 및 복구를 많이 사용합니다. 데드락이 발생하지 않도록 예방과 회피를 사용하게 되면 자원을 효율적으로 사용할 수 없게 되는 경우가 많습니다. 때문에 자원을 더 효율적으로 사용하기 위해 탐지 및 복구 방법을 더 많이 사용합니다.
교착 상태 탐지 를 위한 방법으로 자원할당 그래프 소거 방법 을 사용하여 순환여부 확인합니다.
데드락에서 빠져나오기(복구) 위해 순환 대기를 깨고 교착상태에서 회복합니다. 순환 고리가 깨질 때 까지 프로세스를 순차적으로 종료하여 해결 할 수 있습니다. 또 다른 방법으로는 순환대기에 빠진 프로세스의 제어권을 빼앗아 롤백하여 데드락에서 빠져나올 수 있습니다.
4. 데드락 무시
- 데드락이 드물게 일어난다면 데드락을 해결하기 위해 사용하는 비용이 더 커지게 됩니다. 따라서 데드락이 발생할 경우 무시합니다. (프로세스 재실행)
Post
References
- https://www.youtube.com/watch?v=FXzBRD3CPlQ
잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)
'OS' 카테고리의 다른 글
[OS] CPU 스케줄링 (0) 2021.11.22 [OS] 뮤텍스(Mutex) vs 세마포어(Semaphore) (0) 2021.11.19 [OS] Race Condition 경쟁상태란? (0) 2021.08.15 [OS] 프로그램 VS 프로세스 VS 스레드 (0) 2021.07.21 [OS] 프로세스 관리, 프로세스 문맥(context) (0) 2021.07.20 - 자원의 상호 배제 조건