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

Anonim

Programarea procesorului (sau Programarea CPU ) determină procesele care sunt atribuite și eliminate din CPU, bazate pe modele de programare precum Preemptive și Non - Programare preemptiva (cunoscuta si ca Programare cooperativa )

Sistemele mai vechi ar putea functiona in moduri simple simple, necesitatea unor sisteme responsabile, flexibile, precum și virtualizarea, gestionarea eficientă a procesării multiple oferă răspuns rapid la toate cererile de procesare a sarcinilor.

Unitățile de planificare sunt adesea denumite ca o sarcină și reprezintă sarcina Schedulerului pentru a executa și a gestiona aceste sarcini ori de câte ori este necesar; Planificatorul selectează sarcina care urmează să fie eliminată și atribuită procesorului pentru procesare, la modelul de planificare utilizat.

Cum știe Planificatorul ce sarcini sunt prioritare?

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

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

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

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

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

Planificatorul trebuie să ia o decizie în timpul uneia dintre următoarele etape:

Când Task-ul se modifică de la

  1. Running la starea de așteptare (de exemplu, așteaptă în timpul unei cereri de intrare / ieșire). Atunci când sarcina se schimbă de la
  2. Running la Ready (de exemplu, răspunde la o întrerupere). Când lucrarea se schimbă de la
  3. Așteptat până la Ready (de exemplu, o solicitare I / O este finalizată). Când trebuie să fie selectată o nouă sarcină
  4. o nouă sarcină în cazul în care stadiul 1 sau 4 garantează utilizarea integrală a procesorului și în ambele etape 2 și 3 sarcina poate continua să fie difuzată sau una nouă selectat.

După ce înțelegem cum este procesată o sarcină, să analizăm două modele de planificare care se ocupă de întreruperile procesorului.

Ambele au caracteristici similare cu sarcini, stări de sarcini, cozi și priorități (statice sau dinamice):

Programarea non-preemptivă

  • este atunci când o sarcină rulează 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 sa schimbat la Preemptive din Windows 95. Programarea preemptivă
  • este locul unde o sarcină poate fi suspendată forțat de o întrerupere a procesorului, spre deosebire de Non-Preemptive unde sarcina funcționează până când acesta va elibera controlul asupra procesorului. Planificarea non-preemptivă

Sarcini în cadrul unui sistem non-preemptiv va dura până când va fi finalizată.

Planificatorul apoi verifică toate stările sarcinilor și programează următoarea sarcină cu prioritate maximă cu o stare

Ready. Cu programare 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 duce la depășirea sarcinilor de așteptare.

Planificatorul asigură că fiecare sarcină devine parte din CPU, evitând orice întârziere cu orice sarcină. "Timpul" alocat procesorului nu poate fi neapărat egal, deoarece depinde de timpul pe care trebuie să-l îndeplinească sarcina.

Programarea preemptivă

Acest model de planificare permite întreruperea sarcinilor - spre deosebire de programarea non-preemptivă care are o abordare "run-to-completion".

Întreruperile, care pot fi inițiate din apeluri 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.

Se execută sarcina cu cea mai mare prioritate într-o stare

Ready, care permite răspuns rapid la evenimentele în timp real. Unele conuri cu Programarea Preemptivă implică creșterea cheltuielilor generale pe resurse 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 Rezumat

Se pot defini multe variante și dependențe în diferite politici, cum ar fi utilizarea unei

"Politică rotundă Robin [i]" în care fiecare sarcină (cu prioritate egală) plasat la sfârșitul coadă, pentru următorul ciclu. Alte politici includ

First-In-First-Out , Shortest-Job-First , Shortest-Job-Next , etc. Analiza datelor istorice poate oferi informații despre aspecte precum rata la care sosesc sarcini noi, CPU și Bursturile I / O etc, astfel încât distribuțiile de probabilități pot calcula caracteristicile timpilor de așteptare ai sarcinilor, administratorilor cu date relevante pentru a defini modele de planificare.