Dead Lock

김수혁·2023년 12월 23일

OS

목록 보기
1/6

Dead Lock

  • 교착상태
  • 두 개 이상의 스레드가 자원을 얻지 못해 서로 상대방의 작업이 끝나기만을 기다리며 더 이상 작업을 진행하지 못하는 상태
  • 서로 다른 프로세스가 공유할 수 없는 자원을 사용할 때 발생

공유 자원
시스템 안에서 각 프로세스, 스레드가 함께 접근 할 수 있는 자원이나 변수
경쟁상태
공유 자원을 두개 이상의 프로세스가 동시에 읽거나 쓰는 상황
동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태

Dead Lock 발생 조건

Dead Lock이 발생하기 위해서는 아래의 4가지 조건이 모두 만족되어야 한다.
이러한 특성은 후에 Dead Lock 예방에서 사용한다.

1. Mutual Exclusion (상호 배제)
한 프로세스가 사용하는 자원은 다른 프로세스와 공유 할 수 없는 배타적인 자원이어야 한다.
배타적인 자원은 Criticial Section으로 보호되기 때문에 다른 프로세스와 동시에 사용할 수 없다.

Critical Section이란?
어느 특정 한 순간 프로세스 하나만 진입해야 하는데, 프로그램에서 임계 자원을 이용하는 부분으로 공유 자원의 독점을 보장하는 코드 영역
공유되는 자원이 문제 동시 접근시 문제가 발생하지 않도록 독점을 보장해줘야 하는 영역

2. Hold and Wait (점유 대기)
프로세스가 특정 자원을 할당받은 상태에서 다른 자원을 기다리는 상태

3. No preemption (비선점)
한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선점 자원이어야 한다.

비선점 자원이란?
프로세스가 자원을 할당 받았을 경우, 자원을 스스로 반납할 때까지 계속 그 자원을 사용하도록 허용하는 것

4. Circular Wait (순환 대기)
점유 대기를 하는 프로세스 간의 관계가 원을 이루어 자원을 양보하지 않는 경우를 말한다.

Dead Lock 해결법

1. 예방

위의 4가지 특징 중 하나라도 만족하지 않게 하여 교착 상태를 피하는 것이다.

상호 배제 부정

  • 읽기 전용 파일과 같은 공유 자원을 공유

점유 및 대기 부정

  • 프로세스 대기를 없애기 위해 프로세스가 실행되기 전 모든 필요한 모든 자원을 할당(자원 낭비 발생)
  • 자원을 점유하고 있지 않을 때만 다른 자원 요청 가능

비선점 부정

  • 모든 자원에 대한 선점 허용
  • 프로세스가 할당받을 수 없는 자원을 요청 시, 기존에 가지고 있던 자원을 모두 반납 후 새 자원과 이전 자원을 얻기 위해 대기

순환 대기 부정

  • 자원에 고유한 번호를 할당 후 번호 순서대로 자원을 요구하도록 한다.

2. 회피

교착 상태가 발생하기 전에 교착 상태를 예상하여 안전한 상태에서만 자원 요청을 허용하는 방법

교착상태 회피를 위해서는

  • 프로세스 수가 고정되어야 한다
  • 자원의 종류와 수가 고정되어 있어야 한다
  • 프로세스는 자신이 요구하는 자원 및 최대 자원의 수를 알고 이것이 정확해야 한다.
  • 프로세스는 반드시 자원을 사용 후 반납해야 한다

다음의 조건이 만족해야 하기 때문에 현실성이 부족하다.

3. 탐지 및 회복

운영체제가 프로세스의 작업을 관찰하면서 Dead Lock의 발생 여부를 계속 확인한다.
타임아웃이나 자원 할당 그래프를 통해 Dead Lock을 발견한다.
Check point와 Roll back을 이용하여 Dead Lock 발생 시 회복하는 단계를 거친다.

Check point

  • 작업 도중 문제 발생 시 돌아올 수 있도록 현재 시스템의 상태를 하드디스크에 저장하는 것

Roll back

  • Check point로 되돌아가는 것

회복(Recovery)

  • Dead Lock을 일으킨 프로세스를 모두 종료
  • Dead Lock이 없어질 떄까지 프로세스를 하나씩 종료
  • Dead Lock 상태인 프로세스의 자원을 선점해서 다른 프로세스에게 위임

자원선점이란?
교착 상태에 있는 프로세스가 점유하고 있는 자원을 선점하여 다른 프로세스에게 할당하여 해당 프로세스를 일시정지 시키는 방법

자원 선점시 고려해야하는 것
1. 희생자 선택
최소의 피해를 줄 수 있는 프로세스 선택
2. 롤백
선점된 프로세스를 문제 없이 이전 상태로 롤백
3. 기아 상태
한 프로세스가 계속 선점되어 기아 상태가 되는 것을 방지
-> 어떻게? 우선 순위 사용하는 것도 방법

4. 무시

Dead Lock이 발생하는 상황은 거의 일어나지 않기 때문에 따로 고려하지 않고 Dead Lock이 발생하면 프로세스를 강제 종료한다.


참고

profile
안녕안녕안녕

0개의 댓글