{"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\/sk\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-5-planirovanie-multi-level-feedback-queue-perevod","title":{"rendered":"Opera\u010dn\u00e9 syst\u00e9my: Tri jednoduch\u00e9 kusy. \u010cas\u0165 5: Pl\u00e1novanie: Multi-Level Feedback Queue (preklad)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>\u00davod do opera\u010dn\u00fdch syst\u00e9mov<\/h1>\n<p>Ahoj, Habr! Chcem v\u00e1m predstavi\u0165 s\u00e9riu \u010dl\u00e1nkov-prekladu zauj\u00edmavej literat\u00fary, ktor\u00fa pova\u017eujem za zauj\u00edmav\u00fa \u2014 OSTEP. V tomto materi\u00e1li sa podrobne zaober\u00e1 fungovan\u00edm unixov\u00fdch opera\u010dn\u00fdch syst\u00e9mov, konkr\u00e9tne pr\u00e1cou s procesmi, r\u00f4znymi pl\u00e1nova\u010dmi, pam\u00e4\u0165ou a in\u00fdmi podobn\u00fdmi komponentmi, ktor\u00e9 tvoria modern\u00fd OS. Origin\u00e1l v\u0161etk\u00fdch materi\u00e1lov si m\u00f4\u017eete pozrie\u0165 tu: <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">tu<\/a><\/noindex>. Pros\u00edm berte na vedomie, \u017ee preklad bol vykonan\u00fd neprofesion\u00e1lne (dos\u0165 vo\u013ene), ale d\u00fafam, \u017ee som zachoval celkov\u00fd zmysel.<\/p>\n<p>Laborat\u00f3rne pr\u00e1ce na tomto predmete n\u00e1jdete tu:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">origin\u00e1l<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">origin\u00e1l<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">moj osobn\u00fd prisp\u00f4soben\u00fd preklad<\/a><\/noindex><\/li>\n<\/ul>\n<p>\u010eal\u0161ie \u010dasti:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">\u010cas\u0165 1: \u00davod<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446866\/\">\u010cas\u0165 2: Abstrakcia: proces<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/447182\/\">\u010cas\u0165 3: \u00davod do API procesov<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/449026\/\">\u010cas\u0165 4: \u00davod do pl\u00e1nova\u010da<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/450116\/\">\u010cas\u0165 5: Pl\u00e1nova\u010d MLFQ<\/a><\/noindex><\/li>\n<\/ul>\n<p>A m\u00f4\u017eete sa pozera\u0165 aj na m\u00f4j kan\u00e1l v <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">telegrame<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Pl\u00e1novanie: Multi-Level Feedback Queue<\/h2>\n<p>V tejto predn\u00e1\u0161ke sa budeme zaobera\u0165 probl\u00e9mami v\u00fdvoja jedn\u00e9ho z najzn\u00e1mej\u0161\u00edch pr\u00edstupov k<br \/>\npl\u00e1novaniu, ktor\u00fd sa naz\u00fdva <b>Multi-Level Feedback Queue<\/b> (MLFQ). Po prv\u00fdkr\u00e1t bol pl\u00e1nova\u010d MLFQ pop\u00edsan\u00fd v roku 1962 Fernando J. Corbat\u00f3 v syst\u00e9me naz\u00fdvanom<br \/>\nCompatible Time-Sharing System (CTSS). Tieto pr\u00e1ce (vr\u00e1tane oneskoren\u00fdch pr\u00e1c na<br \/>\nMultics) boli nesk\u00f4r nominado\u00e9 na cenu Turing Award. Pl\u00e1nova\u010d bol<br \/>\nnesk\u00f4r vylep\u0161en\u00fd a nadobudol podobu, ktor\u00fa u\u017e m\u00f4\u017eeme n\u00e1js\u0165 v<br \/>\nniektor\u00fdch modern\u00fdch syst\u00e9moch.<\/p>\n<p>Algoritmus MLFQ sa pok\u00fa\u0161a vyrie\u0161i\u0165 2 z\u00e1kladn\u00e9 prekr\u00fdvaj\u00face sa probl\u00e9my.<br \/>\n<b>Po prv\u00e9,<\/b>sna\u017e\u00ed sa optimalizova\u0165 dobu obratu, ktor\u00e1 sa, ako sme preberali v predch\u00e1dzaj\u00facej predn\u00e1\u0161ke, optimalizuje met\u00f3dou spustenia na za\u010diatku fronty najviac<br \/>\nkr\u00e1tkych \u00faloh. Av\u0161ak, OS nevie, ako dlho bude be\u017ea\u0165 ten \u010di onen proces, a to je<br \/>\nnevyhnutn\u00e9 vedomosti pre fungovanie algoritmov SJF, STCF. <b>Po druh\u00e9,<\/b>MLFQ sa sna\u017e\u00ed<br \/>\nurobi\u0165 syst\u00e9m reaguj\u00facim pre pou\u017e\u00edvate\u013eov (napr\u00edklad pre t\u00fdch, ktor\u00ed sed\u00ed a<br \/>\nh\u013eadia na obrazovku v o\u010dak\u00e1van\u00ed dokon\u010denia \u00falohy), a t\u00fdm minimalizova\u0165 \u010das<br \/>\nodpovede. Bohu\u017eia\u013e, algoritmy ako RR zni\u017euj\u00fa \u010das odpovede, ale maj\u00fa ve\u013emi<br \/>\nmal\u00fd vplyv na metriky doby obratu. Odtia\u013e pramen\u00ed n\u00e1\u0161 probl\u00e9m: Ako navrhn\u00fa\u0165<br \/>\npl\u00e1nova\u010d, ktor\u00fd bude sp\u013a\u0148a\u0165 na\u0161e po\u017eiadavky a pritom ni\u010d nevedie\u0165 o<br \/>\nak\u00fd je proces v celkovom poh\u013eade? Ako m\u00e1 pl\u00e1nova\u010d sk\u00fama\u0165 charakteristiky \u00faloh,<br \/>\nktor\u00e9 vykon\u00e1va, a tak prij\u00edma\u0165 lep\u0161ie rozhodnutia o pl\u00e1novan\u00ed?<\/p>\n<p><u>Podstata probl\u00e9mu: Ako pl\u00e1nova\u0165 \u00falohy bez dokonal\u00e9ho poznania?<br \/>\nAko navrhn\u00fa\u0165 pl\u00e1nova\u010d, ktor\u00fd s\u00fa\u010dasne minimalizuje \u010das odozvy<br \/>\npre interakt\u00edvne \u00falohy a z\u00e1rove\u0148 minimalizuje \u010das obratu bez vedomia<br \/>\ndoby vykonania \u00falohy?<\/u><\/p>\n<p>Pozn\u00e1mka: u\u010di\u0165 sa na z\u00e1klade predch\u00e1dzaj\u00facich udalost\u00ed<\/p>\n<p>Rada MLFQ je skvel\u00fd pr\u00edklad syst\u00e9mu, ktor\u00fd sa u\u010d\u00ed na<br \/>\npredch\u00e1dzaj\u00facich udalostiach, aby predpovedal bud\u00facnos\u0165. Tak\u00e9to pr\u00edstupy<br \/>\ns\u00fa \u010dast\u00e9 v OS (a mnoh\u00fdch in\u00fdch oblastiach informatiky, vr\u00e1tane vetiev<br \/>\npredpovedania v hardv\u00e9ri a algoritmov ukladania do pam\u00e4te). Tieto pr\u00edstupy<br \/>\nfunguj\u00fa, ke\u010f \u00falohy maj\u00fa spr\u00e1vanie a s\u00fa tak predv\u00eddate\u013en\u00e9.<br \/>\nAv\u0161ak pri pou\u017e\u00edvan\u00ed tejto techniky by ste mali by\u0165 opatrn\u00ed, preto\u017ee predpovede m\u00f4\u017eu by\u0165 ve\u013emi \u013eahko<br \/>\nnepresn\u00e9 a m\u00f4\u017eu vies\u0165 syst\u00e9m k prijatiu hor\u0161\u00edch rozhodnut\u00ed, ne\u017e<br \/>\nby boli bez ak\u00fdchko\u013evek vedomost\u00ed.<\/p>\n<h3>MLFQ: Z\u00e1kladn\u00e9 pravidl\u00e1<\/h3>\n<p>Pozrime sa na z\u00e1kladn\u00e9 pravidl\u00e1 algoritmu MLFQ. A hoci existuje viacero implement\u00e1ci\u00ed tohto algoritmu,<br \/>\nz\u00e1kladn\u00e9 pr\u00edstupy s\u00fa podobn\u00e9.<br \/>\nV implement\u00e1cii, ktor\u00fa budeme sk\u00fama\u0165, bude MLFQ obsahova\u0165 nieko\u013eko<br \/>\nsamostatn\u00fdch radov, z ktor\u00fdch ka\u017ed\u00fd bude ma\u0165 in\u00fd prioritu. Kedyko\u013evek,<br \/>\n\u00faloha pripraven\u00e1 na vykonanie sa nach\u00e1dza v jednom rade. MLFQ pou\u017e\u00edva priority,<br \/>\naby ur\u010dil, ktor\u00fa \u00falohu spusti\u0165 na vykonanie, t.j. \u00faloha s vy\u0161\u0161\u00edm<br \/>\nprioritou (\u00faloha z radu s najvy\u0161\u0161ou prioritou) bude spusten\u00e1 ako prv\u00e1.<br \/>\nSamozrejme, v konkr\u00e9tnom rade m\u00f4\u017ee by\u0165 viac ne\u017e jedna \u00faloha, tak<br \/>\nbud\u00fa ma\u0165 rovnak\u00fa prioritu. V tomto pr\u00edpade sa pou\u017eije mechanizmus<br \/>\nRR na pl\u00e1novanie sp\u00fa\u0161\u0165ania medzi t\u00fdmito \u00falohami.<br \/>\nTakto sa dost\u00e1vame k dvom z\u00e1kladn\u00fdm pravidl\u00e1m pre MLFQ:<br \/>\nPravidlo1: Ak priorita(A) &gt; Priorita(B), \u00faloha A bude spusten\u00e1 (B nebude)<\/p>\n<ul>\n<li> Pravidlo2: Ak priorita(A) = Priorita(B), A a B sa sp\u00fa\u0161\u0165aj\u00fa pomocou RR<\/li>\n<li> Na z\u00e1klade vy\u0161\u0161ie uveden\u00e9ho s\u00fa k\u013e\u00fa\u010dov\u00e9 prvky pl\u00e1novania MLFQ<\/li>\n<\/ul>\n<p>priority. Namiesto toho, aby sme ka\u017ed\u00e9mu \u00faloh\u00e1m priradili fixn\u00fa prioritu,<br \/>\ns\u00fa prior\u00edtami. Namiesto toho, aby sa ka\u017ed\u00e9mu priradil pevn\u00fd priorita<br \/>\n\u00falohe, MLFQ men\u00ed jej prioritu na z\u00e1klade pozorovan\u00e9ho spr\u00e1vania.<br \/>\nNapr\u00edklad, ak \u00faloha neust\u00e1le prehadzuje pr\u00e1cu na CPU, aby \u010dakala na vstup z kl\u00e1vesnice,<br \/>\nMLFQ udr\u017e\u00ed prioritu procesu na vysokej \u00farovni, preto\u017ee takto<br \/>\nby mal fungova\u0165 interakt\u00edvny proces. Naopak, ak \u00faloha neust\u00e1le a<br \/>\nintenz\u00edvne vyu\u017e\u00edva CPU po\u010das dlh\u00e9ho obdobia, MLFQ jej<br \/>\nprioritu zn\u00ed\u017ei. T\u00fdmto sp\u00f4sobom MLFQ spozn\u00e1va spr\u00e1vanie procesov po\u010das ich v\u00fdkonu<br \/>\na vyu\u017e\u00edva toto spr\u00e1vanie.<br \/>\nNakreslime pr\u00edklad, ako by mohli vyzera\u0165 rady v ur\u010ditom<br \/>\n\u010dase a dostaneme nie\u010do ako toto:<br \/>\n<img decoding=\"async\" alt=\"Opera\u010dn\u00e9 syst\u00e9my: Tri jednoduch\u00e9 kusy. \u010cas\u0165 5: Pl\u00e1novanie: Multi-Level Feedback Queue (preklad)\" src=\"\/wp-content\/uploads\/2019\/04\/3598e9ca43a56049625bdcf3074de472.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>V tejto sch\u00e9me s\u00fa 2 procesy A a B v rade s najvy\u0161\u0161ou prioritou. Proces<br \/>\nC je niekde v strede a proces D na konci radu. Pod\u013ea vy\u0161\u0161ie uveden\u00fdch<br \/>\nopisov algoritmu MLFQ pl\u00e1nova\u010d vykon\u00e1 \u00falohy len s najvy\u0161\u0161ou<br \/>\nprioritou pod\u013ea RR, a \u00falohy C, D zostan\u00fa mimo.<br \/>\nSamozrejme, statick\u00fd sn\u00edmok neposkytne \u00fapln\u00fd obraz o tom, ako MLFQ funguje.<br \/>\nJe d\u00f4le\u017eit\u00e9 porozumie\u0165, ako sa obraz men\u00ed v priebehu \u010dasu.<\/p>\n<h4>Pok Attempt 1: Ako meni\u0165 prioritu<\/h4>\n<p>V tomto momente je potrebn\u00e9 rozhodn\u00fa\u0165, ako MLFQ bude meni\u0165 \u00farove\u0148 priority<br \/>\n\u00falohy (a t\u00fdm aj jej poz\u00edciu v rade) v priebehu jej \u017eivotn\u00e9ho cyklu. Na<br \/>\nto je potrebn\u00e9 ma\u0165 na pam\u00e4ti pracovn\u00fd postup: ur\u010dit\u00e9 mno\u017estvo<br \/>\ninterakt\u00edvnych \u00faloh s kr\u00e1tkou dobou vykon\u00e1vania (a teda \u010dast\u00e9 uvo\u013enenie<br \/>\nCPU) a nieko\u013eko dlh\u00fdch \u00faloh, ktor\u00e9 vyu\u017e\u00edvaj\u00fa CPU po\u010das cel\u00e9ho svojho pracovn\u00e9ho \u010dasu, pri\u010dom<br \/>\n\u010dasov\u00e1 odozva pre tak\u00e9to \u00falohy nie je d\u00f4le\u017eit\u00e1. A tak m\u00f4\u017eeme urobi\u0165 prv\u00fd pokus<br \/>\nrealizova\u0165 algoritmus MLFQ s nasleduj\u00facimi pravidlami:<\/p>\n<ul>\n<li> Pravidlo 3: Ke\u010f \u00faloha vst\u00fapi do syst\u00e9mu, umiestni sa do radu s najvy\u0161\u0161\u00edm<\/li>\n<li>prioritou.<\/li>\n<li>Pravidlo 4a: Ak \u00faloha vyu\u017eije cel\u00e9 jej pridelen\u00e9 \u010dasov\u00e9 okno, tak jej<\/li>\n<li>priorita kles\u00e1.<\/li>\n<li>Pravidlo 4b: Ak \u00faloha uvo\u013en\u00ed CPU pred uplynut\u00edm svojho \u010dasov\u00e9ho okna, tak zostane<\/li>\n<li>so svojou predch\u00e1dzaj\u00facou prioritou.<\/li>\n<\/ul>\n<p><b>Pr\u00edklad 1: Jedna dlhodob\u00e1 \u00faloha<\/b><\/p>\n<p>Ako vidno v tomto pr\u00edklade, \u00faloha pri prijat\u00ed dost\u00e1va najvy\u0161\u0161iu<br \/>\nprioritu. Po \u010dasovom okne 10 ms je priorita procesu zn\u00ed\u017een\u00e1<br \/>\npl\u00e1nova\u010dom. Po nasleduj\u00facom \u010dasovom okne je \u00faloha kone\u010dne zn\u00ed\u017een\u00e1 na<br \/>\nni\u017e\u0161ou prioritou v syst\u00e9me, kde aj zost\u00e1va.<br \/>\n<img decoding=\"async\" alt=\"Opera\u010dn\u00e9 syst\u00e9my: Tri jednoduch\u00e9 kusy. \u010cas\u0165 5: Pl\u00e1novanie: Multi-Level Feedback Queue (preklad)\" src=\"\/wp-content\/uploads\/2019\/04\/9b4ee6de03aa92d7957d50b4ffa73949.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p><b>Pr\u00edklad 2: Doviezli kr\u00e1tku \u00falohu<\/b><\/p>\n<p>Teraz sa pozrime na pr\u00edklad toho, ako MLFQ sa pok\u00fasi pribl\u00ed\u017ei\u0165 k SJF. V tomto<br \/>\npr\u00edklade s\u00fa dve \u00falohy: A, ktor\u00e1 je dlhodobou \u00falohou neust\u00e1le<br \/>\nvyu\u017e\u00edvaj\u00facou CPU a B, ktor\u00e1 je kr\u00e1tkou interakt\u00edvnou \u00falohou. Predpokladajme,<br \/>\n\u017ee A u\u017e pracovala ur\u010dit\u00fd \u010das, ke\u010f sa objavila \u00faloha B.<br \/>\n<img decoding=\"async\" alt=\"Opera\u010dn\u00e9 syst\u00e9my: Tri jednoduch\u00e9 kusy. \u010cas\u0165 5: Pl\u00e1novanie: Multi-Level Feedback Queue (preklad)\" src=\"\/wp-content\/uploads\/2019\/04\/19c299b0519585fd1076a341a71f048b.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>Na tomto grafe s\u00fa vidite\u013en\u00e9 v\u00fdsledky scen\u00e1ra. \u00daloha A, ako ak\u00e1ko\u013evek \u00faloha,<br \/>\nvyu\u017e\u00edvaj\u00faca CPU, sa ocitla na samom dne. \u00daloha B sa dostane v \u010dase T=100 a bude<br \/>\numiestnen\u00e1 do fronty s najvy\u0161\u0161ou prioritou. Ke\u010f\u017ee jej doba spracovania je kr\u00e1tka,<br \/>\ndokon\u010d\u00ed sa sk\u00f4r, ne\u017e dosiahne posledn\u00fa frontu.<\/p>\n<p>Z tohto pr\u00edkladu je potrebn\u00e9 pochopi\u0165 hlavn\u00fa my\u0161lienku algoritmu: ke\u010f\u017ee algoritmus nevie,<br \/>\n\u010di je \u00faloha dlh\u00e1 alebo kr\u00e1tka, najprv predpoklad\u00e1, \u017ee \u00faloha<br \/>\nje kr\u00e1tka a pridelen\u00edm najvy\u0161\u0161ej prioritnej \u00farovni. Ak je to naozaj kr\u00e1tka \u00faloha, tak<br \/>\nsa vykon\u00e1 r\u00fdchlo, inak, ak je to dlh\u00e1 \u00faloha, bude pomaly pres\u00fava\u0165<br \/>\nprioritu nadol a \u010doskoro dok\u00e1\u017ee, \u017ee je to naozaj dlh\u00e1 \u00faloha, ktor\u00e1 ne<br \/>\nvy\u017eaduje reakciu.<\/p>\n<p><b>Pr\u00edklad 3: \u010co teda s vstupom-v\u00fdstupom?<\/b><\/p>\n<p>Teraz sa pozrieme na pr\u00edklad so vstupom-v\u00fdstupom. Ako sa uv\u00e1dzalo v pravidle 4b,<br \/>\nak proces oslobod\u00ed procesor, ani\u017e by \u00faplne vyu\u017eil jeho \u010das procesora,<br \/>\nzost\u00e1va na predch\u00e1dzaj\u00facej \u00farovni priority. Zmysel tohto pravidla je celkom jednoduch\u00fd<br \/>\n\u2014 ak interakt\u00edvna \u00faloha vykon\u00e1va mno\u017estvo oper\u00e1ci\u00ed vstupu-v\u00fdstupu, napr. \u010dakaj\u00fac<br \/>\nna stla\u010denia kl\u00e1vesy alebo my\u0161i od u\u017e\u00edvate\u013ea, tak\u00e1 \u00faloha oslobod\u00ed procesor<br \/>\nsk\u00f4r, ako je vyhraden\u00fd \u010das. Nechceme, aby tak\u00e1 \u00faloha klesla v priorit\u00e1ch,<br \/>\na tak zostane na predch\u00e1dzaj\u00facej \u00farovni.<br \/>\n<img decoding=\"async\" alt=\"Opera\u010dn\u00e9 syst\u00e9my: Tri jednoduch\u00e9 kusy. \u010cas\u0165 5: Pl\u00e1novanie: Multi-Level Feedback Queue (preklad)\" src=\"\/wp-content\/uploads\/2019\/04\/480d33a670fb62a639e5938dd59e30a1.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>Tento pr\u00edklad ukazuje, ako bude algoritmus pracova\u0165 s tak\u00fdmito procesmi \u2013 interakt\u00edvna \u00faloha B, ktor\u00e1 potrebuje CPU len na 1 ms pred vykonan\u00edm<br \/>\nprocesu vstupu-v\u00fdstupu a dlh\u00e1 \u00faloha A, ktor\u00e1 cel\u00e9 svoje \u010das vyu\u017e\u00edva CPU.<br \/>\nMLFQ udr\u017euje proces B s najvy\u0161\u0161ou prioritou, ke\u010f\u017ee st\u00e1le,<br \/>\noslobodzuje CPU. Ak je B interakt\u00edvna \u00faloha, tak algoritmus v takom pr\u00edpade dosiahol<br \/>\nsvoju cie\u013eov\u00fa r\u00fdchlos\u0165 sp\u00fa\u0161\u0165ania interakt\u00edvnych \u00faloh.<\/p>\n<p><b>Probl\u00e9my s aktu\u00e1lnym algoritmom MLFQ<\/b><\/p>\n<p>V predch\u00e1dzaj\u00facich pr\u00edkladoch sme vytvorili z\u00e1kladn\u00fa verziu MLFQ. A zd\u00e1 sa, \u017ee to<br \/>\ndobr\u00e9 fungovanie a spravodlivo rozde\u013euje procesorov\u00fd \u010das medzi<br \/>\ndlh\u00e9 \u00falohy a umo\u017e\u0148uje kr\u00e1tkym \u00faloh\u00e1m alebo \u00faloh\u00e1m intenz\u00edvne vyu\u017e\u00edvaj\u00facim<br \/>\nvstup a v\u00fdstup pracova\u0165 r\u00fdchlo. Bohu\u017eia\u013e, tento pr\u00edstup obsahuje nieko\u013eko<br \/>\nv\u00e1\u017enych probl\u00e9mov.<br \/>\n<b>Po prv\u00e9,<\/b>, probl\u00e9m hladu: ak bude v syst\u00e9me mno\u017estvo interakt\u00edvnych<br \/>\n\u00faloh, spotrebuj\u00fa v\u0161etok procesorov\u00fd \u010das a t\u00fdm p\u00e1dom \u017eiadna dlh\u00e1<br \/>\n\u00faloha nebude ma\u0165 mo\u017enos\u0165 vykon\u00e1va\u0165 sa (trp\u00ed hladom).<\/p>\n<p><b>Po druh\u00e9,<\/b>, inteligentn\u00ed pou\u017e\u00edvatelia by mohli p\u00edsa\u0165 svoje programy tak, aby<br \/>\no\u0161kubali planner. O\u0161klbanie spo\u010d\u00edva v tom, \u017ee by som mal urobi\u0165 nie\u010do tak\u00e9, aby don\u00fatil<br \/>\npl\u00e1nova\u010d prideli\u0165 procesoru viac procesorov\u00e9ho \u010dasu. Algoritmus, ktor\u00fd<br \/>\nbol op\u00edsan\u00fd vy\u0161\u0161ie, je \u00faplne zranite\u013en\u00fd vo\u010di tak\u00fdmto \u00fatokom: predt\u00fdm, ako \u010dasov\u00e9 okno prakticky<br \/>\nskon\u010dilo, je potrebn\u00e9 vykona\u0165 oper\u00e1ciu vstupu a v\u00fdstupu (na nejak\u00fd, nez\u00e1le\u017e\u00ed na tom, ak\u00fd s\u00fabor)<br \/>\na t\u00fdm p\u00e1dom uvo\u013eni\u0165 CPU. Tak\u00e9to spr\u00e1vanie umo\u017en\u00ed zosta\u0165 v tej istej<br \/>\n\u010dernej l\u00ednii a znova z\u00edska\u0165 v\u00e4\u010d\u0161\u00ed percentu\u00e1lny podiel procesorov\u00e9ho \u010dasu. Ak sa to urob\u00ed<br \/>\nspr\u00e1vne (napr\u00edklad sa vykon\u00e1va 99% \u010dasu v okne pred uvo\u013enen\u00edm CPU),<br \/>\ntak\u00e1 \u00faloha m\u00f4\u017ee jednoducho monopolizova\u0165 procesor.<\/p>\n<p>Nakoniec, program m\u00f4\u017ee meni\u0165 svoje spr\u00e1vanie v priebehu \u010dasu. Tieto \u00falohy,<br \/>\nktor\u00e9 vyu\u017e\u00edvali CPU, sa m\u00f4\u017eu sta\u0165 interakt\u00edvnymi. V na\u0161om pr\u00edklade tak\u00e9to<br \/>\n\u00falohy nedostan\u00fa riadne zaobch\u00e1dzanie od pl\u00e1nova\u010da, preto\u017ee by dostali in\u00e9<br \/>\n(p\u00f4vodn\u00e9) interakt\u00edvne \u00falohy.<\/p>\n<p><u>Ot\u00e1zka do publika: ak\u00e9 \u00fatoky na pl\u00e1nova\u010d by mohli by\u0165 vykonan\u00e9 v modernom svete?<br \/>\n<\/u><\/p>\n<h4>Pok\u00fas \u010d. 2: Zvy\u0161ovanie prior\u00edt<\/h4>\n<p>Sk\u00fasme zmeni\u0165 pravidl\u00e1 a pozrime sa, \u010di sa n\u00e1m podar\u00ed vyhn\u00fa\u0165 sa probl\u00e9mom s<br \/>\nhladovan\u00edm. \u010co by sme mohli urobi\u0165, aby sme zaru\u010dili, \u017ee s<br \/>\nCPU s\u00favisiace \u00falohy dostan\u00fa svoj \u010das (aj ke\u010f nie dlh\u00fd).<br \/>\nAko jednoduch\u00e9 rie\u0161enie probl\u00e9mu m\u00f4\u017eeme navrhn\u00fa\u0165 pravidelne<br \/>\nzvy\u0161ova\u0165 prioritu v\u0161etk\u00fdch tak\u00fdchto \u00faloh v syst\u00e9me. Existuje mnoho sp\u00f4sobov<br \/>\nako to dosiahnu\u0165, sk\u00fasme realizova\u0165 nie\u010do jednoduch\u00e9: previes\u0165<br \/>\nv\u0161etky \u00falohy na najvy\u0161\u0161iu prioritu, odtia\u013eto nov\u00e9 pravidlo:<\/p>\n<ul>\n<li><b>Pravidlo5<\/b>: Po uplynut\u00ed ur\u010dit\u00e9ho \u010dasu S previes\u0165 v\u0161etky \u00falohy v syst\u00e9me do najvy\u0161\u0161ej priority.<\/li>\n<\/ul>\n<p>Na\u0161e nov\u00e9 pravidlo rie\u0161i dve probl\u00e9my naraz. Po prv\u00e9, procesy<br \/>\nzaru\u010dene netrpia hladovan\u00edm: \u00falohy v najvy\u0161\u0161ej priorite bud\u00fa zdie\u013ea\u0165<br \/>\nprocesorov\u00fd \u010das pod\u013ea algoritmu RR a tak v\u0161etky procesy dostan\u00fa<br \/>\nprocesorov\u00fd \u010das. Po druh\u00e9, ak nejak\u00fd proces, ktor\u00fd predt\u00fdm pou\u017e\u00edval<br \/>\niba procesor, sa stane interakt\u00edvnym, zostane v rade s vy\u0161\u0161ou<br \/>\nprioritou po tom, \u010do raz dostane zv\u00fd\u0161enie priority na najvy\u0161\u0161iu.<br \/>\nZv\u00e1\u017eme pr\u00edklad. V tomto scen\u00e1ri zv\u00e1\u017eime jeden proces pou\u017e\u00edvaj\u00faci<br \/>\n<img decoding=\"async\" alt=\"Opera\u010dn\u00e9 syst\u00e9my: Tri jednoduch\u00e9 kusy. \u010cas\u0165 5: Pl\u00e1novanie: Multi-Level Feedback Queue (preklad)\" src=\"\/wp-content\/uploads\/2019\/04\/3b8d879ab4479622684b126ec5af6af3.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>CPU a dva interakt\u00edvne, kr\u00e1tke procesy. V\u013eavo na obr\u00e1zku je zn\u00e1zornen\u00e9 spr\u00e1vanie bez zv\u00fd\u0161enia priority, a tak dlh\u00e1 \u00faloha za\u010d\u00edna hladova\u0165 po pr\u00edchode do syst\u00e9mu dvoch interakt\u00edvnych \u00faloh. Na obr\u00e1zku vpravo sa ka\u017ed\u00fdch 50ms vykon\u00e1va zv\u00fd\u0161enie priority a tak v\u0161etky procesy zaru\u010dene dostan\u00fa procesorov\u00fd \u010das a bud\u00fa pravidelne sp\u00fa\u0161\u0165an\u00e9. 50ms je v tomto pr\u00edpade uveden\u00e9 ako pr\u00edklad, v skuto\u010dnosti je toto \u010d\u00edslo o nie\u010do vy\u0161\u0161ie.<br \/>\nJe zrejm\u00e9, \u017ee pridanie \u010dasu periodick\u00e9ho zv\u00fd\u0161enia S vedie k<br \/>\nlogickej ot\u00e1zke: ak\u00e1 hodnota by mala by\u0165 nastaven\u00e1? Jeden zasl\u00fa\u017een\u00fd<br \/>\nsyst\u00e9mov\u00fd in\u017einier John Ousterhout volal tak\u00e9to hodnoty v syst\u00e9moch voodoo<br \/>\nkon\u0161tanta, preto\u017ee si v ur\u010ditom zmysle vy\u017eadovali \u010diernu m\u00e1giu na spr\u00e1vne<br \/>\nnastavenie. A, \u017eia\u013e, S m\u00e1 tak\u00fd n\u00e1dych. Ak nastav\u00edte hodnotu pr\u00edli\u0161<br \/>\nve\u013ekou \u2014 dlh\u00e9 \u00falohy za\u010dn\u00fa hladova\u0165. A ak nastav\u00edte pr\u00edli\u0161 n\u00edzku hodnotu,<br \/>\ninterakt\u00edvne \u00falohy nedostan\u00fa primeran\u00fd procesorov\u00fd \u010das.<\/p>\n<h4>PokAttempt 3: Najlep\u0161ie sledovanie<\/h4>\n<p>Teraz m\u00e1me \u010fal\u0161\u00ed probl\u00e9m, ktor\u00fd mus\u00edme vyrie\u0161i\u0165: ako nenecha\u0165<br \/>\no\u010d\u00ed tu p\u013euva\u0165 n\u00e1\u0161 pl\u00e1nova\u010d? Vinn\u00ed s\u00fa pravidl\u00e1 4a, 4b, ktor\u00e9 umo\u017e\u0148uj\u00fa \u00falohe zachova\u0165 prioritu uvo\u013e\u0148ovan\u00edm procesora<br \/>\npred uplynut\u00edm pridelen\u00e9ho \u010dasu. Ako s t\u00fdmto bojova\u0165?<br \/>\nRie\u0161en\u00edm v tomto pr\u00edpade m\u00f4\u017ee by\u0165 lep\u0161ie sledovanie \u010dasu CPU na ka\u017edej<br \/>\n\u00farovni MLFQ. Namiesto toho, aby sa zabudlo na \u010das, ktor\u00fd program pou\u017eil<br \/>\nna \u00farovni MLFQ. Namiesto toho, aby sa zabudlo na \u010das, ktor\u00fd program vyu\u017eil<br \/>\nPri procesore za ur\u010den\u00fd \u010dasov\u00fd \u00fasek je potrebn\u00e9 ho zoh\u013eadni\u0165 a uchova\u0165. Po<br \/>\ntom, ako proces minie svoj \u010dasov\u00fd limit, je potrebn\u00e9 jeho prioritu zn\u00ed\u017ei\u0165 na<br \/>\nn\u00e1sledn\u00fa \u00farove\u0148. Teraz nez\u00e1le\u017e\u00ed na tom, ako proces vyu\u017eije svoj \u010das \u2014 \u010di<br \/>\nst\u00e1le vypo\u010d\u00edtava na procesore, alebo ako mno\u017estvo volan\u00ed. T\u00fdmto sp\u00f4sobom<br \/>\nje potrebn\u00e9 preformulova\u0165 pravidlo 4 do nasleduj\u00facej podoby:<\/p>\n<ul>\n<li><b>Pravidlo4<\/b>: Po tom, ako \u00faloha minie pridelenej \u010das, v s\u00fa\u010dasnej fronte (bez oh\u013eadu na to, ko\u013ekokr\u00e1t uvo\u013enila CPU), jej priorita sa zn\u00ed\u017ei (postupuje ni\u017e\u0161ie v fronte).<\/li>\n<\/ul>\n<p>Pozrime sa na pr\u00edklad:<br \/>\n<img decoding=\"async\" alt=\"Opera\u010dn\u00e9 syst\u00e9my: Tri jednoduch\u00e9 kusy. \u010cas\u0165 5: Pl\u00e1novanie: Multi-Level Feedback Queue (preklad)\" src=\"\/wp-content\/uploads\/2019\/04\/18c53e62b9b342d14a23995bd422ef5e.png\" style=\"display:block;margin: 0 auto;\">&gt;<\/p>\n<p>Na obr\u00e1zku je zn\u00e1zornen\u00e9, \u010do sa stane, ak sa pok\u00fasime oklama\u0165 pl\u00e1nova\u010d, ako<br \/>\ns predch\u00e1dzaj\u00facimi pravidlami 4a, 4b dostaneme v\u00fdsledok v\u013eavo. S nov\u00fdm<br \/>\npravidlom \u2014 v\u00fdsledok vpravo. Pred ochranou mohol ak\u00fdko\u013evek proces vyvola\u0165 I\/O pred dokon\u010den\u00edm a<br \/>\nt\u00fdmto dominova\u0165 na CPU, po zapnut\u00ed ochrany, bez oh\u013eadu na spr\u00e1vanie<br \/>\nI\/O, v\u017edy poklesne v porad\u00ed a t\u00fdm nem\u00f4\u017ee ne\u010destne<br \/>\nz\u00edska\u0165 prostriedky CPU.<\/p>\n<h4>Vylep\u0161ovanie MLFQ a \u010fal\u0161ie probl\u00e9my<\/h4>\n<p>S uveden\u00fdmi vylep\u0161eniami sa objavuj\u00fa nov\u00e9 probl\u00e9my: jednou z hlavn\u00fdch<br \/>\not\u00e1zok je, ako parametrize podobn\u00fd pl\u00e1nova\u010d? T.j. Ko\u013eko by malo by\u0165<br \/>\nfront? Ak\u00e1 by mala by\u0165 ve\u013ekos\u0165 pracovn\u00e9ho okna programu v r\u00e1mci fronty? Ako<br \/>\n\u010dasto by sa mala priorita programu zvy\u0161ova\u0165, aby sa predi\u0161lo hladu a<br \/>\nzoh\u013eadnilo sa zmenen\u00e9 spr\u00e1vanie programu? Na tieto ot\u00e1zky nie je jednoduch\u00e1<br \/>\nodpove\u010f a len experimentovanie s za\u0165a\u017een\u00edm a n\u00e1sledn\u00e9 konfigur\u00e1cie<br \/>\npl\u00e1nova\u010da m\u00f4\u017eu vies\u0165 k nejak\u00e9mu uspokojiv\u00e9mu vyv\u00e1\u017eeniu.<\/p>\n<p>Napr\u00edklad, v\u00e4\u010d\u0161ina realiz\u00e1ci\u00ed MLFQ umo\u017e\u0148uje priradi\u0165 r\u00f4zne<br \/>\n\u010dasov\u00e9 \u00faseky r\u00f4znym front\u00e1m. Vysokoprioritn\u00e9 fronty obvykle<br \/>\ndost\u00e1vaj\u00fa kr\u00e1tke \u010dasov\u00e9 intervaly. Tieto fronty pozost\u00e1vaj\u00fa z interakt\u00edvnych \u00faloh,<br \/>\nmedzi ktor\u00fdmi je prep\u00ednanie dos\u0165 citliv\u00e9 a malo by trva\u0165 10 alebo menej<br \/>\nms. Naopak, n\u00edzkoprioritn\u00e9 fronty pozost\u00e1vaj\u00fa z dlh\u00fdch \u00faloh, vyu\u017e\u00edvaj\u00facich<br \/>\nCPU. A v tomto pr\u00edpade s\u00fa dlh\u00e9 \u010dasov\u00e9 intervaly ve\u013emi vhodn\u00e9 (100ms).<br \/>\n<img decoding=\"async\" alt=\"Opera\u010dn\u00e9 syst\u00e9my: Tri jednoduch\u00e9 kusy. \u010cas\u0165 5: Pl\u00e1novanie: Multi-Level Feedback Queue (preklad)\" src=\"\/wp-content\/uploads\/2019\/04\/4eb6c6669034adeb1615c29454fbb1dc.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>V tomto pr\u00edklade s\u00fa 2 \u00falohy, ktor\u00e9 pracovali vo vysokoprioritnej fronte 20<br \/>\nms, rozdelen\u00e9 do okien po 10 ms. 40 ms v priemernej rade (okno 20 ms) a v n\u00edzkoprioritnej<br \/>\nrady, sa do\u010dasn\u00e9 okno stalo 40 ms, kde \u00falohy dokon\u010dili svoju pr\u00e1cu.<\/p>\n<p>Implement\u00e1cia MLFQ v OS Solaris \u2013 trieda pl\u00e1nova\u010dov, ktor\u00e1 rozde\u013euje pod\u013ea \u010dasu.<br \/>\nPl\u00e1nova\u010d poskytuje s\u00fabor tabuliek, ktor\u00e9 presne ur\u010duj\u00fa, ako by mal<br \/>\nmeni\u0165 prioritu procesu po\u010das jeho \u017eivota, ak\u00e1 by mala by\u0165 ve\u013ekos\u0165<br \/>\nvyhraden\u00e9ho okna a ako \u010dasto je potrebn\u00e9 zvy\u0161ova\u0165 priority \u00falohy. Administr\u00e1tor<br \/>\nsyst\u00e9mu m\u00f4\u017ee interagova\u0165 s touto tabu\u013ekou a n\u00fati\u0165 pl\u00e1nova\u010d, aby sa spr\u00e1val<br \/>\nin\u00fdm sp\u00f4sobom. Predvolene m\u00e1 t\u00e1to tabu\u013eka 60 radov so stup\u0148uj\u00facou sa<br \/>\nve\u013ekos\u0165ou okna od 20 ms (vysok\u00e1 priorita) po nieko\u013eko stoviek ms (n\u00edzka priorita), a<br \/>\ntaktie\u017e s ur\u00fdchlen\u00edm v\u0161etk\u00fdch \u00faloh raz za sekundu.<\/p>\n<p>In\u00e9 MLFQ pl\u00e1nova\u010de nepou\u017e\u00edvaj\u00fa tabu\u013eku alebo \u017eiadne konkr\u00e9tne<br \/>\npravidl\u00e1, ktor\u00e9 s\u00fa pop\u00edsan\u00e9 v tejto predn\u00e1\u0161ke, naopak, vypo\u010d\u00edtavaj\u00fa priority pomocou<br \/>\nmatematick\u00fdch vzorcov. Napr\u00edklad pl\u00e1nova\u010d v FreeBSD pou\u017e\u00edva vzorec na<br \/>\nvypo\u010d\u00edtanie aktu\u00e1lnej priority \u00falohy, na z\u00e1klade toho, ako \u010dasto proces<br \/>\nvyu\u017e\u00edval CPU. Okrem toho, vyu\u017e\u00edvanie CPU s \u010dasom kles\u00e1, a takto<br \/>\nzvy\u0161ovanie priority prebieha trochu inak, ako je op\u00edsan\u00e9 vy\u0161\u0161ie. Tieto s\u00fa<br \/>\ntakzvan\u00e9 decay algoritmy. Od verzie 7.1 v FreeBSD sa pou\u017e\u00edva pl\u00e1nova\u010d ULE.<\/p>\n<p>Nakoniec, mnoh\u00e9 pl\u00e1nova\u010de maj\u00fa \u010fal\u0161ie \u0161pecifik\u00e1. Napr\u00edklad niektor\u00e9<br \/>\npl\u00e1nova\u010de rezervuj\u00fa vy\u0161\u0161ie \u00farovne pre pr\u00e1cu opera\u010dn\u00e9ho syst\u00e9mu, a tak<br \/>\n\u017eiadny pou\u017e\u00edvate\u013esk\u00fd proces nebude m\u00f4c\u0165 z\u00edska\u0165 najvy\u0161\u0161iu prioritu v<br \/>\nsyst\u00e9me. Niektor\u00e9 syst\u00e9my umo\u017e\u0148uj\u00fa poskytova\u0165 rady na pomoc<br \/>\npl\u00e1nova\u010du spr\u00e1vne nastavi\u0165 priority. Tak napr\u00edklad pomocou pr\u00edkazu <b>nice<\/b><br \/>\nje mo\u017en\u00e9 zvy\u0161ova\u0165 alebo zni\u017eova\u0165 prioritu \u00falohy a takto zvy\u0161ova\u0165 alebo<br \/>\nzni\u017eova\u0165 \u0161ance programu na procesorov\u00fd \u010das.<\/p>\n<h3>MLFQ: Zhrnutie<\/h3>\n<p>Op\u00edsali sme pr\u00edstup k pl\u00e1novaniu, ktor\u00fd sa naz\u00fdva MLFQ. Jeho n\u00e1zov<br \/>\nspo\u010d\u00edva v princ\u00edpe fungovania \u2013 m\u00e1 nieko\u013eko radov a vyu\u017e\u00edva sp\u00e4tn\u00fa v\u00e4zbu<br \/>\nna ur\u010denie priority \u00falohy.<br \/>\nKoncov\u00fd vzor pravidiel bude nasledovn\u00fd:<\/p>\n<ul>\n<li><b>Pravidlo 1<\/b>: Ak priorita(A) &gt; priorita(B), bude spusten\u00e1 \u00faloha A (B nie).<\/li>\n<li><b>Pravidlo 2<\/b>: Ak je priorita (A) = priorite (B), A a B sa sp\u00fa\u0161\u0165aj\u00fa pomocou RR<\/li>\n<li><b>Pravidlo3<\/b>: Ke\u010f \u00faloha pr\u00edde do syst\u00e9mu, umiestni sa do frontu s najvy\u0161\u0161ou prioritou.<\/li>\n<li><b>Pravidlo4<\/b>: Po tom, ako \u00faloha minie pridelenej \u010das, v s\u00fa\u010dasnej fronte (bez oh\u013eadu na to, ko\u013ekokr\u00e1t uvo\u013enila CPU), jej priorita sa zn\u00ed\u017ei (postupuje ni\u017e\u0161ie v fronte).<\/li>\n<li><b>Pravidlo5<\/b>: Po uplynut\u00ed ur\u010dit\u00e9ho \u010dasu S previes\u0165 v\u0161etky \u00falohy v syst\u00e9me do najvy\u0161\u0161ej priority.<\/li>\n<\/ul>\n<p>MLFQ je zauj\u00edmav\u00fd z nasleduj\u00faceho d\u00f4vodu \u2014 namiesto toho, aby vy\u017eadoval predch\u00e1dzaj\u00face vedomie o<br \/>\npr\u00edrode \u00falohy, algoritmus sk\u00fama predch\u00e1dzaj\u00face spr\u00e1vanie \u00falohy a pride\u013euje<br \/>\npriority zodpovedaj\u00facim sp\u00f4sobom. Sna\u017e\u00ed sa tak sedie\u0165 na dvoch stoli\u010dk\u00e1ch \u2014 dosiahnu\u0165 v\u00fdkon pre mal\u00e9 \u00falohy (SJF, STCF) a spravodlivo sp\u00fa\u0161\u0165a\u0165 dlh\u00e9,<br \/>\nCPU n\u00e1ro\u010dn\u00e9 \u00falohy. Preto mnoh\u00e9 syst\u00e9my, vr\u00e1tane BSD a ich deriv\u00e1tov,<br \/>\nSolaris, Windows, Mac pou\u017e\u00edvaj\u00fa ako pl\u00e1nova\u010d nejak\u00fa formu algoritmu<br \/>\nMLFQ ako z\u00e1kladn\u00fa b\u00e1zu.<\/p>\n<h4>\u010eal\u0161ie materi\u00e1ly:<\/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.en.html<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Scheduling_\">en.wikipedia.org\/wiki\/Scheduling_<\/a><\/noindex>(computing)<\/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>Zdroj: <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.4 - 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\/sk\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-5-planirovanie-multi-level-feedback-queue-perevod\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\/sk\/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. \u010cas\u0165 5: Pl\u00e1novanie: Multi-Level Feedback Queue (preklad) | ProHoster","description":"\u00davod do opera\u010dn\u00fdch syst\u00e9mov Ahoj, Habr! Chcem v\u00e1m predstavi\u0165 s\u00e9riu \u010dl\u00e1nkov-prekladov jednej zauj\u00edmavej literat\u00fary \u2014 OSTEP.","canonical_url":"https:\/\/prohoster.info\/sk\/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":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/32730","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=32730"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/32730\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/24514"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=32730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=32730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=32730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}