3. 네가지 교착 상태 필요조건에 대해 설명하시오
교착 상태는 상호 배제, 비선점, 점유와 대기, 원형 대기 이 4가지 조건이 모두 충족되야 발생한다.
1.
상호 배제 (mutual exlcusion)
•
프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이다
•
배타적인 자원을 여러 프로세스가 사용해야 하는 경우 교착 상태가 발생한다
2.
비선점 (non-preemption)
•
한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 자원이다
3.
점유와 대기 (hold and wait)
•
다른 프로세스가 필요로 하는 자원을 점유하고 있으면서 또 다른 자원을 기다리는 상태
4.
원형 대기 (circular wait)
•
점유와 대기를 하는 프로세스들이 서로 방해하는 방향이 원을 이루면 프로세스들의 서로 양보하지 않기 때문에 교착 상태에 빠진다.
4. 교착 상태 해결 방법 중, 교착 상태를 유발하는 네 가지 조건을 무력화하는 방법은 무엇인가?
•
교착 상태를 해결하는 방법은 예방, 회피, 검출, 회복이 있다. 이 중, 교착 상태를 유발하는 조건들을 무력화 하는 방법은 예방이다.
•
교착 상태는 상호 배제, 비선점, 점유와 대기, 원형 대기라는 네 가지 조건을 동시에 충족해야 발생하기 때문에 이 중 하나라도 막는다면 교착 상태가 발생하지 않는다.
•
실효성이 적어 잘 사용되지 않는다
1.
상호 배제 예방
•
시스템 내의 모든 자원을 공유할 수 있도록 한다.
◦
eg) 철학자 문제에서 모든 철학자가 포크를 공유할 수 있다면 교착 상태가 발생하지 않듯이 변수나 파일도 공유하면 교착 상태가 나지 않는다.
•
하지만 시스템 내에는 공유할 수 없는 자원이 있다
◦
지난 주 임계구역이 보호 받지 못하면 작업의 결과가 달라지는 것을 보았듯이 입금한 돈이 사라지거나 프린터의 출력물이 뒤죽박죽이 될 것이다
•
상호 배제를 예방하는 것은 사실상 어렵다
2.
비선점 예방
•
모든 자원을 빼앗을 수 있도록 한다
◦
철학자 문제에서 옆 사람의 포크를 빼앗는 것
•
사실상 불가능하다
•
하지만 임계구역을 보호하기 위해 잠금을 사용하면 자원을 빼앗을 수 없고, 상호배제 (한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없다) 도 보장할 수 없다. 사실상 시스템의 모든 자원을 빼앗을 수 있도록 하지 못한다
•
또한 그럴 수 있더라도 어떤 기준으로 자원을 빼앗을지, 빼앗은 시간 중 얼마나 사용할 지 등을 결정하기 어렵고 우선순위가 높은 프로세스가 우선순위가 낮은 프로세스의 자원을 무조건 빼앗을 수 있기 때문에 아사 현상을 일으킨다
◦
아사 현상: 스케줄링 정책 문제로 특정 프로세스의 작업이 이루어 지지 않는 것
•
우선 순위가 낮은 프로세스가 몇번을 양보한 끝에 무조건 자원을 사용하게 되면, 이 프로세스가 점유하고 있는 자원은 비선점 자원이 되서 다시 교착 상태에 빠질 수 있다.
c.
점유와 대기 예방
•
프로세스가 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 하는방법
•
전부 할당하거나 아예 할당하지 않는 방식
•
프로세스는 시작 초기에 자신이 사용하려는 모든 자원을 한꺼번에 점유하거나, 그렇지 못할 경우 자원을 모두 반납해야 한다
•
단점
◦
프로세스가 자신이 사용하는 모든 자원을 알기 어려운데, 추가로 필요한 자원이 생기면 이를 다시 확보하기 어렵다
◦
프로세스가 앞으로 사용할 예정이지만 당장 사용하지 않아도 되는 자원까지 미리 선점해버리기 때문에 그 자원을 필요로 하는 프로세스의 작업이 지연된다
◦
많은 자원을 사용하는 프로세스는 자원을 적게 사용하는 프로세스보다 자원을 동시에 확보하기 어렵기 때문에 작업이 지연되는 아사 현상이 발생
◦
점유와 대기 예방을 실제로 구현하면 거의 모든 프로세스가 일괄 작업 방식으로 처리된다. 자원을 확보한 순서대로 실행하면 그 자원을 획득한 프로세스가 작업을 끝내야 다른 프로세스가 작업을 할 수 있기 때문에 시스템의 효율이 떨어진다
d.
원형 대기 예방
•
점유와 대기를 하는 프로세스들이 원형을 이루지 못하도록 막는 방법
•
자원을 한 방향으로만 사용하도록 설정한다
◦
모든 자원에 숫자를 부여하고 숫자가 작은 자원을 잡은 상태에서 큰 숫자를 잡는 것은 허용하지만 숫자가 큰 자원을 잡은 상태에서 작은 숫자를 잡은 것은 허용하지 안흔다
•
단점
◦
프로세스 작업 진행에 유연성이 떨어진다
▪
프린터(3)가 마우스(1) 보다 더 높은 숫자를 가지고 있다면, 프린터를 사용한 다음 마우스를 할당받지 못하기 때문에 프린트를 사용한 다음에는 마우스를 사용할 수 없는 사용자 입장에서는 납득하기 어려운 현상이 일어나다.
◦
자원의 번호를 어떻게 부여할 것인지가 명확하지 않다
결론: 교착 상태 예방은 상호 배제와 비선점을 예방하기 어려우며, 점유와 대기, 원형 대기는 프로세스 작업 방식을 제한하고 자원을 낭비하기 떄문에 사용할 수 없다.