Operētājsistēmas: trÄ«s vienkārÅ”as daļas. 4. daļa: Ievads plānotājā (tulkojums)

Ievads operētājsistēmās

Čau Habr! Es vēlos vērst jÅ«su uzmanÄ«bu uz vienas, manuprāt, interesantas literatÅ«ras - OSTEP - rakstu sēriju-tulkojumiem. Å ajā materiālā diezgan dziļi aplÅ«kots unix lÄ«dzÄ«gu operētājsistēmu darbs, proti, darbs ar procesiem, dažādiem plānotājiem, atmiņu un citiem lÄ«dzÄ«giem komponentiem, kas veido modernu OS. Visu materiālu oriÄ£inālus varat apskatÄ«t Å”eit Å”eit. LÅ«dzu, ņemiet vērā, ka tulkojums tika veikts neprofesionāli (diezgan brÄ«vi), bet es ceru, ka es saglabāju vispārējo nozÄ«mi.

Laboratorijas darbus par Å”o tēmu var atrast Å”eit:

Citas daļas:

Varat arī apskatīt manu kanālu vietnē telegramma =)

Ievads plānotājā

Problēmas būtība: Kā izstrādāt plānotāja politiku
Kā bÅ«tu jāizstrādā pamatā esoŔās plānotāja politikas struktÅ«ras? Kādiem jābÅ«t galvenajiem pieņēmumiem? Kādi rādÄ«tāji ir svarÄ«gi? Kādas pamatmetodes tika izmantotas agrÄ«nās skaitļoÅ”anas sistēmās?

Darba slodzes pieņēmumi

Pirms apspriest iespējamās politikas, vispirms izdarÄ«sim dažas vienkārÅ”ojoÅ”as atkāpes par sistēmā strādājoÅ”ajiem procesiem, kurus kopā sauc darba slodze. Darba slodzes noteikÅ”ana ir bÅ«tiska veidoÅ”anas politikas sastāvdaļa, un, jo vairāk jÅ«s zināt par darba slodzi, jo labāku politiku varat uzrakstÄ«t.

IzdarÄ«sim Ŕādus pieņēmumus par sistēmā strādājoÅ”ajiem procesiem, kurus dažreiz sauc arÄ« par darba vietas (uzdevumi). GandrÄ«z visi Å”ie pieņēmumi nav reāli, bet nepiecieÅ”ami domas attÄ«stÄ«bai.

  1. Katrs uzdevums tiek izpildīts vienādu laiku,
  2. Visi uzdevumi tiek iestatīti vienlaicīgi,
  3. Uzdotais uzdevums darbojas līdz tā pabeigŔanai,
  4. Visi uzdevumi izmanto tikai centrālo procesoru,
  5. Katra uzdevuma izpildes laiks ir zināms.

Plānotāja metrika

Papildus dažiem pieņēmumiem par slodzi ir nepiecieÅ”ams vēl viens rÄ«ks dažādu plānoÅ”anas politiku salÄ«dzināŔanai: plānotāja metrika. Metrika ir tikai kaut kāds mērs. Ir vairāki rādÄ«tāji, ko var izmantot, lai salÄ«dzinātu plānotājus.

Piemēram, mēs izmantosim metriku ar nosaukumu apgrozÄ«juma laiks (apgrozÄ«juma laiks). Uzdevuma izpildes laiks tiek definēts kā starpÄ«ba starp uzdevuma izpildes laiku un uzdevuma ieraÅ”anās laiku sistēmā.

Tturnaround=TpabeigŔana-nonākŔana

Tā kā mēs pieņēmām, ka visi uzdevumi ieradās vienlaicÄ«gi, tad Ta=0 un lÄ«dz ar to Tt=Tc. Å Ä« vērtÄ«ba dabiski mainÄ«sies, mainot iepriekÅ” minētos pieņēmumus.

