După cum se poate observa, timpul mediu de așteptare pentru algoritmul SJF este (4 + 1 + 9 + 0) / 4 = 3,5 ori. Este ușor de calculat că pentru algoritmul FCFS al proceselor P0 ordine. p1. p2. p3 această valoare va fi egală cu (0 + 5 + 8 + 15) / 4 = 7 unități de timp, t. e. este de două ori mai mare decât SJF algoritm. Se poate demonstra că, pentru un anumit set de procese (dacă nu în coada de așteptare, noi procese) algoritm SJF este optim în ceea ce privește minimizarea timpului mediu de așteptare în rândul clasei de algoritmi non-preemptive.
De examinare vytesnyayuschegoSJFplanirovaniya exemplu, vom lua o serie de P0 proces, p1, p2 și p3 cu diferite momente de spargere CPU și diferite momente ale apariției lor în coada de procese gata de execuție (vezi. Tabelul. 3.6.).
Ora de apariție a următoarei explozii a procesorului
La momentul inițial, sunt disponibile numai două procese, p0 și p3. Timpul mai mic al următoarei explozii a procesorului este în proces p3. deci este selectat pentru execuție (vezi tabelul 3.7.). După 2 unități de timp, procesul p1 ajunge în sistem. Momentul izbucnirii procesorului său este mai mic decât restul procesului de procesare a procesorului p3. care este înlocuită de starea de execuție și este tradusă într-o stare de pregătire. După alte unități de timp de 2 ori, procesul p1 este finalizat, iar procesul p3 este selectat din nou pentru execuție. La momentul t = 6, un proces p2 apare în coada de proces, gata de execuție. dar deoarece are nevoie de 7 unități de timp pentru a lucra și doar 1 unitate de timp rămâne pentru procesul p3, procesul p3 rămâne în starea de execuție. După finalizarea sa la momentul t = 7, procesele p0 și p2 se află în coada de așteptare. din care este selectat procesul p0. În cele din urmă, acesta din urmă va putea executa procesul p2.
Principala dificultate în implementarea algoritmului SJF este incapacitatea de a cunoaște cu precizie durata următoarei explozii a procesorului pentru procesele care rulează. În sistemele lot, cantitatea de timp a procesorului cerută de sarcina de efectuat este indicată de utilizator atunci când creați lucrarea. Putem lua această valoare pentru planificarea SJF pe termen lung. Dacă utilizatorul specifică mai mult timp decât are nevoie, va aștepta rezultatul mai mult decât ar putea, deoarece sarcina va fi descărcată ulterior în sistem. Dacă specifică mai puțin timp, sarcina nu poate fi numărată până la sfârșit. Astfel, în sistemele de loturi, sarcina de estimare a timpului de utilizare a procesorului este deplasată la umerii utilizatorului. Cu o planificare pe termen scurt, putem face doar o prezicere a duratei următoarei explozii a procesorului. pe baza istoriei procesului. Fie să fie valoarea celei de-a n-a spargere a procesorului. T (n + 1) este valoarea estimată pentru explozia CPN n + 1. - o valoare cuprinsă între 0 și 1.
Definim relația de recurență
T (0) este o constantă arbitrară. Primul termen ia în considerare ultimul comportament al procesului, în timp ce al doilea termen ia în considerare istoricul acestuia. Când oprim monitorizarea celui mai recent comportament al procesului, de fapt,
care este, evaluarea tuturor exploziilor CPU este aceeași, pornind de la o ipoteză inițială.
Punându-l, uităm de fundalul procesului. În acest caz, presupunem că timpul următoarei explozii a procesorului va coincide cu timpul ultimei explozii a procesorului:
Acesta este, de obicei, ales pentru o contabilitate echivalentă a ultimului comportament și fond. Trebuie menționat faptul că această alegere este de asemenea convenabilă pentru organizarea rapidă a calculului estimării T (n + 1). Pentru a calcula o nouă estimare, trebuie să luați vechea estimare, să o adăugați la timpul de spargere a procesorului măsurat și să împărțiți suma rezultată cu 2, de exemplu, deplasându-l cu un bit spre dreapta. Estimările obținute de T (n + 1) sunt utilizate ca durata următoarelor intervale de timp pentru utilizarea continuă a procesorului pentru planificarea SJF pe termen scurt.