logo

Banker-Algorithmus im Betriebssystem (OS)

Es handelt sich um einen Bankalgorithmus Vermeiden Sie einen Stillstand Und Ressourcen zuweisen sicher zu jedem Prozess im Computersystem übertragen. Der ' S-Staat prüft alle möglichen Tests oder Aktivitäten, bevor entschieden wird, ob die Zuordnung zu jedem Prozess zulässig sein soll. Es hilft dem Betriebssystem auch dabei, die Ressourcen erfolgreich zwischen allen Prozessen zu teilen. Der Bankalgorithmus wird so genannt, weil er prüft, ob einer Person ein Kreditbetrag genehmigt werden sollte oder nicht, um dem Banksystem dabei zu helfen, die Zuteilung von Ressourcen sicher zu simulieren. In diesem Abschnitt lernen wir das Banker-Algorithmus im Detail. Außerdem werden wir Probleme basierend auf dem lösen Banker-Algorithmus . Um den Banker-Algorithmus zu verstehen, sehen wir uns zunächst ein reales Wortbeispiel dafür an.

Angenommen, die Anzahl der Kontoinhaber einer bestimmten Bank beträgt „n“ und die Gesamtgeldmenge einer Bank beträgt „T“. Wenn ein Kontoinhaber einen Kredit beantragt; Zuerst subtrahiert die Bank den Kreditbetrag vom Gesamtbargeld und schätzt dann, dass die Bardifferenz größer als T ist, um den Kreditbetrag zu genehmigen. Diese Schritte werden unternommen, weil, wenn eine andere Person einen Kredit beantragt oder einen bestimmten Betrag von der Bank abhebt, dies der Bank hilft, alle Dinge zu verwalten und zu betreiben, ohne dass die Funktionalität des Bankensystems eingeschränkt wird.

Ebenso funktioniert es in einem Betriebssystem . Wenn ein neuer Prozess in einem Computersystem erstellt wird, muss der Prozess dem Betriebssystem alle Arten von Informationen bereitstellen, z. B. bevorstehende Prozesse, Anforderungen für ihre Ressourcen, deren Zählung und Verzögerungen. Anhand dieser Kriterien entscheidet das Betriebssystem, welcher Prozessablauf ausgeführt bzw. abgewartet werden soll, damit es in einem System nicht zu einem Deadlock kommt. Daher wird es auch als bezeichnet Algorithmus zur Vermeidung von Deadlocks oder Deadlock-Erkennung im Betriebssystem.

Vorteile

Im Folgenden sind die wesentlichen Merkmale des Banker-Algorithmus aufgeführt:

  1. Es enthält verschiedene Ressourcen, die den Anforderungen jedes Prozesses gerecht werden.
  2. Jeder Prozess sollte dem Betriebssystem Informationen über bevorstehende Ressourcenanforderungen, die Anzahl der Ressourcen und die Dauer der Vorhaltung der Ressourcen bereitstellen.
  3. Es hilft dem Betriebssystem, Prozessanforderungen für jeden Ressourcentyp im Computersystem zu verwalten und zu steuern.
  4. Der Algorithmus verfügt über ein Max-Ressourcen-Attribut, das angibt, dass jeder Prozess die maximale Anzahl an Ressourcen in einem System enthalten kann.

Nachteile

  1. Es erfordert eine feste Anzahl von Prozessen und während der Ausführung des Prozesses können keine zusätzlichen Prozesse im System gestartet werden.
  2. Der Algorithmus erlaubt es den Prozessen nicht mehr, ihre maximalen Anforderungen während der Verarbeitung ihrer Aufgaben auszutauschen.
  3. Jeder Prozess muss vorab seinen maximalen Ressourcenbedarf für das System kennen und angeben.
  4. Die Anzahl der Ressourcenanfragen kann in einem begrenzten Zeitraum gewährt werden, die Frist für die Zuteilung der Ressourcen beträgt jedoch ein Jahr.

Bei der Arbeit mit einem Bankalgorithmus müssen drei Dinge bekannt sein:

  1. Wie viel jeder Prozess für jede Ressource im System anfordern kann. Es wird mit dem [ MAX ] Anfrage.
  2. Wie viel jeder Prozess derzeit jede Ressource in einem System hält. Es wird mit dem [ ZUGEORDNET ] Ressource.
  3. Es stellt die Nummer jeder Ressource dar, die derzeit im System verfügbar ist. Es wird mit dem [ VERFÜGBAR ] Ressource.

Im Folgenden sind die wichtigen Datenstrukturbegriffe aufgeführt, die im Bankalgorithmus wie folgt angewendet werden:

