Algoritmul bancherului

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Algoritmul bancherului este un algoritm utilizat pentru a evita blocajele în alocarea resurselor . În special, acest algoritm poate indica dacă un sistem - în special un sistem de operare - s-ar găsi într-o stare sigură sau nu dacă ar atribui o resursă unuia dintre procesele solicitante.

Complexitatea de calcul a acestui algoritm este , unde este este numărul de procese și numărul de tipuri de resurse (mai multe resurse pot fi disponibile pentru fiecare tip - de exemplu, două imprimante echivalente, porturi de comunicații etc.).

Concept de bază

Un sistem, în alocarea resurselor solicitate, trebuie să procedeze așa cum ar face o bancă : procesele sunt văzute ca clienți care pot solicita credit de la bancă (până la o anumită limită individuală), iar resursele alocabile sunt văzute ca bani.

Este clar că sistemul, la fel ca banca, nu poate permite tuturor clienților să își atingă limita de credit în același timp, deoarece banca ar eșua (iar sistemul nu ar putea aloca suficiente resurse, provocând un impas).

Operațiune

Patru tablouri sunt utilizate pentru a stoca următoarele informații apelând numărul de resurse disponibile, numărul de instanțe ale primei resurse, e numărul de procese active:

  1. matrice de resurse disponibile : cu stochează cantitatea fiecărui tip de resursă disponibilă pe sistem
  2. matrice de resurse alocate : cu vector care indică câte instanțe din fiecare resursă au fost atribuite procesului
  3. matrice de resurse maxime : cu vector care indică câte instanțe din fiecare resursă vor fi solicitate cel mult de către proces pentru a finaliza calculul
  4. matrice de resurse reziduale : cu vector care indică câte instanțe din fiecare resursă sunt necesare procesului pentru a-și finaliza calculul (calculat prin scăderea matricei atribuite din matricea maximă).

Metodă

Algoritmul continuă iterativ, garantând resursele necesare proceselor care, comparând matricea lor de Necesități cu cea a resurselor disponibile în prezent în sistem, își pot finaliza execuția. După executare, procesul eliberează resursele pe care le-a alocat anterior (adică matricea de resurse alocate procesului se adaugă resurselor disponibile). În acest fel, algoritmul poate selecta un proces suplimentar care, cu resursele disponibile în prezent pentru sistem, poate termina și, la rândul său, elibera resursele alocate. Putem împărți algoritmul în două părți principale: partea de verificare a stării curente și partea de simulare a atribuirii. Verificarea stării curente va asigura că alocarea resurselor curente către procese este o alocare care menține sistemul într-o stare sigură. O stare este definită ca sigură dacă există o secvență de planificare a proceselor care asigură încetarea întregului set de procese care rulează în prezent. Partea de simulare a sarcinii va rula atunci când un proces va necesita resurse. Algoritmul va simula această atribuire și apoi va rula o verificare a stării pentru a vă asigura că atribuirea vă permite să vă aflați într-o stare sigură.

Verificați starea

  1. Este o serie de valori booleene unde fiecare variabilă este inițial falsă și definim L ca.
  2. găsiți un index astfel încât Și dacă acest lucru nu există, treceți la pasul 4
  3. cere , și treceți la pasul 2
  4. de sine pentru fiecare i, atunci sistemul este într-o stare sigură

Simularea atribuirii

Să presupunem procesul necesită resurse noi. Este vectorul de solicitare a procesului astfel încât numărul de instanțe ale primei resurse solicitate de

  1. Verific asta dacă acest lucru este fals, generez o eroare, deoarece procesul a necesitat mai multe resurse decât poate solicita
  2. Verific asta în cazul în care acest lucru este fals, nu accept cererea procesului din lipsa resurselor
  3. Simulez misiunea prin plasare și execut prima parte a algoritmului pentru a verifica dacă este o sarcină sigură, dacă nu este, resping cererea pentru

Rezultat

Algoritmul poate decide că sistemul este într-o stare sigură dacă, prin încercările sale repetate de a găsi o ordine de execuție a proceselor, descoperă o secvență prin care toate procesele sunt alocate resurse prin încheierea executării lor.

Stare sigură

Conceptul de stare sigură a fost introdus de Edsger W. Dijkstra probabil în 1965 (sau 1966) când și-a dezvoltat sistemul de operare multiprogramabil THE (Technische Hogeschool Eindhoven). O descriere formală poate fi dată de următoarea afirmație (în pseudocod C ++):

 dacă (
    Initial_State == SECURE &&
    All_Commands == SECURE &&
    All_Transactions == SECURE &&
    Toate_Axiomele == adevărat
) System_State = SECURE

Prin urmare, starea sigură este o stare în care este posibil să se aloce toate resursele necesare unui proces, fără ca acesta din urmă să conducă la un blocaj cu un alt proces. Faptul că sistemul se află într-o stare sigură nu implică faptul că toate alocările de resurse vor avea succes, ci doar că există cel puțin o modalitate sigură de a aloca toate resursele. Dacă sistemul se află într-o stare sigură, impasul poate fi evitat, dar evident o stare nesigură nu implică neapărat un impas. De fapt, sistemul poate evita complet standurile dacă la fiecare cerere de resursă printr-un proces, verifică starea în care ar fi, alocând resursa. Dacă starea viitoare este sigură, atunci resursa poate fi alocată în siguranță. Pentru aceasta poate fi utilizat algoritmul bancherului.

Acest concept este dificil de implementat pe sistemele moderne, atât pentru că nu este posibil să se prevadă într-un mod determinist alocarea resurselor, așa cum este cerut de algoritmul bancherului, cât și pentru că ar fi prea costisitor din punct de vedere economic. Majoritatea sistemelor de operare, începând de la Unix , nu iau în considerare problema unui blocaj, deoarece este de fapt un eveniment foarte rar, având în vedere abundența resurselor disponibile. Mai mult, ar trebui adăugat că, în zilele noastre, managementul blocajului este cu siguranță mai critic în bazele de date decât în sistemele de operare .

Elemente conexe

Bibliografie

Een algorithme ter voorkoming van de dodelijke omarming.