CS/OS
교착 상태 예방
코타쿠
2021. 5. 14. 17:18
- 교착 상태 예방
- 교착 상태가 발생하기 위한 4가지 필요충분 조건 중 하나를 설계단계에서 배제
- 간접 예방 vs 직접 예방
- 간접 예방
- 조건 1~3중 하나를 허용치 않는다.
- 간접 예방
- 조건 4를 허용하지 않는다.
- 간접 예방
- 4가지 조건에 대한 해결 방안
- 상호배제
- 상호배제는 공유 자원의 일관성을 유지하기 위해 반드시 필요
- 점유 대기
- 프로세스가 자신이 사용할 모든 자원을 한번에 요청
- 모든 자원을 할당 받을 수 있다면 계속하고 그렇지 않으면 어떠한 자원도 할당 받지 않고 대기
- 비효율적
- 모든 자원을 할당받기 위해 오랜 기간 대기 하게 됨
- 한꺼번에 할당 받은 자원중 일부는 실제 수행이 끝날 때 쯤 사용될 수 있음. 실제로 이용되지 않으면서 점유될 가능성이 있다.
- 프로세스가 미래에 사용될 모든 자원 미리 예측 불가능
- 비효율적
- 비선점
- 방법 1 : 자원을 점유한 프로세스가 다른 자원을 요청했을 때 할당 받을 수 없다면, 자신이 점유한 자원을 반납 후 프로세스는 원래 자원 + 새로 원하는 자원을 함께 요청
- 방법 2 : 한 프로세스에서 다른 프로세스가 점유한 자원을 원하면, 운영체제는 다른 프로세스가 점유한 자원을 강제적으로 반납시키고 그것을 원하는 프로세스에게 할당
- 프로세스들이 서로 다른 우선순위를 가지고 있을 때만 교착상태를 예방할 수 있다.
- 자원의 상태를 저장하고 복구하기 쉬운 자원에만 사용할 수 있다. ex) CPU
- 환형대기
- 자원들의 할당 순서를 정해 환형 대기조건 제거 가능
- 이 말은 자원 1>2>3>4 의 순서가 있어 자원 4를 이용하기 위해서는 1 > 2 > 3을 거쳐 와야 한다는 것
- 자원 사용의 비효율성과 프로세스의 오랜 대기를 야기
- 프로세스 A가 현재 3을 앞으로 오랜 기간 사용하고, B가 자원 4를 사용하려 할 때, 프로세스 B는 프로세스 A가 자원 3을 다 사용할 때 까지 기다려야 한다.
- 자원들의 할당 순서를 정해 환형 대기조건 제거 가능
- 상호배제