Recomandat, 2024

Alegerea Editorului

Diferența dintre programarea preemptivă și non-preemptivă în sistemul de operare

Este responsabilitatea planificatorului CPU de a aloca un proces către CPU ori de câte ori CPU-ul este în stare inactivă. Planificatorul procesorului selectează un proces din coada de așteptare și alocă procesul procesorului. Programarea care are loc 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 se numește programare preemptivă . Pe mâini, planificarea care are loc atunci când un proces se termină sau trece de la a alerga la așteptarea pentru a sta de stat acest tip de programare CPU se numește Non-Preemptive Programare . Diferența de bază între planificarea preemptivă și non-preemptivă se află în numele lor în sine. Aceasta este o programare preemptivă poate fi preempted; procesele pot fi programate. În programarea non-preemptivă, procesele nu pot fi programate.

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țieiProgramare 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.
ÎntrerupeProcesul 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.
FoameDacă 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.
deasupraProgramarea preemptivă are costuri generale de planificare a proceselor.Programarea non-preemptivă nu are cheltuieli generale.
FlexibilitateProgramarea preemptivă este flexibilă.Programarea non-preemptivă este rigidă.
CostPlanificarea 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.

Între timp, P3 se execută, procesul P1 ajunge la ora 2. Acum, timpul rămas pentru P3 (3 milisecunde) este mai mic decât timpul necesar proceselor P1 (4 milisecunde) și P2 (5 milisecunde). Deci, P3 este permis să continue. În timp ce P3 continuă procesul P0 ajunge la ora 3, acum timpul rămas pentru P3 (2 milisecunde) este egal cu timpul cerut de P0 (2 milisecunde). Deci, P3 continuă și după ce P3 termină, CPU-ul este alocat P0 deoarece are mai puțin timp de spargere decât alte. După terminarea lui P0, procesorul este alocat P1 și apoi P2.

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.

Să rezolvăm exemplul de planificare de mai sus în mod non-preemptiv. Așa cum inițial procesul P2 ajunge la ora 0, CPU-ul este alocat procesului P2 care durează 6 milisecunde pentru a fi executat. Între toate procesele, adică P0, P1, P3 ajung în coada de așteptare. Dar toate așteaptă până când procesul P2 își termină timpul de spargere a procesorului. Apoi procesul care ajunge după ce P2, respectiv P3, este alocat CPU-ului până la terminarea timpului de explozie. În mod similar, atunci P1 se execută, iar ulterior CPU-ul este dat procesului P0.

Diferențe cheie între programarea preemptivă și non-preemptivă

  1. 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 .
  2. 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.
  3. 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.
  4. Î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.
  5. 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.
  6. 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.

Top