Atšķirība starp jaukām prioritātēm un RT prioritātēm Linux

Plānotājs kontrolē, kurš pavediens tiks izpildīts un cik ilgs tas būs Linux operētājsistēmā. Tam jāatrisina 2 pretrunīgas prasības: reakcija uz I / O un aprēķina caurlaidspēja.

Izpildes secība ir balstīta uz plānošanas politiku un katra pavediena plānošanas prioritāti. Plānošanas politika tika ieviesta Linux versijā 2.2. Linux nodrošina 6 politikas: SCHED_FIFO, SCHED_RR, SCHED_DEADLINE, SCHED_DEADLINE, SCHED_OTHER, SCHED_BATCH unSCHED_IDLE. Šīs politikas, izņemot SCHED_DEADLINE, ir sadalītas 2 grupās; SCHED_OTHER, SCHED_IDLE un SCHED_BATCH pieder parastajai politikai, un SCHED_FIFO, SCHED_RR pieder reālā laika politikai. SCHED_DEADLINE pavedieni ir īpaši un visaugstākās prioritātes pavedieni.

Katram pavedienam ir sched_priority vērtība, un pavedieniem ar augstākām sched_priority vērtībām ir prioritāte pār citiem. sched_priority dažreiz sauc par reāllaika prioritāti, jo to galvenokārt izmanto, lai izlemtu pavedienu izpildes kārtību ar reālā laika politiku. pavedienu sched_priority vērtības ar parastu politiku ir 0, un pavedienu ar reālā laika politikām vērtības parasti ir no 1 līdz 99. Lai gan sched_priority diapazons dažādās sistēmās atšķiras, faktisko diapazonu var pārbaudīt ar sched_get_priority_min un sched_get_priority_max funkcijām katrā POSIX sistēma. Sched_priority vērtību kopā ar politiku var iestatīt ar sched_setscheduler funkciju, un to var pārbaudīt ar sched_getscheduler funkciju.

Kaut arī sched_priority vērtība ir paredzēta reālā laika pavedieniem, vērtību, kas izlemj, kurš parastais pavediens izceļ citus normālus pavedienus, sauc par jauku vērtību. Jaukās vērtības diapazons ir no -20 (augsta prioritāte) līdz +19 (zema prioritāte). Jauko vērtību var iestatīt ar jauko funkciju vai iestatītās prioritātes funkciju, un to var pārbaudīt ar getpriority funkciju.

Kā Linux izpilda pavedienus atbilstoši šīm reāllaika un jaukajām prioritāšu vērtībām? Reālā laika pavedieniem nav ierobežojumu to izpildes laikam, un Linux pamatā izpilda reālā laika pavedienu ar visaugstāko prioritātes vērtību, līdz pavediens pats izbeidz izpildi vai pavediens ar augstāku prioritātes vērtību novērš pavedienu. Tomēr tas bieži rada nepatikšanas, jo, ja daži nevēlami reālā laika pavedieni sāk darboties un nekad nebeidzas, vienīgais veids, kā to apturēt, bija palaist citus pavedienus ar augstāku prioritāti. Kopš versijas 2.6.25 ir arī citas funkcijas, lai apturētu šos nevēlamos reālā laika pavedienus, piemēram, izpildes laika iepriekš ierobežošana, izmantojot RLMIT_RTTIME. Tomēr reāllaika politiku nav ieteicams izmantot bez rūpīgas apsvēršanas, jo operētājsistēmā Linux ir vieda plānošanas sistēma ar nosaukumu normālā vītne pilnīgi saderīgs plānotājs (CFS), kas tika ieviesta Linux kodola versijā 2.6.23. CFS izlemj, kuru pavedienu izpildīt un cik ilgi to var izpildīt.

CFS izmanto sarkan-melnu koku datu struktūru, kas ir viena no binārajiem kokiem, lai nodrošinātu taisnīgu grafiku. CFS katram uzdevumam ir savs izpildes laiks, un CFS izveido izpildes sarkano melno koku. Izpildīšanai ir izvēlēts uzdevums ar vismazāko izpildes laiku kokā. Pēc izpildes CFS pievieno uzdevumam izpildes laiku un atkal ievieto sarkan sarkanmelnā kokā atbilstoši tā izpildes laikam. Tas ļauj izpildīt uzdevumus, kas ilgi miegā, tiklīdz tie ir jāizpilda, kas izklausās taisnīgi. Katru reizi, kad CFS pabeidz uzdevuma izpildi, tai ir jāievieto izpildītais uzdevums atpakaļ kokā un jāmeklē nākamais uzdevums ar vismazāko izpildes laiku. Tam nepieciešama datu struktūra, kas neaizņems daudz laika pat sliktākajā gadījumā. Tas ir viens no iemesliem, kāpēc tiek pieņemts sarkans melns koks. Sarkanā melnā kokā katrs mezgls ir vai nu sarkanā, vai melnā krāsā, un sarkano mezglu bērni vienmēr ir melni. Vissvarīgākais ir tas, ka katrs ceļš no dotā mezgla uz jebkuru no tā pēcnācēju lapām satur vienādu skaitu melno mezglu. Tas noved pie sarkana-melna koka kritiskās īpašības, ka ceļš no saknes līdz vistālākajai lapai nav vairāk kā divas reizes garāks nekā ceļš no saknes līdz tuvākajai lapai, tas garantē sliktāko laiku meklēšanai, ievietošanai , un dzēšana O (log n), un CFS to izmanto, lai atjauninātu plānošanu.

Tagad mēs zinām, kā CFS nosaka izpildes kārtību, un mēs pāriesim pie tā, kā CFS nosaka katru izpildes laiku. Katrs izpildes laiks tiek noteikts aprēķina rezultātā, lai līdzsvarotu 4 faktorus: mērķtiecīgu latentumu, minimālu precizitāti, gaidāmo uzdevumu skaitu, jaukās uzdevumu vērtības. Mērķtiecīgais latentums ir laiks, kas nepieciešams, lai vismaz vienu reizi tiktu izpildīti visi uzdevumi. Minimālā precizitāte ir īsākais izpildes laiks, izpildes laiks, zem kura rodas augstas konteksta maiņas izmaksas. Pamatā mērķa latentums tiek sadalīts katrā uzdevumā svērtā veidā atkarībā no jaukām vērtībām tā, lai katrs izpildes laiks būtu ilgāks par minimālo precizitāti. Lielāks mērķtiecīgais latentums noved pie ilgāka izpildes laika, jo īpaši attiecībā uz augstākas prioritātes uzdevumiem, un augstāka minimālā precizitāte noved pie vienlīdzīgāka izpildes laika, neatkarīgi no jaukām vērtībām.

Rezumējot, atšķirība starp jauko prioritāti un reālā laika prioritāti ir šāda. Pirmkārt, jauka prioritāte ir parastajiem uzdevumiem, savukārt reālā laika prioritāte acīmredzami ir reālā laika uzdevumiem. Otrkārt, jauka prioritāte ir vērtība, kas ļauj noteikt, cik ilgs būs izpildes laiks, un izpildes rīkojumu nosaka CFS atbilstoši izpildes laikam. No otras puses, reālā laika prioritāte ir vērtība, lai noteiktu izpildes kārtību, un reālā laika uzdevumu izpildes laiks principā nav ierobežots, kamēr tos nepieļauj citi augstākas prioritātes uzdevumi. Lai arī abas tiek sauktas par prioritātēm, jauka prioritāte ir uz laiku, bet reālā laika prioritāte ir pasūtījumam.