Vēl viens rādÄ«tājs - taisnÄ«gums (taisnÄ«gums, godÄ«gums). Produktivitāte un godÄ«gums plānoÅ”anā bieži ir pretējas Ä«paŔības. Piemēram, plānotājs var optimizēt veiktspēju, taču uz citu uzdevumu izpildes gaidÄ«Å”anas rēķina, tādējādi samazinot godÄ«gumu.

FIRST IN FIRST OUT (FIFO)

VisvienkārŔāko algoritmu, ko varam ieviest, sauc par FIFO vai pirmais ienācējs, pirmais. Å im algoritmam ir vairākas priekÅ”rocÄ«bas: to ir ļoti viegli ieviest, tas atbilst visiem mÅ«su pieņēmumiem un veic darbu diezgan labi.

ApskatÄ«sim vienkārÅ”u piemēru. Pieņemsim, ka vienlaikus tika uzstādÄ«ti 3 uzdevumi. Bet pieņemsim, ka uzdevums A ieradās nedaudz agrāk par visiem pārējiem, tāpēc tas parādÄ«sies izpildes sarakstā agrāk nekā citi, tāpat kā B attiecÄ«bā pret C. Pieņemsim, ka katrs no tiem tiks izpildÄ«ts 10 sekundes. Kāds bÅ«s vidējais laiks Å”o uzdevumu veikÅ”anai Å”ajā gadÄ«jumā?

Operētājsistēmas: trÄ«s vienkārÅ”as daļas. 4. daļa: Ievads plānotājā (tulkojums)

Saskaitot vērtības - 10+20+30 un dalot ar 3, iegūstam vidējo programmas izpildes laiku, kas vienāds ar 20 sekundēm.
Tagad mēģināsim mainÄ«t savus pieņēmumus. Konkrēti, 1. pieņēmums, un tādējādi mēs vairs neuzskatÄ«sim, ka katra uzdevuma izpildei nepiecieÅ”ams tikpat daudz laika. Kā FIFO veiksies Å”oreiz?

Kā izrādās, dažādi uzdevumu izpildes laiki ārkārtÄ«gi negatÄ«vi ietekmē FIFO algoritma produktivitāti. Pieņemsim, ka uzdevuma A izpildei bÅ«s nepiecieÅ”amas 100 sekundes, savukārt B un C uzdevumam joprojām bÅ«s nepiecieÅ”amas 10 sekundes.

Operētājsistēmas: trÄ«s vienkārÅ”as daļas. 4. daļa: Ievads plānotājā (tulkojums)

Kā redzams attēlā, vidējais laiks sistēmai bÅ«s (100+110+120)/3=110. Å o efektu sauc konvoja efekts, kad daži resursa Ä«stermiņa patērētāji stāvēs rindā pēc smagā patērētāja. Tas ir kā rinda pie pārtikas preču veikala, kad jÅ«su priekŔā ir klients ar pilniem groziem. Labākais problēmas risinājums ir mēģināt nomainÄ«t kases aparātu vai atpÅ«sties un dziļi elpot.

Vispirms īsākais darbs

Vai ir iespējams kaut kā atrisināt lÄ«dzÄ«gu situāciju ar smagajiem procesiem? Noteikti. Cits plānoÅ”anas veids tiek sauktsVispirms Ä«sākais darbs (SJF). ArÄ« tā algoritms ir visai primitÄ«vs ā€“ kā jau nosauca nosaukums, tad viens pēc otra vispirms tiks palaisti Ä«sākie uzdevumi.

Operētājsistēmas: trÄ«s vienkārÅ”as daļas. 4. daļa: Ievads plānotājā (tulkojums)

Å ajā piemērā to paÅ”u procesu izpildes rezultāts bÅ«s vidējā programmas izpildes laika uzlabojums, un tas bÅ«s vienāds ar 50, nevis 110, kas ir gandrÄ«z 2 reizes labāks.

Tādējādi pie dotā pieņēmuma, ka visi uzdevumi ierodas vienlaicÄ«gi, SJF algoritms Ŕķiet optimālākais algoritms. Tomēr mÅ«su pieņēmumi joprojām neŔķiet reāli. Å oreiz mēs mainām 2. pieņēmumu un Å”oreiz iedomājamies, ka uzdevumi var bÅ«t klāt jebkurā laikā, nevis visi vienlaicÄ«gi. Pie kādām problēmām tas var novest?

