ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] 데드락 (Deadlock) - 교착상태
    OS 2021. 8. 16. 15:59

     

    데드락 (Deadlock)


     

     

     

    Deadlock (교착상태) 란?


    프로세스나 스레드가 결코 일어날 수 없는 특정 이벤트를 무한정 기다리는 상태를 말한다. 

     

     

     

    👌 데드락의 발생조건 4가지


    데드락에 걸리기 위해서는 4가지 요건이 필요합니다.

     

    1. 상호 배제 조건 (Mutual exclusion condition)

    프로세스는 한번에 하나의 자원만 사용 할 수 있다. 사용 중인자원을 다른 프로세스가 사용하기 위해서는 사용중인 자원이 해제될 때까지 기다려야 한다.

     

    2. 점유와 대기 조건 (hold-and-wait condition)

    자원을 최소한 하나 보유하고 다른 프로세스에 할당되어 사용중인 자원을점유하기 위해 기다려야 한다.

     

    3. 비선점 조건(nopreemption condition)

    이미 할당되어 사용중인 자원을 다른 프로세스가 선점할 수 없다.

     

    4. 순환 대기 조건 (circular-wait condition )

    대기 프로세스의 집합이 순환 형태로 자원을 사용하기 위해 대기하고 있어야 한다.

     

     

     

    👊 데드락 해결방법 4가지


    1. 데드락 상태 예방

     

     데드락의 발생조건 4가지 중 하나라도 발생하지 못하게 하면 데드락이 발생하지 않습니다. 즉, 데드락의 발생조건을 방지하여 데드락이 일어날 가능성을 예방합니다.

    • 자원의 상호 배제 조건
      • 한 번에 여러 프로세스가 공유 자원을 사용할 수 있게 합니다.
      • 동기화(synchronization)문제가 발생할 수 있습니다.
    • 점유 대기 조건 방지
      • 프로세스 실행에 필요한 모든 자원을 한꺼번에 요구하고 허용할 때까지 작업을 보류해서, 나중에 또다른 자원을 점유하기 위한 대기 조건을 성립하지 않도록 합니다.
    • 비선점 조건 방지
      • 다른 프로세스에게 할당된 자원이 선점권이 없다고 가정할 때, 높은 우선순위의 프로세스가 해당 자원을 선점할 수 있도록 합니다.
    • 순환 대기 조건 방지
      • 자원을 순환 형태로 대기하지 않도록 일정한 한 쪽 방향으로만 자원을 요구할 수 있도록 합니다.

    위에서 언급한 방법으로 예방하게 되면 시스템의 처리량이나 효율성을 떨어트리는 문제점이 발생할 수 있습니다.

     

     

    2. 데드락 상태 회피

     

     교착 상태를 인정하고 피해가는 방법입니다.

     

     시스템의 프로세스들이 요청하는 모든 자원을, 데드락을 발생시키지 않으면서도 차례로 모두에게 할당해 줄 수 있다면 안정 상태에 있다고 말합니다. 특정한 순서로 프로세스들에게 자원을 할당, 실행 및 종료 등의 작업을 할 때 데드락이 발생하지 않는 순서를 안전 순서라고 부릅니다. 반면 데드락 발생 가능성이 있는 상황을 불안정 상태라고 합니다.

     

     시스템이 항상 안정 상태에 있을 수 있도록 자원 할당을 하는것이 특징입니다. 대표적으로 사용되는 알고리즘으로 은행원 알고리즘이 있습니다.

     

     

    3. 데드락 탐지 및 복구

     

     데드락이 자주 발생하는 시스템에서 사용하는 방법입니다. 보통 예방과 회피보다 탐지 및 복구를 많이 사용합니다. 데드락이 발생하지 않도록 예방과 회피를 사용하게 되면 자원을 효율적으로 사용할 수 없게 되는 경우가 많습니다. 때문에 자원을 더 효율적으로 사용하기 위해 탐지 및 복구 방법을  더 많이 사용합니다.

     

    교착 상태 탐지 를 위한 방법으로 자원할당 그래프 소거 방법 을 사용하여 순환여부 확인합니다.

    자원할당 그래프 소거법

     

    데드락에서 빠져나오기(복구) 위해 순환 대기를 깨고 교착상태에서 회복합니다. 순환 고리가 깨질 때 까지 프로세스를 순차적으로 종료하여 해결 할 수 있습니다. 또 다른 방법으로는 순환대기에 빠진 프로세스의 제어권을 빼앗아 롤백하여 데드락에서 빠져나올 수 있습니다.

     

     

    4. 데드락 무시

    - 데드락이 드물게 일어난다면 데드락을 해결하기 위해 사용하는 비용이 더 커지게 됩니다. 따라서 데드락이 발생할 경우 무시합니다. (프로세스 재실행)

     

     

     

     

     

     

    Post


    References


    • https://www.youtube.com/watch?v=FXzBRD3CPlQ

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

     

    댓글