본문 바로가기
운영체제

운영체제 11장 - 프로세스 관리(8) : 교착상태(Deadlock) -

by ChocoPeanut 2017. 4. 22.

운영체제 11

- 프로세스 관리(8) : 교착상태(Deadlock) -

 

프로세스는 실행을 위해 여러 자원을 필요로 한다. CPU, 메모리, 파일 등등 여러 자원을 사용하여 프로세스가 실행된다. 그런데 어떤 자원은 갖고 있으나 다른 자원을 갖지 못할 경우 대기 상태에 들어가서 기다려야한다. 자원은 한정되어 있는데 여러 프로세스가 같이 동작하는 상황이여서 이러한 상황이 발생하게 된다. 그러므로 운영체제는 이러한 자원을 프로세스들에게 잘 할당을 해주어야한다. 만약 잘 할당을 해주지 못하면 앞의 식사하는 철학자의 문제와 같이 모든 프로세스가 자원을 가지려고 대기하는 교착상태에 빠질 수 있다.



교착상태가 일어나는 필요조건은 4가지가 존재한다.


첫 번째는 상호배타(Mutual exclusion)이다. 상호배타는 동기화를 만족시키기 위한 조건과 같다. 하나의 프로세스가 자원을 사용할 경우 다른 프로세스는 그 자원을 사용할 수 없는 것을 의미한다.


두 번째는 보유 및 대기(Hold and wait)이다. 프로세스가 자신이 가질 수 있는 자원은 가지고 있으면서 다른 자원이 오기를 기다리고 있는 것이다.


세 번째는 비선점(No Preemption)이다. 비선점은 프로세스 스케줄링에서 배운 단어 같은 의미이다. 대신 여기서는 CPU할당뿐만 아니라 모든 자원에 의해서 비선점이 된다는 것이다. 임의의 프로세스가 자원을 할당 받은 상태에서 다른 프로세스는 이 자원을 뺏어서 사용할 수 없는 형태가 비선점이다.


마지막은 환형대기(Circular wait)이다. 선형이 아니고 원형을 이루게 되어 프로세스의 자원 할당에서 첫 번째 프로세스와 마지막 프로세스의 자원할당이 겹치게 되어 원형에 있는 모든 프로세스가 자원 할당을 받고자 기다리는 형태가 만들어지는 것을 말한다.


식사하는 철학자를 예시로 들어보면 젓가락에 대한 상호배타가 존재한다. 한 명의 철학자가 젓가락을 가지고 있으면 다른 철학자는 가질 수 없다. 보유 및 대기는 한 짝의 젓가락을 가지고 있는 상태에서 다른 젓가락을 기다리고 있는 경우와 같다. 철학자가 젓가락을 가지고 있으면 다른 철학자가 젓가락을 뺏을 수 없으므로 비선점도 만족된다. 또한 원형 테이블에서 이루어지는 형태로 환형대기도 만족되어 결국 식사하는 철학자들은 교착상태에 빠지게 되는 것이다.


교착상태가 발생하는 원인은 바로 자원인데 자원은 어떻게 할당되는가? 프로세스가 메모리에서 동작할 때 자원에 대한 요청을 운영체제에 전달하게 된다. 그러면 운영체제는 이러한 요청을 받아 누구도 자원을 사용하고 있지 않을 경우 사용을 할 수 있게 할당을 해준다. 그 후 프로세스가 자원을 다 사용하고 나면 반납을 하게 되는 형태를 가진다.


자원 할당도는 어떤 자원이 어떤 프로세스에게 할당되었는가? 또는 어떤 프로세스가 어떤 자원을 할당 받으려고 기다리고 있는가? 에 대한 정보를 가르쳐 주는 지표이다. 자원은 사각형으로 표시되고 프로세스는 원으로 할당은 화살표를 통해 나타나게 된다. 자원의 경우 동일한 형식의 자원을 가질 수 있는데 이를 동일 자원이라고 한다. 이런 경우 사각형 안의 점으로 표시하게 된다. 점이 하나이면 동일한 형식의 자원이 하나만 있다는 의미이고 여러 개일 경우 그 개수만큼 동일 자원이 존재한다는 것이다. 프로세스가 화살표로 자원을 가리키면 프로세스가 자원을 요청한 것이고 자원이 화살표로 프로세스를 가리키면 자원이 프로세스에 할당되어 사용 중이라는 것을 의미한다.


자원 할당도를 통해 교착상태의 필요조건을 적용시키면 자원 할당도 상에 원이 만들어져야 한다. 이런 상태는 교착상태의 조건인 환형대기를 만족시키게 되어 교착상태에 빠질 수 있는 것을 의미한다. 물론 항상 교착상태에 빠지는 것은 아니다. 필요조건이기 때문이다.



그림을 살펴보게 되면 프로세스1R1에 자원을 요청하고 R2의 자원을 보유하고 있다. 프로세스2R3에 자원 요청을 하고 R1R2의 자원을 가지고 있다. 프로세스3의 경우는 R3의 자원을 가지고 있고 R2에 자원을 요청했다. 이렇게 원의 형태를 가지고 있는 자원 할당도를 보게 되면 교착상태에 빠졌다는 것을 알 수 있다. 모든 프로세스는 자원을 가지고도 있지만 자원을 요청하고 기다리고 있는 상태이다. 따라서 모든 프로세스는 동작을 할 수 없게 된다.


오른쪽의 경우에는 프로세스2의 경우 R1을 사용 중이다. 따라서 이 작업이 끝나면 R1에 대한 자원을 반납할 것이다. 그 자원을 프로세스1이 사용할 수 있다. 프로세스4 또한 R2의 자원을 사용하고 반납을 할 수 있다. 그러면 프로세스3이 사용하여 모든 프로세스가 작업을 수행할 수 있으므로 교착상태가 아니다.