Algoritmul de programare prioritară: EXEMPLU Preemptiv, Non-Preemptiv

Ce este programarea prioritară?

Programare prioritară este o metodă de planificare a proceselor care se bazează pe prioritate. În acest algoritm, planificatorul selectează sarcinile pentru a funcționa conform priorității.

Procesele cu prioritate mai mare ar trebui să fie efectuate mai întâi, în timp ce locurile de muncă cu priorități egale sunt efectuate pe bază de round-robin sau FCFS. Prioritatea depinde de cerințele de memorie, de timp etc.

Tipuri de programare prioritară

Programarea prioritară împărțită în două tipuri principale:

Programare preventivă

În programarea preventivă, sarcinile sunt în mare parte atribuite cu prioritățile lor. Uneori este important să rulați o sarcină cu o prioritate mai mare înainte de o altă sarcină cu prioritate mai mică, chiar dacă sarcina cu prioritate inferioară este încă în execuție. Sarcina cu prioritate inferioară se menține o perioadă de timp și reia când sarcina cu prioritate mai mare își termină execuția.

Programare non-preemptivă

În acest tip de metodă de planificare, CPU a fost alocat unui anumit proces. Procesul care ține CPU-ul ocupat va elibera procesorul fie prin schimbarea contextului, fie prin terminare. Este singura metodă care poate fi folosită pentru diverse platforme hardware. Asta pentru că nu are nevoie de hardware special (de exemplu, un cronometru) cum ar fi programarea preventivă.

Caracteristicile programării prioritare

  • Un algoritm CPU care programează procesele în funcție de prioritate.
  • A folosit în Operasisteme de tingere pentru efectuarea proceselor batch.
  • Dacă două joburi cu aceeași prioritate sunt PREGĂTITE, funcționează pe a PRIMUL VENIT, PRIMUL SERVIT bază.
  • În programarea cu prioritate, fiecărui proces i se atribuie un număr care indică nivelul său de prioritate.
  • Cu cât numărul este mai mic, cu atât este mai mare prioritatea.
  • În acest tip de algoritm de programare, dacă sosește un proces mai nou, care are o prioritate mai mare decât procesul care rulează curent, atunci procesul care rulează curent este preemptat.

Exemplu de programare prioritară

Luați în considerare următoarele cinci procese P1 până la P5. Fiecare proces are prioritatea sa unică, timpul de explozie și ora de sosire.

Proces Prioritate Timp de explozie Timpul sosirii
P1 1 4 0
P2 2 3 0
P3 1 7 6
P4 3 4 11
P5 2 2 12

Pas 0) La ora=0, sosesc Procesul P1 și P2. P1 are prioritate mai mare decât P2. Execuția începe cu procesul P1, care are timpul de explozie 4.

Programare prioritară

Pas 1) La ora=1, nu sosește niciun proces nou. Execuția continuă cu P1.

Programare prioritară

Pas 2) La momentul 2, nu sosește niciun proces nou, așa că puteți continua cu P1. P2 este în coada de așteptare.

Programare prioritară

Pas 3) La momentul 3, nu vine niciun proces nou, așa că puteți continua cu P1. Procesul P2 este încă în coada de așteptare.

Programare prioritară

Pas 4) La momentul 4, P1 și-a încheiat execuția. P2 începe execuția.

Programare prioritară

Pas 5) La ora= 5, nu sosește niciun proces nou, așa că continuăm cu P2.

Programare prioritară

Pas 6) La ora=6, sosește P3. P3 are prioritate mai mare (1) în comparație cu P2 care are prioritate (2). P2 este anticipat, iar P3 își începe execuția.

Proces Prioritate Timp de explozie Timpul sosirii
P1 1 4 0
P2 2 1 din 3 în așteptare 0
P3 1 7 6
P4 3 4 11
P5 2 2 12

Programare prioritară

Pasul 7) La timpul 7, nu sosește un proces nou, așa că continuăm cu P3. P2 este în coada de așteptare.

Programare prioritară

Pas 8) La ora= 8, nu sosește niciun proces nou, așa că putem continua cu P3.

Programare prioritară

Pas 9) La ora= 9, nu vine niciun proces nou, așa că putem continua cu P3.

