logo

Algorytm bankiera w systemie operacyjnym (OS)

Jest to algorytm bankiera, do którego przywykliśmy uniknąć impasu I przydzielać zasoby bezpiecznie do każdego procesu w systemie komputerowym. „ Stan S” sprawdza wszystkie możliwe testy lub działania przed podjęciem decyzji, czy należy zezwolić na przydział do każdego procesu. Pomaga także systemowi operacyjnemu pomyślnie dzielić zasoby pomiędzy wszystkimi procesami. Algorytm bankiera otrzymał swoją nazwę, ponieważ sprawdza, czy dana osoba powinna otrzymać kwotę kredytu, czy też nie, aby pomóc systemowi bankowemu bezpiecznie symulować alokację zasobów. W tej części nauczymy się Algorytm bankiera szczegółowo. Rozwiążemy również problemy w oparciu o Algorytm bankiera . Aby zrozumieć algorytm bankiera, najpierw zobaczymy jego przykład z prawdziwego słowa.

Załóżmy, że liczba posiadaczy rachunków w konkretnym banku wynosi „n”, a łączna suma pieniędzy w banku wynosi „T”. Jeżeli posiadacz rachunku ubiega się o pożyczkę; najpierw bank odejmuje kwotę kredytu od pełnej gotówki, a następnie szacuje, że różnica gotówkowa jest większa niż T, aby zatwierdzić kwotę kredytu. Kroki te podejmowane są dlatego, że jeśli inna osoba złoży wniosek o kredyt lub wypłaci jakąś kwotę z banku, pomaga to bankowi zarządzać i obsługiwać wszystko bez żadnych ograniczeń w funkcjonalności systemu bankowego.

Podobnie działa to w system operacyjny . Kiedy w systemie komputerowym tworzony jest nowy proces, musi on dostarczać systemowi operacyjnemu wszelkiego rodzaju informacji, takich jak nadchodzące procesy, żądania dotyczące ich zasobów, ich zliczanie i opóźnienia. Na podstawie tych kryteriów system operacyjny decyduje, która sekwencja procesów powinna zostać wykonana, czy też poczekać, aby w systemie nie doszło do zakleszczenia. Dlatego jest również znany jako Algorytm unikania zakleszczenia Lub wykrywanie zakleszczenia w systemie operacyjnym.

Zalety

Poniżej przedstawiono podstawowe cechy algorytmu Bankera:

  1. Zawiera różne zasoby, które spełniają wymagania każdego procesu.
  2. Każdy proces powinien dostarczać systemowi operacyjnemu informacje o nadchodzących żądaniach zasobów, liczbie zasobów i czasie ich przechowywania.
  3. Pomaga systemowi operacyjnemu zarządzać i kontrolować żądania procesów dla każdego typu zasobów w systemie komputerowym.
  4. Algorytm ma atrybut Max Resource, który wskazuje, że każdy proces może przechowywać maksymalną liczbę zasobów w systemie.

Niedogodności

  1. Wymaga stałej liczby procesów, a w trakcie wykonywania procesu nie można uruchomić w systemie żadnych dodatkowych procesów.
  2. Algorytm nie pozwala już procesom na wymianę maksymalnych potrzeb podczas przetwarzania swoich zadań.
  3. Każdy proces musi z wyprzedzeniem znać i określać maksymalne wymagania dotyczące zasobów systemu.
  4. Liczba żądań zasobów może zostać rozpatrzona w skończonym czasie, przy czym termin przydziału zasobów wynosi jeden rok.

Pracując z algorytmem bankiera, żąda on informacji o trzech rzeczach:

  1. Ile każdy proces może zażądać dla każdego zasobu w systemie. Jest to oznaczone [ MAKS ] wniosek.
  2. Ile każdy proces aktualnie przechowuje każdy zasób w systemie. Jest to oznaczone [ ASYGNOWANY ] zasób.
  3. Reprezentuje liczbę każdego zasobu aktualnie dostępnego w systemie. Jest to oznaczone [ DOSTĘPNY ] zasób.

