[CS] 운영체제-교착상태와 기아상태

buckshot·2024년 5월 7일

cs

목록 보기
5/15
post-thumbnail

교착상태(DeadLock)

교착상태란 두 개 이상의 프로세스가 서로 상대방이 갖고 있는 자원을 대기하면서 무한정 기다리는 상태를 의미한다.
교착 상태가 발생하면 시스템에서 더 이상 진행을 할 수 없게 된다. 각 프로세스가 필요로 하는 자원을 다른 프로세스가 점유하고 있기에 상호배제를 위해 대기하고 있는 상태가 된다.

  • 발생 원인

deadlock은 시스템 자원에 대한 요구가 엉킨 상태로, 두 프로세스간 서로의 자원에 대하여 기다릴 때 발생을 한다.

그렇다면 deadlock은 꼭 두가지 프로세스에서만 발생을 할까?

아니다 deadlock은 4가지 조건이 동시에 충족이 될 때 발생을 하기 때문에 2개의 이상의 프로세스에서도 발생한다.

충족 조건

  • 상호 배제 (Mutual Exclusion) : 자원은 한 번에 하나의 프로세스에만 사용이 가능해야 한다.
  • 점유 대기 (Hold and Wait) : 하나의 프로세스가 자원을 갖고 있는 상태에서 다른 자원을 기달리고 있어야 한다.
  • 비선점 (No Preemption) : 다른 프로세스가 이미 점유하고 있는 자원을 강제로 뺏을 수 없어야 한다.
  • 순환 대기 (Circular Wait) : 각 프로세스는 순환적으로 다음 프로세스가 갖고 있는 자원을 기달려야 한다.

발생 시 생기는 문제

데드락이 발생된다면 여러 문제가 발생을 한다.

  • 자원 낭비 : deadlock으로 인하여 시스템 내 자원이 효율적으로 사용되지 않는다. deadlock이 발생하면 자원들이 블록되어 다른 프로세스가 자원을 이용할 수 없게 된다.

  • 프로세스 대기 : deadlock으로 인해 대기하는 프로세스가 발생하게 된다. 이는 시스템의 응답 시간이 오래 걸리게 만들고, 사용자나 다른 프로세스들의 실행에 있어 방해가 된다.

  • 시스템 정지 : 시스템이 정지가 될 경우가 있다. 모든 프로세스가 deadlock이 발생될 경우 시스템은 더 이상 진행을 할 수 없게 된다.

  • 데이터 손실 : 중요한 작업이 중단될 경우 데이터 손실이 발생할 수 있다. 예를 들어 파일 시스템에 deadlock이 발생 시 파일이 손상

  • 해결 방법

    deadlock이 발생하는 여러 문제가 야기되기 때문에 다음과 같은 방법이 사용이 된다.

    • 데드락 예방
      해당 문제가 발생하지 않도록 충족 조건에 대하여 만족하지 않도록 한다. 충족 조건은 4가지 中 어느 하나를 제거함으로 예방을 한다.

      하지만 이는 자원 낭비가 심한 기법이다.

    • 데드락 회피
      교착상태가 발생할 가능성을 배제하지 않고 해당 문제가 야기된다면 적절하게 피해가는 방법이다.
      리소스 할당의 측면에서, 교착상태가 발생할 가능성이 있는 자원 할당을 하지 않는다.
      가장 많이 사용되는 방법으로는 은행원 알고리즘이 사용된다.

    • 데드락 탐지 및 복구
      교착 상태기 발생 할 수 있도록 두고 교착상태가 야기될 경우 찾아서 고친다.

      • 탐지
        시스템에 해당 문제가 발생을 했는지에 대하여 점검을 진행한다.
        • 자원 할당 그래프
          탐지하는 일반적인 방법 中하나
          그래프는 프로세스와 자원 간의 관계를 나타내며, 순환 대기 조건이 만족되는지를 확인할 수 있다. 자원 할당 그래프를 통해 순환 대기가 발생하는 경우 데드락이 있을 가능성이 높다.
        • 자원 할당 상태 모니터링
          시스템은 주기적으로 자원 할당 상태를 모니터링하여 데드락이 발생한 경우를 감지할 수 있다. 이를 통해 시스템은 데드락이 발생하면 적절한 조치가 가능하다.
      • 회복
        교착 상태가 일어난 프로세스를 종료하거나 해당 프로세스에 할당된 자원을 선점하여 회복한다.
        • 자원 해제
          시스템은 데드락을 유발하는 자원 할당을 취소를 하거나 해당 프로세스를 종료하여 자원을 해제합니다. 이를 통하여 데드락 상태에서 벗어날 수 있다.
        • 프로세스 종료
          데드락에 관여한 프로세스 중 하나를 종료하여 자원을 해제하는 방법이 있다. 이를 통해 다른 프로세스가 자원을 이용할 수 있다.
        • 자원 할당 순서 변경
          다른 자원 할당 순서를 변경하여 데드락을 회피하는 것이다. 순환 대기 조건을 방지하고 데드락 상태를 해소할 수 있다.
    • 데드락 무시

profile
let's go insane

0개의 댓글