윤개발
5. 교착상태 본문
교착상태(deadlock)이란?
- 2개 이상의 프로세스가 다른 프로세스의 자원을 기다리며 더이상 작업하지 못하는 무한대기 상태에 빠지는 것을 말한다.
교착상태의 4가지 조건
- 4가지 조건을 모두 만족하여야 교착상태이다.
- 상호 배제: 사용하는 자원이 공유할 수 없는 자원이여야 한다.
- 비선점: 하나의 프로세스가 다른 프로세스를 선점할 수 없어야 한다.
- 점유와 대기: 각 프로세스는 어떤 자원을 할당받고 대기상태에 있어야한다.
- 원형대기: 대기하는 방향이 원형을 이루어야한다.(사이클)
교착상태와 아사현상은 다르다
- 아사 현상은 정책적인 오류로 인해 작업이 이루어지지 않는 것을 말한다. 에이징등을 통해 해결할 수 있지만 교착상태는 자연스럽게 발생한다.
교착상태 해결법
- 예방 - 4가지 조건중에 하나를 무력화 하는 방법이다
- 상호배제 예방: 현실적으로 모든 자원을 공유할 수는 없으며 자원 공유시 데이터 일관성이 어긋날 수 있다.
- 비선점 예방: 프로세스를 선점형식으로 만들면 시스템 프로세스를 건드릴 수도 있고 아사현상에 빠질 수 있다. 에이징을 해결하여도 다시 아사현상에 빠지게 된다.
- All or Nothing: 모두 부여하거나 아예 부여하지 않는 방식
- 모든 프로세스가 어떤 자원을 쓰는지 초기에 알기 어렵다.
- 자원의 활용성이 줄어든다. (노는 자원이 많아진다)
- 많은 자원을 사용하는 프로세스는 아사현상에 빠지게 된다.
- 한번에 해야하기 때문에 일괄적으로 작업하게 되며 효울이 떨어진다.
- 원형대기 예방: 자원에 번호를 부여하고 작은쪽에서 큰쪽으로만 할당되게 하는 방식
- 유연성이 떨어지며 납득이 어렵다.(프린터 → 마우스는 되는데 반대가 안되면 사용자 입장에서는 납득이 어렵다)
- 번호를 부여하는데 신중하여야한다.
- 회피 - 자원을 할당하다가 교착상태의 가능성이 있으면 중단한다.
- 30명의 테이블을 받을 수 있는 레스토랑에 20개의 파스타 분량뿐이라면 20명만 예약을 받는 방식이다.
- 나머지 10테이블이 낭비된다. 또한 프로세스가 할당할 자원을 미리 알고있어야한다.
- 검출과 회복 - 자원할당 그래프를 보며 회복 <= 현실적인 방법이다.
- 타임아웃을 이용(가벼운 교착상태 검출)
- 프로세스가 아무동작도 하지 않고 있다면 교착상태로 간주하여 종료하는 방식
- 대기를 하고있는 엉뚱한 프로세스가 종료될 수 있다.
- 분산형 시스템(분산 데이터베이스 등)에서는 네트워크 문제로 타임아웃이 발생할 수도 있으므로 적용하기가 어렵다.
- 자원할당 그래프를 이용한 검출(무거운 교착상태 검출)
- 사이클이 발생하면 교착상태로 본다 ⇒ 하지만 아닐수도있다. (뒤에서 다룸)
- 프로세스를 계속해서 검사하면 오버헤드가 증가한다. 이를 위해 일정시간마다 검사하는 방법도 있다.
- 교착상태의 회복
- 프로세스를 모두 종료 ⇒ 다시 실행할 때 어떤걸 먼저 실행할지 기준이 필요하다. (재발생의 가능성이 있다)
- 프로세스 하나를 종료
- 우선순위가 낮은 프로세스
- 같다면, 시간이 적게 걸리는 프로세스
- 둘다 같다면 자원을 많이 쓰는 프로세스
- 타임아웃을 이용(가벼운 교착상태 검출)
다중 자원 - 사이클이 있어도 교착상태가 아닐수 있는 경우
하나의 자원을 2개이상의 프로세스가 쓸수 있다면 사이클이 발생하여도 교착상태라고 볼수 없다.
이를 해결하기 위한 방법으로 대기 그래프를 사용한다.
- 대기 그래프 - 프로세스와 프로세스 사이의 기다리는 관계만을 나타낸다.
- 감소 그래프 - 대기 그래프에서 끝날 가능성이 있는 방향을 지운다
- ⇒ 그래도 사이클이 존재한다면 교착상태로 볼 수 있다.
'컴퓨터과학 > 운영체제' 카테고리의 다른 글
6. 물리메모리 (0) | 2021.05.17 |
---|---|
4. 프로세스 동기화 (0) | 2021.05.17 |
3. cpu 스케쥴링 (0) | 2021.05.17 |
2. 프로세스와 스레드 (0) | 2021.05.16 |
1. 하드웨어 구성 (0) | 2021.05.16 |
Comments