Search

13-2 교착 상태 해결 방법

Last update: @1/7/2023
혼자 공부하는 컴퓨터구조 + 운영체제

운영체제

09 운영체제 시작하기

10 프로세스와 스레드

11 CPU 스케줄링

12 프로세스 동기화

13 교착 상태

14 가상 메모리

15 파일 시스템

교착 상태 예방
교착 상태 필요 조건 네 가지 중 하나늘 충족하지 못하게 함
자원의 상호 배제 없애기 : 모든 자원을 공유 가능하게 만드는 것. 비현실적임
점유와 대기 없애기 : 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분
당장 자원이 필요해도 기다릴 수 밖에 없는 프로세스와 사용되지 않으면서 오랫동안 할당되는 자원을 다수 할당하게 되어 자원의 활용률이 낮아짐
자원을 많이 이용하는 프로세스는 자원을 사용할 타이밍을 확보하기가 어려워저 기아 현상이 야기됨
비선점 조건 없애기 : 이용 중인 프로세스부터 해당 자원을 빼앗을 수 있음
CPU 같은 자원에는 효과적이지만, 프린트 같은 자원에는 어려움. 다소 범용성이 떨어짐
원형 대기 조건 없애기 : 모든 자원에 번호를 붙이고, 오름차순으로 자원을 할당하면 원형 대기가 발생하지 않음
모든 컴퓨터 시스템 내에 존재하는 수많은 자원에 번호를 붙이기는 쉽지 않음
각 자원에 어떤 번호를 붙이는지에 따라 특정 자원의 활용률이 떨어질 수 있음
교착 상태 회피 : 교착 상태가 발생하지 않을 정도로만 조심 조심 자원을 할당하는 방식
교착 상태 회피 방식에서는 교착 상태를 한정된 자원의 무분별한 할당으로 인해 발생하는 문제로 간주함
프로세스들에 배분할 수 있는 자원의 양을 고려하여 교착 상태가 발생하지 않을 정도의 양만큼만 자원을 배분하는 방법
교착 상태 회피에서 사용되는 개념
안전 상태(safe state) : 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태. 안전 순서열대로 프로세스들에 자원을 배분하여 교착 상태가 발생하지 않는 상태.
불안정 상태(unsafe state) : 교착 상태가 발생할 수도 있는 상황. 안전 순서열이 없는 상황
안전 순서열(safe sequence) : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서. 즉, 프로세스들의 실행 순서
교착 상태 검출 후 회복 : 교착 상태 발생을 인정하고 사후에 조치하는 방식.
운영체제는 프로세스들이 자원을 요구할 때마다 그때그때 모두 할당하며, 교착 상태 발생 여부를 주기적으로 검사함
교착 상태가 검출되면 그때 비로소 다음과 같은 방식으로 회복함
선점을 통한 회복 : 교착 상태가 해결될 떄까지 한 프로세스씩 자원을 몰하주는 방식. 교착 상태가 해결될 때까지 다른 프로세스로부터 자원을 강제로 빼앗고 한 프로세스에게 할당함
프로세스 강제 종료를 통한 회복
교착 상태에 놓인 프로세스를 모두 강제 종료
한 방에 교착 상태를 해결할 수 있는 가장 확실한 방식
그만큼 많은 프로세스들이 작업 내역을 잃게 될 가능성이 있음
교착 상태가 없어질 때까지 한 프로세스씩 강제 종료
작업 내역을 잃는 프로세스를 최대한 줄일 수 있음
교착 상태가 없어졌는지 여부를 확인하는 과정에서 오버헤드를 야기
타조 알고리즘(ostritch algorithm) : 교착 상태를 아예 무시하는 방식
문제 발생의 빈도가 최대 효율을 추구하는 엔지니어 입장에서 때때로 이 방식이 적합할 때도 많음