- 교착 상태의 정의와 발생 원인 :
- 2개 이상의 프로세스가 서로 다른 프로세스의 작업이 끝나기만을 기다림으로 인해 작업을 진행할 수 없는 상태,
- 식사하는 철학자 문제-자원 공유 불가, 놓을 수 없음, 왼쪽 잡으면서 오른쪽을 대기해야 함, 원형 관계
- 교착 상태가 발생하는 네 가지 필요조건 :
- 상호 배제(실행 중 자원 공유 불가), 비선점(빼앗을 수 없음), 점유와 대기, 원형 대기(점유-대기 관계가 원형)
- 교착 상태 해결 방법과 그 실효성 :
- 예방(상호 배제/비선점 =>자원의 특징을 바꾸므로 불가능. 프린터 등 점유대기/원형대기 => 프로세스 작업 방식 제한, 자원 낭비로 어려움)
- 회피(은행원 알고리즘)
- 검출(타임아웃, 자원할당그래프 원형이면 끊기)
- 회복(프로세스 우선순위대로 죽이기)
교착 상태deadlock : 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만을 기다림으로 인해 작업을 진행하지 못하는 상태이다.
- 아사 현상과 차이점
아사 현상starvation : 운영체제의 잘못된 정책으로 인해 프로세스의 작업이 지연된다.- 교착 상태 : 올바른 정책을 사용하지만 자연적으로 발생하는 상태이다.
예시 1

P2는 스캔을 완료하고 프린터를 사용하여 출력하기 위해 프린터가 자신에게 할당되기를 기다리고, P1은 프린터 사용을 완료 후 스캔 작업을 하기 위해서 스캐너가 자신에게 할당되기를 기다린다.예시 2 : 잠금을 사용하는 경우
P1에서 while(lock2==true); 까지 실행 중 타임아웃이 발생하여P2의 lock2=true; while(lock1==true); 가 실행되는 경우true , lock2도 true 이므로 무한 루프에 빠지게 된다...........................................................
boolean lock1=false;
boolean lock2=false;
..........................................................
//P1
lock1=true; //이 코드로 인해 P2 임계구역에 접근이 불가능하다.
while(lock2==true);
--------
|임계구역|
--------
lock1=false; //P2의 while 무한루프가 끝나게 된다.
..........................................................
//P2
lock2=true; //이 코드로 인해 P1 임계구역에 접근이 불가능하다.
while(lock1==true);
--------
|임계구역|
--------
lock2=false; //P1의 while 무한루프가 끝나게 된다.
..........................................................
자원 할당 그래프 : 프로세스가 사용중인 자원, 기다리는 자원을
방향성이 있는 그래프 directional graph 로 표현한다.
단일 자원 single resource : 한 프로세스당 한 자원만 사용한다.

다중 자원 multiple resource : 여러 프로세스가 한 자원을 동시에 사용하는 경우이다.

식사하는 철학자 문제 : 원형 식탁에 의자와 포크가 4개 있다. 이 때, 왼쪽에 있는 포크를 잡은 뒤 오른쪽의 포크를 잡아야만 식사할 수 있다.
교착 상태가 발생하는 조건 : 4가지
necessary condition : 4가지
- 상호 배제
mutual exclusion: 한 프로세스가 사용중인 자원은 다른 프로세스와 공유하지 않는다.- 비선점
non-preemptive: 한 프로세스가 사용중인 자원은 다른 프로세스가 빼앗을 수 없다.- 점유와 대기
hold and wait: 프로세스가 자원을 할당받은 상태에서 다른 자원을 기다린다.- 원형 대기
circular wait: 점유와 대기를 하는 프로세스 간 관계가 원형이다.
- 상호 배제, 비선점 : 자원의 특징을 나타낸다.
- 점유와 대기, 원형 대기 : 프로세스 행위의 특징을 나타낸다.
교착 상태의 필요조건에 충족하지 않도록 미리 방지 한다.
자원의 특징인 상호 배제와 비선점을 바꾸면 운영체제의 기능이 제대로 되지 않는다.
프로세스마다 우선순위를 두고 뺏게 한다.
-> 순위가 낮은 프로세스는 아사현상이 발생한다.
비선점 조건을 완전히 무력화하기는 어렵다.
자원을 점유하면서 다른 자원을 대기하지 못하게 한다.
필요자원을 모두 할당한 후 실행한다.
전부 점유하거나 아예 할당하지 않는 방식을 적용한다.
장점 : 프로세스의 자원 사용 방식을 변화시키는 것이 의미있다.
단점 : 사용할 모든 자원을 자세히 알기 어렵다.
모든 자원에 번호를 부여하고 큰 방향으로만 자원을 할당한다.
P1 : 마우스1 을 점유하고 프린터3 을 대기할 수 있다.
P2 : 프린터3 을 점유하고 하드디스크2 를 대기할 수 없다.
P2는 3 -> 2 할당받지 못하므로 강제 종료되고, P1은 정상 실행된다.

