오랜만에 cs 공부를 해서 그런지 다시 보는건데도 헷갈린다..
역시 몰입해서 공부하고 반복적으로 정리하는 것이 오래 남는 방법인가 보다
교착 상태가 무엇인지 가장 잘 보여주는 그림이다
서로가 서로에게 이미 할당 된 자원을 기다리고 있다보니 이도저도 못하고 무한 로딩이 걸려버린 것!!
이렇게 서로 기다리면서 프로세스가 아무것도 못하는 상태를 교착상태라고 한다
일단 왜 교착상태가 일어났는지 알아야한다!!
그러기 위해서는 한눈에 이해하기 쉬운 그래프를 그려보는 방식이 좋은데
자원 할당 그래프를 그려보면 직관적으로 이해가 가능하다
SSD, CPU, 프린터라는 자원이 각 프로세스에 어떻게 할당 되었는지,
그리고 어떤 프로세스가 이 자원들을 기다리는지 화살표로 표시한 그래프
4가지 조건을 전부 만족해야만 서로가 서로를 애타게 바라보는 교착상태가 된다
상호배제 -> 한 프로세스가 사용중인 자원을 다른 프로세스가 사용 못하는 상태
점유와 대기 -> 자원을 할당 받은 상태에서 다른 자원이 오길 기다리는 것
비선점 -> 다른 프로세스의 자원을 강제로 뺏지 못하는 상태!
원형대기 -> 프로세스들이 원의 형태로 자원을 대기하는 상태!
상호배제를 없애면? -> 난장판이 될 수 있음
점유와 대기를 없애면? -> 특정 프로세스에 모두 할당하거나 아에 할당 안하는 방식 / 자원 활용률 낮춤!
비 선점 -> 이게 그나마 효과적!, cpu등이 실제로 우선순위로 할당이 가능! / 모든 자원이 선점이 되는건 아님!
원형 대기 -> 모든 자원에 번호를 붙이고 오름차순으로 정의해주기 -> 이론임
안전 순서열 : 교착 상태 없이 안전하게 프로세스들에게 자원 할당 가능한 순서
안전 상태 : 교착 상태 없이 모든 프로세스가 자원을 할당 받고 종료될 수 있는 상태 (안전 순서열 존재!)
불 안전 상태 : 교착 상태 발생 할 수도 있는 상태
선점 회복: 교착상태 인정하고 프로세스에게 일단 하나 다 주고 하나씩 해결하기!
강제 종료 : 작업내용 읽을 수 있음