DeadLock

이태곤·2023년 9월 7일
0

Operating System

목록 보기
12/13
post-thumbnail

1. 교착상태(DeadLock)

  • 둘 이상의 프로세스가 서로가 점유한 자원을 기다리며 무한정 대기하는 상태

  • 교착상태는 아래 4가지 조건을 모두 만족하면 발생한다.

    1. 상호배제: 하나의 프로세스만 자원을 독점적으로 사용
    2. 점유대기: 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하며 기다리는 상태
    3. 비선점: 다른 프로세스의 자원을 강제적으로 가져올 수 없음
    4. 환형 대기: 서로 다른 프로세스나 스레드가 서로가 가지고 있는 자원을 필요로 하는 상황에서, 이러한 자원 요청이 상호 간에 순환적으로 발생
  • 해결 방법

    1. 예방: 자원 할당시에 교착상태에 빠지는 조건들을 모두 예방하는 방법
      → 운영체제의 정책, 비용 등을 고려하면 범용 운영체제에서는 사용하기 힘든 해결 방법
    2. 회피: 교착상태가 발생하기전에 이를 예상하고 안전한 상태에서만 자원을 할당하는 방법
      • 안전상태: 프로세스들이 요청하는 자원을 모두 할당받고 실행되어도 교착상태가 발생하지 않는 상태
      • 안전순서: 자원의 할당, 실행, 종료 시에 교착상태가 발생하지 않는 순서
      • 은행원 알고리즘: 안전한 상태에서만 자원을 할당하고, 안전한 상태가 되지 않은 경우에는 자원을 할당하지 않는 방식으로 동작
        → 프로세스의 수가 증가하면 예측이 어려워지고 복잡성이 증가
    3. 탐지: 교착상태가 발생하게 되면 회복 알고리즘을 사용하는 방법
      • 교착 상태를 일으킨 프로세스를 종료
        → 교착 상태 관련 사이클이 있는지 확인하고 관련된 프로세스를 하나씩 삭제한다.
      • 최소의 피해를 일으키는 희생 프로세스 선택
        → 프로세스가 점유하고 있는 자원의 수, 소요 시간 등으로 선택
    4. 강제 종료: 교착 상태가 실제로 발생하는 빈도가 매우 낮기 때문에 교착 상태를 처리하는데 비용을 들이는 것보다는 사용자가 작업을 종료하도록 하는 방법
  • 교착상태 vs 기아

    • 교착상태(DeadLock): 둘 이상의 프로세스가 서로가 점유한 자원을 기다리며 무한정 대기하는 상태로, 어떤 프로세스도 계속해서 진행할 수 없는 상태를 의미한다.
      → 교착 상태는 주로 자원 할당 및 관리에서 발생하며, 대기하고 있는 프로세스들이 blocked 상태에서 발생
    • 기아(Starvation): 특정 프로세스가 CPU 선점을 무기한 대기하는 상태를 의미한다.
      이 경우, 특정 프로세스는 CPU 할당을 얻지 못하며 계속해서 다른 프로세스에 의해 누락될 수 있다.
      → 기아는 주로 CPU 스케줄링 알고리즘과 관련이 있으며, 특히 SJF 알고리즘을 사용할 때 발생할 수 있다.
      → ready 상태에서 발생

0개의 댓글