- Deadlock이란 두 개 이상의 프로세스가 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며, 서로의 작업이 끝나기만을 기다리는 것이 영원히 끝나지 않는 상황을 말한다.
- Deadlock은 4가지의 발생조건이 있다. 4가지 조건이 모두 만족해야 발생할 가능성(무조건 발생하는 것 아님)이 있으며, 하나라도 만족하지 않으면 Deadlock이 발생하지 않는다.
(1) 상호 배제(Mutual Exclusion) : 한 자원에 대한 여러 프로세스 동시 접근 불가
(2) 점유 대기(Hold and Wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다림
(3) 비선점(No Preemption) : 프로세스는 다른 프로세스의 자원을 강제로 가져올 수 없음
(4) 순환 대기(Circular Wait) : 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있음
- Deadlock을 해결하기 위한 방법은 4가지가 있다.
(1) 예방(Prevention) : Deadlock의 발생 조건 중 하나만 해결해도 Deadlock이 발생하지 않음
=> 하지만 예방 방법은 시스템 처리량이나 자원 사용의 효율성이 떨어질 수 있음
(2) 회피(Avoidance) : Deadlock 발생 조건을 없애기 보다 발생하지 않도록 알고리즘을 적용 ex) 은행원 알고리즘
=> 하지만 프로세스가 요구하는 최대 자원수를 알아야 하는등 많은 어려움이 있음
(3) 탐지 및 복구(Detection & Recovery) : Deadlock 발생 여부를 탐색하여 발생시 복구
=> 하지만 지속적으로 교착 상태를 확인하는 작업이 필요하기 때문에 오버헤드 발생
(4) 무시 : Deadlock이 드물게 일어난다면 데드락을 해결하기 위해 사용하는 비용이 더 커짐
=> 데드락이 발생할 경우 프로세스를 재실행해 해결 (현실적)
'CS' 카테고리의 다른 글
Data Governance [CS] (0) | 2022.12.19 |
---|---|
Index & B-Tree [CS] (0) | 2022.12.14 |
Process & Thread[CS] (0) | 2022.12.14 |
ORM [CS] (0) | 2022.12.14 |
MSA [CS] (0) | 2022.12.14 |