{"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\/lv\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-5-planirovanie-multi-level-feedback-queue-perevod","title":{"rendered":"Oper\u0113t\u0101jsist\u0113mas: Tr\u012bs vieglas da\u013cas. 5. da\u013ca: Pl\u0101no\u0161ana: Multi-Level Feedback Queue (tulkojums)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Ievads oper\u0113t\u0101jsist\u0113m\u0101s<\/h1>\n<p>Sveiki, Habr! V\u0113los iepaz\u012bstin\u0101t j\u016bs ar rakstu s\u0113riju - tulkojumiem par vienu interesantu literat\u016bru - OSTEP. \u0160aj\u0101 materi\u0101l\u0101 tiek apskat\u012bta diezgan dzi\u013ca unix l\u012bdz\u012bgu oper\u0113t\u0101jsist\u0113mu darb\u012bba, proti, darbs ar procesiem, da\u017e\u0101diem pl\u0101not\u0101jiem, atmi\u0146u un citiem l\u012bdz\u012bgiem komponentiem, kas veido m\u016bsdienu OS. Ori\u0123in\u0101lu materi\u0101lu varat skat\u012bt \u0161eit <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">\u0161eit<\/a><\/noindex>. L\u016bdzu, \u0146emiet v\u0113r\u0101, ka tulkojums veikts neprofesion\u0101li (\u012bpa\u0161i br\u012bvi), ta\u010du ceru, ka esmu saglab\u0101jis kop\u0113jo noz\u012bmi.<\/p>\n<p>Laboratorijas darbus par \u0161o t\u0113mu var atrast \u0161eit:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">ori\u0123in\u0101ls<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">ori\u0123in\u0101ls<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">mana personisk\u0101 adapt\u0101cija<\/a><\/noindex><\/li>\n<\/ul>\n<p>Citas da\u013cas:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">1. da\u013ca: Ievads<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446866\/\">2. da\u013ca: Abstrakcija: process<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/447182\/\">3. da\u013ca: Ievads procesoru API<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/449026\/\">4. da\u013ca: Ievads pl\u0101not\u0101j\u0101<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/450116\/\">5. da\u013ca: MLFQ pl\u0101not\u0101js<\/a><\/noindex><\/li>\n<\/ul>\n<p>Un j\u016bs varat apmekl\u0113t manu kan\u0101lu <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">Telegram<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Pl\u0101no\u0161ana: Multi-Level Feedback Queue<\/h2>\n<p>\u0160aj\u0101 lekcij\u0101 m\u0113s run\u0101sim par vienu no vispaz\u012bstam\u0101kajiem pieej\u0101m pl\u0101no\u0161anai, kas tiek saukta par<br \/>\nMulti-Level Feedback Queue <b>(MLFQ). Pirmo reizi MLFQ pl\u0101not\u0101js tika aprakst\u012bts 1962. gad\u0101 Fernando J. Corbat\u00f3 sist\u0113m\u0101, kas tika saukta par<\/b> Compatible Time-Sharing System (CTSS). \u0160ie darbi (ieskaitot v\u0113l\u0101kos darbus pie<br \/>\nMultics) tika v\u0113l\u0101k izvirz\u012bti Turing balvai. Pl\u0101not\u0101js tika<br \/>\nv\u0113l\u0101k uzlabots un ieguva formu, ko var sastapt jau m\u016bsdienu sist\u0113m\u0101s.<br \/>\nMLFQ algoritms cen\u0161as atrisin\u0101t divas pamat\u0161\u016bnas, kas krustojas.<br \/>\nTas m\u0113\u0123ina optimiz\u0113t apgroz\u012bjuma laiku, k\u0101 m\u0113s apskat\u012bj\u0101m iepriek\u0161\u0113j\u0101 lekcij\u0101, optimiz\u0113jot ar metodi, kas s\u0101kum\u0101 ievieto vis\u012bs\u0101k\u0101s<\/p>\n<p>uzdevumus rind\u0101. Tom\u0113r, OS nezina, cik ilgi darbosies konkr\u0113ts process, un tas ir<br \/>\n<b>Pirmk\u0101rt<\/b>nepiecie\u0161ams zin\u0101\u0161anas SJF, STCF algoritmu darb\u012bbai.<br \/>\nMLFQ m\u0113\u0123ina<br \/>\npadar\u012bt sist\u0113mu atsauc\u012bgu lietot\u0101jiem (piem\u0113ram, tiem, kuri skat\u0101s ekr\u0101n\u0101, gaidot uzdevuma pabeig\u0161anu) un t\u0101d\u0113j\u0101di samazin\u0101t <b>Otrk\u0101rt<\/b>atbildes laiku. Diem\u017e\u0113l t\u0101di algoritmi k\u0101 RR samazina atbildes laiku, bet iev\u0113rojami<br \/>\nietekm\u0113 apgroz\u012bjuma laika metriku. T\u0101d\u0113j\u0101di m\u016bsu probl\u0113ma ir: k\u0101 izstr\u0101d\u0101t<br \/>\npl\u0101not\u0101ju, kas apmierin\u0101s m\u016bsu pras\u012bbas, un taj\u0101 pa\u0161\u0101 laik\u0101 neko nezin\u0101s par<br \/>\nprocesa dabu \u0123ener\u0101li? K\u0101 pl\u0101not\u0101js var\u0113s ieg\u016bt inform\u0101ciju par uzdevumu raksturojumu,<br \/>\nkurus tas palaid\u012bs, un t\u0101d\u0113j\u0101di pie\u0146emt lab\u0101kus l\u0113mumus par pl\u0101no\u0161anu?<br \/>\nProbl\u0113mas b\u016bt\u012bba: k\u0101 pl\u0101not uzdevumu izpildi bez ide\u0101las zin\u0101\u0161anas?<br \/>\nK\u0101 izstr\u0101d\u0101t pl\u0101not\u0101ju, kas vienlaikus samazina atbildes laiku<br \/>\ninterakt\u012bviem uzdevumiem un taj\u0101 pa\u0161\u0101 laik\u0101 samazina apgroz\u012bjuma laiku bez iepriek\u0161\u0113j\u0101m<\/p>\n<p><u>zin\u0101\u0161an\u0101m par uzdevuma izpildes laiku?<br \/>\nPie\u0146emiet: m\u0101c\u0101mies, balstoties uz iepriek\u0161\u0113jiem notikumiem.<br \/>\nMLFQ rinda ir lielisks piem\u0113rs sist\u0113mai, kas m\u0101c\u0101s no<br \/>\nnotiku\u0161ajiem notikumiem, lai prognoz\u0113tu n\u0101kotni. L\u012bdz\u012bgi pieejas bie\u017ei<\/u><\/p>\n<p>sastopamas OS (un daudz\u0101s cit\u0101s inform\u0101tikas nozar\u0113s, tostarp prognoz\u0113\u0161anas jom\u0101s<\/p>\n<p>iek\u0101rt\u0101s un ke\u0161atmi\u0146as algoritmos). T\u0101di pieejas<br \/>\nstr\u0101d\u0101, kad uzdevumiem ir uzved\u012bbas f\u0101zes, t\u0101d\u0113j\u0101di t\u0101s k\u013c\u016bst prognoz\u0113jamas.<br \/>\ndarbojas, kad uzdevumiem ir uzved\u012bbas f\u0101zes un l\u012bdz ar to t\u0101s ir prognoz\u0113jamas.<br \/>\nstr\u0101d\u0101, kad uzdevumiem ir uzved\u012bbas f\u0101zes un t\u0101d\u0113j\u0101di tie ir prognoz\u0113jami.<br \/>\ntiek aktiviz\u0113ti, kad uzdevumiem ir uzved\u012bbas f\u0101zes, un t\u0101d\u0113j\u0101di tie ir prognoz\u0113jami.<br \/>\nTom\u0113r ar \u0161\u0101d\u0101m tehnolo\u0123ij\u0101m j\u0101b\u016bt uzman\u012bgiem, jo prognozes var \u013coti viegli<br \/>\nizr\u0101d\u012bties nepareizas un novest pie slikt\u0101ku l\u0113mumu pie\u0146em\u0161anas nek\u0101<br \/>\nt\u0101m b\u016btu bijis visp\u0101r bez zin\u0101\u0161an\u0101m.<\/p>\n<h3>MLFQ: Pamata noteikumi<\/h3>\n<p>Apskat\u012bsim MLFQ algoritma pamata noteikumus. Un, lai gan \u0161\u012b algoritma<br \/>\n\u012bstenojumu ir vair\u0101kas, pamata pieejas ir l\u012bdz\u012bgas.<br \/>\nIev\u0113rojot to realiz\u0101ciju, ko m\u0113s apskat\u012bsim, MLFQ b\u016bs vair\u0101kas<br \/>\natsevi\u0161\u0137as rindas, katrai no kur\u0101m b\u016bs at\u0161\u0137ir\u012bgs priorit\u0101tes l\u012bmenis. Jebkur\u0101 br\u012bdi,<br \/>\nuzdevums, kas gatavs izpildei, atrodas vien\u0101 rind\u0101. MLFQ izmanto priorit\u0101tes,<br \/>\nlai noteiktu, kuru uzdevumu palaist izpildei, t.i., uzdevums ar augst\u0101ku<br \/>\npriorit\u0101ti (uzdevums augst\u0101kas priorit\u0101tes rind\u0101) tiks palaists pirmais.<br \/>\nNeap\u0161aub\u0101mi, konkr\u0113t\u0101 rind\u0101 var b\u016bt vair\u0101k nek\u0101 viens uzdevums, t\u0101d\u0113j\u0101di<br \/>\nvi\u0146iem b\u016bs vien\u0101da priorit\u0101te. \u0160aj\u0101 gad\u012bjum\u0101 tiks izmantots RR meh\u0101nisms<br \/>\nuzdevumu izpildes pl\u0101no\u0161anai starp \u0161iem uzdevumiem.<br \/>\nT\u0101d\u0113j\u0101di m\u0113s non\u0101kam pie diviem pamata noteikumiem MLFQ:<br \/>\nNoteikums 1: Ja priorit\u0101te(A) &gt; Priorit\u0101te(B), tiks palaists uzdevums A (B netiks)<\/p>\n<ul>\n<li> Noteikums 2: Ja priorit\u0101te(A) = Priorit\u0101te(B), A un B tiek palaisti ar RR<\/li>\n<li> \u0145emot v\u0113r\u0101 iepriek\u0161 min\u0113to, galvenie elementi MLFQ pl\u0101no\u0161an\u0101<\/li>\n<\/ul>\n<p>ir priorit\u0101tes. T\u0101 viet\u0101, lai noteiktu fiks\u0113tu priorit\u0101ti katram<br \/>\nuzdevumam, MLFQ maina t\u0101 priorit\u0101ti atkar\u012bb\u0101 no nov\u0113rot\u0101s uzved\u012bbas.<br \/>\nPiem\u0113ram, ja uzdevums past\u0101v\u012bgi p\u0101rtrauc darbu uz CPU, gaidot ievadi no klaviat\u016bras,<br \/>\nMLFQ uztur\u0113s procesa priorit\u0101ti augst\u0101 l\u012bmen\u012b, jo tie\u0161i t\u0101<br \/>\nj\u0101darbojas interakt\u012bvam procesam. Ja, savuk\u0101rt, uzdevums past\u0101v\u012bgi un<br \/>\nintens\u012bvi izmanto CPU ilgsto\u0161i, MLFQ samazin\u0101s t\u0101<br \/>\npriorit\u0101ti. T\u0101d\u0113j\u0101di MLFQ apg\u016bs procesu uzved\u012bbu to darb\u012bbas laik\u0101<br \/>\nun izmantos \u0161o uzved\u012bbu.<br \/>\nZ\u012bm\u0113sim piem\u0113ru par to, k\u0101 var\u0113tu izskat\u012bties rindas noteikt\u0101 br\u012bd\u012b<br \/>\nun tas izskat\u012bsies aptuveni \u0161\u0101di:<br \/>\n\u0160aj\u0101 sh\u0113m\u0101 ir 2 procesi A un B augst\u0101k\u0101s priorit\u0101tes rind\u0101. Process<br \/>\n<img decoding=\"async\" alt=\"Oper\u0113t\u0101jsist\u0113mas: Tr\u012bs vieglas da\u013cas. 5. da\u013ca: Pl\u0101no\u0161ana: Multi-Level Feedback Queue (tulkojums)\" src=\"\/wp-content\/uploads\/2019\/04\/3598e9ca43a56049625bdcf3074de472.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>C atrodas kaut kur vid\u016b, bet process D rindas pa\u0161\u0101 gal\u0101. Saska\u0146\u0101 ar iepriek\u0161 min\u0113taj\u0101m<br \/>\nMLFQ algoritma aprakstiem pl\u0101not\u0101js izpild\u012bs tikai uzdevumus ar augst\u0101ko<br \/>\npriorit\u0101ti.<br \/>\npriorit\u0101te saska\u0146\u0101 ar RR, bet uzdevumi C un D paliks bez uzman\u012bbas.<br \/>\nDabiski, ka statisks snappshots nesniegs pilnu priek\u0161statu par to, k\u0101 darbojas MLFQ.<br \/>\nIr svar\u012bgi saprast, k\u0101 tie\u0161i att\u0113ls main\u0101s laika gait\u0101.<\/p>\n<h4>Pirmais m\u0113\u0123in\u0101jums: k\u0101 main\u012bt priorit\u0101ti<\/h4>\n<p>\u0160aj\u0101 br\u012bd\u012b j\u0101izlemj, k\u0101 MLFQ main\u012bs priorit\u0101tes l\u012bmeni<br \/>\nuzdevumiem (un l\u012bdz ar to uzdevumu st\u0101vokli rind\u0101) to dz\u012bves cikla laik\u0101. Lai<br \/>\nto izdar\u012btu, j\u0101tur pr\u0101t\u0101 darba process: noteikts skaits<br \/>\ninterakt\u012bvu uzdevumu ar \u012bsu izpildes laiku (un l\u012bdz ar to bie\u017ea CPU atbr\u012bvo\u0161ana)<br \/>\nun vair\u0101ki ilgi uzdevumi, kas izmanto CPU visu savu darba laiku, kam\u0113r<br \/>\naizture \u0161\u0101diem uzdevumiem nav svar\u012bga. T\u0101d\u0113j\u0101di var veikt pirmo m\u0113\u0123in\u0101jumu<br \/>\n\u012bstenot MLFQ algoritmu ar sekojo\u0161iem noteikumiem:<\/p>\n<ul>\n<li> Noteikums 3: Kad uzdevums ien\u0101k sist\u0113m\u0101, tas tiek novietots rind\u0101 ar augst\u0101ko<\/li>\n<li>priorit\u0101ti.<\/li>\n<li>Noteikums 4a: Ja uzdevums piln\u012bb\u0101 izmanto tam atv\u0113l\u0113to laika logu, tad t\u0101<\/li>\n<li>priorit\u0101te tiek pazemin\u0101ta.<\/li>\n<li>Noteikums 4b: Ja uzdevums atbr\u012bvo CPU pirms tam atv\u0113l\u0113t\u0101 laika loga beig\u0101m, tad tas<\/li>\n<li>paliek ar iepriek\u0161\u0113jo priorit\u0101ti.<\/li>\n<\/ul>\n<p><b>Piem\u0113rs 1: Atsevi\u0161\u0137s ilgi str\u0101d\u0101jo\u0161s uzdevums<\/b><\/p>\n<p>K\u0101 redzams \u0161aj\u0101 piem\u0113r\u0101, uzdevums ierodoties tiek novietots ar augst\u0101ko<br \/>\npriorit\u0101ti. P\u0113c 10 ms laika loga procesors tiek pazemin\u0101ts priorit\u0101t\u0113<br \/>\npl\u0101not\u0101jam. P\u0113c n\u0101kam\u0101 laika loga uzdevums galu gal\u0101 tiek pazemin\u0101ts l\u012bdz<br \/>\nzem\u0101kajai priorit\u0101tei sist\u0113m\u0101, kur tas ar\u012b paliek.<br \/>\n<img decoding=\"async\" alt=\"Oper\u0113t\u0101jsist\u0113mas: Tr\u012bs vieglas da\u013cas. 5. da\u013ca: Pl\u0101no\u0161ana: Multi-Level Feedback Queue (tulkojums)\" src=\"\/wp-content\/uploads\/2019\/04\/9b4ee6de03aa92d7957d50b4ffa73949.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p><b>Piem\u0113rs 2: Pien\u0101ca \u012bss uzdevums<\/b><\/p>\n<p>Tagad apl\u016bkosim piem\u0113ru, k\u0101 MLFQ cent\u012bsies tuvin\u0101ties SJF. \u0160aj\u0101<br \/>\npiem\u0113r\u0101 ir divi uzdevumi: A, kas ir ilgi str\u0101d\u0101jo\u0161s uzdevums, kas past\u0101v\u012bgi<br \/>\nizmanto CPU, un B, kas ir \u012bss interakt\u012bvs uzdevums. Pie\u0146emsim,<br \/>\nka A jau k\u0101du laiku ir str\u0101d\u0101jusi, kad ieveda uzdevumu B.<br \/>\n<img decoding=\"async\" alt=\"Oper\u0113t\u0101jsist\u0113mas: Tr\u012bs vieglas da\u013cas. 5. da\u013ca: Pl\u0101no\u0161ana: Multi-Level Feedback Queue (tulkojums)\" src=\"\/wp-content\/uploads\/2019\/04\/19c299b0519585fd1076a341a71f048b.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u0160aj\u0101 grafik\u0101 ir redzami scen\u0101rija rezult\u0101ti. Uzdevums A, k\u0101 jebkur\u0161 uzdevums,<br \/>\nkas izmanto CPU, izr\u0101d\u012bj\u0101s pa\u0161\u0101 apak\u0161\u0101. Uzdevums B ierad\u012bsies laik\u0101 T=100 un tiks<br \/>\nnovietots rind\u0101 ar augst\u0101ko priorit\u0101ti. T\u0101 k\u0101 t\u0101s izpildes laiks ir \u012bss, tad<br \/>\ntas pabeigs darbu pirms nok\u013c\u016b\u0161anas p\u0113d\u0113j\u0101 rind\u0101.<\/p>\n<p>No \u0161\u012b piem\u0113ra ir j\u0101saprot galvenais algoritma m\u0113r\u0137is: t\u0101 k\u0101 algoritms ne<br \/>\nzina, vai uzdevums ir gar\u0161 vai \u012bss, vispirms tam j\u0101pie\u0146em, ka uzdevums<br \/>\n\u012bsa un pie\u0161\u0137ir tam augst\u0101ko priorit\u0101ti. Ja t\u0101 patie\u0161\u0101m ir \u012bsa uzdevums, tad<br \/>\ntas tiks izpild\u012bts \u0101tri, pret\u0113j\u0101 gad\u012bjum\u0101, ja tas ir gar\u0161 uzdevums, tad tas l\u0113n\u0101m virz\u012bsies<br \/>\nuz zem\u0101ku priorit\u0101ti un dr\u012bz pier\u0101d\u012bs, ka tas patie\u0161\u0101m ir gar\u0161 uzdevums, kas ne<br \/>\nprasa atbildi.<\/p>\n<p><b>Piem\u0113rs 3: Kas par ievadi un izvadi?<\/b><\/p>\n<p>Tagad paskat\u012bsimies uz piem\u0113ru ar ievadi un izvadi. K\u0101 tika apgalvots noteikum\u0101 4b,<br \/>\nja process atbr\u012bvo procesoru, neizmantot piln\u012bb\u0101 savu procesora laiku,<br \/>\ntad tas paliek iepriek\u0161\u0113j\u0101 priorit\u0101tes l\u012bmen\u012b. \u0160\u012b noteikuma nodoms ir diezgan vienk\u0101r\u0161s<br \/>\n- ja interakt\u012bvs uzdevums veic daudz ievadi un izvad\u012b\u0161anas oper\u0101ciju, piem\u0113ram, gaidot<br \/>\nlietot\u0101ja tausti\u0146u vai pele spiedienus, \u0161\u0101ds uzdevums atbr\u012bvos procesoru<br \/>\nagr\u0101k noteikt\u0101 log\u0101. Mums nepatiktu pazemin\u0101t t\u0101da uzdevuma priorit\u0101ti,<br \/>\nun t\u0101d\u0113j\u0101di tas paliks iepriek\u0161\u0113j\u0101 l\u012bmen\u012b.<br \/>\n<img decoding=\"async\" alt=\"Oper\u0113t\u0101jsist\u0113mas: Tr\u012bs vieglas da\u013cas. 5. da\u013ca: Pl\u0101no\u0161ana: Multi-Level Feedback Queue (tulkojums)\" src=\"\/wp-content\/uploads\/2019\/04\/480d33a670fb62a639e5938dd59e30a1.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u0160is piem\u0113rs par\u0101da, k\u0101 algoritms darbosies ar \u0161\u0101diem procesiem \u2013 interakt\u012bvs uzdevums B, kas nepiecie\u0161ams CPU tikai 1 ms pirms izpildes<br \/>\nievadi un ilgsto\u0161s uzdevums A, kas visu savu laiku izmanto CPU.<br \/>\nMLFQ uztur procesu B ar augst\u0101ko priorit\u0101ti, jo tas visu laiku turpina<br \/>\natbr\u012bvot CPU. Ja B ir interakt\u012bvs uzdevums, tad algoritms \u0161aj\u0101 gad\u012bjum\u0101 sasniedz<br \/>\nsavu m\u0113r\u0137i \u0101tri palaist interakt\u012bvos uzdevumus.<\/p>\n<p><b>Probl\u0113mas ar pa\u0161reiz\u0113jo algoritmu MLFQ<\/b><\/p>\n<p>Iepriek\u0161\u0113j\u0101s piem\u0113ros m\u0113s uzb\u016bv\u0113j\u0101m pamata variantu MLFQ. Un \u0161\u0137iet, ka tas<br \/>\nizpilda savu uzdevumu labi un god\u012bgi, god\u012bgi sadalot procesora laiku starp<br \/>\nilgsto\u0161iem uzdevumiem un \u013caujot \u012bsiem uzdevumiem vai uzdevumiem, kas intens\u012bvi veic<br \/>\nieguld\u012b\u0161anu, darboties \u0101tri. Diem\u017e\u0113l \u0161\u0101ds pieg\u0101jiens satur vair\u0101kas<br \/>\nnopietnas probl\u0113mas.<br \/>\n<b>Pirmk\u0101rt<\/b>, izsalkuma probl\u0113ma: ja sist\u0113m\u0101 b\u016bs daudz interakt\u012bvu<br \/>\nuzdevumu, tie pat\u0113r\u0113s visu procesora laiku un t\u0101d\u0113j\u0101di nevienam ilgsto\u0161am<br \/>\nuzdevumam neb\u016bs iesp\u0113jas izpild\u012bties (tie izsalkst).<\/p>\n<p><b>Otrk\u0101rt<\/b>, viedie lietot\u0101ji var\u0113tu rakst\u012bt savas programmas t\u0101, lai<br \/>\napm\u0101n\u012btu pl\u0101not\u0101ju. M\u0101ns ir taj\u0101, lai izdar\u012btu kaut ko t\u0101du, kas liktu<br \/>\npl\u0101not\u0101jam pie\u0161\u0137irt procesam vair\u0101k procesora laika. Algoritms, kas<br \/>\niepriek\u0161 min\u0113t\u0101 ir piln\u012bgi uz\u0146\u0113m\u012bga pret l\u012bdz\u012bg\u0101m uzbrukumu metod\u0113m: pirms laika loga praktiski<br \/>\nbeigu\u0161an\u0101s ir j\u0101veic ievades-izvades oper\u0101cija (uz k\u0101du, nav svar\u012bgi, uz k\u0101du failu)<br \/>\nun t\u0101d\u0113j\u0101di atbr\u012bvot CPU. \u0160\u0101da uzved\u012bba \u013caus palikt taj\u0101 pa\u0161\u0101<br \/>\nrind\u0101 un atkal ieg\u016bt liel\u0101ku procentu\u0101lo da\u013cu no procesora laika. Ja to izdar\u012bs<br \/>\npareizi (piem\u0113ram, darbojoties 99% laika loga pirms CPU atbr\u012bvo\u0161anas),<br \/>\nt\u0101da uzdevums var vienk\u0101r\u0161i monopoliz\u0113t procesoru.<\/p>\n<p>Beig\u0101s programma var main\u012bt savu uzved\u012bbu laika gait\u0101. T\u0101s uzdevumi,<br \/>\nkas izmantoja CPU, var k\u013c\u016bt interakt\u012bvi. M\u016bsu piem\u0113r\u0101 l\u012bdz\u012bgi<br \/>\nuzdevumi nesa\u0146ems pien\u0101c\u012bgu attieksmi no pl\u0101not\u0101ja, k\u0101d\u0101 potenci\u0101li sa\u0146emtu citi<br \/>\n(s\u0101kotn\u0113jie) interakt\u012bvie uzdevumi.<\/p>\n<p><u>Jaut\u0101jums z\u0101lei: k\u0101das uzbrukumu metodes pret pl\u0101not\u0101ju var\u0113ja tikt \u012bstenotas m\u016bsdienu pasaul\u0113?<br \/>\n<\/u><\/p>\n<h4>M\u0113\u0123in\u0101jums 2: Priorit\u0101tes paaugstin\u0101\u0161ana<\/h4>\n<p>M\u0113\u0123in\u0101sim main\u012bt noteikumus un redz\u0113sim, vai varam izvair\u012bties no probl\u0113m\u0101m ar<br \/>\nizsalkumu. Ko m\u0113s var\u0113tu dar\u012bt, lai garant\u0113tu, ka ar<br \/>\nCPU saist\u012btie uzdevumi sa\u0146ems savu laiku (pat ja ne ilgi).<br \/>\nK\u0101 vienk\u0101r\u0161u probl\u0113mas risin\u0101jumu var\u0113tu ieteikt periodiski<br \/>\npaaugstin\u0101t visiem \u0161\u0101diem uzdevumiem priorit\u0101ti sist\u0113m\u0101. Ir daudz veidu<br \/>\nk\u0101 to pan\u0101kt, m\u0113\u0123in\u0101sim \u012bstenot k\u0101du vienk\u0101r\u0161u piem\u0113ru: p\u0101rv\u0113rst<br \/>\nuzreiz visus uzdevumus augst\u0101kaj\u0101 priorit\u0101t\u0113, no t\u0101 izriet jauns noteikums:<\/p>\n<ul>\n<li><b>Rule5<\/b>: P\u0113c noteikta laika perioda S p\u0101rv\u0113rst visus uzdevumus sist\u0113m\u0101 augst\u0101kaj\u0101 rind\u0101.<\/li>\n<\/ul>\n<p>M\u016bsu jaunais noteikums risina divas probl\u0113mas t\u016bl\u012bt. Pirmk\u0101rt, procesi<br \/>\ngarant\u0113ti necie\u0161 izsalkumu: uzdevumi, kas atrodas augst\u0101kaj\u0101 rind\u0101, dal\u012bs<br \/>\nprocesora laiku saska\u0146\u0101 ar RR algoritmu un t\u0101d\u0113j\u0101di visi procesi sa\u0146ems<br \/>\nprocesora laiku. Otrk\u0101rt, ja k\u0101ds process, kur\u0161 iepriek\u0161 izmantoja<br \/>\ntikai procesoru, k\u013c\u016bst interakt\u012bvs, tad tas paliks rind\u0101 ar augst\u0101ko<br \/>\npriorit\u0101ti p\u0113c tam, kad to vienreiz paaugstin\u0101s l\u012bdz augst\u0101kajam.<br \/>\nApskat\u012bsim piem\u0113ru. \u0160aj\u0101 scen\u0101rij\u0101 apskat\u012bsim vienu procesu, kas izmanto<br \/>\n<img decoding=\"async\" alt=\"Oper\u0113t\u0101jsist\u0113mas: Tr\u012bs vieglas da\u013cas. 5. da\u013ca: Pl\u0101no\u0161ana: Multi-Level Feedback Queue (tulkojums)\" src=\"\/wp-content\/uploads\/2019\/04\/3b8d879ab4479622684b126ec5af6af3.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>CPU un divi interakt\u012bvi, \u012bsie procesi. Att\u0113l\u0101 pa kreisi ir par\u0101d\u012bts uzved\u012bbas modelis bez priorit\u0101tes paaugstin\u0101\u0161anas, un t\u0101d\u0113j\u0101di garie uzdevumi s\u0101k gaid\u012bt p\u0113c divu interakt\u012bvu uzdevumu iera\u0161an\u0101s sist\u0113m\u0101. Att\u0113l\u0101 pa labi katras 50 ms tiek veikta priorit\u0101tes paaugstin\u0101\u0161ana un t\u0101d\u0113j\u0101di visi procesi garant\u0113ti sa\u0146em procesora laiku un tiks periodiski izpild\u012bti. 50 ms \u0161aj\u0101 gad\u012bjum\u0101 tiek \u0146emti piem\u0113ram, faktiski \u0161is skaitlis ir nedaudz liel\u0101ks.<br \/>\nAc\u012bmredzami, ka periodisk\u0101 paaugstin\u0101\u0161anas S laika pievieno\u0161ana noved pie<br \/>\nlo\u0123iska jaut\u0101juma: k\u0101da v\u0113rt\u012bba tam ir j\u0101b\u016bt? Viens no cien\u012bjamajiem<br \/>\nsist\u0113mu in\u017eenieriem John Ousterhout \u0161\u0101dus lielumus sist\u0113m\u0101s d\u0113v\u0113ja par voo-doo<br \/>\nkonstanti, jo tie kaut k\u0101d\u0101 veid\u0101 pras\u012bja melno ma\u0123iju pareizai<br \/>\niestat\u012b\u0161anai. Un, diem\u017e\u0113l, S ir ar t\u0101du piegar\u0161u. Ja iestata v\u0113rt\u012bbu p\u0101r\u0101k<br \/>\nlielu \u2014 gari uzdevumi s\u0101k gaid\u012bt. Bet ja iestata p\u0101r\u0101k zemu v\u0113rt\u012bbu,<br \/>\ninterakt\u012bvie uzdevumi nesa\u0146ems pien\u0101c\u012bgu procesora laiku.<\/p>\n<h4>M\u0113\u0123in\u0101jums 3: Lab\u0101k\u0101 uzskaite<\/h4>\n<p>Tagad mums ir v\u0113l viena probl\u0113ma, ko j\u0101atrisina: k\u0101 ne<br \/>\n\u013caut m\u016bsu pl\u0101not\u0101jam maldin\u0101t? Atbild\u012bgie par \u0161o iesp\u0113ju ir<br \/>\nnoteikumi 4a, 4b, kas \u013cauj uzdevumam saglab\u0101t priorit\u0101ti, atbr\u012bvojot procesoru<br \/>\nl\u012bdz tai ir beidzies pie\u0161\u0137irts laiks. K\u0101 ar to tikt gal\u0101?<br \/>\nRisin\u0101jums \u0161aj\u0101 gad\u012bjum\u0101 var b\u016bt lab\u0101ka procesora laika uzskaite katr\u0101<br \/>\nMLFQ l\u012bmen\u012b. T\u0101 viet\u0101, lai aizmirstu laiku, kuru programma izmantoja<br \/>\nprocesoram pie\u0161\u0137irtaj\u0101 period\u0101, vajadz\u0113tu to uzskait\u012bt un saglab\u0101t. P\u0113c tam, kad<br \/>\nprocess ir izt\u0113r\u0113jis tam pie\u0161\u0137irto laiku, tam j\u0101maina priorit\u0101te uz n\u0101kamo<br \/>\nzem\u0101ko priorit\u0101ti. Tagad nav svar\u012bgi, k\u0101 procesu izmantos \u2014 vai<br \/>\npast\u0101v\u012bgi r\u0113\u0137in\u0101jot uz procesora vai k\u0101 vair\u0101kus izsaukumus. T\u0101d\u0113j\u0101di,<br \/>\nb\u016btu j\u0101p\u0101rraksta noteikums 4 \u0161\u0101d\u0101 veid\u0101:<\/p>\n<ul>\n<li><b>Rule4<\/b>: P\u0113c tam, kad uzdevums ir izt\u0113r\u0113jis tai pie\u0161\u0137irto laiku pa\u0161reiz\u0113j\u0101 rind\u0101 (neatkar\u012bgi no t\u0101, cik reizes t\u0101 ir atbr\u012bvojusi CPU), t\u0101 priorit\u0101te tiek samazin\u0101ta (t\u0101 p\u0101rvietojas uz leju rind\u0101).<\/li>\n<\/ul>\n<p>Apskat\u012bsim piem\u0113ru:<br \/>\n<img decoding=\"async\" alt=\"Oper\u0113t\u0101jsist\u0113mas: Tr\u012bs vieglas da\u013cas. 5. da\u013ca: Pl\u0101no\u0161ana: Multi-Level Feedback Queue (tulkojums)\" src=\"\/wp-content\/uploads\/2019\/04\/18c53e62b9b342d14a23995bd422ef5e.png\" style=\"display:block;margin: 0 auto;\">\u201e<\/p>\n<p>Att\u0113l\u0101 par\u0101d\u012bts, kas notiek, ja m\u0113\u0123in\u0101t maldin\u0101t pl\u0101not\u0101ju, k\u0101<br \/>\nja, ja iepriek\u0161\u0113jie noteikumi 4a, 4b sniegtu rezult\u0101tu pa kreisi. Ar jauno<br \/>\nnoteikumu - rezult\u0101ts pa labi. Pirms aizsardz\u012bbas jebkur\u0161 process var\u0113ja izsaukt I\/O l\u012bdz pabeig\u0161anai un<br \/>\nt\u0101d\u0113j\u0101di domin\u0113t CPU, p\u0113c aizsardz\u012bbas iesl\u0113g\u0161anas, neatkar\u012bgi no uzved\u012bbas<br \/>\nI\/O, tas tom\u0113r tiks nolaists rind\u0101s un t\u0101d\u0113j\u0101di nevar\u0113s negod\u012bgi<br \/>\nieg\u016bt CPU resursus.<\/p>\n<h4>Uzlabojam MLFQ un citas probl\u0113mas<\/h4>\n<p>Ar iepriek\u0161 min\u0113tajiem uzlabojumiem rodas jaunas probl\u0113mas: viens no galvenajiem<br \/>\njaut\u0101jumiem ir, k\u0101 parametriz\u0113t t\u0101du pl\u0101not\u0101ju? Cik daudz j\u0101b\u016bt<br \/>\nrind\u0101m? K\u0101ds ir programmas darba loga izm\u0113rs rind\u0101? Cik<br \/>\nbie\u017ei j\u0101paaugstina programmas priorit\u0101te, lai izvair\u012btos no izsalkuma un<br \/>\n\u0146emtu v\u0113r\u0101 programmas uzved\u012bbas izmai\u0146as? Uz \u0161iem jaut\u0101jumiem nav vienk\u0101r\u0161as<br \/>\natbildes, un tikai eksperimenti ar slodz\u0113m un turpm\u0101k\u0101 konfigur\u0101cija<br \/>\npl\u0101not\u0101jam var novest pie k\u0101da apmierino\u0161a l\u012bdzsvara.<\/p>\n<p>Piem\u0113ram, liel\u0101k\u0101 da\u013ca MLFQ realiz\u0101ciju \u013cauj pie\u0161\u0137irt da\u017e\u0101dus<br \/>\nlaika interv\u0101lus da\u017e\u0101d\u0101m rind\u0101m. Augstas priorit\u0101tes rind\u0101m parasti<br \/>\npie\u0161\u0137ir \u012bsus interv\u0101lus. \u0160\u012bs rindas sast\u0101v no interakt\u012bv\u0101m uzdevumiem,<br \/>\nstarptautiskas kuriem p\u0101rsl\u0113g\u0161an\u0101s ir diezgan j\u016bt\u012bga un tai j\u0101aiz\u0146em 10 vai maz\u0101k<br \/>\nms. Pret\u0113ji tam, zemas priorit\u0101tes rindas sast\u0101v no ilgsto\u0161\u0101m uzdevumiem, kas izmantos<br \/>\nCPU. Un \u0161aj\u0101 gad\u012bjum\u0101 garie laika interv\u0101li der \u013coti labi (100ms).<br \/>\n<img decoding=\"async\" alt=\"Oper\u0113t\u0101jsist\u0113mas: Tr\u012bs vieglas da\u013cas. 5. da\u013ca: Pl\u0101no\u0161ana: Multi-Level Feedback Queue (tulkojums)\" src=\"\/wp-content\/uploads\/2019\/04\/4eb6c6669034adeb1615c29454fbb1dc.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u0160aj\u0101 piem\u0113r\u0101 ir 2 uzdevumi, kas str\u0101d\u0101ju\u0161i augstas priorit\u0101tes rind\u0101 20<br \/>\nms, sadal\u012bti logiem pa 10ms. 40ms vid\u0113j\u0101 rind\u0101 (logs 20ms) un zem\u0101s priorit\u0101tes<br \/>\nrind\u0101 laika logs bija 40ms, kur uzdevumi pabeidza savu darbu.<\/p>\n<p>MLFQ realiz\u0101cija Solaris OS - pl\u0101not\u0101ju klase, kas dal\u0101s pa laikam.<br \/>\nPl\u0101not\u0101js nodro\u0161ina virkni tabulu, kas prec\u012bzi nosaka, k\u0101d\u0101 veid\u0101<br \/>\nj\u0101maina procesa priorit\u0101te t\u0101 dz\u012bves laik\u0101, k\u0101dam j\u0101b\u016bt izm\u0113ram<br \/>\npie\u0161\u0137irt\u0101 loga un cik bie\u017ei j\u0101paaugstina uzdevuma priorit\u0101tes. Sist\u0113mas<br \/>\nadministrators var mijiedarboties ar \u0161o tabulu un likt pl\u0101not\u0101jam uzvesties<br \/>\nat\u0161\u0137ir\u012bgi. Noklus\u0113juma \u0161aj\u0101 tabul\u0101 ir 60 rindas ar pak\u0101penisku palielin\u0101\u0161anu<br \/>\nlogu izm\u0113rs no 20ms (augsta priorit\u0101te) l\u012bdz da\u017eiem simtiem ms (zem\u0101ka priorit\u0101te), un<br \/>\nar\u012b ar uzlabojumu vis\u0101m uzdevumu izpild\u0113m reizi sekund\u0113.<\/p>\n<p>Citi MLFQ pl\u0101not\u0101ji neizmanto tabulas vai k\u0101dus konkr\u0113tus<br \/>\nnoteikumus, kas aprakst\u012bti \u0161aj\u0101 lekcij\u0101, tie tie\u0161i apr\u0113\u0137ina priorit\u0101tes, izmantojot<br \/>\nmatem\u0101tisk\u0101s formulas. Piem\u0113ram, pl\u0101not\u0101js FreeBSD izmanto formulu, lai<br \/>\napr\u0113\u0137in\u0101tu pa\u0161reiz\u0113jo uzdevuma priorit\u0101ti, balstoties uz to, cik daudz procesors<br \/>\nizmantojis CPU. Turkl\u0101t CPU izmanto\u0161ana laika gait\u0101 samazin\u0101s, un l\u012bdz ar to<br \/>\npriorit\u0101tes paaugstin\u0101\u0161ana notiek nedaudz sav\u0101d\u0101k nek\u0101 iepriek\u0161 aprakst\u012bts. Tas ir<br \/>\nt\u0101 saucamais decay algoritms. Kop\u0161 versijas 7.1 FreeBSD izmanto pl\u0101not\u0101ju ULE.<\/p>\n<p>Visbeidzot, daudzi pl\u0101not\u0101ji ir ar cit\u0101m \u012bpa\u0161\u012bb\u0101m. Piem\u0113ram, da\u017ei<br \/>\npl\u0101not\u0101ji rezerv\u0113 augst\u0101kos l\u012bme\u0146us oper\u0113t\u0101jsist\u0113mas darb\u012bbai, un t\u0101d\u0113j\u0101di<br \/>\nnek\u0101ds lietot\u0101ju process nevar ieg\u016bt visaugst\u0101ko priorit\u0101ti<br \/>\nsistem\u0101. Da\u017eas sist\u0113mas \u013cauj sniegt nor\u0101d\u012bjumus, lai pal\u012bdz\u0113tu<br \/>\npl\u0101not\u0101jam pareizi noteikt priorit\u0101tes. Piem\u0113ram, izmantojot komandu <b>nice<\/b><br \/>\nir iesp\u0113jams palielin\u0101t vai samazin\u0101t uzdevuma priorit\u0101ti un t\u0101d\u0113j\u0101di paaugstin\u0101t vai<br \/>\nsamazin\u0101t programmas izredzes uz procesora laiku.<\/p>\n<h3>MLFQ: Secin\u0101jumi<\/h3>\n<p>M\u0113s esam aprakst\u012bju\u0161i pl\u0101no\u0161anas pieeju, ko sauc par MLFQ. T\u0101 nosaukums<br \/>\nbalst\u0101s uz darb\u012bbas principu \u2014 tai ir vair\u0101ki izs\u016bt\u012b\u0161anas l\u012bme\u0146i un t\u0101 izmanto atgriezenisko saiti<br \/>\nuzdevuma priorit\u0101tes noteik\u0161anai.<br \/>\nGal\u012bg\u0101 noteikumu forma b\u016bs \u0161\u0101da:<\/p>\n<ul>\n<li><b>Noteikums 1<\/b>: Ja priorit\u0101te(A) &gt; Priorit\u0101te(B), tad tiks palaists uzdevums A (B netiks palaists)<\/li>\n<li><b>Noteikums 2<\/b>: Ja priorit\u0101te(A) = Priorit\u0101te(B), A un B tiks palaistas, izmantojot RR<\/li>\n<li><b>Noteikums 3<\/b>: Kad uzdevums tiek pie\u0146emts sist\u0113m\u0101, tas tiek ievietots visaugst\u0101k\u0101s priorit\u0101tes rind\u0101.<\/li>\n<li><b>Rule4<\/b>: P\u0113c tam, kad uzdevums ir izt\u0113r\u0113jis tai pie\u0161\u0137irto laiku pa\u0161reiz\u0113j\u0101 rind\u0101 (neatkar\u012bgi no t\u0101, cik reizes t\u0101 ir atbr\u012bvojusi CPU), t\u0101 priorit\u0101te tiek samazin\u0101ta (t\u0101 p\u0101rvietojas uz leju rind\u0101).<\/li>\n<li><b>Rule5<\/b>: P\u0113c noteikta laika perioda S p\u0101rv\u0113rst visus uzdevumus sist\u0113m\u0101 augst\u0101kaj\u0101 rind\u0101.<\/li>\n<\/ul>\n<p>MLFQ ir interesants \u0161\u0101du iemeslu d\u0113\u013c \u2014 viet\u0101, lai piepras\u012btu iepriek\u0161\u0113ju izpratni par<br \/>\nuzdevuma dabu, algoritms p\u0113ta uzdevuma pag\u0101tnes uzved\u012bbu un nosaka<br \/>\npriorit\u0101tes atbilsto\u0161i. T\u0101d\u0113j\u0101di tas cen\u0161as uzreiz s\u0113d\u0113t uz div\u0101m kr\u0113sl\u0101m \u2014 sasniegt veiktsp\u0113ju mazajiem uzdevumiem (SJF, STCF) un god\u012bgi izpild\u012bt garos,<br \/>\nCPU intens\u012bvos uzdevumus. T\u0101p\u0113c daudzas sist\u0113mas, tostarp BSD un to atvasin\u0101jumus,<br \/>\nSolaris, Windows, Mac izmanto da\u017e\u0101du MLFQ algoritma formu<br \/>\nk\u0101 pamata pl\u0101not\u0101ju.<\/p>\n<h4>Papildu materi\u0101li:<\/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>Avots: <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.5 - 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\/lv\/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.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\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\/lv\/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\udd47Oper\u0113t\u0101jsist\u0113mas: Tr\u012bs vieglas da\u013cas. 5. da\u013ca: Pl\u0101no\u0161ana: Vair\u0101kpak\u0101pju atgriezenisk\u0101s saites rindas (tulkojums) | ProHoster","description":"Ievads oper\u0113t\u0101jsist\u0113m\u0101s Sveiki, Habr! V\u0113los iepaz\u012bstin\u0101t j\u016bs ar rakstu s\u0113riju par tulkot\u0101m interesant\u0101m literat\u016br\u0101m \u2014 OSTEP.","canonical_url":"https:\/\/prohoster.info\/lv\/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":"lv_LV","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\/lv\/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\/lv\/wp-json\/wp\/v2\/posts\/32730","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=32730"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/32730\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/24514"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=32730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=32730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=32730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}