{"id":32730,"date":"2019-10-31T21:48:36","date_gmt":"2019-10-31T18:48:36","guid":{"rendered":"https:\/\/prohoster.info\/blog\/operating-systems-three-easy-pieces-part-5-planirovanie-multi-level-feedback-queue-perevod\/"},"modified":"2021-02-08T11:40:35","modified_gmt":"2021-02-08T09:40:35","slug":"operating-systems-three-easy-pieces-part-5-planirovanie-multi-level-feedback-queue-perevod","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-5-planirovanie-multi-level-feedback-queue-perevod","title":{"rendered":"Operatsioonis\u00fcsteemid: Kolm lihtsat osa. Osa 5: Planeerimine: Mitme taseme tagasisidej\u00e4rjekord (t\u00f5lge)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Sissejuhatus operatsioonis\u00fcsteemidesse<\/h1>\n<p>Tere, Habr! Soovin tutvustada teile artiklite seeriat, mis on t\u00f5lkinud minu arvates huvitavat kirjandust \u2014 OSTEP. Selles materjalis k\u00e4sitletakse s\u00fcgavalt unix-sarnaste operatsioonis\u00fcsteemide toimimist, sealhulgas protsesside, erinevate planeerijate, m\u00e4luhalduse ja muude sarnaste komponentide t\u00f6\u00f6tamise aspekte, mis moodustavad t\u00e4nap\u00e4eva operatsioonis\u00fcsteemi. Originaali k\u00f5iki materjale saate vaadata siit: <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">siin<\/a><\/noindex>. Palun arvestage, et t\u00f5lge on tehtud mitteprofessionaalselt (piisavalt vabalt), kuid loodan, et olen p\u00f5hisisu s\u00e4ilitanud.<\/p>\n<p>Laborit\u00f6\u00f6d selle aine kohta leiate siit:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">originaal<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">originaal<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">minu isiklik kohandamine<\/a><\/noindex><\/li>\n<\/ul>\n<p>Teised osad:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">Osa 1: Sissejuhatus<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446866\/\">Osa 2: Abstraktsioon: protsess<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/447182\/\">Osa 3: Sissejuhatus protsesside API-sse<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/449026\/\">Osa 4: Planeerija sissejuhatus<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/450116\/\">Osa 5: MLFQ planeerija<\/a><\/noindex><\/li>\n<\/ul>\n<p>Lisaks v\u00f5ite minna minu kanalile <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">Telegraam<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Planeerimine: Mitme taseme tagasisidej\u00e4rjekord<\/h2>\n<p>Selles loengus r\u00e4\u00e4gime \u00fchest tuntumaid l\u00e4henemisviise<br \/>\nplaneerimisele, mida nimetatakse <b>Mitme taseme tagasisidej\u00e4rjekord<\/b> (MLFQ). MLFQ planeerijat kirjeldas esmakordselt 1962. aastal Fernando J. Corbat\u00f3 s\u00fcsteemis, mida kutsuti<br \/>\n\u00dchilduv ajajagamise s\u00fcsteem (CTSS). Need uuringud (sh hilisemad t\u00f6\u00f6d<br \/>\nMulticsi \u00fcle) said hiljem Turingi auhinna.<br \/>\nPlaneerijat on hiljem t\u00e4iustatud ja sellel on n\u00fc\u00fcd juba selline v\u00e4limus,<br \/>\nmida v\u00f5ib leida m\u00f5nedes kaasaegsetes s\u00fcsteemides.<\/p>\n<p>MLFQ algoritm \u00fcritab lahendada kahte p\u00f5hilist, omavahel seotud probleemi.<br \/>\n<b>Esiteks<\/b>, p\u00fc\u00fcdes optimeerida p\u00f6\u00f6rderaega, mida, nagu me eelmisel loengul arutasime, optimeeritakse l\u00fchikeste \u00fclesannete k\u00e4ivitamise meetodi abil j\u00e4rjekorra alguses.<br \/>\nKuid OS ei tea, kui kaua iga protsess kestab, ja see on<br \/>\nteabeks vajalik, et SJF ja STCF algoritmid t\u00f6\u00f6taksid. <b>Teiseks<\/b>, MLFQ p\u00fc\u00fcab<br \/>\nmuuta s\u00fcsteemi kasutajatele vastuv\u00f5tlikuks (n\u00e4iteks nende jaoks, kes istuvad ja<br \/>\nk\u00fcmneid tunde ekraanil oodates, et \u00fclesanne l\u00f5petataks) ja seel\u00e4bi v\u00e4hendada vastamisaega.<br \/>\nKahjuks sellised algoritmid nagu RR v\u00e4hendavad vastamisaega, kuid m\u00f5juvad v\u00e4ga.<br \/>\nhalvasti ringlusaegade metoodikale. Seet\u00f5ttu on meie probleem: Kuidas kavandada<br \/>\nplaneerimist, mis vastab meie n\u00f5uetele ja ei tea midagi nii-\u00f6elda protsessi olemusest?<br \/>\nKuidas suudab planeerija \u00f5ppida \u00fclesannete omadusi,<br \/>\nmida ta k\u00e4ivitab, ja seel\u00e4bi teha paremaid otsuseid planeerimise osas?<\/p>\n<p><u>Probleemi tuum: Kuidas planeerida \u00fclesannete m\u00e4\u00e4ramist, ilma et oleks ideaalset teadmist?<br \/>\nKuidas luua planeerija, mis samal ajal minimeerib vastamisaega<br \/>\ninteraktiivsete \u00fclesannete jaoks ja minimeerib ringlusaega ilma eelneva<br \/>\nteadmiseta \u00fclesande t\u00e4itmise ajast?<\/u><\/p>\n<p>M\u00e4rkus: \u00f5pime varasemate s\u00fcndmuste p\u00f5hjal.<\/p>\n<p>MLFQ j\u00e4rjekord on suurep\u00e4rane n\u00e4ide s\u00fcsteemist, mis \u00f5pib<br \/>\nm\u00f6\u00f6dunud s\u00fcndmustest, et ennustada tulevikku. Selliseid l\u00e4henemisviise kasutatakse sageli<br \/>\noperatsioonis\u00fcsteemides (ja paljus muudes IT-sektorites, sealhulgas ennustuste harudes<br \/>\nriistvaras ja vahem\u00e4lu algoritmid). Sellised l\u00e4henemisviisid<br \/>\naktiveeruvad, kui \u00fclesannete k\u00e4itumisfaasid on olemas, muutes need seega ettearvatavaks.<br \/>\nKuid sellise tehnika kasutamisel tuleb olla ettevaatlik, kuna ennustused v\u00f5ivad v\u00e4ga kergesti<br \/>\nosutuda valedeks ja viia s\u00fcsteemi halvemate otsuste langetamiseni v\u00f5rreldes sellega,<br \/>\nkui teadmisi \u00fcldse poleks.<\/p>\n<h3>MLFQ: P\u00f5hireeglid<\/h3>\n<p>Vaadakem \u00fcle MLFQ algoritmi p\u00f5hireeglid. Kuigi selle algoritmi<br \/>\nrakendusi on mitmeid, p\u00f5hialused on sarnased.<br \/>\nSelles rakenduses, mida me kaalume, on MLFQ-l mitu<br \/>\nerinevat j\u00e4rjekorda, igal neist erineva prioriteediga. Igal ajal,<br \/>\n\u00fclesanne, mis on t\u00e4itmiseks valmis, asub \u00fches j\u00e4rjekorras. MLFQ kasutab prioriteete,<br \/>\net m\u00e4\u00e4rata, millisest \u00fclesandest alustada, st \u00fclesanne, millel on k\u00f5rgem<br \/>\nprioriteet (\u00fclesanne k\u00f5rgeima prioriteediga j\u00e4rjekorrast) k\u00e4ivitatakse esimesena.<br \/>\nMuidugi v\u00f5ib konkreetses j\u00e4rjekorras olla rohkem kui \u00fcks \u00fclesanne, nii et<br \/>\nnendel on sama prioriteet. Sellisel juhul kasutatakse plaanimist<br \/>\nRR mehhanismi nende \u00fclesannete vahel.<br \/>\nNii j\u00f5uame kahe p\u00f5hireegli juurde, mis kehtivad MLFQ puhul:<br \/>\nNii saavutame MLFQ jaoks kaks p\u00f5hireeglit:<\/p>\n<ul>\n<li> Reegel 1: Kui prioriteet(A) &gt; prioriteet(B), k\u00e4ivitatakse \u00fclesanne A (B ei k\u00e4ivitu).<\/li>\n<li> Reegel 2: Kui prioriteet(A) = prioriteet(B), k\u00e4ivitatakse A ja B RR meetodil.<\/li>\n<\/ul>\n<p>Eeltoodust l\u00e4htuvalt on MLFQ planeerimise v\u00f5tmeelementideks<br \/>\nprioriteedid. Selle asemel, et m\u00e4\u00e4rata igale<br \/>\n\u00fclesandele fikseeritud prioriteet, muutab MLFQ selle prioriteeti s\u00f5ltuvalt j\u00e4lgitavast k\u00e4itumisest.<br \/>\nN\u00e4iteks, kui \u00fclesanne pidevalt viibib CPU t\u00f6\u00f6lt ootamisel klaviatuurisisende jaoks,<br \/>\nhoiab MLFQ protsessi prioriteedik\u00f5rgel tasemel, kuna just nii<br \/>\npeab toimima interaktiivne protsess. Kuid kui \u00fclesanne pidevalt ja<br \/>\nintensiivselt kasutab CPU-d pikka aega, madaldab MLFQ<br \/>\nselle prioriteeti. Sel viisil uurib MLFQ protsesside k\u00e4itumist nende t\u00f6\u00f6 ajal<br \/>\nja kohandab k\u00e4itumist.<br \/>\nJoonistame n\u00e4ite, kuidas v\u00f5iksid j\u00e4rjekorrad v\u00e4lja n\u00e4ha mingil hetkel<br \/>\nja siis saame midagi sellist:<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat osa. Osa 5: Planeerimine: Mitme taseme tagasisidej\u00e4rjekord (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/3598e9ca43a56049625bdcf3074de472.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>Antud skeemis on 2 protsessi A ja B k\u00f5rgeima prioriteedi j\u00e4rjekorras. Protsess<br \/>\nC on kuskil keskel ja protsess D j\u00e4rjekorra l\u00f5pus. \u00dclaltoodud kohaselt<br \/>\nMLFQ algoritmi kirjelduste kohaselt t\u00e4idab ajakava ainult k\u00f5rgeima prioriteediga<br \/>\n\u00fclesandeid RR j\u00e4rgi, samas kui \u00fclesanded C, D j\u00e4\u00e4vad k\u00f5rvale.<br \/>\nIlmselt ei anna staatiline snapshot t\u00e4ielikku \u00fclevaadet MLFQ toimimisest.<br \/>\nOluline on m\u00f5ista, kuidas pilt aja jooksul muutub.<\/p>\n<h4>Katse 1: Kuidas muuta prioriteeti<\/h4>\n<p>Sel hetkel tuleb otsustada, kuidas MLFQ muudab \u00fclesande prioriteedi taset<br \/>\n(ja seega \u00fclesande positsiooni j\u00e4rjekorras) \u00fclesande eluts\u00fckli jooksul. Selle jaoks<br \/>\non vajalik meeles pidada t\u00f6\u00f6protsessi: teatud hulk<br \/>\ninteraktiivseid \u00fclesandeid l\u00fchikese t\u00f6\u00f6ajaga (ja seega tihti CPU vabastades)<br \/>\nja m\u00f5ned pikad \u00fclesanded, mis kasutavad CPU kogu oma t\u00f6\u00f6aja, samas<br \/>\nkui vastamise aeg sellistele \u00fclesannetele ei ole oluline. Seega saab teha esimese katse<br \/>\nrakendada MLFQ algoritmi j\u00e4rgmiste reeglitega:<\/p>\n<ul>\n<li> Reegel 3: Kui \u00fclesanne siseneb s\u00fcsteemi, asetatakse see k\u00f5rgeima prioriteediga j\u00e4rjekorda.<\/li>\n<li>Reegel 4a: Kui \u00fclesanne kasutab t\u00e4ielikult ette n\u00e4htud ajavahemikku, siis selle<\/li>\n<li>prioriteet langetatakse.<\/li>\n<li>Reegel 4b: Kui \u00fclesanne vabastab CPU enne oma ajavahemiku l\u00f5ppu, siis see<\/li>\n<li>Reegel 4b: Kui \u00dclesanne vabastab CPU enne oma ajaraami l\u00f5ppu, siis<\/li>\n<li>j\u00e4\u00e4b endiselt samaks prioriteediks.<\/li>\n<\/ul>\n<p><b>N\u00e4ide 1: \u00dcksik pikalt t\u00f6\u00f6tav \u00fclesanne<\/b><\/p>\n<p>Nagu n\u00e4ha sel n\u00e4itel, seatakse \u00fclesanne saabumisel k\u00f5rgeimale<br \/>\nprioriteedile. P\u00e4rast ajavahemikku 10 ms protsess langeb prioriteedis<br \/>\nplaneerija poolt. P\u00e4rast j\u00e4rgmist ajavahemikku langeb \u00fclesanne l\u00f5puks<br \/>\ns\u00fcsteemi madalaimale prioriteedile, kus see j\u00e4\u00e4bki.<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat osa. Osa 5: Planeerimine: Mitme taseme tagasisidej\u00e4rjekord (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/9b4ee6de03aa92d7957d50b4ffa73949.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p><b>N\u00e4ide 2: L\u00fchikese \u00fclesande saabumine<\/b><\/p>\n<p>N\u00fc\u00fcd vaatame n\u00e4idet, kuidas MLFQ p\u00fc\u00fcab l\u00e4heneda SJF-ile. Selles<br \/>\nn\u00e4ites on kaks \u00fclesannet: A, mis on pidevalt t\u00f6\u00f6tav pikalt \u00fclesanne, ja B,<br \/>\nmis on l\u00fchike interaktiivne \u00fclesanne. Eeldame,<br \/>\net A oli juba t\u00f6\u00f6tanud m\u00f5nda aega, kui \u00fclesanne B saabus.<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat osa. Osa 5: Planeerimine: Mitme taseme tagasisidej\u00e4rjekord (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/19c299b0519585fd1076a341a71f048b.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>Sellel graafikul on n\u00e4ha stsenaariumi tulemused. \u00dclesanne A, nagu iga \u00fclesanne,<br \/>\nmis kasutab CPU-d, oli k\u00f5ige madalamal. \u00dclesanne B saabub ajal T=100 ja<br \/>\npaigutatakse k\u00f5rgema prioriteediga j\u00e4rjekorda. Kuna selle t\u00f6\u00f6aeg on l\u00fchike,<br \/>\nv\u00f5tab see l\u00f5petamiseks aega enne, kui j\u00f5uab viimasesse j\u00e4rjekorda.<\/p>\n<p>Sellest n\u00e4itest j\u00e4reldub, et algoritmi peamine eesm\u00e4rk on: kuna algoritm ei<br \/>\nkui \u00fclesanne on pikk v\u00f5i l\u00fchike, siis eeldab ta esmajoones, et \u00fclesanne<br \/>\non l\u00fchike ja annab sellele k\u00f5rgeima prioriteedi. Kui see t\u00f5epoolest on l\u00fchike \u00fclesanne, siis<br \/>\nt\u00e4idetakse see kiiresti; vastasel juhul, kui see on pikk \u00fclesanne, liigub see aeglaselt<br \/>\nprioriteedis alla ja t\u00f5estab peagi, et tegemist on t\u00f5eliselt pika \u00fclesandega, mis ei<br \/>\nn\u00f5ua reageerimist.<\/p>\n<p><b>N\u00e4ide 3: Mis siis sisendi ja v\u00e4ljundi kohta?<\/b><\/p>\n<p>Vaatame n\u00fc\u00fcd n\u00e4idet sisendi ja v\u00e4ljundi kohta. Nagu on \u00f6eldud reeglis 4b,<br \/>\nkui protsess vabastab protsessori, ei kasuta ta t\u00e4ielikult selle protsessoriaega,<br \/>\nsiis j\u00e4\u00e4b ta endisele prioriteedile. Selle reegli m\u00f5te on \u00fcsna lihtne<br \/>\n\u2014 kui interaktiivne \u00fclesanne teeb palju sisendi-v\u00e4ljundi operatsioone, n\u00e4iteks ootab<br \/>\nkasutaja klahvivajutusi v\u00f5i hiireklikke, vabastab see protsessori<br \/>\nvarasemalt m\u00e4\u00e4ratud aknast. Me ei sooviks seda \u00fclesannet prioriteedis alandada,<br \/>\nseega j\u00e4\u00e4b see endisele tasemele.<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat osa. Osa 5: Planeerimine: Mitme taseme tagasisidej\u00e4rjekord (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/480d33a670fb62a639e5938dd59e30a1.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>See n\u00e4ide n\u00e4itab, kuidas algoritm selliste protsessidega t\u00f6\u00f6tab \u2013 interaktiivne \u00fclesanne B, mis vajab CPU-d ainult 1 ms enne t\u00e4itmist.<br \/>\nsisend-v\u00e4ljund protsessi ja pika A \u00fclesande, mis kasutab kogu oma aega CPU-d.<br \/>\nMLFQ hoiab protsessi B k\u00f5rgeima prioriteediga, kuna see j\u00e4tkab<br \/>\nCPU vabastamist. Kui B on interaktiivne \u00fclesanne, on algoritm siis saavutanud<br \/>\noma eesm\u00e4rgi k\u00e4ivitada interaktiivsed \u00fclesanded kiiresti.<\/p>\n<p><b>Probleemid praeguse MLFQ algoritmiga<\/b><\/p>\n<p>Eelmistes n\u00e4idetes oleme loonud MLFQ p\u00f5hiversiooni. Ja tundub, et see<br \/>\nt\u00e4idab oma t\u00f6\u00f6d h\u00e4sti ja \u00f5iglaselt, jagades protsessoriaega \u00f5iglaselt pika<br \/>\n\u00fclesande vahel ning v\u00f5imaldades l\u00fchikestel v\u00f5i sisend-v\u00e4ljundit intensiivselt<br \/>\nkasutavatel \u00fclesannetel kiiresti t\u00f6\u00f6tada. Kahjuks sisaldab selline l\u00e4henemine mitmeid<br \/>\nt\u00f5siseid probleeme.<br \/>\n<b>Esiteks<\/b>n\u00e4lja probleem: kui s\u00fcsteemis on rohkelt interaktiivseid<br \/>\n\u00fclesandeid, siis tarbivad need kogu protsessoriaega ja seega ei saa \u00fckski pikk<br \/>\n\u00fclesanne v\u00f5imalust t\u00e4ituda (nad n\u00e4lgivad).<\/p>\n<p><b>Teiseks<\/b>Nutikaid kasutajaid v\u00f5iks kirjutada oma programme nii, et<br \/>\npetta planeerijat. Petmine seisneb millegi sellise tegemises, et sundida<br \/>\nplaanija annab protsessile rohkem protsessoriaega. Algoritm, mis<br \/>\non eespool kirjeldatud, on sarnaste r\u00fcnnakute suhtes \u00fcsna haavatav: enne<br \/>\nselle ajavahemiku l\u00f5ppu on vaja sooritada sisendi- v\u00f5i v\u00e4ljundioperatsioon (millele iganes, pole t\u00e4htis millele)<br \/>\nja seel\u00e4bi vabastada CPU. Selline k\u00e4itumine v\u00f5imaldab j\u00e4\u00e4da samasse<br \/>\nj\u00e4rjekorda ja taas saada suuremat protsessoriteenuse osa. Kui seda teha<br \/>\nkorrektne (n\u00e4iteks t\u00e4ita 99% ajast enne CPU vabastamist),<br \/>\nv\u00f5ib selline \u00fclesanne lihtsalt monopoliseerida protsessori.<\/p>\n<p>L\u00f5puks v\u00f5ib programm aja jooksul muuta oma k\u00e4itumist. Need \u00fclesanded,<br \/>\nmis kasutasid CPU-d, v\u00f5ivad muutuda interaktiivseteks. Meie n\u00e4ites ei saa sellised<br \/>\n\u00fclesanded planeerijalt korralikku t\u00e4helepanu, kuna nad saaksid teisi<br \/>\n(algseid) interaktiivseid \u00fclesandeid.<\/p>\n<p><u>K\u00fcsimus saalist: milliseid r\u00fcnnakuid planeerija vastu oli v\u00f5imalik kaasaegses maailmas teha?<br \/>\n<\/u><\/p>\n<h4>Katse 2: Prioriteedi t\u00f5stmine<\/h4>\n<p>Proovime reegleid muuta ja vaatame, kas suudame v\u00e4ltida n\u00e4lgimisega seotud probleeme. Mida me saaksime teha, et tagada, et seotud<br \/>\nn\u00e4lgimisest. Mida saaksime teha, et tagada, et seotud<br \/>\nCPU \u00fclesanded saavad oma aega (isegi kui see ei ole kaua).<br \/>\nLihtsaks lahenduseks probleemile v\u00f5ib olla perioodiline<br \/>\nk\u00f5igi selliste \u00fclesannete s\u00fcsteemi prioriteedi t\u00f5stmine. On mitmeid viise<br \/>\nselle saavutamiseks, proovime n\u00e4itena rakendada midagi lihtsat: t\u00f5sta<br \/>\nk\u00f5ik \u00fclesanded k\u00f5rgeimasse prioriteeti, seega uus reegel:<\/p>\n<ul>\n<li><b>Reegel5<\/b>: Teatud perioodi m\u00f6\u00f6dumisel t\u00f5sta k\u00f5ik s\u00fcsteemi \u00fclesanded k\u00f5rgeimasse ootej\u00e4rjekorda.<\/li>\n<\/ul>\n<p>Meie uus reegel lahendab kahe probleemi korraga. Esiteks, protsessid<br \/>\nei j\u00e4\u00e4 kindlasti n\u00e4lga: \u00fclesanded, mis on k\u00f5rgeimas ootej\u00e4rjekorras, jagavad<br \/>\nprotsessoriaega RR-algoritmi alusel ja seega saavad k\u00f5ik protsessid<br \/>\nprotsessoriaega. Teiseks, kui m\u00f5ni protsess, mis varem kasutas<br \/>\nainult protsessorit, muutub interaktiivseks, siis j\u00e4\u00e4b see ootej\u00e4rjekorda k\u00f5rgeima<br \/>\nprioriteediga p\u00e4rast seda, kui on korra saanud t\u00f5stmise k\u00f5rgeimaks.<br \/>\nVaatame n\u00e4idet. Selles stsenaariumis vaatame \u00fchte protsessi, mis kasutab<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat osa. Osa 5: Planeerimine: Mitme taseme tagasisidej\u00e4rjekord (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/3b8d879ab4479622684b126ec5af6af3.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>CPU ja kaks interaktiivset, l\u00fchikest protsessi. Vasakul joonisel on kujutatud k\u00e4itumist ilma prioriteedi t\u00f5stmiseta, mist\u00f5ttu pikk \u00fclesanne hakkab s\u00fcsteemi saabudes kahe interaktiivse \u00fclesande t\u00f5ttu n\u00e4lgima. Paremal joonisel t\u00f5stetakse prioriteeti iga 50 ms j\u00e4rel, tagades, et k\u00f5ik protsessid saavad garanteeritud protsessori aega ja neid k\u00e4ivitatakse perioodiliselt. 50 ms on antud juhul n\u00e4itena, tegelikult on see number veidi suurem.<br \/>\nOn selge, et perioodilise t\u00f5stmise S lisamine toob kaasa<br \/>\nkahtlemata k\u00fcsimuse: milliseks v\u00e4\u00e4rtuseks see peaks olema seadistatud? \u00dcks mainekas<br \/>\ns\u00fcsteemitehnik John Ousterhout nimetas selliseid suurusi s\u00fcsteemides voo-doo<br \/>\nkonstantideks, kuna nende \u00f5igeks seadmiseks oli vajalik teatud m\u00e4\u00e4ral musta maagiat.<br \/>\nJa kahjuks on S-l selline iseloom. Kui seada v\u00e4\u00e4rtus liiga<br \/>\nsuurena, hakkavad pikad \u00fclesanded n\u00e4lgima. Kui seada liiga madalaks,<br \/>\nei saa interaktiivsed \u00fclesanded vajalikku protsessori aega.<\/p>\n<h4>Katse 3: Parim arvestus<\/h4>\n<p>N\u00fc\u00fcd on meil veel \u00fcks probleem, mida lahendada: kuidas mitte<br \/>\nlubada meie planeerijat petta? S\u00fc\u00fcdlased selle v\u00f5imaluse eest on<br \/>\nreeglid 4a, 4b, mis lubavad \u00fclesandel s\u00e4ilitada prioriteeti, vabastades protsessori<br \/>\nenne m\u00e4\u00e4ratud aja l\u00f5ppu. Kuidas sellega toime tulla?<br \/>\nLahendusena v\u00f5ib kiita parimat CPU ajahaldust iga MLFQ taseme korral.<br \/>\nSelle asemel, et unustada, kui palju aega programm protsessorit kasutas<br \/>\nm\u00fctsitud aja jooksul, tuleks seda arvesse v\u00f5tta ja s\u00e4ilitada. P\u00e4rast seda, kui<br \/>\nprotsess on kasutanud talle antud aega, tuleks selle prioriteeti madaldada j\u00e4rgmisele<br \/>\ntasemele. N\u00fc\u00fcd ei ole oluline, kuidas protsess oma aega kasutab \u2014 kas<br \/>\npidevalt protsessoril arvutades v\u00f5i mitmete kutsetega. Seega,<br \/>\ntuleb reegel 4 \u00fcmber kirjutada j\u00e4rgmise kujul:<\/p>\n<ul>\n<li><b>Rule4<\/b>: P\u00e4rast seda, kui \u00fclesanne on kasutanud talle m\u00e4\u00e4ratud aega praeguses j\u00e4rjekorras (olgu see kui mitu korda ta CPU-d vabastas) selle \u00fclesande prioriteet v\u00e4heneb (ta liigub j\u00e4rjekorras allapoole).<\/li>\n<\/ul>\n<p>Vaatame n\u00e4idet:<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat osa. Osa 5: Planeerimine: Mitme taseme tagasisidej\u00e4rjekord (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/18c53e62b9b342d14a23995bd422ef5e.png\" style=\"display:block;margin: 0 auto;\">\u00bb<\/p>\n<p>Kujutisel on n\u00e4idatud, mis juhtub, kui proovida petta ajakava, nagu<br \/>\noleks eelnevate reeglite 4a ja 4b puhul, tulemuseks oleks vasakul. Uue<br \/>\nreegliga \u2014 tulemus on paremal. Enne kaitset v\u00f5is iga protsess kutsuda I\/O \u00fclesandeid kuni l\u00f5petamiseni ja<br \/>\nseega domineerida CPU-l, p\u00e4rast kaitse sissel\u00fclitamist, s\u00f5ltumata I\/O k\u00e4itumisest,<br \/>\nta j\u00e4\u00e4b ikka sabasse ja seega ei saa ebaausalt<br \/>\nressursse CPU-lt haarata.<\/p>\n<h4>Parandame MLFQ ja teised probleemid<\/h4>\n<p>\u00dclaltoodud t\u00e4iustustega tekivad uued probleemid: \u00fcks peamisi<br \/>\nk\u00fcsimusi on, kuidas sarnast ajakava parameetrites m\u00e4\u00e4rata? St. kui palju peaks olema<br \/>\nj\u00e4rjekordi? Milline peaks olema programmi t\u00f6\u00f6 akna suurus j\u00e4rjekorras? Kui<br \/>\ntihti tuleks programmi prioriteeti t\u00f5sta, et v\u00e4ltida n\u00e4lgimist ja<br \/>\narvesse v\u00f5tta programmi k\u00e4itumise muutumist? Neile k\u00fcsimustele ei ole lihtsat<br \/>\nvastust ja ainult koormust eksperimentide ning j\u00e4rgnev konfigureerimine<br \/>\najakava v\u00f5ib viia m\u00f5ningasse rahuldavasse tasakaalu.<\/p>\n<p>N\u00e4iteks v\u00f5imaldavad enamik MLFQ rakendusi m\u00e4\u00e4rata erinevaid<br \/>\najava ajava intervallid erinevatele j\u00e4rjekordadele. K\u00f5rge prioriteediga j\u00e4rjekordadele m\u00e4\u00e4ratakse tavaliselt<br \/>\nl\u00fchi intervallid. Need j\u00e4rjekorrad koosnevad interaktiivsest \u00fclesandest,<br \/>\nmille vahetus on \u00fcsna tundlik ja peaks v\u00f5tma 10 v\u00f5i v\u00e4hem<br \/>\nms. Vastupidiselt madala prioriteediga j\u00e4rjekorrad koosnevad pikkadest \u00fclesannetest, mis kasutavad<br \/>\nCPU-d. Ja sel juhul sobivad pikad ajaintervallid v\u00e4ga h\u00e4sti (100 ms).<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat osa. Osa 5: Planeerimine: Mitme taseme tagasisidej\u00e4rjekord (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/4eb6c6669034adeb1615c29454fbb1dc.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>Selles n\u00e4ites on 2 \u00fclesannet, mis t\u00f6\u00f6tasid k\u00f5rge prioriteedi j\u00e4rjekorras 20<br \/>\nms, jagatud 10 ms akendeks. 40 ms keskmises j\u00e4rjekorras (aken 20 ms) ja madala prioriteediga<br \/>\nj\u00e4rjekorras ajaken hakkas olema 40 ms, kus \u00fclesanded l\u00f5petasid oma t\u00f6\u00f6.<\/p>\n<p>MLFQ rakendamine Solaris OS-is \u2014 ajaplaneerijate klassid, mis jagunevad ajaliselt.<br \/>\nAjaplaneerija pakub komplekti tabeleid, mis m\u00e4\u00e4ravad t\u00e4pselt, kuidas peaks<br \/>\nprotsessi prioriteet muutuma tema elu jooksul, kui suur peaks olema akna<br \/>\neraldatud suurus ja kui sageli tuleb t\u00f5sta \u00fclesande prioriteete. S\u00fcsteemi<br \/>\nadministraator v\u00f5ib selle tabeliga suhelda ja sundida ajaplaneeritavat k\u00e4ituma<br \/>\nteisiti. Vaikimisi on selles tabelis 60 j\u00e4rjekorda, mis aeglaselt suurenevad<br \/>\nakna suurusest 20 ms (k\u00f5rge prioriteet) kuni mitme sada ms (madalam prioriteet), ja<br \/>\nsamuti k\u00f5igi \u00fclesannete t\u00f5ukamine kord sekundis.<\/p>\n<p>Teised MLFQ ajakavajad kasutavad ei tabeleid ega konkreetseid<br \/>\nreegleid, nagu selles loengus kirjeldatud, vastupidi, nad arvutavad prioriteedid, kasutades<br \/>\nmatemaatilisi valemeid. N\u00e4iteks FreeBSD ajakavaja kasutab valemit<br \/>\npraeguse \u00fclesande prioriteedi arvutamiseks, tuginedes sellele, kui palju protsessor<br \/>\non CPU-d kasutanud. Lisaks, CPU kasutamine aja jooksul laguneb ja seega<br \/>\nprioriteedi t\u00f5stmine toimub m\u00f5nev\u00f5rra erinevalt, kui eespool kirjeldatud. Need on nii<br \/>\nnn decay algoritmid. Alates versioonist 7.1 kasutatakse FreeBSD-s ULE ajakavajat.<\/p>\n<p>L\u00f5puks on paljudel ajakavajatel teised omadused. N\u00e4iteks m\u00f5ned<br \/>\najakavajad reserveerivad k\u00f5rgemad tasemed operatsioonis\u00fcsteemi jaoks ja seega<br \/>\nei saa \u00fckski kasutaja protsess s\u00fcsteemis k\u00f5rgeimat prioriteeti.<br \/>\nM\u00f5ned s\u00fcsteemid v\u00f5imaldavad anda soovitusi, et aidata<br \/>\nkorraldada \u00fclesannete prioriteete. N\u00e4iteks k\u00e4su abil <b>nice<\/b><br \/>\nsaab suurendada v\u00f5i v\u00e4hendada \u00fclesande prioriteeti ja seega t\u00f5sta v\u00f5i<br \/>\nlangetada programmi v\u00f5imalusi protsessoriaja saamiseks.<\/p>\n<h3>MLFQ: Kokkuv\u00f5te<\/h3>\n<p>Oleme kirjeldanud planeerimismeetodit, mida nimetatakse MLFQ. Selle nimi<br \/>\npeitub t\u00f6\u00f6p\u00f5him\u00f5ttes \u2014 tal on mitu j\u00e4rjekorda ja ta kasutab tagasisidet<br \/>\n\u00fclesande prioriteedi m\u00e4\u00e4ramiseks.<br \/>\nL\u00f5plik reeglite kuju on j\u00e4rgmine:<\/p>\n<ul>\n<li><b>Reegel1<\/b>: Kui prioriteet(A) &gt; Prioriteet(B), k\u00e4ivitatakse \u00fclesanne A (B ei k\u00e4ivitata)<\/li>\n<li><b>Reegel2<\/b>: Kui prioriteet(A) = Prioriteet(B), A ja B k\u00e4ivitatakse RR kasutades<\/li>\n<li><b>Reegel3<\/b>: Kui \u00fclesanne j\u00f5uab s\u00fcsteemi, asetatakse see k\u00f5rgeima prioriteediga j\u00e4rjekorda.<\/li>\n<li><b>Rule4<\/b>: P\u00e4rast seda, kui \u00fclesanne on kasutanud talle m\u00e4\u00e4ratud aega praeguses j\u00e4rjekorras (olgu see kui mitu korda ta CPU-d vabastas) selle \u00fclesande prioriteet v\u00e4heneb (ta liigub j\u00e4rjekorras allapoole).<\/li>\n<li><b>Reegel5<\/b>: Teatud perioodi m\u00f6\u00f6dumisel t\u00f5sta k\u00f5ik s\u00fcsteemi \u00fclesanded k\u00f5rgeimasse ootej\u00e4rjekorda.<\/li>\n<\/ul>\n<p>MLFQ on huvitav j\u00e4rgmise p\u00f5hjuse t\u00f5ttu \u2014 selle asemel, et n\u00f5uda eelnevat teadmiste omamist<br \/>\n\u00fclesande loomusest, \u00f5pib algoritm \u00fclesande varasemat k\u00e4itumist ja m\u00e4\u00e4rab<br \/>\nprioriteedid vastavalt. Nii p\u00fc\u00fcab ta istuda kahes paadis \u2014 saavutada t\u00f5husust v\u00e4ikeste \u00fclesannete puhul (SJF, STCF) ja \u00f5iglaselt k\u00e4ivitada pikaid,<br \/>\nprotsessorit koormavaid \u00fclesandeid. Seet\u00f5ttu on paljud s\u00fcsteemid, sealhulgas BSD ja nende tuletised,<br \/>\nSolaris, Windows ja Mac kasutavad ajakava koostamiseks mingit t\u00fc\u00fcpi algoritmi.<br \/>\nMLFQ kui p\u00f5hiline alus.<\/p>\n<h4>Lisamaterjalid:<\/h4>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/manpages.debian.org\/stretch\/manpages\/sched.7.en.html\">manpages.debian.org\/stretch\/manpages\/sched.7.et.html<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Scheduling_\">et.wikipedia.org\/wiki\/Scheduling_<\/a><\/noindex>(IT)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/pages.lip6.fr\/Julia.Lawall\/atc18-bouron.pdf\">pages.lip6.fr\/Julia.Lawall\/atc18-bouron.pdf<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.usenix.org\/legacy\/event\/bsdcon03\/tech\/full_papers\/roberson\/roberson.pdf\">www.usenix.org\/legacy\/event\/bsdcon03\/tech\/full_papers\/roberson\/roberson.pdf<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/chebykin.org\/freebsd-process-scheduling\">chebykin.org\/freebsd-process-scheduling<\/a><\/noindex><\/li>\n<\/ol>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/450116\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24514,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32730","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-5-planirovanie-multi-level-feedback-queue-perevod\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 5: \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: Multi-Level Feedback Queue (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-5-planirovanie-multi-level-feedback-queue-perevod\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:48:36+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2021-02-08T09:40:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 5: Planeerimine: Multi-Level Feedback Queue (t\u00f5lge) | ProHoster","description":"Sissejuhatus operatsioonis\u00fcsteemidesse Tere, Habr! Tahan tutvustada teile artiklite seeriat, mis on t\u00f5lgitud minu arvates huvitavast kirjandusest \u2014 OSTEP. K\u00e4esolevas materjalis k\u00e4sitletakse s\u00fcvitsi Unix-taoliste operatsioonis\u00fcsteemide toimimist, sealhulgas protsesside haldamist, erinevaid planeerijaid, m\u00e4lu ja muid sarnaseid komponente, mis moodustavad kaasaegse operatsioonis\u00fcsteemi. Originaale k\u00f5igist materjalidest saate vaadata siit.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-5-planirovanie-multi-level-feedback-queue-perevod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 5: \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435: Multi-Level Feedback Queue (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-5-planirovanie-multi-level-feedback-queue-perevod","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:48:36+00:00","article:modified_time":"2021-02-08T09:40:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32730","title":null,"description":"","keywords":"","keyphrases":null,"primary_term":null,"canonical_url":"","og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 12:18:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:53:25","updated":"2026-01-21 12:18:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32730","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=32730"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32730\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/24514"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=32730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=32730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=32730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}