본문 바로가기
IT 및 프로그래밍

교착 상태와 기아 상태 중 교착 상태의 개념과 발생원인

by 데이터 석사 2024. 10. 22.

다중 프로그래밍 시스템에서는 프로세스가 반드시 일어나지 않을 사건을 대기하는 상태가 되면 교착 상태에 빠졌다고 말한다. 이번 글은 이런 교착 상태의 개념과 그 원인을 살펴볼 것이다.

교착 상태와 기아 상태 중 교착 상태의 개념과 발생 원인

 

교착 상태의 개념

시스템에서 발생하는 교착 상태를 좀 더 명확히 표현하면 이렇다. 한 프로세스 그룹의 프로세스들이 일으킬 사건을 여러 프로세스가 서로 대기하는 상태이다. 곧 둘 이상의 프로세스가 다른 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 교착 상태가 일어난다.

 

응용 프로그램의 프로세스는 대다수 자원 하나에 단독으로 접근하기보다는 여러 자원을 활용한다. 예시를 들면, 두 프로세스가 CD에 각각 스캔한 문서를 저장한다고 전제하자. 프로세스 A는 스캐너 사용 권한을 요구하여 허가되었고, 프로세스 B는 CD 레코더를 요구하여 허가되었다고 하자. 잠시 후 프로세스 A가 CD 레코더를 요구하더라도 프로세스 B가 CD 레코더를 해제할 때까지는 요구가 거절된다. 설상가상으로 프로세스 B가 CD 레코더를 해제하지 않고 스캐너를 요구하면 두 프로세스는 서로 차단되어 끝없이 기다리게 되는데, 이 상황이 바로 교착 상태이다.

 

일상생활에서 교착 상태의 예로는 교통마비 상태를 들 수 있다. 교통마비 상태에서는 정확한 해결책 존재하지 않는다. 교차로에 있는 자동차가 나와주지 않는 한 자동차들은 앞으로 움직일 수 없다. 그러므로 교차로의 일부 자동차를 후진시키거나 네 대 중 한 대를 치워야 하는 외부 간섭이 필수이다.

 

초기 일괄 처리 시스템에서는 교착 상태가 자주 일어나지 않았다. 사용자가 작업 통제 카드에 작업을 완수하는 데 필수인 자원을 명시했기 때문이다. 일괄 처리 시스템에서는 운영체제가 요구한 자원을 준비 큐로 이동시키기 전에 먼저 이용 가능 여부를 체크했다. 그러므로 확보되지 않은 자원은 준비 큐로 옮길 수 없어 교착 사태가 일어나지 않았다. 반대로 대화식 시스템에서는 동적 자원을 공유하여 자원의 이용률을 증가시키는 과정에서 교착 상태가 일어날 가능성이 있었다.

 

한 개 이상의 프로세스가 교착 상태에 빠지면 작업이 중단되어 더는 명령을 이어 나가지 못한다. 운영체제가 교착 상태를 해결하지 못하면, 시스템 운영자나 사용자는 일을 교체하거나 종료하는 외부 간섭으로 이를 해결해야 한다. 교착 상태는 하나 이상의 작업에 영향을 주기 때문에 무한 대기나 기아 상태보다 훨씬 심각한 문제를 발생시킨다.

 

교착 상태는 시스템 자원에 요청이 뒤엉킨 상태로, 두 프로세스가 이용하는 자원을 서로 기다리고 있을 때 일어난다. 자원 해제 요구를 받아들일 때까지 프로세스들은 작업을 더 이상 진행할 수 없으며, 자원 해제를 수신할 때까지 현재 보유한 자원도 해제할 수 없다. 다시 말해, 다른 하나를 완수하지 않으면 프로세스를 더 이상 진행할 수 없고, 진행하지 않으면 프로세스를 완수할 수 없다. 그러므로 둘 이상의 작업이 중지되고 프로세스들은 서로 활용할 자원을 기다리고만 있게 된다.

 

자원의 요구와 해제는 시스템 호출로 한다. 파일이나 입출력장치 등 자원을 읽거나 쓰는 일도 시스템 호출로만 할 수 있다. 따라서 운영체제는 프로세스가 자원을 요구하면 나눠 받을 수 있도록 언제나 확인하고 이 사실을 기록해야 한다.

 

교착 상태는 제한된 자원의 이용률을 증가시키고 시스템 효율성을 높이려고 사용하는 병행 처리 기술과 자원 공유에 따른 부작용이다. 교착 상태를 이해하려면 먼저 프로세스가 어떤 순번으로 자원을 이용하는지 알아야 한다. 일반적으로 프로세스는 자원 요구, 자원 이용, 자원 해제 순서로 자원을 이용한다.

 

