섹션4 데드락
- 데드락(교착상태)이란?
- 여러 프로세스들이 서로 끝나기만을 기다리며 아무것도 진행되지 못하는 상태
- 발생 이유?
- 교착상태의 필요조건
- 한 가지라도 충족하지 않는다면, 교착상태는 발생하지 않는다.
- 상호배제
- 점유된 리소스가 다른 프로세스들과 공유되면 안된다.
- 비선점
- 점유된 리소스를 다른 프로세스가 뺏을 수 없어야 한다.
- 점유와 대기
- 리소스 A를 점유중인 상태에서 리소스 B를 원하는 상태여야 한다.
- 원형 대기
- 점유와 대기를 하는 프로세스들의 관계가 원형을 이룬다.
- 이를 이용해서 교착상태를 해결해보려 하였으나, 제약이 많고 비효율적이라 다른 방식을 연구함. → 빠졌을 때 해결하는 방법
- 교착상태 해결 방법
- 교착상태 회피
- 프로세스에게 자원 할당 시, 어느정도의 자원을 할당해야 교착상태가 발생하는지 파악 후, 그렇지 않은 수준의 자원을 할당
- 할당된 자원의 수를 기준으로, 안정 상태와 불안정 상태로 나뉜다.
- 운영체제는 최대한 안정상태를 유지하기 위해 자원할당을 한다.
- 불안정 상태에 있더라도 무조건 교착상태에 빠지는 것이 아니라, 확룰이 높아진다.
- 교착상태 회피 - 은행원 알고리즘 (상환능력이 있는 사람에게 돈을 빌려준다)
- 운영체제는 자신이 가진 자원의 수를 알고있다 . (시스템의 총 자원)
- 프로세스들은 자신이 필요한 최대 자원 개수를 운영체제에게 알려준다. (최대 요구 자원)
- 교착상태 방지는 되지만, 비용이 비싸고 비효율적
- 교착상태 해결
- 가벼운 교착 상태 검출 - 타이머를 이용하는 방식
- 프로세스가 일정 시간동안 동작하지 않는다면(타임아웃) 교착상태로 간주하고 해결
- 일정 시간마다 체크포인트를 만들어 작업을 저장해 두었다가 롤백
- 무거운 교착 상태 검출 - 자원 할당 그래프를 이용하는 방식
- 프로세스가 어떤 자원을 사용하는지 지켜보고, 교착상태 발생 시 해결
- 프로세스와 자원간의 관계를 그래프로 그려 순환구조가 있는지 확인
- 교착상태를 일으킨 프로세스를 강제종료
- 재실행시 체크포인트로 롤백
- 운영체제가 지속적으로 그래프를 유지하고 확인해야하기 때문에 오버헤드가 크다
- 하지만 가벼운 교착상태에서 억울하게 종료되는 프로세스가 발생하지 않는다.
출처 : 인프런, 그림으로 쉽게 배우는 운영체제