Last update: @1/7/2023
•
교착 상태(deadlock)
: 일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상
◦
프로세스를 실행하기 위해서는 자원이 필요한데, 두 개 이상의 프로세스가 각자 가지고 있는 자원을 무작정 기다릴 경우 그 어떤 프로세스도 더이상 진행할 수 없는 교착상태가 됨
◦
뮤테스 락에서도 두 프로세스가 서로 잠그고 들어간 상대방 락이 false가 되기를 기다리면 교착상태가 됨
◦
교착상태를 해결하는 방법
▪
교착상태가 발생했을 때의 상황을 정확히 표현해 봄
•
자원 할당 그래프(resource-allocation graph)
: 어떤 프로세스가 어떤 자원을 사용하고 있고, 또 어떤 프로세스가 어떤 자원을 기다리고 있는 지를 표현하는 간단한 그래프
◦
규칙
▪
프로세스는 원으로, 자원의 종류는 사각형으로 표현
▪
사용할 수 있는 자원의 개수는 자원 사각형 내에 점으로 표현
예) 하드디스크가 3개라면 하드디스크 자원 내에 3개의 점이 있음
▪
프로세스가 어떤 자원을 할당받아 사용 중이라면 자원에서 프로세스를 향해 화살표를 표시함. 프로세스가 자원 이용을 끝내고 운영체제에 자원을 반납하면 화살표는 삭제됨
▪
프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자원으로 화살표를 표시함
▪
교착상태가 발생한 그래프는 원형을 띔(원형을 띈다고 무조건 교착상태가 되는 것은 아님)
▪
교착 상태가 일어나는 근본적인 이유에 대해 알아야 함
•
교착 상태 발생 조건
: 아래 조건이 모두 만족될 때 교착 상태가 발생할 가능성이 생김
◦
상호 배제(mutual exclusion)
: 해당 자원을 한 번에 하나의 프로세스만 이용 가능함
◦
점유와 대기(hold and wait)
: 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태
◦
비선점(nonpreemptive)
: 어떤 자원을 이용하는 프로세스의 작업이 끝나야만 비로소 이용할 수 있는 것을 비선점 자원이라고 함. 즉, 다른 프로세스의 자원을 강제로 뺏지 못함
◦
원형 대기(circular wait)
: 프로세스들이 원의 형태로 자원을 대기하는 것