교착상태 (dead lock)

kmb·2022년 10월 6일
0

운영체제

목록 보기
5/5

교착상태( dead lock )

2개 이상의 프로세스가 다른 프로세스의 작업이 끝날때까지 기다리며 작업을 진행하지 못하는 상태이다.


교착상태 원인

1) 시스템자원 : 다른 프로세스와 공유 할 수 없는 자원을 사용할때 발생한다.

ex) A 프로세스는 프린터를 할당받고 모니터를 기다리고 B프로세스는 모니터를 할당받고 프린터를 기다리면 교착상태 발생

2) 공유변수 : 공유 변수를 사용 할때 무한대기를 막지못할 경우 교착상태가 발생한다.

3) 응용프로그램 : DB에서 저장된 데이터를 사용할때 일관성을 유지하기위해 lock을 사용하는데 이때 교착상태가 발생 할 수 있다.


교착상태 발생조건

위 그림을 보면 각각의 프로세스가 왼쪽의 자원을 할당받고 오른쪽의 자원을 기다리고 있다.
교착상태가 발생하려면 4가지 조건을 모두 충족해야한다.

1) 상호 배제 : 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이어야한다.
배타적인 자원은 임계구역으로 보호되어서 다른 프로세스가 동시에 사용할 수 없으므로 교착상태가 발생한다.

2) 비선점 : 한 프로세스가 사용중인 자원은 중간에 다른 프로세스가 빼앗을수 없는 비선점 자원이어야한다.
자원을 빼앗을수 없으면 공유할 수 없으므로 교착상태 발생한다.

3) 점유와 대기 : 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태라면 교착상태가 발생한다.

4) 원형 대기 : 점유와 대기를 하는 프로세스간의 관계가 원을 이루어야한다.
프로세스가 특정 자원에 대해서 점유하고 대기를 한다고 모두 교착상태가 발생하는것은 아니다.
프로세스가 서로 방해하는 방향이 원 모양이면 서로 양보하지 않기 때문에 교착상태가 발생한다.


교착상태 해결조건

1) 교착상태 예방 : 교착상태가 발생하는 4가지 조건이 발생하지않도록 무력화하는것 (실효성이 적어서 사용을 잘 안한다)

상호 배제 예방 : 독점적으로 사용할 수 있는 자원을 모두 없애는 방법. 모든 자원을 공유 할 수 있다면 교착상태가 발생하지 않는다.
비선점 예방 : 모든 자원을 빼앗을수 있도록 만든다.
점유와 대기 예방 : 프로세스가 자원을 점유한 상태에서 다른 자원을 기다리지 못하도록 모든 프로세스에게 자원을 할당하거나 아예 할당하지 않는 방식. (일괄작업 방식이라서 자원 활용성이 떨어진다.)
원형 대기 예방 : 자원을 한 방향으로만 사용하도록 설정. 즉 시스템 자원에 숫자를 부여한다.

2) 교착상태 회피 : 자원 할당량을 조절해서 교착상태를 막는다. 즉 교착상태가 발생할 가능성이 보이면 자원할당을 중단하고 대기하는것. (프로세스가 모든 자원을 미리 선언해야하고 전체 자원수를 고정시켜야하므로 자원낭비가 커서 실효성이 적다)
자원의 총개수와 현재 할당된 자원의 개수를 기준으로 시스템을 안정상태(safe state)불안정상태(unsafe state)로 나눈다.

3) 교착상태 검출 : OS가 프로세스의 자원 할당을 모니터링해서 교착상태가 발생하는지 계속 확인하는것. (가장 많이 사용하는 방법)

타임아웃을 이용한 검출 : 일정시간동안 작업이 진행되지 않은 프로세스를 교착상태가 발생한것으로 간주해서 처리하는 방법. ( 단점 : 엉뚱한 프로세스가 강제종료될 수 있고 모든 시스템에 적용 할 수 없다 )
자원 할당 그래프를 이용한 검출 : 자원할당 그래프를 보면 시스템 내의 어떤 프로세스가 어떤 자원을 사용하고있는지 알 수 있다.

4) 교착상태 회복 : 교착상태를 유발한 프로세스를 강제로 종료하는 2가지
1. 모든 프로세스를 동시에 종료하는 방법.
2. 교착상태를 일으킨 프로세스들중 우선순위가 낮은 프로세스부터 순서대로 종료하는 방법.

 

출처

  • 쉽게 배우는 운영체재 (책)
profile
꾸준하게

0개의 댓글