이 글에서는 교착 상태 문제를 해결하는 방법 몇 가지 알아볼 것이다. 교착 상태를 해결하는 수단은 대략 다음 세 가지로 나눌 수 있다.
- 교착 상태가 일어나지 않도록 예방하는 방법
- 교착 상태의 발생 가능성을 고려하고 이를 적당히 회피하는 방법
- 교착 상태를 허가하되 교착 상태를 탐지하여 재회복하는 방법
교착 상태 예방
보통 교착 상태는 다음 네 가지 방법으로 예방할 수 있다.
1. 비선점 조건 방지
2. 순환 대기 조건 방지
3. 자원의 상호배제 조건 방지
4. 점유와 대기 조건 방지
앞서 설명한 교착 상태의 네 가지 조건이 하나라도 일어나지 않도록 하면 교착 상태를 예방할 수 있다. 하지만 상호배제 문제는 생각하여 프로세스가 희망하는 자원을 배타적으로 이용하려고 하는 것은 제외해야 한다. 전용 자원에서는 교착 상태가 일어나지 않기 때문이다. 하벤더의 경우 상호배제를 제외한 다음 세 가지 교착 상태 예방 수단을 제시했다.
- 어떤 자원을 차지하고 있는 프로세스의 요구를 더 이상 허가하지 않으면 차지한 자원을 모두 반납하고, 필요할 때 다시 자원을 요구해야 한다.
- 모든 프로세스에 자원을 순번대로 나눠줘야 한다. 모든 프로세스에 각 자원 유형별로 할당 순번을 제공한 후 순서에 따라 자원을 요구하게 한다.
- 각 프로세스는 필수인 자원을 한 번에 모두 요구해야 하며, 요구한 자원을 모두 제공받기 전까지는 일을 수행할 수 없다.
자원의 상호배제 조건 방지
여러 프로세스가 같은 순간에 읽기 전용 파일을 열려고 할 때도 파일 접근을 할 수 있으므로 프로세스가 공유 자원을 기다릴 필요가 없다. 하지만 보통 상호배제 조건을 충족시키지 않으면 교착 상태의 예방이 불가능하다. 어떤 자원은 공유 자체가 불가능할 때도 있다. 예시를 들면 파일 쓰기는 배타적인 접근만 허가해야 하는데, 하나 이상의 프로세스에 쓰기 권한이 동시에 있으면 교착 상태가 일어날 수 있기 때문이다. 상호배제는 자원의 비공유가 전제되어야 한다. 예시를 들면, 여러 프로세스는 프린터를 같은 순간에 공유할 수 없다. 공유 자원은 배타적인 접근이 필요 없으므로 교착 상태가 일어나지 않는다. 읽기 전용 파일은 공유 자원의 좋은 예이다.
점유와 대기 조건 방지
점유와 대기 조건을 예방하는 방법 중 하나는 자원을 나눠줄 때 시스템 호출된 프로세스 하나를 발동하는 데 필수인 모든 자원을 먼저 할당하여 발동한 후 다른 시스템 호출에 자원을 할당하는 것이다. 또 다른 방법은 프로세스가 자원을 전혀 갖고 있지 않을 때만 자원을 요구할 수 있도록 허가하는 것이다. 물론 프로세스 전부는 자원을 요구하고 이용할 수 있다. 프로세스가 자원을 더 요구하려면 자신에게 할당된 자원을 전부 해제해야 한다.
다음 예시로 두 방법의 차이를 이해하자. 여기에 DVD 드라이브에서 디스크 파일로 데이터 복제, 복제한 데이터를 정렬, 정렬 결과를 프린터로 인쇄하고 테이프 드라이브에 복제하는 프로세스가 있다. 첫 번째 방법은 프로세스를 시작할 때 필수인 자원을 전부 요구한다. 그렇다면 프로세스를 시작할 때 DVD 드라이브와 디스크 파일, 테이프 드라이브, 프린터를 모두 요구해야 한다. 그러므로 마무리 단계에 필수인 테이프 드라이브를 전체 실행 시간 동안 차지한다.
두 번째 방법은 프로세스가 처음에는 DVD 드라이브와 디스크 파일만 요구하도록 허가한다. 프로세스는 DVD 드라이브에서 디스크 파일로 복제한 후 DVD 드라이브와 디스크 파일을 해제하고, 다시 디스크 파일과 프린터를 요구한다. 또 디스크 파일에서 프린터로 복제한 후 두 자원을 해제하고, 디스크 파일과 테이프 드라이브를 요구한다. 디스크 파일에서 테이프 드라이브로 복사한 후 두 자원을 해제하고 프로세스를 종료한다.
이 두 방법에는 두 가지 단점이 있다.
- 기아 상태가 일어날 수 있다. 자주 활용하는 자원이 다른 프로세스에 할당되어 있는 프로세스는 끝없이 기다려야 하는 경우가 일어난다. 그리고 적은 수의 자원을 요구한 프로세스의 우선순위가 더 높아 많은 수의 자원을 요구한 프로세스의 대기시간이 늘어날 수 있다. 따라서 이 방법은 대화식 시스템에서는 사용할 수 없다.
- 자원의 효율성이 너무 낮다. 많은 자원이 활용되지 않으면서 오랫동안 할당되어 있기 때문이다. 앞의 예시처럼 데이터가 디스크에 그대로 남아 있다고 확신할 수 있으면 DVD 드라이브와 디스크를 해제하고 디스크와 프린터를 요구할 수 있다. 하지만 이를 확신할 수 없다면 일을 실행할 때 모든 자원을 요구해야 한다.
시스템에서 점유와 대기 조건이 일어나지 않으려면, 프로세스가 작업을 실행하기 전에 필요한 자원을 전부 요구하고 얻어내야 한다. 프로세스가 수행에 필수인 자원을 한꺼번에 요청하고 허락할 때까지 작업을 임시 중단하여 대기 조건이 충족되지 않도록 하는 것이다. 이때를 최대 자원 할당이라고 한다.
교착 상태 회피
교착 상태 회피는 교착 상태의 모든 발생 가능성을 미리 제거하는 것이 아니다. 오히려 교착 상태가 일어날 가능성을 인정하고, 교착 상태가 일어나려고 할 때 적절히 회피하는 것이다. 예방보다 회피가 더 병행성을 허용한다.
교착 상태의 회피 방법은 프로세스 시작 중단, 자원 할당 거부 등 두 가지가 있다.
교착 상태 회복
시스템이 교착 상태 예방 알고리즘이나 교착 상태 회피 알고리즘을 이용하지 않는다면 교차 상태가 일어날 수 있다. 그러므로 발동한 교착 상태에서 회복하려면 시스템 상태를 검사하는 교착 상태 탐지 알고리즘과 교착 상태에서 회복시키는 알고리즘 등 두 가지 알고리즘이 필수이다.
요약 및 결론
• 교착 상태를 예방하는 방법으로는 비선점 조건 방지, 순환 대기 조건 방지, 자원의 상호배제 조건 방지, 점유와 대기 조건 방지가 있다.
• 교착 상태를 회피하는 방법으로는 프로세스 시작 중단, 자원 할당 거부가 있다.
• 교착 상태에서 회복하는 방법으로는 교착 상태 탐지 알고리즘과 교착 상태에서 회복시키는 알고리즘이 있다.
• 교착 상태 회피는 교착 상태의 모든 발생 가능성을 미리 제거하는 것이 아니라, 교착 상태가 일어날 가능성을 인정하고, 교착 상태가 일어나려고 할 때 적절히 회피하는 것이다.
• 교착 상태 회복은 시스템이 교착 상태 예방 알고리즘이나 교착 상태 회피 알고리즘을 이용하지 않는다면 교차 상태가 일어날 수 있으므로, 발동한 교착 상태에서 회복하려면 시스템 상태를 검사하는 교착 상태 탐지 알고리즘과 교착 상태에서 회복시키는 알고리즘 등 두 가지 알고리즘이 필수적이다.
'IT 및 프로그래밍' 카테고리의 다른 글
데이터 통신과 컴퓨터 네트워크의 용어의 정의 - 1 (0) | 2024.10.24 |
---|---|
운영체제의 구조에 대하여 (0) | 2024.10.22 |
교착 상태와 기아 상태 중 교착 상태의 개념과 발생원인 (0) | 2024.10.22 |
병행 프로세스와 상호배제 중 상호배제와 동기화에 관하여 (0) | 2024.10.22 |
병행 프로세스와 상호배제 중 병행 프로세스에 대하여 (0) | 2024.10.22 |
프로세스와 스레드 중 스레드의 구현에 대하여 (0) | 2024.10.22 |
프로세스와 스레드 중 프로세스의 관리에 대하여 - 2 (0) | 2024.10.22 |
운영체제의 발전 과정과 유형 중 유형에 대하여 (0) | 2024.10.22 |