장점 : 자원,기능에 영향이 가지 않음
단점 : 프로세스의 작업 진행의 유연성 저하, 번호 부여 오버헤드
교착 상태 예방의 문제점
- 네 조건(상호 배제, 비선점, 점유와 대기, 원형 대기)이 일어나지 않도록 제약을 정한다.
- 상호 배제 / 비선점 예방 사용 어려움 : 자원의 특징을 바꾸기 때문에 자원이 손상된다.
- 점유 대기 / 원형대기 예방 사용 불가 : 프로세스 작업 방식을 제한하고 자원을 낭비한다.
필요조건에 만족하지 않도록 자원의 할당량을 조절한다.
할당되는 자원의 수를 조절하여 교착 상태를 피한다.
안정 상태safe state : 할당된 자원이 적다.불안정 상태unsafe state : 할당된 자원이 많다. 커질수록 교착 상태 발생 가능성이 높아진다.
교착 상태 회피를 구현하는 대표적인 알고리즘이다.
은행이 자원을 대출해준다. 안정이면 허용, 불안정이면 거부이다.
- 은행원 알고리즘의 자원 할당 기준 :
가용 자원 > 기대 자원안정 상태: 각 프로세스의 기대 자원과 비교하여 가용 자원이 크거나 같은 경우가 한 번 이상인 경우이다.
안정 상태와 불안정 상태

변수
| 변수 | 설명 |
|---|---|
Total : 전체 자원 | 시스템 내 전체 자원의 수 |
Available : 가용 자원 | 시스템 내 현재 사용할 수 있는 자원의 수 -> 가용 자원 = 전체 자원 - 모든 프로세스의 할당 자원 |
Max : 최대 자원 | 각 프로세스가 선언한 최대 자원의 수 |
Allocation : 할당 자원 | 각 프로세스에 현재 할당된 자원의 수 |
Expect : 기대 자원 | 각 프로세스가 앞으로 사용할 자원의 수 -> 기대 자원 = 최대 자원 - 할당 자원 |
교착 상태 회피의 문제점
- 프로세스가 자신이 사용할 모든 자원을 미리 선언해야 한다.
- 시스템의 전체 자원 수가 고정적이어야 한다.
- 자원이 낭비된다.
프로세스의 작업을 관찰하면서 교착 상태 발생 여부를 주시한다.
검출되면 회복 단계로 넘어간다.
일정 시간 동안 작업이 진행되지 않는 프로세스를 교착 상태로 간주하여 프로세스를 종료한다.
교착 상태가 자주 발생하지 않는다는 가정 하에 사용한다.
장점 : 구현이 쉽다. 단점 : DB에서 데이터의 일관성 위배 -> 체크포인트 , 롤백 사용
데이터베이스에서 타임아웃으로 프로세스가 종료되면 일부 데이터의 일관성이 깨질 수 있다.
체크포인트 check point : 스냅샷, 세이브포인트의 역할이다.
롤백 roll back : 작업 중 문제가 발생하여 체크포인트 로 되돌아간다.
자원 할당 그래프를 이용한다.

교착 상태를 검출 후 상태 회복 단계가 진행된다.
교착 상태를 유발한 프로세스를 강제로 종료한다.
유발한 프로세스 중 하나를 골라 순서대로 종료 : 우선순위가 낮은 프로세스를 먼저 종료한다.
- 우선순위가 낮은
- 지금까지 작업한 시간이 짧은
- 자원을 많이 쓰는
프로세스가 종료된다.