Să discutăm diferențele dintre Programarea Preemptivă și Non-Preemptivă, pe scurt, cu ajutorul graficului de comparație prezentat mai jos.
Diagramă de comparație
Bazele comparației | Programare preemptivă | Programarea non-preemptivă |
---|---|---|
De bază | Resursele sunt alocate unui proces pentru o perioadă limitată de timp. | Odată ce resursele sunt alocate unui proces, procesul îl ține până când își termină timpul de spargere sau trece la starea de așteptare. |
Întrerupe | Procesul poate fi întrerupt între ele. | Procesul nu poate fi întrerupt până când nu se termină sau nu trece la starea de așteptare. |
Foame | Dacă un proces cu prioritate ridicată ajunge frecvent în coada de așteptare, procesul de prioritate scăzută poate să moară de foame. | Dacă un proces cu timp de spargere lungă rulează CPU, atunci un alt proces cu un timp de explozie mai mic al procesorului poate să moară de foame. |
deasupra | Programarea preemptivă are costuri generale de planificare a proceselor. | Programarea non-preemptivă nu are cheltuieli generale. |
Flexibilitate | Programarea preemptivă este flexibilă. | Programarea non-preemptivă este rigidă. |
Cost | Planificarea preemptivă este asociată costurilor. | Programarea non-preemptivă nu este asociată costurilor. |
Definiția preemptive Scheduling
Programarea preemptivă este una care se poate face în circumstanțe atunci când un proces trece de la starea de funcționare la starea gata sau din starea de așteptare la starea de pregătire . Aici, resursele (ciclurile CPU) sunt alocate procesului pentru o perioadă limitată de timp și apoi sunt îndepărtate, iar procesul este plasat din nou în coada de gata din nou, dacă încă mai rămâne timp de spargere a procesorului. Procesul rămâne în coada de așteptare până la următoarea șansă de executare.
Dacă un proces cu prioritate ridicată ajunge în coada de așteptare, nu trebuie să așteptați ca procesul actual să termine timpul de explozie. În schimb, procesul actual este întrerupt în mijlocul execuției și este plasat în coada de așteptare până când procesul cu prioritate ridicată utilizează ciclurile procesorului. În acest fel, fiecare proces din coada de gata devine ceva timp pentru a rula procesorul. Aceasta face ca programarea preemptivă să fie flexibilă, dar mărește cheltuielile aferente trecerii procesului de la starea de funcționare la stare pregătită și verset.
Algoritmii care lucrează la planificarea preemptivă sunt Round Robin. Cel mai scurt loc de muncă (SJF) și Programarea prioritară pot sau nu să intre sub programare preemptivă.
Să luăm un exemplu de planificare preemptivă, uitați-vă în imaginea de mai jos. Avem patru procese P0, P1, P2, P3. Din care P2 ajunge la ora 0. Deci, procesorul este alocat procesului P2, deoarece nu există alt proces în coadă. Între timp, P2 a fost executat, P3 ajunge la ora 1, acum timpul rămas pentru procesul P2 (5 milisecunde), care este mai mare decât timpul cerut de P3 (4 milli-sec). Deci, procesorul este alocat procesorului P3.
Definiția programării non-preemptive
Schema non-preemptivă este una care poate fi aplicată în circumstanțele când un proces se termină sau un proces trece de la starea de așteptare la starea de așteptare . În planificarea non-preemptivă, odată ce resursele (CPU) sunt alocate unui proces, procesul deține CPU până când se termină sau ajunge la o stare de așteptare.
Spre deosebire de programarea preemptivă, programarea non-preemptivă nu întrerupe un proces care rulează CPU în mijlocul executării. În schimb, așteaptă ca procesul să finalizeze timpul de explozie a procesorului și apoi poate aloca CPU-ul unui alt proces.
În planificarea non-preemptivă, dacă se execută un proces cu timp de spargere al procesorului lung, atunci celălalt proces va trebui să aștepte un timp îndelungat, ceea ce crește timpul mediu de așteptare al proceselor din coada de așteptare. Cu toate acestea, programarea non-preemptivă nu are nici o cheltuială de trecere a proceselor de la coada de așteptare la CPU, dar face planificarea rigidă, deoarece procesul de execuție nu este nici măcar preemptat pentru un proces cu prioritate mai mare.
Diferențe cheie între programarea preemptivă și non-preemptivă
- Diferența de bază între planificarea preemptivă și non-preemptivă este aceea că, în planificarea preemptivă, procesorul este alocat proceselor pe o perioadă limitată de timp. În timpul planificării non-preemptive, CPU-ul este alocat procesului până când acesta se termină sau trece la starea de așteptare .
- Procesul de execuție în planificarea preemptivă este întrerupt în mijlocul executării, în timp ce procesul de execuție în programarea non-preemptivă nu este întrerupt în mijlocul executării.
- Programarea preemptivă are sarcina de a schimba procesul de la starea de gata la starea de funcționare, versurile și menținerea coada de așteptare. Pe celelalte mâini, programarea non-preemptivă nu are nici o cheltuială de trecere a procesului de la starea de funcționare la starea gata.
- În planificarea preemptivă, dacă un proces cu prioritate ridicată ajunge adesea în coada de așteptare, atunci procesul cu prioritate scăzută trebuie să aștepte o lungă perioadă de timp și poate că trebuie să moară de foame. Pe de altă parte, în planificarea non-preemptivă, dacă CPU este alocat procesului cu un timp de spargere mai mare, atunci procesele cu timp de spargere mic pot fi nevoite să moară de foame.
- Programarea preemptivă este destul de flexibilă, deoarece procesele critice au acces la CPU în momentul în care ajung în coada de așteptare, indiferent de ce proces se execută în prezent. Schema non-preemptivă este rigidă, deoarece chiar dacă un proces critic intră în coada de pregătire, procesul care rulează CPU nu este deranjat.
- Programarea preemptivă este asociată costurilor, deoarece trebuie să mențină integritatea datelor partajate, ceea ce nu este cazul în cazul planificării non-preemptive.
Concluzie:
Nu este faptul că programarea preemptivă este mai bună decât planificarea non-preemptivă sau vise-verse. Totul depinde de modul în care un programare minimizează timpul mediu de așteptare al proceselor și maximizează utilizarea procesorului.