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.
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:
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:
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):
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.
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.
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.