본문 바로가기

23년 1학기 학교공부/운영체제및실습

[OS] Deadlock 처리 방법

목차

    728x90
    반응형
    SMALL

    📁 Deadlock 처리방법

    1. 프로세스들이 아예 데드락에 걸리지 않도록 OS가 사전에 예방하는 방법

    2. 데드락이 발생할 수는 있는데, 발생할 경우에 OS가 이를 감지하고 데드락을 풀어주는 방법.

    3. OS가 데드락에 대해 아무것도 하지 않고 관리자인 사람이 해결하는 방법.

     

    1, 2 방법이 좋아보이지만, OS가 사전에 예방하거나 데드락을 찾고 풀어주는 일은 시간이 많이 걸리기 때문에 컴퓨터 실행속도가 대폭 늦어지게 된다.

    데드락은 몇 달에 한번 발생할 정도로 가끔 발생하는데 이런 현상을 대비하기 위해서 평소에 컴퓨터 동작 속도가 느려지는것은 불편하다.

    때문에 세번째 방법이 현실적인 대안이다.

    대부분의 유닉스, 윈도우즈, 리눅스와 같이 상용 운영 체제에서는 세번째 방법을 이용한다.

    이 말은 OS 내부에 deadlock에 대한 기능이 없다는 것이다.

     

    📁 Deadlock을 사전에 예방하는 방법

    1. deadlock 발생에 필요한 네 가지 조건중 하나라도 만족하지 못하게 하는 것.

    1) Mutual exclusion 깨뜨리기

    자원을 다른 프로세스와 동시에 쓰도록 하자는 것.

    하지만 이는 좋은 방법이 아님.

     

    2) Hold and wait 깨뜨리기

    프로세스가 어떤 자원을 가진 상태에서 다른 자원을 기다리지 않게 만드는 것.

    자원이 필요하면, 아예 프로그램 시작부터 필요한 자원을 한꺼번에 받고 실행하는 방법이다.

    가능하기는 하지만 현실적으로 좋은 방법이 아니다.

    만약 프로그램 후반에 잠깐 사용해야하는 자원도 초반부터 할당한다면 프로그램이 실행되는 시간동안 자원을 점유만 하고 실제로는 사용하지 않게 된다.

    자원 활용 면에서 좋지 않다.

     

    3) No preemption 깨뜨리기

    남이 가진 자원을 자신이 우선권이 있다고 주장하고 뺏어오는 것이다.

    하지만 이런식으로 동작하면 프로그램이 혼란스러워지고, 프로그램이 실행되다가 갑자기 죽거나 중단되는 현상이 일어날 수 있다.

    즉 실제로 사용하기 어려운 방법이다.

     

    4) Circular wait 깨뜨리기

    그나마 가장 고려해볼만한 방법.

     

    위 그림에서 Ra, Rb, Rc, Rd에 1, 2, 3, 4번 타입이라고 이름을 붙이면, 모든 프로세스는 낮은 번호의 자원을 가진 채로 높은 번호의 자원을 기다린다는 공통점이 생긴다.

    하지만 p4는 예외인데, 4번 자원을 가지면서 1번 자원을 요청한다.

    즉 '높은 번호의 자원을 받은 상태에서 낮은 번호의 자원을 요청하면 안된다' 는 제약을 두면 p4 프로세스만 프로그램 시작 전부터 1번과 4번을 같이 받아서 실행해야 할것이다.

    위에서 좋지 않은 방법이라고는 했지만, 일부 프로세스만 해당되므로 모든 프로세스에게 hold and wait를 깨뜨리는 것 보다는 낫다.

    하지만 만약 p4 프로그래머가 deadlock이 발생할것 같다는 사실을 인지하지 못하고 위와 같이 프로그래밍하지 않는 경우, deadlock을 막을수 없기 때문에 현실적으로 거의 불가능한 방법이다.

     

    2. Banker's Algorithm

    사전 예방하는 알고리즘을 실행시켜서 시스템이 자원 할당 전에 조사 후 안전한 경우에만 자원을 할당하는 방법.

     

    📁 Deadlock이 발생한 경우 어떻게 대처해야하나?

    1. 모든 프로세스를 Abort. 죽이는것.

    모든 자원이 사용가능해지지만 대가가 큰 방법이다.

    2. deadlock에 걸려있는 프로세스들 중 하나만 종료시켜보는 방법.

    현실적이다.

    하나를 죽여서 deadlock이 풀리면 좋지만, 그렇지 않다면 점진적으로 하나씩 죽여보는 방법이다.

     

    🔎 2번의 순위를 정하는 방법

    1. 우선순위가 낮은 프로세스부터 중단시키는 방법.

    꼭 좋은 방법은 아님.

    만약 우선순위가 낮은 어떤 프로세스 실행시간이 10분인데, 거의 99%가 진행된 상태에서 deadlock이 걸렸다고 한다면 이를 중단시키는건 굉장한 낭비이다.

    2. cpu 타임을 소비한 시간이 적은 프로그램부터 중단시키는 방법

     

    위와 같이 여러 기준이 있는데 어떤게 가장 좋다는 절대적인 규정은 없다.

    장단점이 있기 때문에 관리자가 판단해서 정한다.

     

     

    📁 Dining Philosophers Problem (식사하는 철학자 문제)

    deadlock과 starvation을 형상화한 문제.

    * Starvation : 자원을 요청했는데 할당되기까지 굉장히 오랫동안 기다리는 현상

    * Deadlock : starvation이 영원히 지속되는것

    둥근 원탁에 n명의 철학자가 앉고, 앞에는 접시와 포크가 하나씩 놓여있으며 가운데에는 스파게티 한접시가 있다.

    식사를 할 때 철학자는 포크 하나만 가지고는 스파게티를 자신의 접시에 담을 수 없다.

    두 개는 필요하기 때문에 자기 앞의 포크를 들고 왼쪽 사람의 포크를 빌려서 스파게티를 담고, 포크 두개를 이용해 스파게티를 먹는다.

    식사가 다 끝나면 다시 옆사람 포크와 자신의 포크를 놓고, 사색을 한다.

    오랜 사색 후에 다시 배가 고파지면 위 과정을 반복해서 식사한다.

    이때 철학자마다 사색하고 식사하는 시간과 기간이 제각각이다.

    한참 후 관찰자가 와서 보니, 스파게티는 그대로 둔 채 철학자들은 모두 굶어 죽은 상태였다.

     

    728x90
    반응형
    LIST