데드락

전산/OS / / 2021. 6. 14. 16:40

데드락(DeadLock) 또는 교착상태란 한정된 자원을 여러 프로세스가 사용하고자 할 때 발생하는 상황으로, 프로레스가 자원을 얻기 위해 영구적으로 기다리는 상태입니다. 예를 들어 다음과 같은 상황에서 데드락이 발생할 수 있습니다.

자원 A를 가진 프로세스 P1과 자원 B를 가진 프로세스 P2가 있을 때, P1은 B를 필요로 하고 P2는 A를 필요로 한다면 두 프로세스 P1, P2는 서로 자원을 얻기위해 무한정 기다리게 됩니다.

 

 

데드락 (Dead lock)의 발생 조건

- 교착 상태는 한 시스템 내에서 다음의 네 가지 조건이 동시에 성립 할 때 발생합니다

- 따라서, 아래의 네 가지 조건 중 하나라도 성립하지 않도록 만든다면 교착 상태를 해결할 수 있습니다.

1) 상호 배제 (Mutual exclusion)

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

 2) 점유 대기 (Hold and wait)

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

 3) 비선점 (No preemption)

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

 4) 순환 대기 (Circular wait)

- 프로세스의 집합 {P0, P1, ,Pn}에서 P0 P1이 점유한 자원을 대기하고 P1 P2가 점유한 자원을 대기하고 P2Pn-1 Pn이 점유한 자원을 대기하며 Pn P0가 점유한 자원을 요구해야 한다.

 

해결

- 은행원 알고리즘 (Banker’s Algorithm)

E,J,Dijkstra가 제안한 방법으로, 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는 데서 유래한 기법이다.

프로세스가 자원을 요구할 때 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지를 사전에 검사하여 교착 상태를 회피하는 기법

안정 상태에 있으면 자원을 할당하고, 그렇지 않으면 다른 프로세스들이 자원을 해지할 때까지 대기함

교착 상태가 되지 않도록 보장하기 위하여 교착 상태를 예방하거나 회피하는 프로토콜을 이용하는 방법




출처: https://jwprogramming.tistory.com/12 [개발자를 꿈꾸는 프로그래머]

출처: https://mangkyu.tistory.com/92 [MangKyu's Diary]

 
반응형

'전산 > OS' 카테고리의 다른 글

세마포어 vs 뮤텍스  (0) 2021.06.14
리눅스 프로세스 목록 확인  (0) 2021.04.30
logrotate  (0) 2021.02.16
crontab vs cronjob  (0) 2021.02.16
Crontab 명령어  (0) 2021.02.16
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기