Skirtumas tarp malonių ir RT prioritetų „Linux“

Tvarkaraštis kontroliuoja, kuri gija bus vykdoma ir kiek laiko truks Linux. Jis turi išspręsti 2 prieštaringus reikalavimus: reagavimą į I / O ir skaičiavimo pralaidumą.

Vykdymo tvarka pagrįsta planavimo politika ir planavimo prioritetu, kurį turi kiekviena gija. Planavimo politika buvo įdiegta „Linux“ 2.2 versijoje. „Linux“ teikia 6 strategijas: SCHED_FIFO, SCHED_RR, SCHED_DEADLINE, SCHED_DEADLINE, SCHED_OTHER, SCHED_BATCH irSCHED_IDLE. Ši politika, išskyrus SCHED_DEADLINE, yra suskirstyta į 2 grupes; SCHED_OTHER, SCHED_IDLE ir SCHED_BATCH priklauso normaliai politikai, o SCHED_FIFO, SCHED_RR priklauso realaus laiko politikai. SCHED_DEADLINE gijos yra ypatingos ir turi aukščiausią prioritetą.

Kiekviena gija turi sched_priority reikšmę, o gijos, turinčios didesnes sched_priority reikšmes, turi pirmenybę prieš kitas. „sched_priority“ kartais vadinamas realaus laiko prioritetu, nes jis dažniausiai naudojamas norint išspręsti gijų vykdymo tvarką realaus laiko politika. Temų, turinčių įprastą politiką, sched_priority vertės yra 0, o gijų, turinčių realaus laiko strategijas, vertės paprastai būna nuo 1 iki 99. Nors sched_priority diapazonas skiriasi nuo sistemų, faktinį diapazoną galima patikrinti sched_get_priority_min ir sched_get_priority_max funkcijomis kiekvienoje POSIX. sistema. „Sched_priority“ reikšmę kartu su politika gali nustatyti „sched_setscheduler“ funkcija ir patikrinti „sched_getscheduler“ funkcija.

Nors „sched_priority“ reikšmė yra realaus laiko gijoms, vertė, norint nuspręsti, kuris normalus sriegis atmeta kitus normalius gijas, vadinama gražiąja verte. Gražios vertės diapazonas yra nuo -20 (aukštas prioritetas) iki +19 (žemas prioritetas). Gražią vertę gali nustatyti graži funkcija arba nustatyto prioriteto funkcija, o tikrinti - gautumo prioriteto funkcija.

Kaip „Linux“ vykdo gijas pagal šias realiojo laiko ir gražias prioritetų reikšmes? Realiojo laiko gijos neriboja jų vykdymo laiko, o „Linux“ iš esmės vykdo realiojo laiko gijas su didžiausia prioriteto verte, kol gija pasibaigia jos vykdymu pati, arba gija, turinti didesnę prioriteto vertę, užkerta kelią gijai. Tačiau tai dažnai sukelia problemų, nes jei kai kurie nepageidaujami realaus laiko gijos pradeda veikti ir niekada nesibaigia, vienintelis būdas ją sustabdyti buvo paleisti kitas gijas, turinčias didesnį prioritetą. Taigi nuo 2.6.25 versijos yra ir kitų funkcijų, skirtų sustabdyti nepageidaujamus realaus laiko gijas, pavyzdžiui, vykdymo laiko apribojimas iš anksto naudojant RLMIT_RTTIME. Vis dėlto nerekomenduojama naudoti realiojo laiko politikos, kruopščiai neapsvarsčius, nes „Linux“ turi intelektualiąją planavimo sistemą, vadinamą visiškai normaliais sriegiais, visiškai įdiegta planuokle (CFS), kuri buvo įvesta „Linux“ branduolio 2.6.23 versijoje. CFS nusprendžia, kurią giją reikia vykdyti ir kiek laiko ji gali būti vykdoma.

CFS naudoja raudonai juodo medžio duomenų struktūrą, vieną iš dvejetainių medžių, kad sudarytų teisingą tvarkaraštį. CFS kiekviena užduotis turi savo vykdymo laiką, o CFS sukuria raudonai juodą užduočių medį pagal vykdymo laiką. Atlikta užduotis, kurios vykdymo laikas yra trumpiausias medyje. Po vykdymo CFS prideda vykdymo laiką prie užduoties ir vėl įtraukia į raudonai juodą medį pagal vykdymo laiką. Tai leidžia vykdyti užduotis, kurios ilgai miega, kai tik jas reikia atlikti, ir tai atrodo teisinga. Kiekvieną kartą, kai CFS užbaigia užduoties vykdymą, ji turi įterpti įvykdytą užduotį atgal į medį ir ieškoti kitos užduoties, kurios vykdymo laikas būtų mažiausias. Tam reikalinga duomenų struktūra, kuri neužtruks ilgai net blogiausiu atveju. Tai yra viena iš priežasčių, kodėl įveistas raudonas juodas medis. Raudoname juode medyje kiekvienas mazgas yra arba raudonas, arba juodas, o raudonų mazgų vaikai visada yra juodi. Svarbiausia, kad kiekviename kelyje nuo nurodyto mazgo iki jo palikuonių lapų yra toks pat skaičius juodų mazgų. Tai lemia raudonai juodo medžio kritinę savybę, kad kelias nuo šaknies iki tolimiausio lapo yra ne daugiau kaip dvigubai ilgesnis nei kelias nuo šaknies iki artimiausio lapo. Tai garantuoja blogiausią laiką paieškai, įdėjimui. , ir ištrynimą O (log n), ir tai yra naudinga CFS norint atnaujinti savo tvarkaraštį.

Dabar mes žinome, kaip CFS nustato vykdymo tvarką, ir pereisime prie to, kaip CFS nustato kiekvieną vykdymo laiką. Kiekvienas vykdymo laikas nustatomas apskaičiuojant 4 veiksnius: tikslinį delsą, minimalų detalumą, laukiančių užduočių skaičių, gražias užduočių vertes. Tikslinis delsimas yra laikas, per kurį kiekviena užduotis turi būti atlikta bent kartą. Mažiausias detalumas yra trumpiausias vykdymo laikas, kurio vykdymo laikas yra mažesnis už konteksto keitimo sąnaudas. Iš esmės tikslinė delsos padalijama į kiekvieną užduotį pagal svorį, atsižvelgiant į gražias vertes, kad kiekvieno vykdymo laikas būtų ilgesnis nei minimalus detalumas. Didesnis tikslinis delsimas lemia ilgesnį vykdymo laiką, ypač aukštesnio prioriteto užduotims, o didesnis minimalus detalumas lemia tolygesnį vykdymo laiką, nepriklausomą nuo gražių verčių.

Apibendrinant, skirtumas tarp gražaus ir realiojo laiko prioriteto yra toks. Pirma, gražus prioritetas yra įprastoms užduotims, tuo tarpu realiojo laiko prioritetas yra akivaizdžiai realaus laiko užduotims. Antra, gražus prioritetas yra vertė, leidžianti nustatyti, kiek laiko bus vykdomas, o vykdymo pavedimą nustato CFS pagal vykdymo laiką. Kita vertus, realiojo laiko prioritetas yra reikšmė vykdymo tvarkai nustatyti, o realiojo laiko užduočių vykdymo laikas iš esmės nėra ribojamas, kol joms netrukdo kitos aukštesnio prioriteto užduotys. Nors abu yra vadinami prioritetais, puikus prioritetas yra trukmės, o realaus laiko prioritetas yra užsakymo.