교착 상태란 프로세스들의 집합이 더 이상 진행을 못하고 영구적으로 블록되어 있는 상태로 정의된다.
교착 상태는 시스템 자원에 대한 경쟁 도중에 발생할 수도 있고 프로세스 간 통신 도중에 발생할 수도 있다.
집합 내의 한 프로세스가 특정 사건의 발생을 기다리며 대기하고 있고, 이 사건이 집합 내의 다른 블록된 프로세스에
의해 발생될 수 있을 때 이 프로세스의 집합은 교착상태가 된다.
교착 상태가 영구적인 이유는 기다리던 사건이 결코 발생하지 않기 때문이다.
교착 상태는 두 개 이상의 프로세스들이 서로 충돌되는 자원 요구를 할 때 발생한다.
교착상태( DeadLock 조건 )
상호 배제 ( mutual exclusion ) 조건
한 순간에 한 프로세스만이 자원을 사용할 수 있다. 즉 한 프로세스에 의해 점유된 자원을 다른 프로세스들이 접근할 수 없다.
점유대기 ( hold and wait ) 조건
이미 자원을 보유한 프로세스가 다른 자원을 요청하며 기다리고 있다.
비선점 ( no preemption ) 조건
프로세스에 의해 점유된 자원을 다른 프로세스가 강제적으로 빼앗을 수 없다.
환형 대기 ( circular wait ) 조건
프로세스들 간에 닫힌 연결이 존재한다. 즉 자원 할당 그래프에서 환형이 만들어지는 것이다.
닫힌 연결에서 블록된 프로세스가 자원을 점유하고 있는데, 이 자원을 채인 내부의 다른 프로세스가 원하며 대기하고 있는 경우
교착상태 방지
위의 4가지 조건들 가운데 하나를 제거하면 된다.
공유 자원 중 많은 경우가 한 번에 한 프로세스만 사용할 수 있기 때문에, 상호 배제 조건은 제거하기 어렵다.
대부분의 교착상태 방지 알고리즘은 '환형 대기' 조건 즉 대기 상태의 사이클이 발생하는 일을 막는 데 초점이 맞춰져 있다.
velog.io/@conatuseus/OS-Deadlock
'CS > OS' 카테고리의 다른 글
뮤텍스(Mutex)와 세마포어(Semaphore)의 차이💁♂️ (0) | 2021.04.26 |
---|---|
프로세스 vs 스레드💻 (0) | 2021.04.26 |
멀티 스레딩 (0) | 2021.04.14 |