Angenommen, n ist die Anzahl der Prozesse und m die Anzahl der einzelnen Ressourcentypen, die in einem Computersystem verwendet werden.

    Verfügbar: Es handelt sich um ein Array der Länge „m“, das jeden im System verfügbaren Ressourcentyp definiert. Wenn Available[j] = K, bedeutet dies, dass „K“ Instanzen des Ressourcentyps R[j] im System verfügbar sind.Maximal:Es handelt sich um eine [n x m]-Matrix, die angibt, dass jeder Prozess P[i] die maximale Anzahl an Ressourcen R[j] (jeder Typ) in einem System speichern kann.Zuweisung:Es handelt sich um eine Matrix aus m x n Aufträgen, die die Art der Ressourcen angibt, die jedem Prozess im System derzeit zugewiesen sind. Wenn Allocation [i, j] = K, bedeutet dies, dass dem Prozess P[i] derzeit K Instanzen des Ressourcentyps R[j] im System zugewiesen sind.Brauchen:Es handelt sich um eine M x N-Matrixfolge, die die Anzahl der verbleibenden Ressourcen für jeden Prozess darstellt. Wenn Need[i] [j] = k, benötigt der Prozess P[i] möglicherweise K weitere Instanzen des Ressourcentyps Rj, um die zugewiesene Arbeit abzuschließen.
    Nedd[i][j] = Max[i][j] – Zuweisung[i][j].Beenden: Es ist der Vektor der Ordnung M . Es enthält einen booleschen Wert (wahr/falsch), der angibt, ob dem Prozess die angeforderten Ressourcen zugewiesen wurden und alle Ressourcen nach Abschluss seiner Aufgabe freigegeben wurden.

Der Banker-Algorithmus ist die Kombination des Sicherheitsalgorithmus und des Ressourcenanforderungsalgorithmus zur Steuerung der Prozesse und zur Vermeidung von Deadlocks in einem System:

Sicherheitsalgorithmus

Dabei handelt es sich um einen Sicherheitsalgorithmus, mit dem überprüft wird, ob sich ein System in einem sicheren Zustand befindet oder der sicheren Reihenfolge in einem Banker-Algorithmus folgt:

1. Es gibt zwei Vektoren Wok Und Beenden der Länge m und n in einem Sicherheitsalgorithmus.

Initialisieren: Arbeit = Verfügbar
Finish[i] = false; für I = 0, 1, 2, 3, 4… n - 1.

2. Überprüfen Sie den Verfügbarkeitsstatus für jeden Ressourcentyp [i], wie zum Beispiel:

Brauche ich]<= work
Finish[i] == false
Wenn das i nicht vorhanden ist, fahren Sie mit Schritt 4 fort.

3. Arbeit = Arbeit + Allocation(i) // um eine neue Ressourcenzuteilung zu erhalten

Finish[i] = wahr

Gehen Sie zu Schritt 2, um den Status der Ressourcenverfügbarkeit für den nächsten Prozess zu überprüfen.

4. Wenn Finish[i] == true; Dies bedeutet, dass das System für alle Prozesse sicher ist.

Ressourcenanforderungsalgorithmus

Ein Ressourcenanforderungsalgorithmus prüft als Anforderungsmatrix, wie sich ein System verhält, wenn ein Prozess jede Art von Ressourcenanforderung in einem System stellt.

Erstellen wir für jeden Prozess P[i] ein Ressourcenanforderungsarray R[i]. Wenn die Ressourcenanforderungich[j] gleich „K“, was bedeutet, dass der Prozess P[i] „k“ Instanzen des Ressourcentyps R[j] im System benötigt.

1. Wenn die Anzahl der angeforderte Ressourcen jedes Typs ist kleiner als die Brauchen Ressourcen, gehen Sie zu Schritt 2 und wenn die Bedingung fehlschlägt, was bedeutet, dass der Prozess P[i] seinen maximalen Anspruch auf die Ressource überschreitet. Wie der Ausdruck schon sagt:

Wenn Anfrage(i)<= need
Weiter zu Schritt 2;

2. Und wenn die Anzahl der angeforderten Ressourcen jedes Typs geringer ist als die verfügbare Ressource für jeden Prozess, fahren Sie mit Schritt (3) fort. Wie der Ausdruck schon sagt:

Wenn Anfrage(i)<= available
Andernfalls muss Prozess P[i] auf die Ressource warten, da diese nicht zur Verwendung verfügbar ist.

3. Wenn die angeforderte Ressource dem Prozess durch Statusänderung zugewiesen wird:

Verfügbar = Verfügbar - Anfrage
Zuteilung(i) = Zuteilung(i) + Anfrage (i)
Brauchenich= Brauchenich- Anfrageich

Wenn der Ressourcenzuteilungsstatus sicher ist, werden seine Ressourcen dem Prozess P(i) zugewiesen. Und wenn der neue Zustand unsicher ist, muss der Prozess P (i) auf jede Art von Anforderung R(i) warten und den alten Ressourcenzuordnungszustand wiederherstellen.