Programare prioritară

Pas 10) La intervalul de timp 10, nu vine niciun proces nou, așa că continuăm cu P3

Programare prioritară

Pas 11) La ora=11, P4 ajunge cu prioritate 4. P3 are prioritate mai mare, deci isi continua executia.

Proces Prioritate Timp de explozie Timpul sosirii
P1 1 4 0
P2 2 1 din 3 în așteptare 0
P3 1 2 din 7 în așteptare 6
P4 3 4 11
P5 2 2 12

Programare prioritară

Pas 12) La ora=12, sosește P5. P3 are prioritate mai mare, deci continuă execuția.

Programare prioritară

Pas 13) La momentul=13, P3 finalizează execuția. Avem P2, P4, P5 în coada gata. P2 și P5 au prioritate egală. Ora de sosire a P2 este înainte de P5. Deci P2 începe execuția.

Proces Prioritate Timp de explozie Timpul sosirii
P1 1 4 0
P2 2 1 din 3 în așteptare 0
P3 1 7 6
P4 3 4 11
P5 2 2 12

Programare prioritară

Pas 14) La momentul =14, procesul P2 și-a încheiat execuția. P4 și P5 sunt în starea de așteptare. P5 are cea mai mare prioritate și începe execuția.

Programare prioritară

Pas 15) La momentul =15, P5 continuă execuția.

Programare prioritară

Pas 16) La momentul= 16, P5 se termină cu execuția sa. P4 este singurul proces rămas. Începe execuția.

Programare prioritară

Pas 17) La momentul =20, P5 a finalizat execuția și nu a mai rămas niciun proces.

Programare prioritară

Pas 18) Să calculăm timpul mediu de așteptare pentru exemplul de mai sus.

Timp de așteptare = ora de începere – ora de sosire + timpul de așteptare pentru următoarea explozie

P1 = o - o = o
P2 =4 - o + 7 =11	
P3= 6-6=0
P4= 16-11=5
Average Waiting time = (0+11+0+5+2)/5 = 18/5= 3.6

Avantajele programării prioritare

Iată beneficiile / avantajele utilizării metodei de programare prioritară:

  • Metodă de programare ușor de utilizat
  • Procesele sunt executate pe baza priorității, astfel încât prioritatea înaltă nu trebuie să aștepte mult, ceea ce economisește timp
  • Această metodă oferă un mecanism bun în care importanța relativă a fiecărui proces poate fi definită cu precizie.
  • Potrivit pentru aplicații cu cerințe fluctuante de timp și resurse.

Dezavantajele programării prioritare

Iată dezavantajele/dezavantajele programării prioritare

  • Dacă sistemul se blochează în cele din urmă, toate procesele cu prioritate scăzută se pierd.
  • Dacă procesele cu prioritate înaltă necesită mult timp CPU, atunci procesele cu prioritate inferioară pot muri de foame și vor fi amânate pentru o perioadă nedeterminată.
  • Acest algoritm de programare poate lăsa unele procese cu prioritate scăzută în așteptare la nesfârșit.
  • Un proces va fi blocat atunci când este gata de rulare, dar trebuie să aștepte CPU, deoarece un alt proces rulează în prezent.
  • Dacă un nou proces cu prioritate mai mare continuă să vină în coada de așteptare, atunci procesul care se află în starea de așteptare ar putea trebui să aștepte o perioadă lungă de timp.

Rezumat

  • Programarea cu prioritate este o metodă de planificare a proceselor care se bazează pe prioritate. În acest algoritm, planificatorul selectează sarcinile pentru a funcționa conform priorității.
  • În Programarea preventivă cu prioritate, sarcinile sunt în mare parte atribuite cu prioritățile lor.
  • În metoda de programare cu prioritate non-preemptivă, CPU a fost alocat unui anumit proces.
  • Procesele sunt executate pe baza priorității, astfel încât prioritatea înaltă nu trebuie să aștepte mult, ceea ce economisește timp
  • Dacă procesele cu prioritate înaltă necesită mult timp CPU, atunci procesele cu prioritate inferioară pot muri de foame și vor fi amânate pentru o perioadă nedeterminată.