교착상태(Deadlock)와 해결방법

DanChu 🌟·2022년 8월 15일
0

교착 상태 Deadlock

상호배제에 의해 나타나는 문제점으로, 다중 프로그래밍 시스템에서 여러 프로세스들이 공유하고 있는 일부 자원들을 점유하고 놓지 않으면서 다른 프로세스가 가지고 있는 자원들을 원하여 무한정으로 기다리고 있는 상태를 말한다.

프로세스 상태 중 asleep 상태, 또는 suspended block 상태로도 될 수 있다. 자원을 다시 얻으면 wake up된다.


교착상태 발생 조건

상호배제 mutual exclusion

한 자원에 대한 여러 프로세스의 동시 접근 불가

점유와 대기 hold and wait

자원을 가지고 있는 상태에서 다른 프로세스가 사용하고 있는 자원의 반납을 기다리는 것

비선점 non preemptive

다른 프로세스의 자원을 강제로 가져올 수 없음

환형 대기 circle wait

각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있는 것


교착상태 해결 방법

예방 prevention

교착상태 발생 조건은 위 네가지를 모두 만족시켜야 한다. 하지만 교착상태를 해결하는데에는 네가지 중 한가지만 해결하면 된다.

회피 avoidance

교착상태의 발생조건을 없애기보다는 발생하지 않도록 알고리즘을 적용하는 방법으로, 자원할당 그래프 알고리즘과 은행원 알고리즘이 있다.

회복 recovery

교착상태가 발생하는 것을 아예 막지 않고, 만약 교착상태가 발생하면 발생 이후에 문제를 해결하는 방법.

무시 ignore

교착상태를 해결할 때에도 문맥교환에 의한 overhead로 성능 저하가 생긴다. 교착상태에 의한 성능 저하보다 이를 해결할 때의 성능저하가 큰 경우 그냥 무시한다.




references

0개의 댓글