Distribuirea timpului procesorului între fire

Sistemul alocă timp CPU pentru toate firele active, pe baza nivelurilor lor de prioritate, care variază de la 0 la 31.

Cel mai mic nivel este rezervat și atribuit unui flux special de sistem de zeroare a paginii.







Când sistemul conectează procesorul la un flux, acesta procesează fire cu aceeași prioritate ca și peer (pe principiul caruselului). Odată ce toate firele cu această prioritate sunt cuantizate și cu condiția ca acestea să nu mai necesite timp de procesor, sistemul de operare trece la fire cu o prioritate mai mică.

Există posibilitatea ca procesorul să proceseze în mod constant fluxuri, de exemplu cu prioritate 31. Prin urmare, firele cu prioritate mai mică nu au șanse să se conecteze la procesor. Această situație se numește supraîncărcare (înfometare).

Să presupunem că rulează un fir cu prioritatea 5. În acest moment, un fir cu o prioritate mai mare avea nevoie de un procesor. Sistemul de operare va opri imediat firul cu o prioritate scăzută, chiar dacă fragmentul de timp nu a expirat, și apoi conectați firul cu o prioritate mai mare, alocând un cuantum cu normă întreagă.

Pentru ca toate firele să funcționeze, OS distribuie fiecăruia anumite intervale de timp, numite quanta. Timpul este alocat unui principiu "carusel".

Principiul multitaskingului preventiv:

Firele cu o prioritate mai mare deplasează întotdeauna fire cu o prioritate mai mică, indiferent dacă firele execută ultima sau nu.







Nivelul de prioritate este atribuit în două etape (așa-numitele priorități relative):

1. Se atribuie o anumită clasă de prioritate procesului;

2. Firele care aparțin procesului sunt atribuite nivelelor prioritare relative

Clasele de prioritate a fluxului:

Majoritatea aplicațiilor se referă în principal la aplicații cu clasa de prioritate obișnuită.

Astfel de procese se comportă într-o oarecare măsură:

Windows NT mărește fragmentul de timp la firele procesului activ. De exemplu: firele procesului normal primesc 15 ms de timp de procesor, până când devin active. În această stare, ei primesc 45 ms (dialogul Panoul de control \ System \ Perfomance vă permite să ajustați de câte ori trebuie să creșteți cuantumul).

Windows 95 crește nivelul fluxului cu 1 pentru procesul activ. Când procesul trece în "fundal", nivelul fluxului este redus cu 1.

Motivul pentru astfel de modificări în procesele active se datorează faptului că sistemul atinge un răspuns rapid la datele introduse de utilizator.

Prioritatea "Idle" este ideală pentru aplicațiile care monitorizează sistemul (de exemplu, programele - economizoare de ecran).

Clasa de prioritate înaltă trebuie utilizată numai atunci când este absolut necesară (de exemplu: Explorer).

Prioritatea Realtime nu este aproape niciodată utilizată, cu excepția cazurilor când lucrați cu echipamente non-standard sau atunci când programul efectuează o operație rapidă care nu poate fi întreruptă.

Puteți afla despre prioritatea procesului utilizând funcția

DWORD WINAPI GetPriorityClass (HANDLE hProcess);

BOOL WINAPI SetPrioritateClass (HANDLE hProcess, DWORD dwPriorityClass);

Când se creează un fir nou, nivelul său de prioritate corespunde clasei de proces.

Există posibilitatea de a crește sau de a reduce nivelul de prioritate al unui fir individual în raport cu procesul.

BOOL SetThreadPrioritate (HANDLE hThread, int nPrioritate);







Articole similare

Trimiteți-le prietenilor: