본문 바로가기

CS/운영체제

[씨면기작] 데드락에 대해서 설명해주세요


 해당 글은 저의 주관이 가득 섞인 내용입니다. 특히 질문한 이유, 면접관의 의도 등은 개인적인 생각임을 밝힙니다.  


(0) 시간이 없어서 죄송해요 전체 글을 못읽겠어요. 빠르게 원하는 것만 가져갈게요!

상호배제 상태이며, 비선점 자원을 점유하고 있는 프로세스가 소유하고 있는 자원을 해제하지 않고, 다른 프로세스가 점유하고 있는 자원을 요청하며 순환 대기 상태를 이루고 있습니다. 이것이 교착상태 이며, 발생한 이유는 제한된 자원의 사용률을 높이고 시스템 효율성을 증대시키려고 사용하는 병행처리 기술과 자원 공유에 따른 부작용이라고 말씀드릴 수 있습니다.


(1) 질문한 이유가 뭐예요? 

 

교착상태라는 것이 어떠한 상황에서 발생되는지 알고 있냐는 질문입니다. 이를 답변하기 위해서는 이전까지 배워온 배경지식들이 필요하겠지요? 멀티 프로세스 환경에서 어떻게 프로세스가 교착상태를 일으키는지 말이에요.

일단 프로세스의 자원 호출 순서부터 알아봅시다.

첫번째, 프로세스는 자원을 요청하기 위해 시스템 콜을 합니다. 이 상황에서 해당 자원을 사용할 수 있다면 즉시 수락합니다. 그리고 해당 자원을 다른 프로세스가 사용중이라면? 요청을 수락할 때까지 기다립니다.

두번째, 자원을 획득한다면 사용합니다.

세번째, 자원을 해제하기 위해 시스템 콜을 요청합니다.

여기서 중요한것은 자원을 요청할 때, 해당 자원을 다른 프로세스가 사용중이라면? 요청을 수락할 때까지 기다린다는 것입니다. 그런데, 요청을 수락하지 않고 계속해서 대기를 하고 있다면? 아직까지는 교착상태는 아닙니다. 바쁜 대기를 하고 있는 상황이지요?

이러한 상황이 발생된것은, 제한된 자원의 사용률을 높이고, 시스템 효율성을 증가시키려고 사용하는 병행처리 기술과 자원 공유에 따라 발생한 것입니다. 이러한 상황이 발생된다면? 작업을 교체하거나 종료하는 외부 간섭으로 해결해야합니다.

그런데, 이때 자원을 요청한 프로세스 A가 이전에 사용중이던 자원 R을 해제하지 않고 대기중이고, 프로세스 A가 요청한 R2 자원을 프로세스 B가 해제하지 않고 프로세스 A가 점유하고 있던 자원 R을 원하고 있다면? 이때 교착상태가 발생하게 됩니다. 

이를 간단하게 설명하자면, 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 교착상태가 발생한다고 합니다.

위의 글이 이해가 한번에 가지 않을 수 있습니다. 그림으로 본다면 이해가 빠를테지만 추후에 그림도 첨부하도록 하겠습니다. 그간, 결혼식도 있고 처음으로 결혼식 사회도 맡다보니까 시간이 빨리 가네요. 그리고 텅텅 비어버린 잔고까지.. 일단 이어서 설명하겠습니다.

이러한 상황이 발생되는 것을 간략하게 설명하자면 이렇습니다.

첫번째, 상호배제(Mutual Exclusion)가 있어야 합니다. 한번에 프로세스 하나만 해당 자원을 사용해야합니다. 사용중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야합니다.

두번째, 점유와 대기(Hold and Wait) 다른 프로세스에 할당된 자원을 얻기 위해 기다리는 프로세스가 존재해야 합니다. 위의 프로세스 A와 자원 R로 설명한것과 같습니다.

세번째, 비선점(Non Preemptive) 자원을 강제로 빼앗지 못하고 자원을 점유하는 프로세스가 끝나야 해제됩니다. 이는 운영체제가 선점하고 있는 자원이 아닌 비선점 자원이어야 합니다. 비선점이란 운영체제가 컨트롤하지 않는 자원을 의미합니다.

위의 세가지 상황이 발생된다면, 순환대기(Circuit Wait)이 발생되어 교착상태가 이루어지게 됩니다.

방금 말한 상황이 위 세가지가 다 해당이 되겠죠? 일단 비선점 자원을 점유하고 있음과 동시에 상호배제의 상태이고 프로세스가 자원을 해제하지 않고 다른 프로세스가 점유하고 있는 자원을 요청한 점유와 대기상태를 갖고 있습니다. 이게 맞물리면 순환대기가 되는 것입니다.

즉, 이러한 상황을 말로 잘 설명하고 면접에서 말을 해야합니다.

정리하겠습니다. 교착상태란?

상호배제 상태이며, 비선점 자원을 점유하고 있는 프로세스가 소유하고 있는 자원을 해제하지 않고, 다른 프로세스가 점유하고 있는 자원을 요청하며 순환 대기 상태를 이루고 있습니다. 이것이 교착상태 이며, 발생한 이유는 제한된 자원의 사용률을 높이고 시스템 효율성을 증대시키려고 사용하는 병행처리 기술과 자원 공유에 따른 부작용이라고 말씀드릴 수 있습니다.


(2) 해당 질문을 한 면접관의 의도는 무엇일까요?

교착상태가 발생하게 된 배경과, 교착상태가 되는 과정을 설명하라는 것 같습니다. 이런 상황을 알아야 나중에 프로그램 개발중에 여기서 교착상태가 발생할 것 같은데요? 하며 프로세스를 대기 큐에 넣는 방식을 사용할 수 있고, 다양한 프로그래밍 기법을 사용할 수 있을 겁니다. 그래서 이 질문은 너가 개발자로 일하면서 어떤 문제가 발생했는데! 그 문제의 원인을 밝힐 수 있는지를 물어보는 것 같습니다.

다음 씨면기작은 🔜메모리(Memory) 입니다.