은행원 알고리즘 예제

이전 예제에서 시작된 것과 동일한 상태에서 시작하여 프로세스 3 요청 2 단위의 리소스 C. 시스템이 네 가지 유형의 리소스(A, B, C 및 D)를 구분한다고 가정하면 다음 의 예는 이러한 리소스가 어떻게 될 수 있는지를 예로 들 수 있습니다. 분산. 이 예제에서는 리소스에 대한 새 요청이 도착하기 직전에 시스템을 보여 둡니다. 또한 리소스의 유형과 수는 추상화됩니다. 예를 들어 실제 시스템은 각 리소스의 훨씬 더 많은 양을 처리합니다. 이전 예제에 제공된 상태는 각 프로세스가 최대 리소스를 획득한 다음 종료할 수 있음을 보여 줌으로써 안전한 상태임을 보여줄 수 있습니다. 작업 설명은 현재 실행 중인 프로세스를 정의하지 않습니다. 따라서 다른 구현에서 설정한 예제를 따르고 성공적으로 실행된 후 각 프로세스에 모든 리소스가 무료로 들어오도록 합니다.

또한 데모이기 때문에 실행되는 동안 어떤 일이 일어나고 있는지에 대한 타격 설명을 제공합니다. 선택할 수있는 두 가지 main() 함수가 있습니다 (#DEFINE BIG_EXAMPLE를 찾으십시오), 하나는 작업 예제, 다른 하나는 훨씬 무거운 의무 테스트 사례입니다. 이 새 시스템 상태가 안전한지 확인해야 합니다. 이렇게 하려면 위의 데이터 구조에서 안전 알고리즘을 다시 실행합니다. 뱅커의 알고리즘은 미리 결정된 최대 가능한 모든 리소스량에 대한 할당을 시뮬레이션하여 안전을 테스트한 다음 가능한 활동을 테스트하기 위해 “s-state” 검사를 하는 리소스 할당 및 교착 상태 회피 알고리즘입니다. 할당을 계속할 수 있는지 여부를 결정합니다. 따라서 새 시스템 상태는 안전하므로 즉시 P1 프로세스에 대한 요청을 부여할 수 있습니다. 뱅커 알고리즘에 대한 코드 시스템이 리소스에 대한 요청을 수신하면 뱅커의 알고리즘을 실행하여 요청을 부여하는 것이 안전한지 확인합니다. 안전 상태와 안전하지 않은 상태의 차이점을 이해하면 알고리즘이 매우 간단합니다. 나는 알고리즘이 부채 위기로 어떻게 해결할 수 있는지 이해하지 못했다.

모든 프로세스가 실행(종료)을 완료할 수 있는 경우 상태(위의 예에서와 같이)는 안전한 것으로 간주됩니다. 시스템이 프로세스가 언제 종료될지 또는 그때까지 요청한 리소스 수를 알 수 없기 때문에 시스템은 모든 프로세스가 결국 명시된 최대 리소스를 획득하고 나중에 종료하려고 시도한다고 가정합니다. 이는 시스템이 각 프로세스가 실행되는 기간(적어도 교착 상태 회피 관점에서는 아님)과 특별히 관련이 없기 때문에 대부분의 경우 합리적인 가정입니다. 또한 최대 리소스를 획득하지 않고 프로세스가 종료되면 시스템에서 더 쉬워집니다. 준비 대기열을 처리할 경우 안전 상태가 의사 결정권자가 되는 것으로 간주됩니다. 뱅커의 알고리즘은 때때로 회피 알고리즘 또는 교착 상태 알고리즘 (Dijkstra의 알고리즘의 또 다른!)에 의해 개발되었다. 은행에서 사용할 수 있기 때문에 은행이 자원이 부족하지 않으며 항상 안전한 상태를 유지할 수 있기 때문에 Banker의 알고리즘이라고합니다. C # 프로그램은 시스템을 사용하여 뱅커의 알고리즘을 사용하여 가능한 모든 안전 // 시퀀스를 인쇄합니다. System.Collections.Generic 사용; 이러한 종류의 상황을 안전하지 않은 상태 또는 교착 상태라고 하며 뱅커의 알고리즘을 사용하여 해결됩니다. 이 알고리즘은 THE 운영 체제의 설계 프로세스에서 개발되었으며 EWD108에서 원래 (네덜란드어로) 설명되었습니다.

[1] 새 프로세스가 시스템에 진입할 때, 각 리소스 유형의 최대 인스턴스 수를 선언해야 합니다. 이 숫자는 시스템의 총 리소스 수를 초과할 수 없습니다.

Comments

comments