[7주차] 데드락

신은지·2021년 10월 24일
0

반효경 공룡 OS

목록 보기
7/8

서로가 가진 자원을 내어놓지 않아서 발생하는 대기 현상

데드락 회피


: 프로세스가 자신이 평생에 걸쳐 사용할 자원을 알려주면, 그래프를 활용해 데드락 발생 여부를 체크하여 회피


회피 예시 : Banker's Algorithm

언제나 safe한 상태를 유지하도록 자원을 할당하는 알고리즘
: 추가 요청할 수 있는 자원을 가용 자원만으로 충족할 수 있는 지를 확인하여 상태 유지

: MAX로 자신이 평생 사용할 자원을 알려준다
: Need로 추가로 요청할 수 있는 자원을 알려준다
: 비록 자원에 여유가 있더라도, 불안정한 상황이라면 회피
: 가용자원으로 만족이 되지 않는 상황이라면 다른 프로세스로부터 자원을 받더라도 해결이 안되는 최악의 상황을 가정해야한다.

safe한 상황 : 가용 자원만 가지고 프로세스를 종료시킬 수 있는 sequence


데드락 탐지 및 회복

데드락이 발생했는지 탐지한 후 회복한다

: 좌측 자원할당 그래프는 사이클이 발생했으므로 데드락 상태
: 우측은 자원할당 그래프에서 자원 지우고 프로세스 사이의 관계만 나타낸 그래프. 사이클 더 쉽게 찾을 수 있다.

리소스에 인스턴스가 여러개 있는 경우의 탐지

  • 가용자원이 하나도 없기에, 요청한 자원이 없는 프로세스로부터 자원을 받아 요청을 수행해야한다.
  • 이렇게 모은 자원으로 요청을 처리할 수 있는지를 체크
    • Banker's는 최악의 자원 요청을 고려하여 보수적으로 데드락 가능성을 체크 : 현재 뿐 아니라 미래까지 고려
    • 데드락 탐지에서는 프로세스가 쉽게 자원을 내어놓는다고 가정하여 데드락 가능성을 체크 : 현재만 고려

데드락 recovery

  1. 프로세스들을 죽이는 방법
    (1) 데드락에 연루된 모든 프로세스들을 죽인다
    (2) 연루된 프로세스를 하나씩 죽여서 데드락이 사라지는지를 확인한다

  2. 자원을 빼앗는 방법
    : 데드락에 연루된 프로세스에게서 자원을 빼앗는다
    : 프로세스를 하나 골라서 빼앗는다
    : 선정 횟수와 rollback 횟수를 고려하여 빼앗는다


데드락 무시

현대의 범용 운영체제들은 대부분 데드락을 무시하는 방식을 채택

  • 만약 데드락이 발생한다면?
    : 시스템은 아무것도 해주지 않고, 사람이 직접 해결한다.
profile
호그와트 장학생

0개의 댓글