데드락이란 ?
'교착 상태' 라고도 하며 , 한정된 자원을 여러 곳에서 사용하려고 할 때 발생할 수 있다.
데드락이 발생할 수 있는 경우
- 멀티 프로그래밍 환경에서 한정된 자원을 사용하려고 프로세스가 서로 경쟁하는 상황이 발생할 수 있다.
- 어떤 프로세스가 자원을 요청 했을 때 ,그 자원이 현재 사용할 수 없다면, 프로세스는 대기 상태로 들어간다.
- 대기 상태로 들어간 프로세스들이 실행 상태로 변경될 수 없을 때 , 이러한 상황을 데드락(교착 상태) 라고 한다.
데드락의 발생 조건
데드락은 한 시스탬 내에서 다음 4가지 조건이 동시에 성립할 때 발생하며, 따라서 아래의 네가지 조건 중
하나라도 성립하지 않도록 한다면 데드락을 해결할 수 있다.
1. 상호 배제 - 자원은 한번에 한 프로세스 만 사용할 수 있어야 한다.
2. 점유 대기 - 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
3. 비선점 - 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
4. 순환 대기 - 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
데드락의 처리
크게 3가지 방법으로 나눌 수 있다.
1. 교착 상태 예방 및 회피 - 교착상태가 되지 않도록 보장하기 위하여 교착 상태를 예방하거나
회피하는 프로토콜을 이용하는 방법
2. 교착 상태 탐지 및 회복 - 교착상태가 되도록 허용한 후 회복 시키는 방법
3. 교착 상태 무시 - 대부분의 시스템은 교착 상태가 잘 발생하지 않으며, 교착 상태 예방, 회피, 탐지 , 복구는 많은
비용이 든다.
교착 상태 예방
교착 상태 발생 조건 중 하나를 제거함으로써 해결한다. 자원 낭비가 심하다.
1. 상호 배제 부정 - 여러 개의 프로세스가 공유 자원을 사용할 수 있도록 한다.
2. 점유 대기 부정 - 프로세스가 실행 되기 전 필요한 모든 자원을 할당한다.
3. 비선점 부정 - 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고,
요구한 자원을 사용하기 위해 기다리게 한다.
4. 순환 대기 부정 - 자원에 고유한 번호를 할당하고, 번호 순서대로 자원을 요구하도록 한다.
교착 상태 회피
- 교착 상태가 발생하면 피해나가는 방법.
- 은행원 알고리즘
교착 상태로부터 회복
- 교착 상태를 일으킨 프로세스를 종료하거나 , 할당된 자원을 해제함으로써 회복한다.
1. 교착 상태의 프로세스를 모두 중지하거나,
2. 교착 상태가 제거될 때 까지 한 프로세스 씩 중지한다.
참고 블로그
'공부 > 개념 & 유용한 내용' 카테고리의 다른 글
컴파일 언어 & 인터프리터 언어 (스크립트 언어) (0) | 2020.07.07 |
---|---|
코루틴 & 쓰레드 차이점 (0) | 2020.07.02 |
쓰레드와 프로세스의 차이점 (0) | 2020.07.01 |
스택 프레임 , 스택 오버 플로우 (0) | 2020.06.17 |
메모리 구조 (0) | 2020.06.17 |