Poniżej znajdują się ważne terminy dotyczące struktur danych stosowane w algorytmie bankiera:

negacja dyskretna matematyka

Załóżmy, że n to liczba procesów, a m to liczba każdego typu zasobów używanych w systemie komputerowym.

    Dostępny: Jest to tablica o długości „m”, która definiuje każdy typ zasobu dostępny w systemie. Kiedy Dostępne[j] = K, oznacza, że ​​w systemie dostępnych jest „K” instancji Zasobów typu R[j].Maks:Jest to macierz [n x m], która wskazuje, że każdy proces P[i] może przechowywać maksymalną liczbę zasobów R[j] (każdego typu) w systemie.Przydział:Jest to macierz m x n zleceń, która wskazuje rodzaj zasobów aktualnie przydzielonych do każdego procesu w systemie. Gdy Alokacja [i, j] = K oznacza to, że procesowi P[i] przydzielono obecnie w systemie K instancji Zasobów typu R[j].Potrzebować:Jest to sekwencja macierzy M x N reprezentująca liczbę pozostałych zasobów dla każdego procesu. Gdy Need[i] [j] = k, wówczas proces P[i] może wymagać K większej liczby instancji zasobów typu Rj do wykonania przydzielonej pracy.
    Nedd[i][j] = Max[i][j] - Alokacja[i][j].Skończyć: Jest to wektor rzędu M . Zawiera wartość logiczną (prawda/fałsz) wskazującą, czy procesowi przydzielono żądane zasoby i czy wszystkie zasoby zostały zwolnione po zakończeniu swojego zadania.

Algorytm Bankiera to połączenie algorytmu bezpieczeństwa i algorytmu żądania zasobów w celu kontrolowania procesów i unikania zakleszczenia w systemie:

Algorytm bezpieczeństwa

Jest to algorytm bezpieczeństwa używany do sprawdzania, czy system jest w stanie bezpiecznym lub czy podąża za bezpieczną sekwencją algorytmu bankiera:

1. Istnieją dwa wektory Wok I Skończyć długości m i n w algorytmie bezpieczeństwa.

Zainicjuj: Praca = Dostępne
Zakończ[i] = fałsz; dla I = 0, 1, 2, 3, 4… n - 1.

2. Sprawdź stan dostępności każdego typu zasobów [i], taki jak:

Potrzebuję [ja]<= work
Zakończ[i] == fałsz
Jeśli i nie istnieje, przejdź do kroku 4.

3. Praca = Praca +Alokacja(i) // aby uzyskać nową alokację zasobów

Zakończ[i] = prawda

Przejdź do kroku 2, aby sprawdzić stan dostępności zasobów dla następnego procesu.

4. Jeśli Finish[i] == true; oznacza to, że system jest bezpieczny dla wszystkich procesów.

Algorytm żądania zasobów

Algorytm żądania zasobu sprawdza, jak system będzie się zachowywał, gdy proces wysyła każdy typ żądania zasobu w systemie w postaci matrycy żądań.

Utwórzmy tablicę żądań zasobów R[i] dla każdego procesu P[i]. Jeśli żądanie zasobuI[j] równe „K”, co oznacza, że ​​proces P[i] wymaga „k” instancji Zasobów typu R[j] w systemie.

1. Kiedy liczba żądane zasoby każdego typu jest mniejsza niż Potrzebować zasobów, przejdź do kroku 2 i jeśli warunek nie zostanie spełniony, co oznacza, że ​​proces P[i] przekracza swoje maksymalne zapotrzebowanie na zasób. Jak sugeruje wyrażenie:

Java wykonaj while

Jeśli żądanie (i)<= need
Przejdź do kroku 2;

2. Gdy liczba żądanych zasobów każdego typu jest mniejsza niż zasoby dostępne dla każdego procesu, przejdź do kroku (3). Jak sugeruje wyrażenie:

Jeśli żądanie (i)<= available
W przeciwnym razie proces P[i] musi czekać na zasób, ponieważ nie jest on dostępny do użycia.

3. Gdy żądany zasób zostanie przydzielony procesowi poprzez zmianę stanu:

