[운영체제]6.병행 제어II(3)

이유정·2023년 6월 28일
0

운영체제

목록 보기
17/43

목표

데드락의 문제, 발생 조건, 처리방법 네 가지중 하나인 프리벤션을 알아본다.

교착상태

The Deadlock Problem

Deadlock 발생의 4가지 조건

Resource-Allocation Graph

자원과 프로세스의 관계를 그림으로 표시하는 하나의 방법을 소개. => 자원할당 그래프

Resource-Allocation GRaph

이 그래프를 보고 데드락이 있는지 없는지 확인할 수 있다.

Deadlock의 처리 방법

데드락을 방지하는 방법엔 어떤것이 있는가~?

01. Deadlock Prevention

가장 강력한 데드락 방지 방법인데, 아까데드락의 성립 조건 4가지 중 하나를 막는다 !

-mutual exclusion :배타적으로 자원을 쓴다는 조건이 필요했다. 근데 이건 우리가 데드락 방지에서 사용할 순 없다. 만약 공유해서 쓸 수 있는 자원이면 데드락 이야기가 나오진 않았을 것이다. 예를 들어 cpu 하나에 두개 프로세스가 지시할순 없다. 이 mutaul exclusion을 방지할 순 없다. 자원의 특성이기 때문에

  • hold and wait: 내가 가진 자원은 절대 안내놓고, 내가 가다린 자원을 계속 기다리는,,,
    이걸 어떻게 무산? => 내가 기다릴 때, 내 자원을 그냥 내어놓는 방식!!! 자원을 요청할 때는 다른 자원을 쥐고 있으면서 요청을 허용하지 않는다. => 근데 이렇게 되면 자원을 낭비한다. 시작될 때부터 종료될 때까지 자원을 균일하게 사용하지 않기 때문에, 쓸데없이 자원을 다 가지면서 일을 하는 것은 낭비다.
    두번째 방법2) => 자원이 필요할 때 ~ 보유 자원을 내놓고 요청하는 방법
  • no preemption: 빼앗기지 않는 조건을 막는다. 빼앗기게 하면 되는 거다~~. 자원중에서는 빼앗을 수 있는 자원이 있고, 빼앗을 수 없는 자원이 있다. cpu나 메모리는 빼앗을 수 있는 자원이다. 타이머같은게 cpu 할당시간 끝나면 인터럽트 걸어서 빼앗음. cpu는 빼앗겨도 괜찮은 이유=> process 수행 문맥을 save하고 다시 얻었을 때 복원해서 다시 수행한다. cpu는 데드락이 안생긴다는 뜻이다. // 뭔가 자원을 하는 도중에 자원을 빼앗아버리면 하는 일이 무산되고, 엉망되는 자원들이 있다.
  • circular wait: 사이클이 생기지 않게 어떻게 하는가?=> 자원에 번호를 매겨서 1번 자원을 얻어야지만 2번 자원을 얻을 수 있게 하면 데드락이 안생긴다. 높은 번호의 자원을 얻으려면 낮은 번호의 자원을 먼저 얻어야 한다는 조건을 건다.=> 2번 자원을 얻어야만 5번 자원을 얻을 수 있게 순서를 매긴다.

근데 이런 방법은 자원의 이용률을 저하, starvation 발생시키기도 한다. 쓸데 없이 자원을 반납, 빼앗고, 잘 생기지도 않는 데드락 막겠다고 Deadlock prevention은 데드락을 원청 봉쇄하지만 비효율적인 측면이 있다.

02. Deadlock Avoidance


  • 어떤 추가적 정보를 이용해서 데드락을 막는 방법이다.
    추가적 정보란? 데드락 어보이던스에서는 프로세스마다 내 평생의 자원을 최대로 쓰면 얼마나 쓸지의 정보가 미리 알려져있다고 가정한다.
  • 자원을 줘서 위험할 것 같으면 안준다. => 추가적 정보를 이용해서

Resource Allocation Graph algorithm


당장 데드락은 아니지만, 데드락의 위험성이 있을 때 그러면 비록 가용자원이지만 대단히 보수적으로 자원을 주지 않는 것으로 해결하는것이 avoidance다.

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

0개의 댓글