본문 바로가기

프로그래밍/운영체제

[운영체제] Dead lock

https://steady-coding.tistory.com/520

 

[운영체제] Deadlock

cs-study에서 스터디를 진행하고 있습니다. Deadlock이란? 프로세스가 자원을 얻지 못해서 다음 처리를 하지 못하는 상태를 뜻하며, 교착 상태라고 부른다. 두 개 이상의 작업이 서로 작업이 끝나기

steady-coding.tistory.com

 

Deadlock 이란?

이는 동기화 문제에서 이어진다.

 

교착상태라고도 하며, 프로세스가 자원을 얻지 못해서 다음 처리를 하지 못하는 상태를 말한다. 교착상태라고 하며, 두 개 이상의 작업이 서로 작업이 끝나기만을 기다리기 때문에 결과적으로 아무것도 완료되지 못한다.

 

 

 


deadlock 발생 조건

 

4가지가 존재한다. 4가지 모두 만족해야 교착상태가 발생한다.

 

상호 배제 : 자원은 한프로세스만 사용 가능하다는 조건

점유 대기 : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다리고 있다는 조건

비선점 : 다른 프로세스에 할당된 자원은 사용을 끝날 때 까지 강제로 빼앗을 수 없다는 조건

순환 대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다는 조건

 

 

이는 동기화 문제에서 다룬적 있으니 아래의 글에서 참고하면 될 듯하다.

 

 

 


그렇다면 어떻게 데드락을 관리할 수 있을까?

일단 예방하는 방법 먼저..

예방 ( Prevention )

위에서 봤던 발생 조건 4개 중 하나를 제거하여 발생하기 전에 예방한다.

  • 상호 배제 부정
    • 여러 프로세스가 공유 자원을 사용하도록 한다.
  • 점유 대기 부정
    • 한 프로세스가 수행되기 전에 모든 자원을 할당하고, 자원이 점유되지 않을 때에만 다른 프로세스에서 요구할 수 있도록 한다.
      • 자원 과다 사용으로 인한 효율성 문제
      • 프로세스가 요규하는 자원을 파악하는 데에 대한 비용
      • 자원에 대한 내용을 저장 및 복원하기 위한 비용
      • 기아 상태
      • 무한 대기 문제
  • 비선점 부정
    • 자원 점유 중인 프로세스가 다른 자원을 요구할 때 가진 자원을 반납하도록 한다.
  • 순환 대기 부정
    • 자원에 고유 번호를 할당하여 순서대로 자원을 요구하도록 한다.

 

하지만 자원 낭비가 심하고, 비용이 많이 든다는 단점이 있다.

 

 

 

회피 ( avoidance )

앞 내용은 예방이었지만, 만약 교착상태가 발생한다면 어떻게 대처할까?

그 방법중 하나인 회피이다.

 

교착상태가 발생하면 탐지 후 회피해서 해결한다. 자원이 어떻게 요청될 지에 대한 추가 정보를 제공하도록 요구하여 순환 대기가 발생하지 않도록 자원 할당 상태를 검사한다.

안전 상태와 불안전 상태

운영 체제는 교착 상태에 빠질 수 있는 가능성이 있는 불안정 상태와 그렇지 않은 안전 상태를 나눈다.

그래서 프로세스가 자원을 요청할 때, 안전 상태를 유지할 수 있는 요청만 수락하고

불안전 상태를 초래하는 요청은 거절한다.

 

 

 


 

++)

Avoidance Algorithms

교착 상태가 발생하면 탐지 후 회피한다고 했는데, 우리는 어떻게 리소스 할당으로 인해 시스템이 불안정해지는지 확인할 수 있을까?

 

 

는 ... 다음 글에서 마저 다루고 deadlock 을 마무리 하도록 하자