[CS] DeadLock

말하는 감자·2025년 2월 10일

CS

목록 보기
26/33
post-thumbnail

개념


상호배제에 의해 나타나는 문제점.

둘 이상의 프로세스들이 각각 자원을 점유한 상태에서, 서로 다른 프로세스가 점유하고 잇는 자원을 요구하며 서로의 작업이 끝나기만을 기다리는 교착상태를 의미

Deadlock의 선행 조건

  • Mutual exclusion(상호배제): 매 순간 하나의 프로세스만이 자원을 사용할 수 있음
  • No Preemption(비선점): 프로세스는 자원을 스스로 내어놓을 뿐 뺏기지 않음
  • Hold and wait(점유&대기): 자원을 가진 프로세스가 다른 자원을 기다릴 떄 보유 자원을 놓지않고 계속 가지고 있음
  • Circular wait(원형 대기): 자원을 기다리는 프로세스 간에 사이클 형성

처리 방법

1. 예방

선행조건을 하나 이상 위반하도록 설계

상호 배제

: 가능한 경우 자원을 공유 가능하게 만든다.
예를 들어, 읽기 전용 데이터는 여러 프로세스가 동시에 접근할 수 있도록 허용 가능

점유&대기

: 자원을 요청하는 시점에서 다른 어떤 자원도 가지고 있지 않아야한다.
1. 프로세스 시작 시 필요한 모든 자원을 할당(종료시 모두 반납)
2. 자원이 필요한 경우 보유 자원을 모두 놓고 다시 요청

비선점

: 어떤 프로세스가 자원을 점유하고 있을 때 다른 프로세스가 그 자원을 요구하면, 첫번째 프로세스가 자원을 강제로 해제하도록 한다. 주로 선점 가능한 자원에만 적용

원형 대기

: 자원에 일련의 순서를 부여하고, 프로세스가 자원을 요청할 때 반드시 특정 순서에 따라 요청하도록 한다.
이를 통해 사이클이 형성 되는것을 방지
ex. 자원 A,B,C 가 있고 순서대로 번호 1,2,3을 부여한다면 프로세스는 자원 A 를 점유하고 있을 때, B와 C를 요청할 수 있지만, 자원 C를 점유하고 있는 상태에서 자원 A나 B를 요청 불가하다.

2. 회피

데드락 상태로 들어가지 않도록 실시간 자원 할당

은행원 알고리즘

3. 검출 및 복구

데드락 발견시 회복
교착상태를 방지하는 것 보다는 발생한 후 해결하는 것

탐지

: 자원 할당 그래프를 통해 교착 상태 탐지
자원 요청시, 탐지 알고리즘을 실행시켜 그에 대한 오버헤드 발생

회복

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

무시

데드락이 매우 드물게 발생하므로 데드락에 대한 조치 자체가 더 큰 오버헤드일 수 있다.
데드락 발생시 직접 프로세스를 죽이는 방법으로 대처

profile
주니어개발자(?)

0개의 댓글