정의
일련의 프로세스들이 서로가 가진 자원을 기다리며 blocking된 상태
동기화와 관련이 깊은 것이다.
Deadlock은 결국 서로의 Event를 기다리면서 무한하게 대기하는 상태를 말한다.
**여기서 Event는 자원의 할당과 해제를 의미한다.
발생하는 이유
4가지가 있다.
1. Mutual Exclusion, 상호 배제
매 순간 하나의 프로세스만 자원을 사용 가능
A자원이 B자원 점유와 상관없이 자원을 쓸 수 있다면 당연히 무한 대기 상태는 나오지 않을 것이다.
2. No Preemption, 비선점
프로세스는 자원을 스스로 내어놓는 것만 허용된다.
-> 빼앗기지 않는다.
자원을 빼앗을 수 있다면 당연히 deadlock은 나오지 않았다.
3. Hold and Wait, 점유 대기
자원을 가진 프로세스가 다른 자원을 기다릴 때는 보유 자원을 가진채 대기한다.
-> 자원을 점유했다면 작업이 끝날 떄까지 스스로 내어놓지 않는다.
자원을 기다리는 프로세스들이 자원을 가지지 않고 대기한다면 deadlock이 발생하지 않는다.
4. Circular Wait, 순환대기
자원을 기다리는 프로세스 간에 사이클이 형성되었을 때
P0는 P1의 자원을 기다리고
P1는 P2의 자원을 기다리고
...
Pn는 P0의 자원을 기다려서 결국
-> 모든 프로세스들의 자원을 갖고 기다리니까 진행되지 않음
Deadlock을 막는 방법
1. Deadlock Prevention, 교착상태 방지
2. Deadlcok Avoidance, 교착상태 회피
3. Deadlock Detection and recovery, 교착상태 탐지 및 회복
4. Deadlock Ignorance, 교착상태 무시
하지만 대부분의 OS에서는 Deadlock을 그렇게 적극적으로 처리하지 않는다.
Deadlock 자체는 흔히 일어나는 상황도 아니고
방지하기 위해 쓰는 오버헤드가 훨씬 큰 경우가 많다.
예를 들어 어떠한 오류가 생겼을 때, 프로세스 종료하시겠습니까?라는 것이 그 예다.
또한 이를 피하기 위한 많은 방법이 있다.
Semaphore, Mutex, Monitor.. 등등
https://luv-n-interest.tistory.com/439
'CS Interview' 카테고리의 다른 글
데이터 베이스 - CS 면접 총정리 (0) | 2021.11.22 |
---|---|
운영체제 - CS 면접 총정리 (0) | 2021.11.22 |
(A)Synchronous 그리고 (Non)-Blocking (2) | 2021.10.22 |
Paging, 페이징이란?(+단편화) (0) | 2021.10.10 |
삽입 정렬, Insertion Sorting 에 대하여 (0) | 2021.09.15 |