교착상태는 시스템에서 4가지 조건이 동시에 발생할때 나타남
- 상호배제 (mutual exclusion)
- 자원이 최소 하나 이상 비공유 (한번에 한 프로세스에만 자원이 할당)
- 점유와 대기 (hold and wait)
- 최소 하나의 자원을 보유하면서 다른 프로세스에 할당된 자원을 대기
- 비선점 (non-preemptive)
- 다른 프로세스의 자원을 뺏을 수 없음
- 순환대기 (circular wait)
- 상대방이 가진 자원을 서로 대기
교착상태 예방(prevention) 기법
- 상호배제조건 방지
- 태생적으로 공유가 불가능한 자원도 있기 때문에 어려움
- 공유가능한 자원은 원래 배타적 접근을 요구하지 않음
- 점유와 대기조건 방지
- 프로세스가 작업 수행 전에 필요한 모든 자원을 한꺼번에 요청하고, 획득해서 작업수행
- 혹은 자원을 전혀 갖고 있지 않을 떄만 자원을 요청할 수 있도록 허용
- 비선점 조건 방지
- 어떤 자원을 가진 상태에서 새로운 자원을 얻으려는데 실패하면 가진것도 내 놓기
- 진행중이던 작업의 상태를 쉽게 저장/복구할 수 있어야 한다는 조건이 필요함
- 필요한 자원을 대기 프로세스가 선점하고 있다면 뺏아서 쓰기
- 만약 필요한 자원을 추가로 얻지 못하면 자신이 대기 프로세스 상태가 되고, 누군가 자원을 뺏아갈 수 있음
- 순환대기조건 방지
- 자원에 일련의 순서를 부여하고, 각 프로세스는 오름차순으로만 자원을 요청할 수 있도록 하기
- 자원의 낭비 가능성
교착상태 회피(avoidance) 기법
- 프로세스 시작 거부
- 프로세스의 요구가 교착상태를 발생시킬 수 있다면 프로세스 시작을 중단시킴
- 자원할당 거부
- 프로세스의 요구가 교착상태를 발생시킬 수 있다면 자원을 할당하지 않음
- 은행가 알고리즘(Banker's Algorithm)
교착상태 회복(recovery) 기법
- 프로세스 중지
- 교착상태 프로세스를 모두 중지
- 교착상태가 끝날때 까지 하나씩 중지
- 자원선점
- 어떤 프로세스의 자원을 뺏아서 다른 프로세스에게 주기
- 사전 해결조건
- 비용최소화를 위해 적절한 선점순서 결정 필요
- 자원을 뺏긴 프로세스의 안정적인 상태복귀
- 동일한 프로세스가 계속 자원을 뺏기는 일이 없도록 (기아상태 방지:식사하는 철학자 문제)
'공장' 카테고리의 다른 글
i-node (0) | 2012.02.19 |
---|---|
맥, 라이언 (Mac OS X, Lion) 시스템 폰트 바꾸기 (0) | 2012.02.01 |
UML - 연관, 집합, 합성, 상속 (0) | 2012.01.22 |