Dostępne = Dostępne - Zapytanie
Przydział(i) = Przydział(i) + Żądanie (i)
PotrzebowaćI= PotrzebaI- WniosekI

Gdy stan alokacji zasobów jest bezpieczny, jego zasoby są przydzielane procesowi P(i). A jeśli nowy stan jest niebezpieczny, Proces P (i) musi czekać na każdy typ żądania R(i) i przywrócić stary stan alokacji zasobów.

Przykład: Rozważmy system zawierający pięć procesów P1, P2, P3, P4, P5 i trzy typy zasobów A, B i C. Poniżej przedstawiono typy zasobów: A ma 10, B ma 5 i typ zasobu C ma 7 instancji.

Proces Przydział
A B C
Maks
A B C
Dostępny
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

Odpowiedz na następujące pytania, korzystając z algorytmu bankiera:

  1. Jakie jest odniesienie do macierzy potrzeb?
  2. Określ, czy system jest bezpieczny, czy nie.
  3. Co się stanie, jeśli żądanie zasobu (1, 0, 0) dla procesu P1 będzie w stanie system natychmiast zaakceptować to żądanie?

Lata. 2: Kontekst macierzy potrzeb jest następujący:

Potrzeba [i] = Max [i] - Przydział [i]
Potrzeba P1: (7, 5, 3) - (0, 1, 0) = 7, 4, 3
Potrzeba P2: (3, 2, 2) - (2, 0, 0) = 1, 2, 2
Potrzeba P3: (9, 0, 2) - (3, 0, 2) = 6, 0, 0
Potrzeba P4: (2, 2, 2) - (2, 1, 1) = 0, 1, 1
Potrzeba P5: (4, 3, 3) - (0, 0, 2) = 4, 3, 1

iteracja mapy w Javie
Proces Potrzebować
A B C
P1 7 4 3
P2 1 2 2
P3 6 0 0
P4 0 1 1
P5 4 3 1

W związku z tym stworzyliśmy kontekst matrycy potrzeb.

Odp. 2: Zastosuj algorytm bankiera:

Dostępne zasoby A, B i C to 3, 3 i 2.

Teraz sprawdzamy, czy dla każdego procesu dostępny jest każdy typ żądania zasobu.

Krok 1: Dla procesu P1:

Potrzebować<= available< p>

7, 4, 3<= 2 3, condition is FAŁSZ .

Zatem badamy inny proces, P2.

Krok 2: Dla procesu P2:

Potrzebować<= available< p>

1, 2, 2<= 2 3, condition PRAWDA

Nowy dostępny = dostępny + przydział

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

Podobnie badamy inny proces P3.

Krok 3: Dla procesu P3:

Potrzeba P3<= available< p>

6, 0, 0<= 2 5, 3, condition is FAŁSZ .

Podobnie badamy inny proces, P4.

Krok 4: Dla procesu P4:

P4 Potrzeba<= available< p>

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

Nowy dostępny zasób = dostępny + alokacja

dziedziczenie Javy

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

Podobnie badamy inny proces P5.

Krok 5: Dla procesu P5:

P5 Potrzeba<= available< p>

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

Nowy dostępny zasób = dostępny + alokacja

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

Teraz ponownie sprawdzamy każdy typ żądania zasobów dla procesów P1 i P3.

Krok 6: Dla procesu P1:

Potrzeba P1<= available< p>

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

Nowy dostępny zasób = dostępny + alokacja

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

Badamy więc inny proces P2.

Krok 7: Dla procesu P3:

Potrzeba P3<= available< p>

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

Nowy dostępny zasób = dostępny + alokacja

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

Dlatego wykonujemy algorytm bankiera, aby znaleźć bezpieczny stan i bezpieczną sekwencję, taką jak P2, P4, P5, P1 i P3.

przekonwertuj ciąg na int

Lata. 3: Aby spełnić żądanie (1, 0, 2), najpierw musimy to sprawdzić Wniosek<= available< strong>, czyli (1, 0, 2)<= (3, 3, 2), since the condition is true. so process p1 gets request immediately.< p>