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

Programarea procesorului (sau Programarea CPU) determină care procese sunt atribuite și eliminate din CPU, pe baza unor modele de programare cum ar fi preemptive și Programare non-preemptivă (de asemenea cunoscut ca si Programarea cooperativă).

Sistemele mai vechi ar putea funcționa în moduri simple de sine stătătoare, dar cu nevoia crescândă de sisteme responsabile și flexibile, precum și de virtualizare, gestionarea eficientă a procesării multiple oferă răspuns rapid la toate cererile de procesare a sarcinilor.

Unitățile de planificare sunt adesea denumite a sarcină și este sarcina Planificatorului de a rula și de a gestiona aceste sarcini ori de câte ori este necesar; Planificatorul selectează sarcina care trebuie îndepărtată și atribuită CPU-ului pentru procesare, în funcție de modelul de planificare utilizat.

Cum știe Planificatorul ce sarcini sunt prioritare?

Programatorul trebuie să ruleze un proces de selecție echitabil și eficient, ținând seama de cererile variabile și dinamice de procesare și de valorificarea maximă a ciclurilor CPU.

Sarcini pot fi în două state în timpul procesării:

  1. În a CPU Burst unde CPU efectuează calcule pentru a procesa sarcina (perioada pentru o Burst CPU variază de la sarcină la sarcină și program la program).
  2. Într-un Intrare / Ieșire (I / O) Burst așteptând ca datele să fie primite sau trimise de sistem.

Când procesorul este inactiv, programatorul citește Gata de așteptare, și selectează următoarea sarcină care trebuie executată. Apoi, acesta este dispecer care oferă controlul de sarcină selectat al procesorului, deci trebuie să fie rapid! Orice timp preluat de Dispatcher este cunoscut sub numele de Latența la expediere.

Există diferite structuri și parametri personalizați pentru a defini Gata de așteptare, precum și mai multe metode care pot fi utilizate pentru a gestiona complexitatea procesului de planificare.

În general, despre optimizarea și maximizarea utilizării CPU, a debitului etc..

Planificatorul trebuie să ia o decizie pe parcursul uneia din următoarele etape:

  1. Când Task-ul se schimbă de la a Alergare la a Starea de așteptare (de exemplu, în așteptare în timpul unei cereri I / O).
  2. Când se schimbă sarcina Alergare la Gata (de exemplu, răspunzând unei întreruperi).
  3. Când se schimbă sarcina Aşteptare la Gata (de exemplu, o cerere de intrare / ieșire este completă).
  4. Cand Sarcină

O nouă sarcină trebuie selectată dacă etapa 1 sau 4 se întâmplă pentru a asigura utilizarea integrală a procesorului, iar în ambele etape 2 și 3, sarcina poate continua să fie difuzată sau este selectată una nouă.

După ce înțelegeți modul în care este procesată o sarcină, să examinăm două modele de planificare care se ocupă de întreruperi ale procesorului.

Ambele au caracteristici similare cu sarcinile, sarcinile, cozile și prioritățile (statice sau dinamice):

  • Programare non-preemptivă este când o sarcină se execută până când se oprește (în mod voluntar) sau se termină. Windows® a avut programări non-preemptive până la Windows 3.x, după care a trecut la Preemptive din Windows 95.
  • Planificarea preemptivă este în cazul în care o sarcină poate fi suspendată forțat de o întrerupere a procesorului, spre deosebire de non-Preemptive în cazul în care sarcina rulează până când aceasta eliberează controlul asupra procesorului.

Programare non-preemptivă

Sarcini în cadrul unui sistem non-preemptiv vor rula până la finalizare.

Planificatorul verifică apoi toate stările sarcinilor și programează următoarea sarcină cu prioritate maximă cu a Gata stat.

Cu programarea non-preemptivă, odată ce o sarcină are atribuirea CPU-ului, nu poate fi eliminată, chiar dacă sarcinile scurte trebuie să aștepte ca sarcini mai mari să fie finalizate.

Gestionarea planificării pentru toate sarcinile este "corectă", iar timpii de răspuns sunt previzibili, deoarece sarcinile cu prioritate ridicată nu pot afecta sarcinile de așteptare în jos pe coadă.

Planificatorul asigură că fiecare sarcină devine parte din CPU, evitând orice întârziere cu orice sarcină. "Timpul" alocat procesorului nu este neapărat egal, deoarece depinde de timpul pe care sarcina îl are pentru a fi finalizat.

Planificarea preemptivă

Acest model de programare permite ca sarcinile să fie întrerupte - spre deosebire de programarea non-preemptivă care are o abordare "run-to-completion".

Întreruperile, care pot fi inițiate de apelurile externe, invocă Planificatorul să întrerupă o sarcină în execuție pentru a gestiona o altă sarcină cu prioritate mai mare - astfel încât controlul CPU poate fi preemptat.

Sarcina cea mai înaltă prioritate în a Gata stat este executat, permițând un răspuns rapid la evenimentele în timp real.

Unele dintre cei care se confruntă cu Programarea Preemptivă implică creșterea costurilor generale ale resurselor atunci când se utilizează întreruperi și pot apărea probleme cu două activități de partajare a datelor, deoarece acestea pot fi întrerupte în timpul actualizării structurilor de date partajate și ar putea afecta negativ integritatea datelor.

Pe de altă parte, este practic să poți întrerupe o sarcină pentru a gestiona un altul care ar putea fi critic.

În concluzie

Pot fi definite multe variante și dependențe în politici diferite, cum ar fi folosirea unui a "Politica rotunjită [i]" unde fiecare sarcină (cu prioritate egală) rulează odată și apoi plasată la sfârșitul coadă, pentru următorul ciclu.

Alte politici includ Primul-In-First-Out, Cel mai scurt-Job-Primul, Cel mai scurt-Job-Urmatoarea, Cel mai scurt timp rămas, etc.

Analiza datelor istorice poate oferi informații despre aspecte, cum ar fi rata la care sosesc sarcini noi, CPU și I / O Burstre etc. Astfel distribuțiile de probabilități pot calcula caracteristicile timpilor de așteptare ai sarcinilor, armând astfel administratorii cu date relevante pentru a defini modelele de programare.