1. 자원 요구는 프로세스가 필수인 자원을 요구한다. 해당 자원을 이용할 수 있으면 요구를 바로 허락하지만, 해당 자원을 다른 프로세스가 이용 중이면 허락할 때까지 대기해야 한다.

2. 자원 이용은 프로세스가 요구한 자원을 얻어서 이용한다. 예시를 들면, 요구한 자원이 프린터라면 프로세스는 프린터를 활용하여 출력한다.

3. 자원 해제는 프로세스가 자원 이용을 끝낸 후 해당 자원을 되돌려 준다.

 

교착 상태의 예

- 디스크를 공유할 때 일어나는 교착 상태

디스크 이용에 통제가 없으면 프로세스들이 서로 충돌하는 명령을 요구할 때 교착 상태가 일어날 수 있다. 예시를 들면, 프로세스 p1이 저장된 자료를 체크하려고 실린더 55의 내용을 읽으라고 명령하면, 디스크 헤드는 실린더 55로 이동한다. 그리고 p1은 일시 중단 상태가 되고 입출력 채널은 다음 입출력을 요구한다. 프로세스 p2가 입출력 채널 제어권을 넘겨받아 실린더 245에 위치한 레코드에 쓰기 명령을 하면, 디스크 헤드는 다시 실린더 245로 움직이고 프로세스 p2는 중지 상태가 된다. 이번에는 프로세스 p1이 입출력 채널 조정권을 넘겨받고 프로세스 p1이 실린더 55의 내용을 읽으라고 다시 명령하면, 디스크 헤드는 다시 실린더 55로 이동한다. 그러면 입출력 채널 통제권은 다시 프로세스 p2로 넘어가 프로세스 p2가 입출력 채널에 다시 명령한다. 이때 디스크 헤드는 실린더 55와 실린더 245 사이를 움직이지만, 두 프로세스 모두 원하는 서비스를 완수할 수 없다.

 

- 스풀링 시스템에서 일어나는 교착 상태

스풀링 시스템은 간단하게 교착 상태에 빠진다. 디스크에 나눠 받은 스풀 공간의 출력을 완료하지 않은 상태에서 다른 작업이 스풀 공간을 모두 독점하면 교착 상태가 일어난다. 스풀링 처리부에 공간을 충분히 두면 교착 상태 발생률이 줄어들지만 값이 많이 든다. 이때는 스풀링 파일의 일정 포화 임계치를 설정하여 교착 상태를 예방할 수 있다. 예시를 들면, 스풀 공간이 75% 정도 차면 새로운 일을 읽어 들이지 못하도록 하여 교착 상태를 예방하는 것이다. 그 대신 그만큼 시스템의 처리량은 줄어들 수 있다.

 

- 네트워크에서 일어나는 교착 상태

네트워크가 붐비거나 입출력 버퍼 공간이 모자란 네트워크 시스템에 메시지 흐름을 조정하는 적당한 프로토콜이 없으면, 곤란한 상태가 일어날 수 있다.

 

교착 상태는 둘 이상의 작업이 기다리는 상태로 중요한 자원을 활용하려고 기다릴 때 일어난다. 곧, 어떤 작업에 필수인 자원을 다른 작업이 독점하여 사용할 수 없을 때 일어나므로 교착 상태에서는 자원의 요구와 해제가 중요하다. 컴퓨터 시스템에서 교착 상태가 일어나는 예시는 위와 작성한 것과 같다

 

교착 상태의 발생 조건

교착 상태는 시스템에서 상호배제, 비선점, 점유와 대기, 순환 대기 등 네 가지 조건을 충족시키면 일어나게 된다. 순환 대기는 나머지 3개의 조건을 달성하면 발생하게 된다.

 

요약 및 결론

• 교착 상태는 프로세스가 서로 필요한 자원을 기다리며 진행할 수 없는 상태다.

• 교착 상태는 시스템 자원에 요청이 뒤엉킨 상태로, 두 프로세스가 사용하는 자원을 서로 기다리고 있을 때 일어난다.

• 교착 상태는 제한된 자원의 사용률을 증가시키고 시스템 효율성을 높이려고 사용하는 병행 처리 기술과 자원 공유에 따른 부작용입니다.

• 교착 상태는 시스템에서 상호배제, 비선점, 점유와 대기, 순환 대기 등 네 가지 조건을 충족시키면 일어나게 됩니다.

• 교착 상태의 예로는 디스크를 공유할 때 일어나는 교착 상태, 스풀링 시스템에서 일어나는 교착 상태, 네트워크에서 일어나는 교착 상태 등이 있습니다.