KOCW.이화여자대학교.반효경.운영체제
위 강의를 바탕으로 학습 및 정리했습니다
둘 이상의 프로세스가 서로 상대방에 의해 충족될 수 있는 event를 무한히 기다리는 현상
교착상태가 일어나는 건 하드웨어 자원일 수도 있음
자신이 가진 자원을 절대 내놓지 않으면 발생함
자원 사용하는 절차
자원이 여러개면 데드락이 아닐 수도 있는데
왼쪽은 두개인데도 사이클 2개 생김
오른쪽은 사이클이 생겼지만 자원이 여러개이므로 현재 데드락은 아닌데 데드락 가능성이 있음
1.
근데 이런 방법은 매우 비효율적
뱅커스는 항상 safe하다
뱅커스 알고리즘은 프로세스들이 자원을 요청했을 때 줄까말까만 결정함
지금 당장 최대로 쓰지 않아도 최대로 필요한 자원을 보고 현재 available하지 않으면 절대 자원요청을 받아주지 않기 때문
즉, 최악의 조건에서도 데드락이 생길거냐 안생길거냐를 확인함
안전한 프로세스에게 자원 몰아줘서 자원 다 쓰고 내놓게 만들면 추후 가용자원이 많아지므로
먼저, 현재의 가용 자원으로 최대 자원 사용 상태가 될 수 있는 프로세스를 찾는다
그 후 그 프로세스에게 올인 해버리고 빨리 내놓게 함 (Deadlock Avoidance에서 프로세스마다 자원을 최대로 쓰면 얼마나 쓰는지에 대한 정보를 알고 있기 때문에 가능)
자원 다 쓰고 내놓으면 그게 전부 가용 자원이 됨
그냥 데드락 생기게 놔둠
어차피 데드락 자주 안생기고 데드락 생길까봐 여유자원을 안주고 묶어놓으면 효율이 떨어진다 바라보는 측면
-> 자원 요청하면 바로 줘버리고 데드락이 발생하면 Detection and recovery로 해결하는 방법
자원당 인스턴스 하나밖에 없으면 그래프를 통해 데드락 확인
인스턴스 여러개면 뱅커스처럼 테이블 만들어서 확인
뱅커스는 최악의 조건에서도 데드락이 생기냐 안생기냐를 보지만
이건 현재 데드락이 생기냐 안생기냐가 관심
운영체제가 데드락에 관여 안함 == 무시
데드락은 엄청 드물게 발생
-> 이에 대해 관여하는 것 자체가 비효율적이기 때문에 이를 무시함
하지만 현대 범용 운영체제들은 모두 이것을 채택했다 ㅋㅋ
그럼 데드락 생기면 어떡함??