{"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 t\u00fckki. Osa 5: Planeerimine: Mitmeasti tagasiside j\u00e4rjekord (t\u00f5lge)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Sissejuhatus operatsioonis\u00fcsteemidesse<\/h1>\n<p>Tere, Habr! Soovin esitleda teile huvitavate artiklite t\u00f5lgitud seeriat \u2014 OSTEP. K\u00e4esolevas materjalis uuritakse s\u00fcgavalt unix-laadsete operatsioonis\u00fcsteemide toimimist, nimelt \u2014 protsesside, erinevate planeerijate, m\u00e4lu ja teiste sarnaste komponentide t\u00f6\u00f6tamist, mis koosnevad kaasaegsest operatsioonis\u00fcsteemist. K\u00f5iki materjale saate n\u00e4ha siin <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">siit<\/a><\/noindex>. Palun arvestage, et t\u00f5lge on tehtud mitteprofessionaalselt (piisavalt vaba), kuid loodan, et \u00fcldine m\u00f5te on s\u00e4ilinud.<\/p>\n<p>K\u00e4esoleva aine laborit\u00f6id saab leida 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: Sissejuhatus ajastamisse<\/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>Ja v\u00f5ite ka k\u00fclastada minu kanalit <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">Telegramis<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Planeerimine: Multi-Level Feedback Queue<\/h2>\n<p>Selles loengus r\u00e4\u00e4gime \u00fchest tuntud l\u00e4henemisviisist<br \/>\nplaneerimisele, mida nimetatakse <b>Multi-Level Feedback Queue<\/b> (MLFQ). Esiteks kirjeldas MLFQ planeerijat 1962. aastal Fernando J. Corbat\u00f3 s\u00fcsteemis, mida nimetatakse<br \/>\nCompatible Time-Sharing System (CTSS). Need t\u00f6\u00f6d (sealhulgas hilisemad t\u00f6\u00f6d<br \/>\nMultics) esitati hiljem Turingi auhinnale. Planeerijat on<br \/>\nhiljem t\u00e4iustatud ja see on omandanud kuju, mida v\u00f5ib leida juba<br \/>\nm\u00f5nedest kaasaegsetest s\u00fcsteemidest.<\/p>\n<p>MLFQ algoritm p\u00fc\u00fcab lahendada kahte p\u00f5hilist, omavahel seotud probleemi.<br \/>\n<b>Esiteks<\/b>, p\u00fc\u00fcab see optimeerida \u00fcmberk\u00fcljendusaega, mis nagu me vaatasime eelmises loengus, optimeeritakse k\u00f5ige<br \/>\nl\u00fchikeste \u00fclesannete esmakordse paremuse meetodi kaudu. Siiski, ops\u00fcsteem ei tea, kui kaua \u00fcks v\u00f5i teine protsess kestab, ja see on<br \/>\nvajalik teave SJF, STCF algoritmide toimimiseks. <b>Teiseks<\/b>, MLFQ p\u00fc\u00fcab<br \/>\nteha s\u00fcsteemi kasutajate jaoks vastutulelikuks (n\u00e4iteks neile, kes istuvad ja<br \/>\nvaatavad ekraani, oodates \u00fclesande l\u00f5ppemist) ja seega minimeerida<br \/>\nreaktsiooniaega. Kahjuks v\u00e4hendavad sarnased algoritmid nagu RR reaktsiooniaega, kuid m\u00f5jutavad v\u00e4ga<br \/>\nhalvasti \u00fcmberk\u00fcljendusaega. Seega tekib meil probleem: Kuidas projekteerida<br \/>\nplaneerijat, mis vastaks meie n\u00f5udmistele, teadmata samas midagi<br \/>\nprotsessi olemusest, \u00fcldiselt? Kuidas saab planeerija \u00f5ppida \u00fclesannete omadusi,<br \/>\nmida see k\u00e4ivitab, ja v\u00f5tta seega paremaid planeerimisotsuseid?<\/p>\n<p><u>Probleemi tuum: Kuidas planeerida \u00fclesannete seadmist ilma ideaalsete teadmisteta?<br \/>\nKuidas arendada planeerijat, mis samal ajal minimeerib reaktsiooniaega<br \/>\ninteraktiivsetele \u00fclesannetele ja samas minimeerib \u00fcmberk\u00fcljendusaega ilma eelneva<br \/>\nteadmise \u00fclesande t\u00e4itmise ajast?<\/u><\/p>\n<p>M\u00e4rkus: \u00f5pime eelnevate s\u00fcndmuste p\u00f5hjal<\/p>\n<p>MLFQ j\u00e4rjekord on suurep\u00e4rane n\u00e4ide s\u00fcsteemist, mis \u00f5pib<br \/>\nminevikus\u00fcndmustest, et ennustada tulevikku. Taolised l\u00e4henemisviisid esinevad sageli<br \/>\nops\u00fcsteemides (ja paljude teiste informaatika harudes, sealhulgas ennustuse harudes riistvara ja vahem\u00e4lu algoritmides). Sellised l\u00e4henemisviisid<br \/>\ntoimivad, kui \u00fclesannetel on k\u00e4itumise faasid ja seega on need ettearvatavad.<br \/>\nkui \u00fclesannetel on k\u00e4itumuslikud faasid, on need seega ettearvatavad.<br \/>\nKuid sellise tehnika kasutamisel tuleb olla ettevaatlik, sest ennustused v\u00f5ivad kergesti osutuda valeeks.<br \/>\nsee v\u00f5ib viia s\u00fcsteemi halvimate otsusteni kui need,<br \/>\nmis oleksid t\u00e4ieliku teadmise puudumisel.<\/p>\n<h3>MLFQ: P\u00f5hireeglid<\/h3>\n<p>Vaadakem MLFQ algoritmi p\u00f5hireegleid. Kuigi selle algoritmi<br \/>\nrealiseerimisi on mitu, on p\u00f5hisuunad sarnased.<br \/>\nAntud realiseerimisel, mida me k\u00e4sitleme, on MLFQ-l mitu<br \/>\nerinevat j\u00e4rjekorda, millest igal on erinev prioriteet. Igal hetkel<br \/>\non t\u00e4itmisele valmis \u00fclesanne \u00fches j\u00e4rjekorras. MLFQ kasutab prioriteete,<br \/>\net otsustada, millist \u00fclesannet t\u00e4itma asuda, s.t. \u00fclesanne k\u00f5rgema<br \/>\nprioriteediga (\u00fclesanne k\u00f5rgema prioriteediga j\u00e4rjekorrast) k\u00e4ivitatakse esimesena.<br \/>\nIlmselgelt v\u00f5ib konkreetses j\u00e4rjekorras olla rohkem kui \u00fcks \u00fclesanne, seega<br \/>\non neil sama prioriteet. Sel juhul kasutatakse<br \/>\nRR mehanismi nende \u00fclesannete t\u00e4itmise plaanimiseks.<br \/>\nNii j\u00f5uame MLFQ jaoks kahele p\u00f5hireeglile:<br \/>\nReegel 1: Kui Prioriteet(A) &gt; Prioriteet(B), k\u00e4ivitatakse \u00fclesanne A (B ei saa).<\/p>\n<ul>\n<li> Reegel 2: Kui Prioriteet(A) = Prioriteet(B), k\u00e4ivitatakse A ja B RR kaudu.<\/li>\n<li> Eeltoodust tulenevalt on MLFQ planeerimise v\u00f5tmeelemendid<\/li>\n<\/ul>\n<p>prioriteedid. Selle asemel, et m\u00e4\u00e4rata igale<br \/>\n\u00fclesandele fikseeritud prioriteet, muudab MLFQ selle prioriteeti vastavalt k\u00e4itumisele.<br \/>\nN\u00e4iteks kui \u00fclesanne pidevalt teeb CPU-le \u00fclesandeid, ootades klaviatuuri sisestust,<br \/>\nhoiab MLFQ protsessi prioriteedi k\u00f5rgel, sest just nii<br \/>\npeaks t\u00f6\u00f6tama interaktiivne protsess. Kui aga vastupidi, \u00fclesanne kasutab pidevalt ja<br \/>\nintensiivselt CPU-d pika aja jooksul, alandab MLFQ selle<br \/>\nprioriteeti. Seega \u00f5pib MLFQ protsesside k\u00e4itumist nende t\u00f6\u00f6 hetkel<br \/>\nja kohandab k\u00e4itumist.<br \/>\nJoonistame n\u00e4ite, kuidas v\u00f5iksid j\u00e4rjekorrad n\u00e4ha v\u00e4lja teatud hetkel<br \/>\najast ja selle kohaselt v\u00f5iks see v\u00e4lja n\u00e4ha midagi sellist:<br \/>\nAntud skeemis on 2 protsessi A ja B k\u00f5rgeima prioriteediga j\u00e4rjekorras. Protsess<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat t\u00fckki. Osa 5: Planeerimine: Mitmeasti tagasiside j\u00e4rjekord (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/3598e9ca43a56049625bdcf3074de472.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>C on kuskil keskel, ja protsess D on j\u00e4rjekorra l\u00f5pus. Nagu eelnevalt kirjeldatud<br \/>\nMLFQ algoritmi kirjeldustes, t\u00e4idab planeerija \u00fclesandeid ainult k\u00f5rgeima prioriteediga.<br \/>\nMLFQ algoritmi kirjeldustes t\u00e4idab planeerija \u00fclesandeid ainult k\u00f5rgeima prioriteediga.<br \/>\nprioriteed vastavalt RR, samas kui \u00fclesanded C, D j\u00e4\u00e4vad k\u00f5rvale.<br \/>\nMuidugi ei anna staatiline snapshot t\u00e4ielikku \u00fclevaadet, kuidas MLFQ t\u00f6\u00f6tab.<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 prioriteedi taset muudab<br \/>\n\u00fclesannete (ja seega ka \u00fclesande positsiooni j\u00e4rjekorras) elu jooksul. Selleks<br \/>\non oluline meeles pidada t\u00f6\u00f6voogu: teatud arv<br \/>\ninteraktiivseid \u00fclesandeid l\u00fchikese t\u00f6\u00f6ajaga (ja seega sagedaste CPU vabastamistega)<br \/>\nja m\u00f5ned pikad \u00fclesanded, millel on t\u00e4ielik CPU kasutus kogu oma t\u00f6\u00f6aja, samas<br \/>\nkui reageerimisaeg nende jaoks ei ole oluline. Nii et saame teha esimese katse<br \/>\nrakendada MLFQ algoritmi j\u00e4rgmiste reeglitega:<\/p>\n<ul>\n<li> Rule3: Kui \u00fclesanne sisene s\u00fcsteemi, paigutatakse see k\u00f5rgeima<\/li>\n<li>prioriteedi j\u00e4rjekorda.<\/li>\n<li>Rule4a: Kui \u00fclesanne kasutab t\u00e4ielikult ette n\u00e4htud ajavahemiku, siis selle<\/li>\n<li>prioriteet v\u00e4heneb.<\/li>\n<li>Rule4b: Kui \u00fclesanne vabastab CPU enne oma ajavahemiku l\u00f5ppemist, j\u00e4\u00e4b see<\/li>\n<li>enda eelmisele prioriteedile.<\/li>\n<\/ul>\n<p><b>N\u00e4ide 1: \u00dcks pikaajaline \u00fclesanne<\/b><\/p>\n<p>Kuna n\u00e4ha on, et sel juhul paigutatakse \u00fclesanne saabudes k\u00f5rgeima<br \/>\nprioriteediga. P\u00e4rast 10 ms ajavahemikku alandatakse selle prioriteeti<br \/>\nplaneerija poolt. P\u00e4rast j\u00e4rgmist ajavahemikku alandatakse \u00fclesanne l\u00f5puks<br \/>\ns\u00fcsteemi madalaimale prioriteedile, kus ta ka j\u00e4\u00e4b.<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat t\u00fckki. Osa 5: Planeerimine: Mitmeasti tagasiside j\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 kaasamine<\/b><\/p>\n<p>N\u00fc\u00fcd vaatame n\u00e4idet sellest, kuidas MLFQ p\u00fc\u00fcab l\u00e4heneda SJF-ile. Selles<br \/>\nn\u00e4ites on kaks \u00fclesannet: A, mis on pikaajaline \u00fclesanne, mis pidevalt<br \/>\nkasutab CPU-d, ja B, mis on l\u00fchike interaktiivne \u00fclesanne. Oletame,<br \/>\net A on juba t\u00f6\u00f6tanud m\u00f5nda aega, kui \u00fclesanne B saabus.<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat t\u00fckki. Osa 5: Planeerimine: Mitmeasti tagasiside j\u00e4rjekord (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/19c299b0519585fd1076a341a71f048b.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>Selles graafikus on n\u00e4ha olukorra tulemusi. \u00dclesanne A, nagu iga \u00fclesanne,<br \/>\nmillel on CPU kasutus, on k\u00f5ige madalamal. \u00dclesanne B saabub hetkel T=100 ja<br \/>\npaigutatakse k\u00f5rgeima prioriteediga j\u00e4rjekorda. Kuna selle t\u00f6\u00f6aeg on l\u00fchike, siis<br \/>\nl\u00f5petab ta enne, kui j\u00f5uab viimasesse j\u00e4rjekorda.<\/p>\n<p>Sellest n\u00e4itest tuleneb peamine eesm\u00e4rk algoritmi: kuna algoritm ei<br \/>\ntea, kas \u00fclesanne on pikk v\u00f5i l\u00fchike, eeldab ta esialgu, et \u00fclesanne<br \/>\nl\u00fchike ja annab sellele k\u00f5rgeima prioriteedi. Kui see on t\u00f5epoolest l\u00fchike \u00fclesanne, siis<br \/>\nt\u00e4idetakse see kiiresti, vastasel juhul, kui see on pikk \u00fclesanne, siis see liikuda aeglaselt<br \/>\nmadalamale prioriteedile ja t\u00f5estab peagi, et see on t\u00f5eliselt pikaajaline \u00fclesanne, mis ei<br \/>\nn\u00f5ua vastust.<\/p>\n<p><b>N\u00e4ide 3: Mis on sisendi ja v\u00e4ljundi kohta?<\/b><\/p>\n<p>Vaadake n\u00fc\u00fcd n\u00e4idet sisendi ja v\u00e4ljundi kohta. Nagu \u00f6eldi reeglites 4b,<br \/>\nkui protsess vabastab protsessori, kasutamata t\u00e4ielikult selle protsessoriaega,<br \/>\nsiis j\u00e4\u00e4b see endisele prioriteeditasemele. Selle reegli eesm\u00e4rk on \u00fcsna lihtne<br \/>\n\u2014 kui interaktiivne \u00fclesanne tegeleb paljude sisendi ja v\u00e4ljundi operatsioonidega, n\u00e4iteks ootab<br \/>\nkasutajalt klahvivajutust v\u00f5i hiirekl\u00f5psu, vabastab see protsessori<br \/>\nenne etten\u00e4htud akna l\u00f5ppu. Me ei soovi seda \u00fclesannet prioriteedi poolest langetada,<br \/>\nseega j\u00e4\u00e4b see endisele tasemele.<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat t\u00fckki. Osa 5: Planeerimine: Mitmeasti tagasiside j\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 \u2014 interaktiivne \u00fclesanne B, mis vajab CPU-d ainult 1 ms enne<br \/>\nsisendi ja v\u00e4ljundi protsessi ning pikk \u00fclesanne A, mis kasutab kogu oma aega CPU-d.<br \/>\nMLFQ hoiab \u00fclesande B k\u00f5rgeimal prioriteedil, kuna see vabastab pidevalt<br \/>\nCPU-d. Kui B on interaktiivne \u00fclesanne, saavutab algoritm sel juhul<br \/>\noma eesm\u00e4rgi k\u00e4ivitada interaktiivsed \u00fclesanded kiiresti.<\/p>\n<p><b>Praeguste MLFQ algoritmi probleemid<\/b><\/p>\n<p>Eelmistes n\u00e4idetes kirjutasime v\u00e4lja MLFQ p\u00f5hilise versiooni. Ja tundub, et see<br \/>\nt\u00e4idab oma t\u00f6\u00f6d h\u00e4sti ja \u00f5iglaselt, jaotades protsessor aega \u00f5iglaselt<br \/>\npikemate \u00fclesannete vahel ja lubades l\u00fchemate \u00fclesannete v\u00f5i sisendi-v\u00e4ljundiintensiivsete<br \/>\n\u00fclesannete t\u00f6\u00f6tada kiiresti. Kahjuks sisaldab see l\u00e4henemine mitmeid<br \/>\nt\u00f5siseid probleeme.<br \/>\n<b>Esiteks<\/b>, n\u00e4lja probleem: kui s\u00fcsteemis on palju interaktiivseid<br \/>\n\u00fclesandeid, siis nad tarbivad kogu protsessori aega ja seega ei saa \u00fckski pikk<br \/>\n\u00fclesanne kunagi t\u00f6\u00f6tama (nad n\u00e4lgivad).<\/p>\n<p><b>Teiseks<\/b>, nutikad kasutajad v\u00f5iksid kirjutada oma programme nii, et<br \/>\npetavad ajakava. Pettus seisneb selles, et teha midagi sellist, et sundida<br \/>\najakaavat andma protsessile rohkem protsessor aega. Algselt, mis<br \/>\n\u00fcle kirjeldatud on t\u00e4iesti haavatav sarnaste r\u00fcnnakute suhtes: enne aja akna praktiliselt l\u00f5ppemist<br \/>\ntuleb teostada sisse-\/v\u00e4ljundoperatsioon (mille tahes failiga, pole t\u00e4htis, millega)<br \/>\nja seel\u00e4bi vabastada CPU. Selline k\u00e4itumine v\u00f5imaldab j\u00e4\u00e4da samasse<br \/>\nj\u00e4rjekorda ja taas saada suuremat protsessoriaega. Kui seda teha<br \/>\n\u00f5igesti (n\u00e4iteks t\u00f6\u00f6tada 99% ajast enne CPU vabastamist)<br \/>\nv\u00f5ib selline \u00fclesanne lihtsalt protsessori monopoliseerida.<\/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 sellised<br \/>\n\u00fclesanded ei saa planeerijalt piisavat t\u00e4helepanu, nagu nad saaksid teised<br \/>\n(algse) interaktiivsed \u00fclesanded.<\/p>\n<p><u>K\u00fcsimus publikule: milliseid r\u00fcnnakuid planeerijale oleks saanud kaasa teha t\u00e4nap\u00e4eva maailmas?<br \/>\n<\/u><\/p>\n<h4>Katse 2: Prioriteedi t\u00f5stmine<\/h4>\n<p>Proovime reegleid muuta ja vaatame, kas saame n\u00e4lgimisprobleemidest k\u00f5rvale hiilida. Mida me saaksime teha, et tagada, et seotud<br \/>\nCPU \u00fclesanded saavad oma aega (isegi kui mitte kaua).<br \/>\nLihtsana lahendusena v\u00f5ib soovitada aeg-ajalt<br \/>\nk\u00f5igi selliste \u00fclesannete prioriteedi t\u00f5stmist s\u00fcsteemis. On mitmeid viise<br \/>\nselle saavutamiseks, proovime n\u00e4itena midagi lihtsat: t\u00f5sta<br \/>\nkorraga k\u00f5ik \u00fclesanded k\u00f5rgeimale prioriteedile, sealt uus reegel:<br \/>\nReegel5<\/p>\n<ul>\n<li><b>: P\u00e4rast teatud perioodi S t\u00f5sta k\u00f5ik \u00fclesanded s\u00fcsteemis k\u00f5rgeimasse j\u00e4rjekorda.<\/b>Meie uus reegel lahendab kaks probleemid korraga. Esiteks, protsessid<\/li>\n<\/ul>\n<p>on garanteeritud, et nad ei n\u00e4ljuta: k\u00f5rgeima j\u00e4rjekorras olevad \u00fclesanded jagavad<br \/>\nprotsessoriaega RR algoritmi kohaselt, ja seega saavad k\u00f5ik protsessid<br \/>\nprotsessoriaega. Teiseks, kui m\u00f5ni protsess, mis varem kasutas<br \/>\nainult protsessorit, muutub interaktiivseks, j\u00e4\u00e4b see j\u00e4rjekorda k\u00f5rgeima<br \/>\nprioriteediga p\u00e4rast seda, kui see on kord saanud prioriteedi t\u00f5stetud k\u00f5rgeimale.<br \/>\nVaadakem n\u00e4idet. Selles stsenaariumis vaatleme \u00fchte protsessi, mis kasutab<br \/>\nVaadates n\u00e4idet. Selles stsenaariumis vaatame \u00fchte protsessi, mis kasutab<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat t\u00fckki. Osa 5: Planeerimine: Mitmeasti tagasiside j\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 pildil on kujutatud k\u00e4itumist ilma prioriteedi t\u00f5stmiseta, mist\u00f5ttu pikk \u00fclesanne hakkab n\u00e4lgima p\u00e4rast kahe interaktiivse \u00fclesande saabumist s\u00fcsteemi. Pildil paremal t\u00f5stetakse prioriteeti iga 50 ms j\u00e4rel, mist\u00f5ttu k\u00f5ik protsessid saavad tagatud protsessoriaega ja neid k\u00e4ivitatakse perioodiliselt. 50 ms on antud juhul n\u00e4itena, tegelikult on see number m\u00f5nev\u00f5rra suurem.<br \/>\nOn ilmne, et perioodilise t\u00f5stmise S aja lisamine toob kaasa<br \/>\nloogilise k\u00fcsimuse: milline v\u00e4\u00e4rtus peaks olema seatud? \u00dcks tunnustatud<br \/>\ns\u00fcsteeminseneridest John Ousterhout nimetas selliseid v\u00e4\u00e4rtusi s\u00fcsteemides voo-doo<br \/>\nkonstantideks, kuna nad n\u00f5udsid omamoodi musta maagia \u00f5iget<br \/>\nseadistamist. Ja kahjuks on S-l sarnane l\u00f5hn. Kui seada v\u00e4\u00e4rtus liiga<br \/>\nsuureks \u2014 pikad \u00fclesanded hakkavad n\u00e4lgima. Ja kui seada liiga madal v\u00e4\u00e4rtus,<br \/>\ninteraktiivsed \u00fclesanded ei saa vajalikku protsessoriaega.<\/p>\n<h4>Katse 3: Parim arvestus<\/h4>\n<p>N\u00fc\u00fcd on meil veel \u00fcks probleem, mida tuleb lahendada: kuidas mitte<br \/>\nlubada meie ajakava petta? S\u00fc\u00fcdlasteks on<br \/>\nreeglid 4a, 4b, mis v\u00f5imaldavad \u00fclesandel s\u00e4ilitada prioriteeti, vabastades protsessori<br \/>\nenne m\u00e4\u00e4ratud aja l\u00f5ppemist. Kuidas selle probleemiga toime tulla?<br \/>\nLahenduseks v\u00f5ib olla parim CPU aja arvestus igal<br \/>\nMLFQ tasemel. Selle asemel, et unustada aega, mida programm kasutas<br \/>\nprotsessor sealt antud ajavahemikul, tuleks arvestada ja salvestada see. P\u00e4rast seda, kui<br \/>\nprotsess on kulutanud oma m\u00e4\u00e4ratud aja, tuleks see alandada j\u00e4rgmisele<br \/>\nprioriteeditasemele. N\u00fc\u00fcd ei ole oluline, kuidas protsess oma aega kasutab \u2014 kas<br \/>\np\u00fcsivalt protsessoril arvutades v\u00f5i kui hulk \u00fcleskutseid. Seega,<br \/>\ntuleb reegel 4 kirjutada j\u00e4rgmisesse vormi:<\/p>\n<ul>\n<li><b>Rule4<\/b>: P\u00e4rast seda, kui \u00fclesanne on kulutanud talle m\u00e4\u00e4ratud aega praeguses j\u00e4rjekorras (s\u00f5ltumata sellest, mitu korda ta on protsessorit vabastanud), alandatakse selle \u00fclesande prioriteeti (see liigub j\u00e4rjekorras allapoole).<\/li>\n<\/ul>\n<p>Vaadakem n\u00e4idet:<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat t\u00fckki. Osa 5: Planeerimine: Mitmeasti tagasiside j\u00e4rjekord (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/18c53e62b9b342d14a23995bd422ef5e.png\" style=\"display:block;margin: 0 auto;\">\u00bb<\/p>\n<p>Pildil on n\u00e4idatud, mis juhtub, kui proovida petta ajakava, nagu<br \/>\nkui vanade reeglitega 4a, 4b oleks saadud tulemus vasakul. Uue<br \/>\nreegli - tulemus paremal. Enne kaitset v\u00f5is iga protsess p\u00f5hjustada I\/O enne l\u00f5petamist ja<br \/>\nseega domineerida CPU-l, p\u00e4rast kaitse aktiveerimist, olenemata I\/O k\u00e4itumisest,<br \/>\nlangetatakse ta ikkagi j\u00e4rjekordade all ja seega ei saa ta ebaausalt<br \/>\nomanikuks saada CPU ressursse.<\/p>\n<h4>Parandame MLFQ-d ja teisi probleeme<\/h4>\n<p>\u00dclaltoodud t\u00e4iustustega tekivad uued probleemid: \u00fcks peamine<br \/>\nk\u00fcsimus on, kuidas sellist ajakava parameetriseerida? St. Kui palju peaks olema<br \/>\nj\u00e4rjekordi? Mis peaks olema programmi t\u00f6\u00f6aeg j\u00e4rjekorra piires? Kui<br \/>\ntihti tuleks programmi prioriteeti t\u00f5sta, et v\u00e4ltida n\u00e4ljase seisundi teket ja<br \/>\narvestada programmi k\u00e4itumise muutumist? Need k\u00fcsimused ei oma lihtsat<br \/>\nvastust ja ainult koormuse katsetamine ning j\u00e4rgnevad ajakava konfigureerimine<br \/>\nv\u00f5ivad viia rahuldava tasakaalu saavutamiseni.<\/p>\n<p>N\u00e4iteks, enamik MLFQ teostusi v\u00f5imaldab m\u00e4\u00e4rata erinevaid<br \/>\najakavasid erinevatele j\u00e4rjekordadele. K\u00f5rge prioriteediga j\u00e4rjekordadele m\u00e4\u00e4ratakse tavaliselt<br \/>\nl\u00fchemad ajavahemikud. Need j\u00e4rjekorrad koosnevad interaktiivsetest \u00fclesannetest,<br \/>\nmille vahel vahetamine on \u00fcsna tundlik ja peaks kestma 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 ajavahemikud v\u00e4ga h\u00e4sti (100 ms).<br \/>\n<img decoding=\"async\" alt=\"Operatsioonis\u00fcsteemid: Kolm lihtsat t\u00fckki. Osa 5: Planeerimine: Mitmeasti tagasiside j\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 prioriteediga j\u00e4rjekorras 20<br \/>\nms, jagatud 10 ms akendeks. 40 ms keskmises j\u00e4rjekorras (aken 20 ms) ja madala prioriteediga<br \/>\nj\u00e4rjekorras on ajavahemik saanud 40 ms, kus \u00fclesanded l\u00f5petasid oma t\u00f6\u00f6.<\/p>\n<p>MLFQ teostus Solaris OS-is on ajakavade klass, mis jagavad aega.<br \/>\nAjakava pakub komplekti tabeleid, mis m\u00e4\u00e4ravad t\u00e4pselt, kuidas protsessi prioriteet<br \/>\neluea jooksul muutub, kui suur peab olema eraldatud aken ja kui tihti tuleb t\u00f5sta \u00fclesande prioriteeti. S\u00fcsteemi<br \/>\nadministraator v\u00f5ib selle tabeliga suhelda ja sundida ajakava k\u00e4ituma<br \/>\nteistmoodi. Vaikimisi on selles tabelis 60 j\u00e4rjekorda, mille akna suurus suureneb j\u00e4rk-j\u00e4rgult<br \/>\n20 ms (k\u00f5rge prioriteedi) kuni mitme sajani ms (madala prioriteedi), ja<br \/>\nakna suurust 20 ms (k\u00f5rge prioriteet) kuni mitme sajani ms (madalaim prioriteet), ja<br \/>\nka k\u00f5iki \u00fclesandeid sekundis.<\/p>\n<p>Teised MLFQ ajakavade nimed ei kasuta tabelit v\u00f5i mingeid spetsiifilisi<br \/>\nreegleid, mis on kirjeldatud selles loengus, vastupidi, nad arvutavad prioriteedid, kasutades<br \/>\nmatemaatilisi valemeid. N\u00e4iteks jaotab ajakava FreeBSD valemi<br \/>\njooksva \u00fclesande prioriteedi arvutamiseks tuginedes sellele, kui palju protsessor<br \/>\nkasutas CPU-d. Lisaks, CPU kasutamine aja jooksul laguneb, ja seega<br \/>\nprioriteedi t\u00f5stmine toimub veidi teistmoodi, kui \u00fclaltoodud. Need on nii-\u00f6elda<br \/>\nlagunemise algoritmid. Alates versioonist 7.1 kasutab FreeBSD ajastust ULE.<\/p>\n<p>L\u00f5puks, paljud ajakavad omavad muid omadusi. N\u00e4iteks, m\u00f5ned<br \/>\najakavad reserveerivad k\u00f5rgeimad tasemed operatsioonis\u00fcsteemi t\u00f6\u00f6tamiseks ja seega<br \/>\nei saa \u00fckski kasutajaprotsess saada k\u00f5rgeimat prioriteeti<br \/>\ns\u00fcsteemis. M\u00f5ned s\u00fcsteemid v\u00f5imaldavad anda n\u00e4pun\u00e4iteid, et aidata<br \/>\najakava m\u00e4\u00e4rata prioriteete \u00f5igesti. N\u00e4iteks, k\u00e4su abil <b>nice<\/b><br \/>\non v\u00f5imalik suurendada v\u00f5i v\u00e4hendada \u00fclesande prioriteeti ja seega t\u00f5sta v\u00f5i<br \/>\nalandada programmi v\u00f5imalusi protsessorijaoks.<\/p>\n<h3>MLFQ: Kokkuv\u00f5te<\/h3>\n<p>Oleme kirjeldanud ajakava l\u00e4henemist, mida nimetatakse MLFQ. Selle nimi<br \/>\npeitub t\u00f6\u00f6p\u00f5him\u00f5ttes - see sisaldab mitmeid j\u00e4rjekordi ja kasutab tagasisidet<br \/>\n\u00fclesande prioriteedi m\u00e4\u00e4ratlemiseks.<br \/>\nReeglite l\u00f5plik n\u00e4gemus on j\u00e4rgmine:<\/p>\n<ul>\n<li><b>Reegel1<\/b>: Kui prioriteet(A) &gt; Prioriteet(B), k\u00e4ivitatakse \u00fclesanne A (B ei k\u00e4ivitu)<\/li>\n<li><b>Reegel2<\/b>: Kui prioriteet(A) = Prioriteet(B), A ja B k\u00e4ivitatakse RR<\/li>\n<li><b>Reegel3<\/b>: Kui \u00fclesanne tuleb s\u00fcsteemi, paigutatakse see k\u00f5rgeima prioriteediga j\u00e4rjekorda.<\/li>\n<li><b>Rule4<\/b>: P\u00e4rast seda, kui \u00fclesanne on kulutanud talle m\u00e4\u00e4ratud aega praeguses j\u00e4rjekorras (s\u00f5ltumata sellest, mitu korda ta on protsessorit vabastanud), alandatakse selle \u00fclesande prioriteeti (see liigub j\u00e4rjekorras allapoole).<\/li>\n<li><b>: P\u00e4rast teatud perioodi S t\u00f5sta k\u00f5ik \u00fclesanded s\u00fcsteemis k\u00f5rgeimasse j\u00e4rjekorda.<\/b>Meie uus reegel lahendab kaks probleemid korraga. Esiteks, protsessid<\/li>\n<\/ul>\n<p>MLFQ on huvitav j\u00e4rgmise p\u00f5hjuse t\u00f5ttu - selle asemel, et n\u00f5uda \u00fclesande<br \/>\nlooduse eelnevat tundmist, uurib algoritm \u00fclesande varasemaid k\u00e4itumisi ja m\u00e4\u00e4rab<br \/>\nprioriteedid vastavalt. Nii proovib see istuda korraga kahel toolil - saavutada<br \/>\nt\u00f5husust v\u00e4ikeste \u00fclesannete jaoks (SJF, STCF) ja \u00f5iglaselt k\u00e4ivitada pikki,<br \/>\nCPU-d koormavaid \u00fclesandeid. Seet\u00f5ttu kasutavad paljud s\u00fcsteemid, sealhulgas BSD ja nende derivatiivid,<br \/>\nSolaris, Windows, Mac, teatud vormi algoritmist MLFQ alusena.<\/p>\n<h4>Lisaressursid:<\/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\/Ajakava_<\/a><\/noindex>(arvutiteadus)<\/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-protsessi-ajakava<\/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.1.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.\" \/>\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.1.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.\" \/>\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\udd47Operatsioonis\u00fcsteemid: Kolm lihtsat osa. Osa 5: Planeerimine: Mitme taseme tagasiside j\u00e4rjekord (t\u00f5lge) | ProHoster","description":"Sissejuhatus operatsioonis\u00fcsteemidesse Tere, Habr! Soovin tutvustada teile huvitavat artiklite seeriat, mis on t\u00f5lgitud \u00fcritustest, mis mulle meeldivad \u2014 OSTEP.","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.","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}]}}