교착상태
교착상태란?
두개 이상의 프로세스가 서로 상대방의 작업이 끝나기만을 기다리고 있어 , 결과적으로 무한히 대기하는 상태이다.
예를 들어,
A라는 프로세스가 x라는 자원을 사용 중이고, y라는 자원을 요청햇을때
B라는 프로세스는 y라는 자원을 사용 중이고, x라는 자원을 요청하면
두개의 프로세스는 서로의 작업이 끝나기만을 무한히 기다리는 상태가되며, 이를 교착상태라한다.
<br/>
교착상태의 4가지조건
-
상호배제 : 하나의 자원은 하나의 프로세스만 사용 할 수 있다.
-
점유대기 : 프로세스가 하나 이상의 자원을 가진상태에서, 다른 자원을 기다린다.
-
비선점 : 프로세스가 어떤 자원을 사용하기 위해, 다른 프로세스에서 사용하는 자원을 빼앗을 수 없다.
-
순환대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
<br/>
교착상태의 해결 기법
-
교착상태 예방 : 교착상태의 4가지 발생 조건 중 하나도 발생하지 않게함
-
상호 배제 예방
-
하나의 자원을 여러 프로세스가 사용하게함. 읽기전용 파일과같은 상관없지만, 프린터등 자원은 불가능.
-
점유와 대기 조건 예방
-
프로세스가 실행전에 필요한 모든 자원을 할당 받음
-
추가적인 자원요청할때는 아무 자원도 가지고 있지 않아야함
-
비선점 조건 예방
-
프로세스가 추가 자원을 요청했을때 해당자원이 선점되어있다면, 가지고 있는 자원마저 강제 회수함.
-
우선순위에 따라 높은 우선순위의 프로세스가 낮은 우선순위의 프로세스의 자원을 뺏어감.
-
A자원을 요청했을 때, A자원을 사용중인 프로세스가 현재 다른 B자원을 요청 중이라면 선점, 그렇지 않으면 대기.
-
순환대기 조건 방지
-
모든 자원에 순서를 매겨, 각 프로세스들은 열거된 순서대로 자원을 요청하도록 요구.
-
교착상태 회피 : 자원 할당전 수행상태를 파악하여, 교착상태 발생여부를 파악함
-
교착상태 탐지&복구 : 교착상태를 탐지하여 복구함
-
교착상태 무시 : 교착상태가 발생하지 않는다 가정함.
<br/>