Developing Myself Everyday

교착 상태란?


교착 상태는 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태이다.

 

예를 들어 하나의 사다리가 있고, 두 명의 사람이 각각 사다리의 위쪽과 아래쪽에 있다고 가정한다. 이때 아래에 있는 사람은 위로 올라 가려고 하고, 위에 있는 사람은 아래로 내려오려고 한다면, 두 사람은 서로 상대방이 사다리에서 비켜줄 때까지 하염없이 기다리고 있을 것이고 결과적으로 아무도 사다리를 내려오거나 올라가지 못하게 되는 상태가 그러하다.

 

교착 상태의 원인으로는 다음 4가지가 존재한다.

 

 1. 상호 배제 (Mutual Exclusion): 한 프로세스가 자원을 독점하고 있으며 다른 프로세스들은 접근이 불가능하다.

 2. 점유 대기 (Hold and Wait): 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태이다.

 3. 비선점 (No Preemption): 다른 프로세의 자원을 강제적으로 가져올 수 없다.

 4. 환형 대기(Circular Wait): 프로세스 A는 프로세스 B의 자원을 요구하고, 프로세스 B는 프로세스 A의 자원을 요구하는 등 서로가 서로의 자원을 요구하는 상황을 말한다.

 

 위의 조건 중에서 한 가지라도 만족하지 않으면 교착 상태는 발생하지 않는다.

 

 

교착 상태의 해결 방법


교착 상태를 해결하는 방법 중 몇가지는 다음과 같다.

 

 1. 교착 상태가 되는 조건이 성립되지 않도록 예방하여 설계

 2. 은행원 알고리즘을 통해 자원 할당 가능 여부를 파악해 회피

 3. 교착 상태에 있는 프로세스를 탐지한다.

 4. 교착 상태로부터 회복한다.

 

※ 은행원 알고리즘
은행원 알고리즘은 자원의 할당 허용 여부를 결정하기 전에 미리 결정된 모든 자원의 최대 가능한 할당량을 시뮬레이션하여 안전 여부를 검사한다. 그런 다음 대기 중인 다른 모든 활동의 교착 상태 가능성을 조사하여 "안정 상태" 여부를 검사 확인한다.

 

 

 

Reference

 

교착 상태 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 데드락은 여기로 연결됩니다. 다른 뜻에 대해서는 데드락 (동음이의) 문서를 참고하십시오. 교착 상태(膠着狀態) 또는 데드락(영어: deadlock)은 두 개 이상의 작

ko.wikipedia.org

profile

Developing Myself Everyday

@배준형

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!