정의
교착상태 : 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태
아사현상 : 운영체제가 잘못된 정책을 사용하여 특정 프로세스의 작업이 지연되는 문제
교착상태 : 여러 프로세스가 작업을 진행하다 보니 자연 발생적으로 일어나는 문제
발생
시스템 자원 : 교착 상태는 다른 프로세스와 공유할 수 없는 자원을 사용할 때 발생
공유 변수 : 교착 상태는 공유 변수를 사용할 때 발생
응용 프로그램
- 데이터베이스 같은 응용 프로그램에서도 교착 상태 발생
- 데이터의 일관성을 유지하기 위해 잠금을 사용하는데 교착 상태가 발생할 수 있음
자원 할당 그래프
자원 할당 그래프
- 프로세스의 방향성을 그래프로 표현
- 프로세스는 원, 자원은 사각형으로 표현
다중 자원
- 여러 프로세스가 하나의 자원을 동시에 사용
- 수용 가능 프로세스 수를 사각형 안에 작은 동그라미로 표현
식사하는 철학자 문제
- 왼쪽에 있는 포크를 잡은 뒤 오른쪽에 있는 포크를 잡아야만 식사 가능
교착상태 필요조건
4가지 조건 모두 발생해야 함
- 상호 배제 : 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원
- 비선점 : 한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선점 자원
- 점유와 대기 : 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태
- 원형 대기 : 점유와 대기를 하는 프로세스 간의 관계가 원을 이루어야 함
상호 배제, 비선점 조건 : 자원이 어떤 특징을 가지는지를 나타냄
점유와 대기, 원형 대기 조건 : 프로세스가 어떤 해우이를 하고 있는지를 나타냄
식사하는 철학자 문제, 교착상태 필요조건
- 상호배제 : 포크는 한 사람이 사용하면 다른 사람 사용 불가
- 비선점 : 철학자 중 어떤 사람의 힘이 월등하여 옆 사람 포크 뺏기 불가
- 점유와 대기 : 한 철학자가 두 자원을 다 점유하거나 반대로 두 자원을 다 기다리기 불가
- 원형 대기 : 철학자들은 둥그런 식탁에서 식사를 함, 원을 이룬다는 것은 선후 관계를 결정할 수 없어 문제가 계속 맴돈다는 의미
교착상태 예방
상호 배제 예방
- 시스탬 내 독점적 사용 가능 자원 삭제
- 상호 배제 무력화 어려움
비선점 예방
- 모든 자원 빼앗기 가능 방법
- 아사현상 일으켜 무력화 어려움
점유와 대기 예방
- 프로세스가 자원 점유 상태에서 다른 자원을 기다리지 못하게 하는 방법
- 전부 할당 O / 할당 X
- 자원이 아닌 프로세스의 자원 사용 방식을 변화시켜 교착 상태를 처리
단점
- 모든 자원 자세히 알기 어려움
- 자원 활용성 떨어짐
- 많은 자원 사용하는 프로세스가 적은 자원ㅇ르 사용하는 프로세스보다 불리
- 일괄 작업 방식으로 동작
원형대기 예방
- 점유와 대기 프로세스들이 원형을 이루지 못하도록 막음
- 모든 자원에 숫자 부여, 숫자 큰 방향으로만 자원 할당
원형 대기 예방과 교착 상태 해결
단점
- 프로세스 작업 진행에 유연성 떨어짐
- 자원의 변호를 어떻게 부여할 것인지 문제
교착상태 예방
=> 교착상태 유발하는 네가지 조건이 일어나지 않도록
=> 자원 보호하기 위해 상호 배제와 비선점 예방 어려움
=> 점유와 대기, 원형 대기는 프로세스 작업 방식을 제한하고 자원 낭비하기에 사용 불가
교착 상태 회피
- 프로세스에 자원 할당 시 기준 자원 이상 나눠주면 교착 상태 발생하는지 파악하여 그 수준 이하로 자원 나눠줌
- 교착 상태가 발생하지 않는 범위 내에서만 자원 할당, 교착 상태가 발생하는 범위에 있을 시 프로세스 대기
=> 할당되는 자원의 수를 조절하여 교착상태 피함
안정 상태 / 불안정 상태
- 교착 상태 회피는 자원의 총수와 할당된 자원의 수를 기준으로 시스템 안정상태와 불안정상태로 나눔
- 시스템이 안정 상태를 유지하도록 자원 할당
- 할당 자원이 적으면 안정 상태 크고 늘어날 수록 불안정상태 커짐
은행원 알고리즘
- 교착상태 회피 구현
- 안정상태면 허용 불안정상태면 거부
할당 기준
- 각 프로세스의 기대 자원과 비교하여 가용 자원이 하나라도 크거나 같으면 자원 할당
교착 상태 회피의 문제점
- 프로세스가 자신이 사용할 모든 자원을 미리 선언해야 함
- 시스템의 전체 자원 수가 고정적
- 자원 낭비
교착 상태 검출
- 운영체제가 프로세스의 작업을 관찰하며 교착 상태 발생 여부 계속 주시
- 교착 상태 발견 시 이를 해결하기 위해 교착 상태 회복 단계
타임아웃
- 일정 시간 동안 작업이 진행되지 않은 프로세스를 교착 상태가 발생한 것으로 간주하여 처리
- 교착 상태가 자주 발생하지 않을 것이라는 가정하에 사용하기에 특별한 알고리즘이 없어 쉽구 구현 가능
- 타임아웃이 되면 프로세스 종료
데이터베이스에서 타임아웃 문제
- 데이터베이스에서 타임아웃으로 프로세스가 종료되면 일부 데이터의 일관성이 깨질 수 있음
- 데이터의 일관성이 깨지는 문제를 해결하기 위해 체크포인트와 롤백 사용
체크포인트 : 작업을 하다 문제 발생 시 저장 상태로 돌아오기 위한 표시
롤백 : 작업을 하다 문제 발생 시 저장 상태로 돌아오는 것
교착 상태 회복
- 교착 상태가 검출된 후 교착 상태를 푸는 후속 작업
- 교착 상태 회복 단계에서 교착 상태를 유발한 프로세스 강제 종료