Operētājsistēmas: trÄ«s vienkārÅ”as daļas. 4. daļa: Ievads plānotājā (tulkojums)

Iedomāsimies, ka uzdevums A (100c) pienāk pirmais un tiek sākts izpildīt. Pie t=10 pienāk uzdevumi B un C, katrs no tiem aizņems 10 sekundes. Tātad vidējais izpildes laiks ir (100+(110-10)+(120-10))3 = 103. Ko plānotājs varētu darīt, lai to uzlabotu?

Vispirms īsākais laiks līdz pabeigŔanai (STCF)

Lai uzlabotu situāciju, mēs izlaižam 3. pieņēmumu, ka programma ir uzsākta un darbojas lÄ«dz pabeigÅ”anai. Turklāt mums bÅ«s nepiecieÅ”ams aparatÅ«ras atbalsts, un, kā jÅ«s varētu nojaust, mēs to izmantosim taimeris lai pārtrauktu skrieÅ”anas uzdevumu un konteksta maiņa. Tādējādi plānotājs var kaut ko darÄ«t brÄ«dÄ«, kad pienāk uzdevumi B, C - pārtraukt uzdevuma A izpildi un nodot uzdevumus B un C apstrādē un pēc to pabeigÅ”anas turpināt procesa A izpildi. Šāds plānotājs tiek saukts STCFvai PreventÄ«vs darbs vispirms.

Operētājsistēmas: trÄ«s vienkārÅ”as daļas. 4. daļa: Ievads plānotājā (tulkojums)

Å Ä« plānotāja rezultāts bÅ«s Ŕāds: ((120-0)+(20-10)+(30-10))/3=50. Tādējādi Ŕāds plānotājs kļūst vēl optimālāks mÅ«su uzdevumiem.

Metriskais reakcijas laiks

Tādējādi, ja mēs zinām uzdevumu izpildes laiku un to, ka Å”ie uzdevumi izmanto tikai centrālo procesoru, STCF bÅ«s labākais risinājums. Un kādreiz agrākos laikos Å”ie algoritmi darbojās diezgan labi. Tomēr tagad lietotājs lielāko daļu sava laika pavada terminālÄ« un sagaida produktÄ«vu interaktÄ«vu pieredzi. Tādējādi radās jauna metrika - reakcijas laiks (atbilde).

Reakcijas laiks tiek aprēķināts Ŕādi:

Tresponse=Tfirstrunāˆ’Tarrival

Tādējādi iepriekŔējā piemērā reakcijas laiks bÅ«s: A=0, B=0, C=10 (abg=3,33).

Un izrādās, ka STCF algoritms nav tik labs situācijā, kad pienāk 3 uzdevumi vienlaicÄ«gi ā€“ bÅ«s jāgaida lÄ«dz mazie uzdevumi bÅ«s pilnÄ«bā izpildÄ«ti. Tātad algoritms ir labs apgrozÄ«juma laika metrikai, bet slikts interaktivitātes metrikai. Iedomājieties, ja jÅ«s sēdētu pie termināļa un mēģinātu ievadÄ«t rakstzÄ«mes redaktorā un jums jāgaida vairāk nekā 10 sekundes, jo kāds cits uzdevums aizņem CPU. Tas nav Ä«paÅ”i patÄ«kami.

Operētājsistēmas: trÄ«s vienkārÅ”as daļas. 4. daļa: Ievads plānotājā (tulkojums)

Tātad mēs saskaramies ar citu problēmu - kā mēs varam izveidot plānotāju, kas ir jutīgs pret reakcijas laiku?

Round robin

