[TIL] DeadLock

다혜·2022년 3월 25일
0

Computer Science

목록 보기
1/4

✅ DeadLock이란

✔ 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태.
교착상태라고도 한다.


🔒 DeadLock 발생 상황

✔ 멀티 프로세스 환경에서는 한정된 자원을 얻기 위해 서로 경쟁한다.
✔ 한 프로세스가 자원을 요청했지만 그 자원을 사용할 수 없는 상황이 발생할 수 있다.
✔ 프로세스는 대기 상태로 들어가고, 대기 상태의 프로세스들이 실행 상태로 변경될 수 없을 때 교착상태가 발생한다.

프로세스1과 프로세스2가 자원1과 자원2를 모두 얻어야 한다고 가정한다.

t1 : 프로세스1이 자원1을 얻음, 프로세스2가 자원2를 얻음.
t2 : 프로세스1은 자원2를 기다림, 프로세스2는 자원1을 기다림.

서로 원하는 자원이 상대에게 할당되어 있어서 두 프로세스는 무한정 기다리게 된다.
이러한 상태를 DeadLock 상태라고 한다



📌 DeadLock 발생조건

아래 4가지 모두 성립해야 DeadLock이 발생한다.


① 상호 배제

자원은 한번에 한 프로세스만 사용할 수 있다.

② 점유 대기

최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용중인 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재한다.

③ 비선점

다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없다.

④ 순환 대기

프로세스의 집합에서 순환 형태로 자원을 대기하고 있어야한다.



🔑 DeadLock 처리


① 교착상태를 예방 & 회피

📍 예방

교착 상태 발생 조건들을 하나씩 제거하며 해결한다. (자원 낭비가 심하다.)

상호 배제 부정

: 여러 프로세스가 공유 자원을 사용.

점유 대기 부정

: 프로세스 실행 전 모든 자원을 할당.

비선점 부정

: 자원 점유 중인 프로세스가 있어도 다른 프로세스가 자원을 요구하면 자원 반납.

📍 회피

교착 상태 발생 시 피해가는 방법.

은행원 알고리즘

  • 자원 최대 가능 할당량을 사전에 파악하고 시뮬레이션을 해서 안전 상태에 들 수 있는지 검사.

  • 안전 상태면 자원을 할당하고, 불안전 상태면 자원이 반납될 때까지 대기.

    • 안전상태 : 시스템의 프로세스들이 요청하는 모든 자원을, DeadLock 발생 없이 모두에게 할당해 줄 수 있는 상태.

② 교착상태를 탐지 & 회복

교착 상태가 되도록 허용한 다음 회복시키는 방법.

📍 탐지

  • 자원 할당 그래프를 통해 교착 상태를 탐지한다.

📍 회복

교착 상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제시켜 회복하는 방법.

  • 프로세스 종료하기
    • 1) 교착 상태의 프로세스를 모두 중지.
    • 2) 교착 상태가 제거될 때 까지 하나씩 프로세스를 중지하고 탐지 알고리즘으로 탐지.
  • 자원 선점하기
    • 프로세스에 할당된 자원을 선점해서 교착 상태를 해결할 때까지 다른 프로세스에 할당.







💛 참고 :
https://chanhuiseok.github.io/posts/cs-2/
https://jwprogramming.tistory.com/12

profile
봉식이를 위한 개발을 하고 싶오

0개의 댓글