Programare preventivă și non-preemptivă
Diferențele cheie între programarea preventivă și non-preemptivă
- În planificarea preventivă, procesorul este alocat proceselor pentru o anumită perioadă de timp, iar procesorul cu programare non-preemptivă este alocat procesului până când acesta se termină.
- În programarea preventivă, sarcinile sunt schimbate în funcție de prioritate, în timp ce în programarea non-preemptivă, nu are loc nicio schimbare.
- Algoritmul preventiv are suprasarcina de comutare a procesului de la starea pregătită la starea de rulare, în timp ce programarea non-preemptive nu are o astfel de suprasarcină de comutare.
- Programarea preventivă este flexibilă, în timp ce programarea non-preemptivă este rigidă.

Ce este programarea preventivă?
Programarea preventivă este o metodă de planificare în care 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.
În acel moment, sarcina cu prioritate inferioară se menține pentru o perioadă de timp și reia când sarcina cu prioritate mai mare își încheie execuția.
Ce este programarea non-preemptivă?
În acest tip de metodă de planificare, CPU a fost alocat unui anumit proces. Procesul care menține CPU ocupat va elibera CPU 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 specializat (de exemplu, un cronometru) cum ar fi programarea preventivă.
Programarea non-preemptivă are loc atunci când un proces intră voluntar în starea de așteptare sau se încheie.
Programare preventivă vs non-preemptivă: tabel de comparație
Iată o comparație directă între programarea preventivă și non-preemptivă. Principalele diferențe dintre programarea preventivă și non-preemptivă în sistemul de operare sunt următoarele:
Programare preventivă | Programare non-preemptivă |
---|---|
Un procesor poate fi preemptat să execute diferite procese în mijlocul oricărei execuții curente de proces. | Odată ce procesorul începe execuția, trebuie să o termine înainte de a-l executa pe celălalt. Nu poate fi oprit la mijloc. |
Utilizarea CPU este mai eficientă în comparație cu programarea non-preemptivă. | Utilizarea CPU este mai puțin eficientă în comparație cu programarea preventivă. |
Timpul de așteptare și de răspuns al programării preventive este mai mic. | Timpul de așteptare și răspuns al metodei de programare non-preemptivă este mai mare. |
Programarea preventivă are prioritate. Procesul cu cea mai mare prioritate este un proces care este utilizat în prezent. | Când orice proces intră în starea de rulare, starea acelui proces nu este niciodată ștearsă din planificator până când își termină treaba. |
Programarea preventivă este flexibilă. | Programarea non-preemptivă este rigidă. |
Exemple: – Cel mai scurt timp rămas mai întâi, Round Robin etc. | Exemple: Primul venit, primul servit, Cel mai scurt loc de muncă în primul rând, Programarea prioritară etc. |
Algoritmul de programare preventivă poate fi anticipat, adică procesul poate fi programat | Procesul de programare non-preemptivă nu poate fi programat |
În acest proces, procesorul este alocat proceselor pentru o anumită perioadă de timp. | În acest proces, CPU este alocat procesului până când acesta se termină sau trece la starea de așteptare. |
Algoritmul preventiv are sarcina de a comuta procesul de la starea pregătită la starea de rulare și invers. | Programarea non-preemptivă nu are o astfel de suprasarcină pentru trecerea procesului de la rularea în starea gata. |
Avantajele programării preventive
Iată avantajele/beneficiile metodei de programare preventivă:
- Metoda de programare preventivă este mai robustă, abordarea astfel încât un proces nu poate monopoliza procesorul
- Alegerea sarcinii de rulare reconsiderată după fiecare întrerupere.
- Fiecare eveniment provoacă întreruperea sarcinilor de rulare
- Sistemul de operare se asigură că utilizarea procesorului este aceeași pentru toate procesele care rulează.
- În acest sens, utilizarea CPU este aceeași, adică toate procesele care rulează vor folosi CPU în mod egal.
- Această metodă de programare improviză și timpul mediu de răspuns.
- Programarea preventivă este benefică atunci când o folosim pentru mediul multi-programare.
Avantajele programării non-preemptive
Iată avantajele/beneficiile metodei de programare non-preemptivă:
- Oferă o programare redusă
- Tinde să ofere un randament ridicat
- Din punct de vedere conceptual, este o metodă foarte simplă
- Less resurse de calcul necesare pentru programare
Dezavantajele programării preventive
Următoarele sunt dezavantajele programării preventive:
- Aveți nevoie de resurse de calcul limitate pentru programare
- Planificatorului ia mai mult timp pentru a suspenda sarcina de rulare, a schimba contextul și a trimite noua sarcină primită.
- Procesul care are prioritate scăzută trebuie să aștepte mai mult timp dacă unele procese cu prioritate ridicată ajung continuu.
Dezavantajele programării non-preemptive
Iată dezavantajele/dezavantajele metodei de programare non-preemptivă:
- Poate duce la foame, mai ales pentru acele sarcini în timp real
- Bug-urile pot provoca o mașină să înghețe
- Se poate face în timp real și programare prioritară dificil
- Timp de răspuns slab pentru procese
Exemplu de programare non-preemptivă
În programarea SJF non-preemptivă, odată ce ciclul CPU este alocat procesului, procesul îl menține până când ajunge într-o stare de așteptare sau se încheie.
Luați în considerare următoarele cinci procese, fiecare având propriul său timp de explozie și timpul de sosire unic.
Coada de procesare | Timp de explozie | Timpul sosirii |
---|---|---|
P1 | 6 | 2 |
P2 | 2 | 5 |
P3 | 8 | 1 |
P4 | 3 | 0 |
P5 | 4 | 4 |
Pas 0) La ora=0, sosește P4 și începe execuția.
Pas 1) La ora= 1, vine Procesul P3. Dar, P4 mai are nevoie de 2 unități de execuție pentru a finaliza. Se va continua executarea.
Pas 2) La momentul =2, procesul P1 sosește și este adăugat la coada de așteptare. P4 va continua execuția.
Pas 3) La momentul = 3, procesul P4 își va termina execuția. Se compară timpul de explozie a lui P3 și P1. Procesul P1 este executat deoarece timpul său de explozie este mai mic comparativ cu P3.
Pas 4) La ora = 4, procesul P5 sosește și este adăugat la coada de așteptare. P1 va continua execuția.
Pas 5) La ora = 5, procesul P2 sosește și este adăugat la coada de așteptare. P1 va continua execuția.
Pas 6) La momentul = 9, procesul P1 își va termina execuția. Se compară timpul de explozie a lui P3, P5 și P2. Procesul P2 este executat deoarece timpul său de explozie este cel mai mic.
Pas 7) La ora=10, P2 se execută, iar P3 și P5 sunt în coada de așteptare.
Pas 8) La momentul = 11, procesul P2 își va termina execuția. Se compară timpul de explozie a lui P3 și P5. Procesul P5 este executat deoarece timpul său de explozie este mai mic.
Pas 9) La momentul = 15, procesul P5 își va termina execuția.
Pas 10) La momentul = 23, procesul P3 își va termina execuția.
Pas 11) Să calculăm timpul mediu de așteptare pentru exemplul de mai sus.
Wait time P4= 0-0=0 P1= 3-2=1 P2= 9-5=4 P5= 11-4=7 P3= 15-1=14 Average Waiting Time= 0+1+4+7+14/5 = 26/5 = 5.2
Exemplu de programare preventivă
Luați în considerare următoarele trei procese în Round-robin
Coada de procesare | Timp de explozie |
---|---|
P1 | 4 |
P2 | 3 |
P3 | 5 |
Pas 1) Execuția începe cu procesul P1, care are timpul de explozie 4. Aici, fiecare proces se execută timp de 2 secunde. P2 și P3 sunt încă în coada de așteptare.
Etapa 2) La momentul =2, P1 este adăugat la sfârșitul Cozii și P2 începe să se execute
Pas 3) La momentul=4, P2 este preemptat și se adaugă la sfârșitul cozii. P3 începe să se execute.
Pas 4) La momentul=6, P3 este preemptat și se adaugă la sfârșitul cozii. P1 începe să se execute.
Pas 5) La time=8 , P1 are un timp de explozie de 4. Execuția sa încheiat. P2 începe execuția
Pas 6) P2 are un timp de explozie de 3. S-a executat deja pentru 2 intervale. La momentul=9, P2 finalizează execuția. Apoi, P3 începe execuția până se termină.
Pas 7) Să calculăm timpul mediu de așteptare pentru exemplul de mai sus.
Wait time P1= 0+ 4= 4 P2= 2+4= 6 P3= 4+3= 7