Å Ä«s problēmas risināŔanai tika izstrādāts algoritms Round robin (RR). Pamatideja ir pavisam vienkārÅ”a: tā vietā, lai palaistu uzdevumus, lÄ«dz tie ir pabeigti, mēs izpildÄ«sim uzdevumu noteiktu laika periodu (sauktu par laika Ŕķēli) un pēc tam pārslēgsimies uz citu uzdevumu no rindas. Algoritms atkārto savu darbu, lÄ«dz visi uzdevumi ir pabeigti. Å ajā gadÄ«jumā programmas darbÄ«bas laikam jābÅ«t vairākkārtējam laikam, pēc kura taimeris pārtrauks procesu. Piemēram, ja taimeris pārtrauc procesu ik pēc x=10 ms, procesa izpildes loga lielumam ir jābÅ«t 10 reizinājumam un jābÅ«t 10,20 vai x*10.

ApskatÄ«sim piemēru: ABC uzdevumi sistēmā ierodas vienlaicÄ«gi un katrs no tiem vēlas darboties 5 sekundes. SJF algoritms pabeigs katru uzdevumu, pirms sāks citu. Turpretim RR algoritms ar palaiÅ”anas logu = 1s veiks uzdevumus Ŕādi (4.3. att.):

Operētājsistēmas: trÄ«s vienkārÅ”as daļas. 4. daļa: Ievads plānotājā (tulkojums)
(Atkal SJF (slikts reakcijas laikam)

Operētājsistēmas: trÄ«s vienkārÅ”as daļas. 4. daļa: Ievads plānotājā (tulkojums)
(Round Robin (piemērots reakcijas laikam)

Vidējais reakcijas laiks RR algoritmam ir (0+1+2)/3=1, savukārt SJF (0+5+10)/3=5.

Ir loÄ£iski pieņemt, ka laika logs ir ļoti svarÄ«gs RR parametrs; jo mazāks tas ir, jo lielāks ir reakcijas laiks. Tomēr nevajadzētu to padarÄ«t pārāk mazu, jo konteksta pārslēgÅ”anas laikam bÅ«s arÄ« nozÄ«me kopējā veiktspējā. Tādējādi izpildes loga laika izvēli nosaka OS arhitekts un tā ir atkarÄ«ga no uzdevumiem, kurus tajā plānots izpildÄ«t. Konteksta pārslēgÅ”ana nav vienÄ«gā servisa darbÄ«ba, kas tērē laiku - palaistā programma darbojas ar daudzām citām lietām, piemēram, dažādām keÅ”atmiņām, un ar katru slēdzi ir jāsaglabā un jāatjauno Ŕī vide, kas arÄ« var aizņemt daudz laiks.

RR ir lielisks plānotājs, ja mēs runājam tikai par reakcijas laika metriku. Bet kā uzdevuma izpildes laika metrika darbosies ar Å”o algoritmu? Apsveriet iepriekÅ” minēto piemēru, kad darbÄ«bas laiks A, B, C = 5s un ierodas tajā paŔā laikā. A uzdevums beigsies plkst. 13, B - plkst. 14, C - plkst. 15, un vidējais izpildes laiks bÅ«s 14 s. Tādējādi RR ir sliktākais algoritms apgrozÄ«juma rādÄ«tājam.

VispārÄ«gāk runājot, jebkurÅ” RR tipa algoritms ir godÄ«gs; tas sadala CPU laiku vienādi starp visiem procesiem. Tādējādi Å”ie rādÄ«tāji pastāvÄ«gi konfliktē viens ar otru.

Tādējādi mums ir vairāki kontrastējoÅ”i algoritmi un tajā paŔā laikā joprojām ir palikuÅ”i vairāki pieņēmumi - ka uzdevuma laiks ir zināms un uzdevums izmanto tikai centrālo procesoru.

SajaukŔana ar I/O

Pirmkārt, noņemsim 4. pieņēmumu, ka process izmanto tikai centrālo procesoru; dabiski, ka tas tā nav, un procesi var piekļūt citam aprīkojumam.

BrÄ«dÄ«, kad kāds process pieprasa I/O darbÄ«bu, process nonāk bloķētā stāvoklÄ«, gaidot, kamēr I/O tiks pabeigts. Ja I/O tiek nosÅ«tÄ«ts uz cieto disku, tad Ŕāda darbÄ«ba var ilgt pat vairākas ms vai ilgāk, un procesors Å”ajā brÄ«dÄ« bÅ«s dÄ«kstāvē. Å ajā laikā plānotājs var aizņemt procesoru ar jebkuru citu procesu. Nākamais lēmums, kas plānotājam bÅ«s jāpieņem, ir tad, kad process pabeigs savu I/O. Kad tas notiks, notiks pārtraukums, un OS iestatÄ«s procesu, kas izsauca I/O, gatavÄ«bas stāvoklÄ«.

ApskatÄ«sim vairāku uzdevumu piemēru. Katrs no tiem prasa 50 ms CPU laika. Tomēr pirmais piekļūs I/O ik pēc 10 ms (kas arÄ« tiks izpildÄ«ts ik pēc 10 ms). Un process B vienkārÅ”i izmanto 50 ms procesoru bez I/O.

Operētājsistēmas: trÄ«s vienkārÅ”as daļas. 4. daļa: Ievads plānotājā (tulkojums)

Å ajā piemērā mēs izmantosim STCF plānotāju. Kā plānotājs rÄ«kosies, ja tajā tiks palaists tāds process kā A? ViņŔ rÄ«kosies Ŕādi: vispirms viņŔ pilnÄ«bā izstrādās procesu A un pēc tam procesu B.

Operētājsistēmas: trÄ«s vienkārÅ”as daļas. 4. daļa: Ievads plānotājā (tulkojums)

Tradicionālā pieeja Ŕīs problēmas risināŔanai ir apstrādāt katru procesa A 10 ms apakÅ”uzdevumu kā atseviŔķu uzdevumu. Tādējādi, sākot ar STJF algoritmu, izvēle starp 50 ms uzdevumu un 10 ms uzdevumu ir acÄ«mredzama. Pēc tam, kad apakÅ”uzdevums A ir pabeigts, tiks palaists process B un I/O. Pēc ievades/izvades pabeigÅ”anas bÅ«s ierasts no jauna palaist 10 ms procesu A, nevis procesu B. Tādā veidā ir iespējams Ä«stenot pārklāŔanos, kur CPU izmanto cits process, kamēr pirmais gaida I/O. Un rezultātā sistēma ir labāk noslogota - brÄ«dÄ«, kad interaktÄ«vie procesi gaida I/O, uz procesora var tikt izpildÄ«ti citi procesi.

Orākula vairs nav

Tagad mēģināsim atbrÄ«voties no pieņēmuma, ka ir zināms uzdevuma izpildes laiks. Tas parasti ir sliktākais un nereālākais pieņēmums visā sarakstā. Faktiski vidējā parastajā operētājsistēmā pati OS parasti ļoti maz zina par uzdevumu izpildes laiku, tāpēc kā tad jÅ«s varat izveidot plānotāju, nezinot, cik ilgi uzdevums tiks izpildÄ«ts? VarbÅ«t mēs varētu izmantot dažus RR principus, lai atrisinātu Å”o problēmu?

Kopsavilkums

Mēs apskatÄ«jām uzdevumu plānoÅ”anas pamatidejas un apskatÄ«jām 2 plānotāju Ä£imenes. Pirmais vispirms sāk Ä«sāko uzdevumu un tādējādi palielina izpildes laiku, bet otrais tiek sadalÄ«ts starp visiem uzdevumiem vienādi, palielinot reakcijas laiku. Abi algoritmi ir slikti, ja otras Ä£imenes algoritmi ir labi. Mēs arÄ« apskatÄ«jām, kā paralēla CPU un I/O izmantoÅ”ana var uzlabot veiktspēju, taču neatrisinājām problēmu ar OS gaiÅ”redzÄ«bu. Un nākamajā nodarbÄ«bā mēs apskatÄ«sim plānotāju, kas ieskatās tuvākajā pagātnē un mēģina paredzēt nākotni. Un to sauc par daudzlÄ«meņu atsauksmju rindu.

Avots: www.habr.com

Pievieno komentāru