교착 : 어떤 상태가 굳어 조금도 진전이 없이 머물고 있다.
교착상태란, 두 개 이상의 프로세스들이 이미 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하면서 무한정 기다리고 있는 상태를 말합니다.
그래서, 결과적으로 어느 작업도 완료되지 않고 있는 상태입니다.
교착 상태는 4가지 조건을 모두 충족시켰을 때 발생합니다.
첫 번째는, 한 번에 한 개의 프로세스만 공유 자원을 사용할 수 있어야 합니다.
두 번째는, 프로세스가 이미 할당된 자원을 가진 상태에서 다른 자원을 더 사용하기 위해서 기다리고 있어야 합니다.
세 번째는, 프로세스는 다른 프로세스가 사용중인 자원을 뺏을 수 없어야 합니다.
네 번째는, 공유 자원과, 공유 자원을 사용하기 위해 대기하고 있는 프로세스들이 원형으로 구성되어 있어야 합니다. 그리고 프로세스들은 자신에게 할당된 자원을 갖고 있으면서, 앞이나 뒤에 있는 프로세스의 자원을 요구해야 합니다.
교착상태의 해결 방법은, 교착상태를 예방하거나, 회피하거나, 무시하거나, 발견하는 방법이 있습니다.
먼저, 교착상태의 예방 방법은 교착상태의 발생 조건들을 거꾸로 적용시키면 됩니다. 하지만, 자원활용의 효율성이 떨어지고, 비용이 많이 듭니다.
첫 번째는, 여러 개의 프로세스가 한 자원을 동시에 공유해서 사용할 수 있도록 하는 방법이 있습니다.
두 번째는, 프로세스가 실행되기 전에 필요한 모든 자원을 할당시켜서 프로세스 대기를 없애거나, 자원을 점유하고 있지 않은 상태에서만 자원을 요구할 수 있도록 하는 방법이 있습니다.
세 번째는, 이미 자원을 갖고있는 프로세스가 다른 자원을 요구할 때는, 현재 점유하고 있는 자원을 모두 반납한 뒤에 요구한 자원의 사용이 끝날 때 까지 기다리게 하는 방법이 있습니다.
네 번째는, 자원을 선형 순서로 분류해서 고유 번호를 할당합니다. 각 프로세스는 현재 점유하고있는 자원의 고유 번호보다 앞이나 뒤, 둘 중 한 쪽의 방향으로만 자원을 요구하도록 하는 방법이 있습니다.
교착상태 회피기법은, 교착상태가 발생하면, 적절히 피해나가는 방법인데요. 주로 은행원 알고리즘이 사용됩니다.
은행원 알고리즘은 다익스트라가 제안한 기법입니다. 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는 것에서 유래한 알고리즘 입니다.
은행원 알고리즘을 적용하기 위해서는, 자원의 양과 프로세스의 수가 일정해야 합니다.
은행원 알고리즘은 프로세스의 모든 요구를 유한한 시간 안에 할당하는 것을 보장합니다.
교착상태 발견 기법은 교착상태가 발생했는지 점검해서, 교착상태에 있는 프로세스와 자원을 발견하는 기법입니다.
교착상태 발견 알고리즘과 자원 할당 그래프 등을 사용할 수 있습니다.
교착상태의 회복 기법에는 교착상태가 발생한 프로세스를 종료하거나, 교착상태에 있는 프로세스에게 할당된 자원을 선점해서 프로세스나 자원을 회복하는 기법을 말합니다.
교착상태에 있는 프로세스를 종료하는 것을 말합니다.
교착상태에 있는 모든 프로세스를 종료하거나, 교착상태에 있는 프로세스들을 하나씩 종료해가며 교착상태를 해결하는 방법이 있습니다.
교착상태의 프로세스가 점유하고 있는 자원을 선점해서, 다른 프로세스에게 할당하는 방법입니다.
그러면서 교착상태에 있는 프로세스를 일시정지 시킵니다.
우선순위가 낮은 프로세스, 수행된 정도가 낮은 프로세스, 사용되는 자원이 적은 프로세스 등을 위주로 해당 프로세스의 자원을 선점합니다.