[운영체제]7.데드락

이유정·2023년 7월 16일
0

운영체제

목록 보기
21/43

목표

데드락 처리의 네 방법 중 남은 세가지인 데드락 어버이던스, 디텍션 앤 리커버리, 이그노어런스를 배워본다.

데드락: 프로세스들이 서로 필요한 자원을 가지고 있으면서 내놓지 않는 상황

deadlock avoidence

데드락을 미연에 방지하는 바아법.
프로세스가 평생 사용 최대 자본을 미리 알려주고 그걸 이용해서 요청하는 자원을 할당해줬을 때 안전한가 안전하지 않은가 판단해서 안전한 경우에 한해서만 자원을 할당해준다.

single instance per resource types

자원에 instance 가 1개인 상황

안전하지 않은 상황이다
1번 프로세스가 자원2를 요청해버리면 점선이 실선으로 바귀면서
사이클이 만들어지고 데드락이 만들어진 것.
점선을 포함해서 사이클이 만들어질 것 같으면 자원이 놀고 있어도 자원을 안준다.

multiple instance per resource types

자원에 instance가 여러개인 상황 =>bankers 알고리즘
케이블을 이용해서 자원을 할당할지 안할지 결정한다.

가용자원은 없고 이친구들이 모두 가지고 있는건 내놓지 않으면서 최대로 자원을 요구하면 데드락이 된다.

철학: 비록 자원의 여유가 있더라도 이 친구가 자원을 최대로 요청했을 때 그 요청을 여유 있는 자원으로 처리가 안되면 절대 받아들이지 않는다. 0번 프로세스 요청은 안받아들여. 1번 프로세스 요청은 받아들여 몽땅 need를 다 요청해도 가용자원에서 충분하니까 ! 언젠가는 종료가 되고 ~ 할당된 자원이 가용자원으로 다 내놓는다. 2번의 요청은? 안받아줘~~ a를 6개까지 요청해버린까!


뱅커스 알고리즘은 항상 safe상태를 유지한다.
가용자원만 가지고 process를 하나씩 종료시킬 수 있는 sequence가 존재하면 => safe
안전한 친구들한테 자원을 몰아주고, 최대로 얻었기 때문에 언젠가 종료되면, 그게 가용자원으로 합쳐지고, 가용자원이 늘어났기 때문에 그걸로 안전하게 요청을 받아낸다,,,
언젠가 모든 프로세스가 허락받고 종료되는 sequence가 나온다.
=> safe한 상태
뱅커스 알고리즘은 프로세스의 요청을 허락할지 안할지만 판단한다. 가용자원으로 need 요청이 가능할 때만 준다~
결론: 자원이 있다고 주는게 아니고, 가용자원만으로 추가요청이 가능할 때만 받아들인다~~~

Deadlock Detection and recovery

이제는 데드락 생기면 처리하는 걸로

  • 어처피 데드락이 잘 발생하는 경우도 아니고,
  • 여유자원이 있는데도 데드락 생길까봐 자원을 안주는건 시스템의 비효율
    => 결국 데드락 때문에 시스템이 느려지거나 멈췄을 때 detection 하고 recovery 하는 방법을 알아보자~

자원당 인스턴스가 1개인 경우

자원당 인스턴스가 여러개인 경우


자원을 쓰고 할당된 자원으로 가용자원에 내놓는다고 가정 ~
현재가 데드락인지 아닌지 보는 방법 ~
여기 상황은 데드락이 아니다 !!

근데 만약 이런 상황이라면?

데드락이다 ~~~

뱅커스 알고리즘과 비교) 뱅커스 알고리즘은 무조건 프로세스가 최악의 요청을 했을 때를 가정해서, 요청 수락을 보수적으로 한다. 자원을 최대로 요청해도 데드락이 안생겨야 요청 수락~~
데드락 디텍션은 현재 요청된 자원만 확인하고 준다~

데드락을 detection했으면 데드락 recovery는 어떻게 하나~?
1. 데드락에 연루된 프로세스들을 죽이는 방법

  • 모든 프로세스를 다 종료시키는 방법
  • 프로세스를 하나씩 종료시키면서 데드락이 없어지는지 확인하는 방법

deadlock ignorance

데드락을 무시하는 방법
데드락은 드물게 발생하는 경우다~ 시스템이 데드락을 고려하는게 비효율적이다~~

profile
팀에 기여하고, 개발자 생태계에 기여하는 엔지니어로

0개의 댓글