교착상태(DeadLock)
두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있는 상태, 결국 아무것도 완료되지 못하는 상태를 말합니다. 같은 말로 둘 이상의 스레드가 각기 다른 스레드가 점유하고 있는 자원을 서로 기다릴 때, 무한 대기에 빠지는 상태라고도 합니다.
교착상태가 발생하는 조건은 상호 배제, 점유 대기, 비선점, 순환 대기 4가지 조건이 동시에 성립할 때 발생할 수 있습니다.
이런 교착상태 문제를 해결하는 방법으로는 무시, 예방, 회피, 탐지 회복 4가지 방법이 있습니다.
발생조건
상호 배제 | 한 자원은 동시에 쓸 수 없는 상황, 하나의 스레드만이 자원을 점유 할 수 있다. |
점유 대기 | 한 스레드가 자원을 붙잡은 상태에서 다른 스레드가 보유한 자원을 기다리고 있는 상태 |
비선점 | 다른 스레드가 사용중인 자원을 강제로 선점할 수 없는 상황 |
순환 대기 | 순환 형태로 자원을 대기하는 상황, 꼬리에 꼬리를 무는 형태 |
해결방법
무시 | 아무런 조치도 취하지않고 deadlock을 무시한다. | - 시스템 성능 저하가 없다는 장점 |
예방 | 교착 상태의 4가지 발생 조건중 하나가 성립하지 않게 하는 방법 | - 순환 대기 조건이 성립하지 않도록 하는것이 현실적 가능한 예방 - 자원 사용의 효율성이 떨어지고 비용이 크다. |
회피 | 교착상태가 발생하지 않도록 자원을 할당하는 방법 | - 자원 할당 그래프 알고리즘, 은행원 알고리즘 등 이 있다. |
탐지-회복 | 시스템 검사를 통해 교착상태 발생을 탐지하고 회복하는 방법 | - 자원 사용의 효율성이 떨어지고 비용이 크다. |
'CS' 카테고리의 다른 글
트랜젝션(Transaction) (0) | 2022.05.03 |
---|---|
가상메모리(virtual memory) (0) | 2022.04.30 |
스레드와 멀티스레드 (Thread & Multi Thread) (0) | 2022.04.18 |
멀티 프로세스(Multi process), Context 와 Context Switching (0) | 2022.04.14 |
프로세스 메모리 구조 (0) | 2022.04.13 |