교착상태

초보개발·2022년 4월 10일
0

OS

목록 보기
37/38
post-custom-banner

1. 교착상태


1. 교착 상태

2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태를 교착 상태라고 합니다.

2. 교착상태의 발생

2.1 시스템 자원

프로세스가 임계구역으로 보호되는 프린터, 스캐너 등 동시에 같이 사용할 수 없는 시스템 자원을 할당받은 후 양보하지 않은 경우입니다. P1은 프린터를 할당받은 후 스캐너를 기다리고 P2는 스캐너를 할당받고 프린터를 기다리면 교착 상태가 발생하게 됩니다.

2.2 공유 변수

위의 코드는 임계구역을 해결하기 위한 코드로 무한 대기 현상이 일어나 교착 상태가 발생할 수 있습니다. P1은 lock1을 참으로 만들고 lock2가 거짓이 될 때까지 기다리고 P2도 lock2를 참으로 만든 다음 lock1이 거짓이 될때까지 기다리게 됩니다. 이 처럼 한 변수를 할당받은 상태에서 다른 변수를 기다리면 교착 상태가 발생하게 됩니다.

2.3 응용 프로그램

여러 프로세스가 데이터베이스에 저장된 데이터를 사용할 때는 데이터의 일관성을 유지해야 합니다. 따라서 일관성을 유지하기위해 잠금을 사용하게 되는데 이때 교착상태가 발생할 수 있습니다.

3. 식사하는 철학자 문제

철학자 4명이 둥그런 식탁에 앉아 식사를 하는데, 왼쪽에 있는 포크를 잡은 뒤 오른쪽에 있는 포크를 잡아야만 식사가 가능하다는 조건이 있습니다. 식사하는 철학자 문제는 오른쪽 포크를 잡지 못해 모두 굶어 죽는다는 결과가 나옵니다.

식사하는 철학자 문제에서 교착상태가 발생하는 조건은 아래와 같습니다.

  • 철학자들은 서로 포크를 공유할 수 없습니다.
    자원을 공유하지 못하면 교착 상태가 발생합니다.
  • 각 철학자는 다른 철학자의 포크를 빼앗을 수 없다.
    자원을 빼앗을 수 없으면 자원을 놓을 때까지 기다려야 하므로 교착 상태가 발생합니다.
  • 각 철학자는 왼쪽 포크를 잡은 채 오른쪽 포크를 기다립니다.
    자원 하나를 잡은 상태에서 다른 자원을 기다리면 교착 상태가 발생합니다.
  • 자원 할당 그래프가 원형입니다.
    자원을 요구하는 방향이 원을 이루면 양보를 하지 않은 상황이므로 교착상태가 발생합니다.

2. 교착상태 필요조건


1. 교착상태 필요조건

교착상태는 mutual exclusion, non-preemption, hold and wait 그리고 circular wait 네 가지 조건들을 모두 만족해야 발생합니다. 이 중 하나라도 충족하지 않으면 교착상태는 발생하지 않습니다.

1.1 상호배제

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

1.2 비선점

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

1.3 점유 대기

프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 합니다. 다른 프로세스 작업을 방해하므로 교착상태가 발생합니다.

1.4 원형 대기

점유와 대기를 하는 프로세스 간 관계가 원을 이루어야 합니다. 서로 양보하지 않으므로 교착상태가 발생하게 됩니다.

2. 식사하는 철학자 문제와 교착 상태 필요조건

식사하는 철학자 문제에서 교착상태 필요조건이 어떻게 적용되는지 알아봅시다.

  • 상호 배제: 포크는 한 사람이 이용하면 다른 사람이 사용할 수 없는 배타적인 자원입니다. 따라서 교착상태는 배타적 자원을 여러 프로세스가 사용해야 하는 경우 발생합니다.
  • 비선점: 배타적 자원이여도 빼앗을 수 있게 되면 교착상태는 발생하지 않습니다. 하지만 자원을 뺴앗을 수 있다는 것은 시간 간격을 두고 그 자원을 공유할 수 있다는 의미이므로 상호 배제가 성립되지 않습니다.
  • 점유 대기: 한 철학자가 왼쪽 포크, 오른쪽 포크 다 점유하거나 두 자원을 기다리는 상태라면 교착상태는 발생하지 않습니다. 진행에 선후관계가 있다는 뜻이므로 서로의 진행을 방해하지 않습니다. 하지만 한 프로세스가 자원을 점유한 상태에서 다른 프로세스의 자원을 기다리고 있을 경우 서로 진행을 방해하는 경우가 되므로 교착상태가 발생합니다.
  • 원형 대기: 원을 이루어 식사를 한다는 뜻은 선후 관계를 결정할 수 없어 문제가 계속 맴돈다는 뜻입니다. 점유와 대기를 하는 프로세스들이 원을 이루어 서로 진행을 방해하는 상태가 되므로 교착상태가 발생합니다. 만약 직각 식탁에 한줄로 앉아 한쪽 끝부터 철학자가 식사를 시작하고 사용한 포크를 모두 내려놓으면 교착상태는 발생하지 않습니다.

🌟 교착상태와 아사 현상은 다릅니다. 아사 현상은 정책의 잘못됨이나 오류로 인해 특정 프로세스의 작업이 이루어지지 않는 것을 말하며 교착상태는 아사 현상과 달리 정책상 잘못이나 오류가 없어도 자연적으로 발생합니다. 따라서 에이징 기법으로 해결할 수 없고 정책을 수정한다고 해서 교착상태를 막기 어렵습니다.

post-custom-banner

0개의 댓글