[운영체제] Deadlcok(교착상태)란?

[운영체제] Deadlcok(교착상태)란?


Deadlock

프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태로, '교착 상태'라고도 하며 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생합니다.

Deadlock이 발생할 수 있는 경우
P1과 P2가 리소스 A,B 둘 다를 얻어야 한다고 가정할 때,
t1에 P1이 리소스 A를 얻고 P2가 리소스 B를 얻었다면 t2때 P1은 리소스 B를, P2는 리소스 A를 기다리게 됩니다.
하지만 서로 원하는 리소스가 상대방에게 할당되어 있기 때문에 이 두 프로세스는 무한정 기다리게 되는데 이러한 상태를 Deadlock이라고 합니다.



Deadlock이 발생되는 상황

  • 멀티 프로그래밍 환경에서 한정된 자원을 사용하려고 서로 경쟁하는 상황이 발생 할 수 있습니다.
  • 어떤 프로세스가 자원을 요청 했을 때 그 시각에 그 자원을 사용할 수 없는 상황이 발생할 수 있고, 그 때는 프로세스가 대기 상태로 들어 가게 됩니다.
  • 대기 상태로 들어간 프로세스들은 실행 상태로 변경 될 수 없을 때 이러한 상황을 교착 상태라고 합니다.


Deadlock의 발생 조건

교착 상태는 한 시스템 내에서 다음의 네 가지 조건이 동시에 성립 할 때 발생합니다.
따라서, 아래의 네 가지 조건 중 하나라도 성립하지 않도록 만든다면 교착 상태를 해결할 수 있습니다.
  • 상호 배제 (Mutual exclusion)
    • 자원은 한 번에 한 프로세스만이 사용할 수 있어야 한다.
  • 점유 대기 (Hold and wait)
    • 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.
  • 비선점 (No preemption)
    • 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.
  • 순환 대기 (Circular wait)
    • 프로세스의 집합 {P0, P1 ,...Pn}에서 P0은 P1이 점유한 자원을 대기하고 P1은 P2가 점유한 자원을 대기하고 P2...Pn-1은 Pn이 점유한 자원을 대기하며 Pn은 P0가 점유한 자원을 요구해야 한다.


Deadlock 해결 방안

교착상태 예방(Prevention)

  • 교착상태가 발생하지 않도록 미리 차단시키는 방법
  • 교착상태가 발생할 필요 충분 조건 4가지를 부정하는 것이다.
    • 상호 배제 부정
    • 비 선점 부정
    • 점유와 대기 부정
    • 환형 대기 부정

교착상태 회피(Avoidance)

  • 프로세스가 자원을 요구할 때 시스템이 안전 상태를 유지할 수 있는 프로세스의 자원 요구만을 할당하여 주는 방안으로 자원 분배를 교착상태가 발생하지 않는 범위 내에서 하는 방안이다.
  • ex)은행원 알고리즘

교착상태 발견(Detection)

  • 컴퓨터의 중단 원인이 교착상태인지 아니면 다른 이유인지를 파악하는 방안이다.
  • 자원들과 프로세스들을 인접행렬로 표현하여 파악한다.
  • 교착상태 발견 알고리즘을 사용하는 시점은 교착상태 발생 빈도와 관련성이 매우 높다.

교착상태 회복(Recovery)

  • 교착상태를 회복하기 위해서는 교착상태가 발생한 프로세스들중에 희생양을 정하는 일이다.
  • 희생양이 정해지면 그 프로세스를 잠시 중단시키고 점유하고 있던 자원을 빼앗는 일이다.

Deadlock 회피법

교착 상태가 발생하면 피해나가는 방법

- 은행원 알고리즘

  • 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는 데서 유래한 기법이다.
  • 병렬 수행 프로세스 간의 교착 상태를 방지하기 위한 것
  • 프로세스가 자원을 요구할 때 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지를 사전에 검사하여 교착 상태를 회피하는 기법
  • 안정 상태에 있으면 자원을 할당하고, 그렇지 않으면 다른 프로세스들이 자원을 해지할 때까지 대기함
  • 교착 상태가 되지 않도록 보장하기 위하여 교착 상태를 예방하거나 회피하는 프로토콜을 이용하는 방법
  • 운영체제는 안전상태를 유지할 수 있는 요구만을 수락하고 불안전 상태를 초래할 사용자의 요구는 나중에 만족될 수 있을 때까지 계속 거절합니다.
    • 안정상태 : 전체 자원의 할당 상황이 모든 사용자가 결국에는 작업을 완료할 수 있는 상태
    • 불안정 상태 : 어떤 순서로 각 프로세스에게 자원을 할당해도 결국에는 시스템의 교착 상태가 발생할 수 있는 상태 



출처

댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?