Beispiel: Stellen Sie sich ein System vor, das fünf Prozesse P1, P2, P3, P4, P5 und die drei Ressourcentypen A, B und C enthält. Im Folgenden sind die Ressourcentypen aufgeführt: A hat 10, B hat 5 und der Ressourcentyp C hat 7 Instanzen.

Verfahren Zuweisung
A B C
Max
A B C
Verfügbar
A B C
P1 0 1 0 7 5 3 3 3 2
P2 200 3 2 2
P3 3 0 2 9 0 2
P4 2 1 1 2 2 2
P5 0 0 2 4 3 3

Beantworten Sie die folgenden Fragen mit dem Banker-Algorithmus:

  1. Was ist die Referenz der Bedarfsmatrix?
  2. Stellen Sie fest, ob das System sicher ist oder nicht.
  3. Was passiert, wenn die Ressourcenanforderung (1, 0, 0) für Prozess P1 das System diese Anforderung sofort annehmen kann?

Jahre. 2: Der Kontext der Bedarfsmatrix ist wie folgt:

Bedarf [i] = Max [i] – Zuteilung [i]
Bedarf für P1: (7, 5, 3) - (0, 1, 0) = 7, 4, 3
Bedarf für P2: (3, 2, 2) - (2, 0, 0) = 1, 2, 2
Bedarf für P3: (9, 0, 2) - (3, 0, 2) = 6, 0, 0
Bedarf für P4: (2, 2, 2) - (2, 1, 1) = 0, 1, 1
Bedarf für P5: (4, 3, 3) - (0, 0, 2) = 4, 3, 1

Verfahren Brauchen
A B C
P1 7 4 3
P2 1 2 2
P3 6 0 0
P4 0 1 1
P5 4 3 1

Daher haben wir die Bedarfskontextmatrix erstellt.

Antwort. 2: Wenden Sie den Banker-Algorithmus an:

Die verfügbaren Ressourcen von A, B und C sind 3, 3 und 2.

Java-Sammlungen Java

Jetzt prüfen wir, ob jede Art von Ressourcenanforderung für jeden Prozess verfügbar ist.

Schritt 1: Für Prozess P1:

Brauchen<= available< p>

7, 4, 3<= 2 3, condition is FALSCH .

Also untersuchen wir einen anderen Prozess, P2.

Schritt 2: Für Prozess P2:

Brauchen<= available< p>

1, 2, 2<= 2 3, condition WAHR

Neu verfügbar = verfügbar + Zuordnung

(3, 3, 2) + (2, 0, 0) => 5, 3, 2

Ebenso untersuchen wir einen anderen Prozess P3.

numpy einzigartig

Schritt 3: Für Prozess P3:

P3 Bedarf<= available< p>

6, 0, 0<= 2 5, 3, condition is FALSCH .

Ebenso untersuchen wir einen anderen Prozess, P4.

Schritt 4: Für Prozess P4:

P4 Bedarf<= available< p>

0, 1, 1<= 2 5, 3, condition is WAHR

Neue verfügbare Ressource = Verfügbar + Zuweisung

5, 3, 2 + 2, 1, 1 => 7, 4, 3

Ebenso untersuchen wir einen anderen Prozess P5.

Schritt 5: Für Prozess P5:

P5 Bedarf<= available< p>

4, 3, 1<= 3 7, 4, condition is WAHR

Neue verfügbare Ressource = Verfügbar + Zuweisung

7, 4, 3 + 0, 0, 2 => 7, 4, 5

Nun untersuchen wir erneut jede Art von Ressourcenanforderung für die Prozesse P1 und P3.

Schritt 6: Für Prozess P1:

P1 Bedarf<= available< p>

7, 4, 3<= 5 7, 4, condition is WAHR

Neue verfügbare Ressource = Verfügbar + Zuweisung

7, 4, 5 + 0, 1, 0 => 7, 5, 5

Also untersuchen wir einen anderen Prozess P2.

Schritt 7: Für Prozess P3:

P3 Bedarf<= available< p>

6, 0, 0<= 5 7, 5, condition is true< p>

Neue verfügbare Ressource = Verfügbar + Zuweisung

7, 5, 5 + 3, 0, 2 => 10, 5, 7

Daher führen wir den Banker-Algorithmus aus, um den sicheren Zustand und die sichere Reihenfolge wie P2, P4, P5, P1 und P3 zu finden.

Jahre. 3: Um der Anfrage (1, 0, 2) stattzugeben, müssen wir dies zunächst überprüfen Anfrage<= available< strong>, das ist (1, 0, 2)<= (3, 3, 2), since the condition is true. so process p1 gets request immediately.< p>