[운영체제] DeadLock

한결·2023년 4월 13일
1

CS

목록 보기
8/34
post-thumbnail

KOCW.이화여자대학교.반효경.운영체제
위 강의를 바탕으로 학습 및 정리했습니다


1

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

교착상태 (deadlock)

둘 이상의 프로세스가 서로 상대방에 의해 충족될 수 있는 event를 무한히 기다리는 현상

  • 서로서로가 길을 막아서 진행 불가능한 상태

  • 교착상태가 일어나는 건 하드웨어 자원일 수도 있음

  • 자신이 가진 자원을 절대 내놓지 않으면 발생함

  • 자원 사용하는 절차

    • Request : 자원 요청
    • Allocate : 자원 할당
    • Use : 자원 사용
    • Release : 자원 다 쓰면 내놓기

데드락 발생 4가지 조건

  • 4가지 조건이 모두 만족이 되어야 데드락 발생
    -> 4가지 중 하나 깨면 데드락 해결

자원할당그래프

  • R안의 점은 자원의 개수
  • 화살표가 가르키는건 자원을 기다리고 있다는 뜻

  • 자원이 여러개면 데드락이 아닐 수도 있는데
    왼쪽은 두개인데도 사이클 2개 생김

  • 오른쪽은 사이클이 생겼지만 자원이 여러개이므로 현재 데드락은 아닌데 데드락 가능성이 있음

데드락 처리 방법

  • 위 두가지는 예방방법
  • 아래 두가지는 해결 방법

Deadlock Prevention


1.

  • CPU 같은건 공유 못함 이러한 공유하면 안되는 자원을 공유 안하기
  • 다른 자원을 가지고 있을 때는 자원 요청 못하게함
  • 빼았기지 않는 조건을 없애버리기
    근데, 자원에는 빼았아도 무방한 자원(CPU 등)과 빼았으면 안되는 자원(작업 도중 자원을 뺐으면 작업이 망가져 버리고나 처음부터 다시 해야하는)으로 나뉨
    -> 항상 사용하진 못함
  • 자원 얻는 순서 매기기

근데 이런 방법은 매우 비효율적

Deadlock Avoidance

  • 추가적인 정보를 이용해 데드락을 막는 방법
    • 프로세스마다 자원을 최대로 쓰면 얼마나 쓰는지에 대한 정보

  • 자원을 줘서 데드락의 가능성이 있으면 당장은 데드락이 안생겨도 자원을 안줘버리기 (아래 참고)

Resource Allocation Graph algorithm

  • 요청을 하면 점선(요청할 수 도 있다는 의미)에서 실선으로 바뀜

Example of Banker's Algorithm

  • 뱅커스는 항상 safe하다

  • 뱅커스 알고리즘은 프로세스들이 자원을 요청했을 때 줄까말까만 결정함

  • 지금 당장 최대로 쓰지 않아도 최대로 필요한 자원을 보고 현재 available하지 않으면 절대 자원요청을 받아주지 않기 때문
    즉, 최악의 조건에서도 데드락이 생길거냐 안생길거냐를 확인함

  • 안전한 프로세스에게 자원 몰아줘서 자원 다 쓰고 내놓게 만들면 추후 가용자원이 많아지므로

  1. 먼저, 현재의 가용 자원으로 최대 자원 사용 상태가 될 수 있는 프로세스를 찾는다

  2. 그 후 그 프로세스에게 올인 해버리고 빨리 내놓게 함 (Deadlock Avoidance에서 프로세스마다 자원을 최대로 쓰면 얼마나 쓰는지에 대한 정보를 알고 있기 때문에 가능)

  3. 자원 다 쓰고 내놓으면 그게 전부 가용 자원이 됨

Deadlock Detection and recovery

  • 그냥 데드락 생기게 놔둠

  • 어차피 데드락 자주 안생기고 데드락 생길까봐 여유자원을 안주고 묶어놓으면 효율이 떨어진다 바라보는 측면
    -> 자원 요청하면 바로 줘버리고 데드락이 발생하면 Detection and recovery로 해결하는 방법

  • 자원당 인스턴스 하나밖에 없으면 그래프를 통해 데드락 확인

  • 인스턴스 여러개면 뱅커스처럼 테이블 만들어서 확인

  • 뱅커스는 최악의 조건에서도 데드락이 생기냐 안생기냐를 보지만
    이건 현재 데드락이 생기냐 안생기냐가 관심

Recovery

  1. 데드락의 연루된 모든 프로세스를 종료함으로써 해결
  2. 데드락에 연루된 프로세스를 하나씩 종료해보면서 확인
  • 안풀리면 하나씩 추가 종료 시킴
  • 종료 안시키고 자원 빼았는 방법
    • 데드락에 연루된 프로세스 골라서(victim 선정) 자원을 빼앗아 버리기
    • 하지만 starvation이 생길 수 있으므로 여러번 victim이 되면 이를 반영해줘야 한다

Deadlock Ignorance

  • 운영체제가 데드락에 관여 안함 == 무시

  • 데드락은 엄청 드물게 발생
    -> 이에 대해 관여하는 것 자체가 비효율적이기 때문에 이를 무시함

  • 하지만 현대 범용 운영체제들은 모두 이것을 채택했다 ㅋㅋ

  • 그럼 데드락 생기면 어떡함??

    • 사용자가 비정상적인 작동을 느끼고 프로세스를 직접 종료하는 등의 방법으로 대처

0개의 댓글