본문 바로가기

별걸다하는 IT/운영체제 OS

[운영체제 OS]교착상태(데드락Deadlocks) 정의 및 예시

운영체제 목차


데드락(Deadlock)은 무엇인가?


데드락을 전공용어 없이 쉽게 설명하자면


자원이 한정되어 있어서 상대방이 자원을 다 쓰고 돌려줄 때까지 기다리고 그걸 받아서 쓴다고 합시다

근데 그걸 서로가 기다려서 영원히 무한 기다림에 빠져버리는 것을 말해요!


더어어어~~ 쉽게 설명하자면

A가 ★라는 자원과 ☆라는 자원을 이용해서 일을 처리하려고 해요. 그래서 ★를 주어왔는데 ☆를 주워오려고 하니까 ☆를 B가 가지고 있는거죠! 그래서 B가 ☆를 사용해서 일을 완수하고 ☆를 내려놓을 때까지 A는 ★를 가지고 있는채로 기다립니다.

그런데 동시에 B또한 ★와 ☆를 이용한 업무처리가 필요했던 것입니다 그래서 ☆를 주어오고 난 뒤 ★를 사용하려니까 ★를 A가 가지고 있는거죠 그러면 B또한 A가 내려놓을 때까지 기다리게 되요.

이렇게 서로가 상대방이 자원을 내놓기를 바라면서 무기한 연기 상황에 빠지는 것을 교착상태에 걸렸다!! 라고 표현합니다.



이 그림과 같이 T0는 자원1을 소지하고 있는 상태에서 자원2를 요청하고 T1은 자원2를 소지하고 있는 상태에서 자원1을 소지하면 벗어날 수 없는 무한 기다림인 교착상태에 갇히게 됩니다!


이 교착상태를 쉽게 이해하기 위해서 가장 많이 언급되는 예시는 도로에서 발생하는 교착상태입니다


자동차 여러 대가 혼잡하고 바쁜 자동차 행렬을 뚫고 지나가려고 애쓰고 있는 사진입니다.

각 방향이 꽉 막혀버린 상황에서 저마다 먼저 가겠다고 양보하지 않고 있지요 ㅎㅎ

몇 차만 후진해줘도 풀릴 수 있는데 서로 자리를 차지한 상태에서 남이 비켜주길 기다리고 있어요!

대표적인 교착상태 상황~


잠깐! 죄송해요 광고한번만 달고갈게욤 ㅠㅠ 흑흑 고마워요 여러분들 앞으로 옳은 정보, 모두가 공유하고 나아가는 블로그가 되긋습니다. 



이제 좀 더 전공 용어를 사용해서 설명을 들어가볼게요

즉 deadlock은 다양한 유형의 자원을 대상으로 경쟁하는 여러 프로세스 때문에 발생합니다.


운영체제에서 대부분의 교착 상태는 전용자원 ≒세마포어(즉 일정 시간 동안 여러 프로세스에서 사용하지만 한 순간에서는 한 프로세스에서만 사용하는 자원)을 차지하려는 경쟁에서 발생합니다. 특히 멀티 스레드 앱 개발자들은 데드락을 가능성을 개발할 때 항상 염두해두고 있어야해요. 여러 스레드에서 하나의 자원을 공유하는 경우가 많아 deadlock problem 발생 가능성이 크기 때문이죠! 추후 게시글에서 deadlock 발생 필수 조건과 방지법을 알아볼 예정입니다


"In a programming environment, several processes may compete for a finite number of resources.

A process requests resources; if the resources are not available at that time, the process enters a waiting state.

Sometimes, a waiting process is never again able to change state, because the resources it has requested are held by other waiting processes. This situation is called a deadlock"





A와 B는 자원이고 P0와 P1은 자원을 활용해서 일을 처리하는 프로세스입니다


P0가 A 자원에 세마포어를 가진 상태에서 인터럽트가 걸립니다 (세마포어나 인터럽트를 잘 모르시는 분은 이전 게시글 확인~)

그리고 P1으로 context switch가 되고 P0은 wait(A)상태로 바뀝니다. P1이 자원 B에 세마포어를 걸어 확보한 후,

A를 가지려고 봤더니 P0가 자원을 풀어줄 때까지 기다려야 하는 상황이 됩니다.

P0은 wait(A)까지 수행되고 interrupt가 걸렸으니까, B 세마포어를 확보해야하는데 p1이 가지고 있으니까 기다립니다.

즉 P0과 P1가 서로가 가지고 있는 자원만을 기다리게 되는, deadlock에 빠져서 풀리지 않게됩니다.


다시 무한 반복 정리!

교착상태란 하나 또는 둘 이상의 프로세스가 더 이상 계속할 수 없는 어떤 특정 사건을 기다리고 있는 상태를 말합니다

특정 사건이란 자원의 할당과 해제를 의미하며, 둘 이상의 서로 다른 프로세스가 자신이 요구한 자원을 할당받아 점유하고 있으면서 상호 간에 상대방 프로세스에 할당되어 있는 자원을 요구하는 경우를 말합니다


대표적 교착상태 - 철학자 문제 , 풀링 문제 등


도움이 됐다면 공감 

댓글 환영 ~ :)