Precedentă relativă și absolută

Există două tipuri de programare cu prioritate: serviciu cu prioritate relativă și serviciu cu prioritate absolută.

În ambele cazuri, selectarea unui fir de execuție din coada pregătită se realizează în același mod: este selectat firul cu cea mai mare prioritate. Cu toate acestea, problemadeterminării momentului în care firul activse modifică este rezolvată în moduri diferite.

  • Pe sistemele cu prioritate relativă, un fir activ rulează până când iese singur din procesor, intrând într-o stare de așteptare (fie apare o eroare, fie firul se termină). Pe fig. 8,aprezintă un grafic al stării firului într-un sistem de prioritate relativă.
  • În sistemele cu priorități absolute, execuția firului activ este întreruptă, cu excepția motivelor de mai sus, cu încă o condiție: dacă în coada de fire gata a apărut un fir de execuție, a cărui prioritate este mai mare decât prioritatea firului activ. fir. În acest caz, firul întrerupt intră în starea gata (Fig. 8,b).

În sistemele în care programarea se bazează pe priorități relative, costul comutării procesorului de la un job la altul este minimizat. Pe de altă parte, pot exista situații în care o sarcină ia procesorul mult timp. În mod clar, pentru sistemele de partajare a timpului și în timp real, o astfel de disciplină de serviciunu este potrivită: o aplicație interactivă poate aștepta la coadă ore întregi până când o sarcină de calcul necesită I/O. Dar în sistemele de procesare în loturi, prioritățile relative sunt utilizate pe scară largă.

absolută

Fig. 8. Stați grafice ale firelor în sisteme cu priorități relative și absolute.

În sistemele cu priorități absolute, timpul de așteptare al unui fir în cozi poate fiminimizat dacă i se acordă cea mai mare prioritate. Un astfel de thread va preempționa toate celelalte fire (cu excepția celor cu aceeași prioritate cea mai mare) de la procesor. Acest lucru face ca programarea cu prioritate absolută să fie potrivită pentru sistemele de management al facilităților în care răspunsul rapid la un eveniment este important.

3.4.3 Algoritmi mixți de programare

În multe sisteme de operare, algoritmii de planificare sunt construiți folosind atât conceptele de cuantizare, cât și de priorități. De exemplu, programarea se bazează pe cuantizare, dar este determinată dimensiunea cuantiei și/sau ordinea în care un fir este selectat din coada de gata. de prioritățile firelor. Așa este implementată planificarea în Windows NT, care combină cuantificarea cu prioritățile absolute dinamice. Firul gata cu cea mai mare prioritate este selectat pentru execuție. Lui i se alocă un cuantum de timp. Dacă un fir cu o prioritate mai mare apare în coada gata în timpul execuției, acesta preempțiază firul de execuție. Firul de execuție preempțiat este returnat la coada pregătită și trece înaintea tuturor celorlalte fire de execuție cu aceeași prioritate.

Programarea în sisteme în timp real

În sistemele în timp real, în care principalul criteriu de eficiență este asigurarea caracteristicilor temporale ale procesului de calcul, planificarea are o importanță deosebită. Orice sistem în timp real trebuie să răspundă la semnalele obiectului controlat în limitele de timp specificate. Nevoia de planificare atentă a muncii este facilitată de faptul căîn sistemele de timp real, întregul set de sarcini care trebuie îndeplinite este cunoscut dinainte. În plus, sistemul are adesea informații despre timpii de execuție a sarcinilor, momentele de activare, timpii maximi de așteptare admisibili.răspuns, etc. Aceste date pot fi folosite de planificator pentru a crea un program static sau pentru a construi un algoritm de programare dinamic adecvat.