교착 상태
🌹 정리 by 장미(https://velog.io/@newbiekim/)
교착 상태(dead lock): 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태.
교착 상태는 아사 현상과 비슷해 보이지만 차이점이 있다.
*아사 현상은 OS가 잘못된 정책을 사용하여 특정 프로세스의 작업이 지연되는 문제이고, 교착 상태는 여러 프로세스가 작업을 진행하다 보니 자연적으로 일어나는 문제이다.
*아사 현상: 작업 시간이 긴 프로세스가 작업 시간이 짧은 프로세스 때문에 작업이 진행되지 못하는 경우를 말한다. 아사 현상은 몇 번 이상 양보했다면 더 이상 양보하지 않도록 조정하는 에이징으로 해결할 수 있다.
따라서 OS는 감시를 하다가 교착 상태가 발생하면 강압적으로 해결해야 한다.
시스템 자원
교착 상태는 다른 프로세스와 공유할 수 없는 자원을 사용할 때 발생한다.
(예: 어떤 프로세스가 임계구역으로 보호되는 프린터, 스캐너, CD 레코더 등 동시에 같이 사용할 수 없는 시스템 자원을 할당받은 후 양보하지 않는 경우.)
공유 변수
lock1 = true;
while(lock2 == true);
//critical section
lock1 = false;
lock2 = true;
while(lock1 == true);
//critical section
lock2 = false;
프로세스 P1은 공유 변수 lock1을 true로 만든 다음 lock2가 false가 될 때까지 기다리고, 프로세스 P2는 공유변수 lock2를 true로 만든 다음 lock1이 false가 될 때까지 기다린다.
이와 같이 한 변수를 할당받은 상태에서 다른 변수를 기다리면 교착 상태가 발생한다.
응용 프로그램
데이터베이스는 데이터의 일관성을 유지하기 위해 잠금을 사용하는데, 이때 교착 상태가 발생할 수 있다.