Mismunur er á milli forgangsröðunar og RT forgangsröðunar í Linux

Tímaáætlun ræður hvaða þráður verður keyrður og hversu lengi hann verður í Linux. Það þarf að leysa 2 mótsagnakröfur: svörun gagnvart I / O og afköst reikninnar.

Röð röð er byggð á tímasetningarstefnu og tímasetningu forgangs sem hver þráður hefur. Tímasetningarstefnan var kynnt í Linux á útgáfu 2.2. Linux veitir 6 stefnur: SCHED_FIFO, SCHED_RR, SCHED_DEADLINE, SCHED_DEADLINE, SCHED_OTHER, SCHED_BATCH ogSCHED_IDLE. Þessum stefnum, nema SCHED_DEADLINE, er skipt í tvo hópa; SCHED_OTHER, SCHED_IDLE og SCHED_BATCH tilheyra venjulegri stefnu og SCHED_FIFO, SCHED_RR tilheyra rauntíma stefnu. SCHED_DEADLINE þræðir eru sérstakir og hafa mesta forgangsþræði.

Hver þráður hefur tímaáætlunargildi og þræðir með hærra tímaáætlunargildi hafa forgang fram yfir aðra. sched_priority er stundum kallað forgangsatriði í rauntíma, þar sem það er aðallega notað til að ákveða framkvæmd röð þráða með rauntíma stefnu. sched_priority gildi þráða með venjulegar stefnur eru 0 og þræðir með rauntíma stefnu taka venjulega 1 til 99. Þó að svið sched_priority sé mismunandi frá kerfum, þá er hægt að athuga raunverulegt svið með sched_get_priority_min og sched_get_priority_max aðgerðum í öllum POSIX kerfið. Hægt er að stilla tímaáætlunargildið ásamt stefnunni með aðgerðinni sched_setscheduler og kanna með aðgerðinni sched_getscheduler.

Þó að sched_priority gildi sé fyrir rauntíma þræði, gildi til að ákveða hvaða venjulegi þráður fyrirfram aðra venjulegu þræði kallast ágætur gildi. Bilið á fallegu gildi er -20 (forgangsverkefni) til +19 (lágt forgangsatriði). Hægt er að stilla fíngildið með snilldaraðgerðinni eða setpriorityaðgerðinni og athuga með getpriorityaðgerðinni.

Hvernig Linux keyrir þræði eftir þessum rauntíma og fallegu forgangsgildum? Þráðir í rauntíma hafa enga takmörkun á framkvæmdartíma sínum og Linux keyrir í rauninni rauntíma þráð með hæsta forgangsgildi þar til þráðurinn lýkur framkvæmdinni af sjálfum sér eða þráður með hærra forgangsgildi fyrirbyggir þráðinn. Hins vegar veldur það oft vandræðum þar sem ef einhverjir óæskilegir rauntímaþræðir byrja að keyra og ljúka aldrei, þá var eina leiðin til að stöðva það að keyra aðra þræði með meiri forgang. Svo frá útgáfu 2.6.25 eru aðrar aðgerðir til að stöðva þá óæskilegu rauntímaþræði, svo sem að takmarka framkvæmdartímann fyrirfram með því að nota RLMIT_RTTIME. Enn er ekki mælt með því að nota rauntíma stefnuna án þess að fara nákvæmlega yfir, því Linux er með snjallt tímasetningarkerfi sem kallast CFS (Completely Fair Scheduler) fyrir venjulega þræði, sem var kynnt í útgáfu 2.6.23 af Linux kjarna. CFS ákveður hvaða þráð á að framkvæma og hversu lengi hann er hægt að framkvæma.

CFS hagnýtir sér rauð-svartan trjáuppbyggingu tré, eitt af tvíundartrjám, til að átta sig á sanngjörnu tímasetningu. Hjá CFS hefur hvert verkefni sinn framkvæmdartíma og CFS smíðar rautt-svart tré verkefna eftir framkvæmdartímann. Verkefni með minnsta framkvæmdatíma í trénu er valið til að framkvæma. Eftir framkvæmdina bætir CFS framkvæmdatímanum við verkefnið og setur það aftur í rauð-svörtu trénu í samræmi við framkvæmdartímann. Þetta gerir kleift að framkvæma verkefni sem sofna lengi um leið og þau þurfa að vera framkvæmd, sem hljómar sanngjarnt. Í hvert skipti sem CFS lýkur framkvæmd verkefnis verður það að setja framkvæmd verk aftur í tréð og leita að næsta verkefni með minnsta framkvæmdatíma. Til þess þarf gagnaskipulag sem mun ekki taka langan tíma jafnvel í versta tilfelli. Þetta er ein af ástæðunum fyrir því að rauð svart tré er ættleitt. Í rauðu svörtu tré er hver hnútur annað hvort rauður eða svartur og börn á rauðum hnútum eru alltaf svört. Mikilvægast er að hver slóð frá tilteknum hnút til einhvers afkomenda laufs inniheldur sama fjölda svörtu hnúta. Þetta leiðir til mikilvægra eiginleika rauð-svörtu trésins að leiðin frá rótinni að lengsta laufinu er ekki meira en tvöfalt lengri en leiðin frá rótinni að næsta lauf, þetta tryggir versta tíma til að leita, setja í , og eytt í O (log n), og það nýtist CFS til að halda tímasetningu sinni uppfærð.

Nú vitum við hvernig CFS ákvarðar röð framkvæmdarinnar og við munum halda áfram að hvernig CFS ákvarðar hvern framkvæmdartíma. Hver framkvæmdartími er ákvarðaður vegna útreiknings til að koma á jafnvægi milli 4 þátta: markviss leynd, lágmarksgreining, fjöldi verkefna sem bíður, falleg gildi verkefnanna. Markviss leynd er tími sem þarf til að taka öll verkefni að minnsta kosti einu sinni. Lágmarksgreining er stystu framkvæmdatíminn, framkvæmdartíminn undir sem skilar háum samhengisskiptiskostnaði. Í grundvallaratriðum er markvissu leyndinni skipt í hvert verkefni á vegin hátt eftir því hve fallegu gildin eru þannig að hver framkvæmdartími er lengri en lágmarksgreiningartegundin. Því hærri markvissu leyndin leiðir til lengri framkvæmdartíma sérstaklega fyrir verkefni með hærri forgang, og hærri lágmarksgreiningin leiðir til jafnari framkvæmdartíma óháð fínum gildum.

Í stuttu máli er mismunurinn á milli forgangs og forgangs í rauntíma eftirfarandi. Í fyrsta lagi er fínn forgangsverkefni fyrir venjuleg verkefni, á meðan rauntíma forgangsröðunin er augljóslega fyrir rauntíma verkefni. Í öðru lagi er ágætur forgangsverðið gildi til að ákvarða hversu langur framkvæmdartími verður og framkvæmdarskipunin er ákvörðuð af CFS í samræmi við framkvæmdartímann. Aftur á móti er rauntíma forgangsverðið gildi til að ákvarða framkvæmdaröð og framkvæmdartími rauntímaverkefna er í grundvallaratriðum ekki takmarkaður fyrr en þeir fá fyrirfram af öðrum verkefnum sem hafa meiri forgang. Þó að bæði séu kölluð forgangsröðun, þá er ágætur forgangsverkefni tímalengdarinnar og rauntíma forgangsröðunin er fyrir pöntunina.