혼자 공부하는 컴퓨터구조 + 운영체제
교착 상태
단점이없어지고싶은개발자
2022. 10. 29. 16:13
반응형
식사하는 철학자 문제라는 고전적이고 재밌는 문제 상황이 있다.
동그란 원탁에 다섯 명의 철학자가 앉아 있는데 철학자들 사이 사이에는 식사에 필요한 포크가 있다. 그리고 철학자들 앞에 있는 식사는 두 개의 포크로 먹을 수 있는 음식이 있다고 가정해보자.
철학자들은 아래와 같은 순서로 식사를 할 수 있다.
- 왼쪽 포크가 사용 가능하면 집어든다.
- 오른쪽 포크가 사용 가능하면집어든다.
- 왼쪽과 오른쪽 포크를 모두 집어들면 정해진 시간동안 식사를 한다.
- 식사 시간이 끝나면 오른쪽 포크를 내려놓는다.
- 으론쪽 포크를 내려놓은 뒤 왼쪽 포크를 내려놓는다.
- 다시 1번부터 반복한다.
순서를 보면 아무 문제 없지만 모든 철학자가 동시에 포크를 집는다면 누구도 식사할 수 없다. 이렇게 진행이 멈춰 버리는 현상을 교착 상태(deadlock)이라고 한다.
교착 상태 발생 조건 : 상호배제, 점유와 대기, 비선점, 원형대기가 모두 만족 될 때 교착 상태가 발생할 가능성이 생긴다.
- 상호배제 : 근본적인 원인은 해당 장원을 한 번에 하나의 프로세스만 이용 가능했기 때문이다. 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없을 때, 상호배제 상황에서 교착 상태가 발생할 수 있다.
- 점유와 대기 : 철학자 문제에서 '왼쪽 포크를 들고' 다른 철학자의 포크를 기다렸기 때문이다. 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태를 점유와 대기라고 한다.
- 비선점 : 만약 다른 철학자의 포크를 강제로 빼앗을 수 있었다면 교착 상태는 발생하지 않았을 것이다. 프로세스가 자원을 강제로 빼앗지 못했기 때문에 교착 상태가 발생할 수 있다.
- 원형 대기 : 프로세스들과 프로세스가 요청 및 할당받은 자원이 원의 형태를 이루었기 때문이다. 자원 할당 그래프가 원의 형태로 그려지면 교착 상태가 발생할 수 있다.
교착 상태 회피 : 교착 상태가 발생하지 않을 정도로만 조심히 자원을 할당하는 방식. 교착 상태를 한정된 자원의 무분별한 할당으로 인해 발생하는 문제로 간주한다.
- 안전 상태 : 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태
- 불안정 상태 : 교착 상태가 발생할 수도 있는 상황
- 안전 순서열 : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서
- 예) 웹 브라우저, 메모장, 게임 프로세스가 동시에 운영체제에 자원을 요청한 상황에서 웹 브라우저 - 메모리 - 게임 프로세스 순서대로 자원을 할당하면 교착 상태가 발생하지 않는다고 가정하면 이 순서가 안전 순서열이 된다.
교착 상태 검출 후 회복 : 교착 상태 발생을 인정하고 사후에 조치하는 방식. 프로세스들이 자원을 요구할 때마다 그때그때 모두 할당하며, 교착 상태 발생 여부를 주기적으로 검사한다. 그리고 교착 상태가 검출되면 그때 다음과 같은 방식으로 회복한다.
- 선점을 통한 회복 : 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식. 즉, 다른 프로세스로부터 자원을 강제로 빼앗고 한 프로세스에 할당하는 방식.
- 프로세스 강제 종료를 통한 회복 : 교착 상태에 놓인 프로세스를 모두 강제 종료할 수도 있고, 없어질 때까지 한 프로세스씩 강제 종료할수도 있다. 전자는 한 방에 해결할 수 있지만 작업 내역을 잃게 될 가능성이 있다. 후자는 작업 내역을 잃는 프로세스는 최대한 줄일 수 있다.
반응형