{"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\/sv\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-5-planirovanie-multi-level-feedback-queue-perevod","title":{"rendered":"Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (\u00f6vers\u00e4ttning)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Introduktion till operativsystem<\/h1>\n<p>Hej, Habr! Jag vill presentera f\u00f6r er en serie \u00f6vers\u00e4ttningsartiklar av en intressant litteratur \u2014 OSTEP. I detta material behandlas djupg\u00e5ende hur unix-liknande operativsystem fungerar, n\u00e4mligen arbetet med processer, olika schemal\u00e4ggare, minne och andra liknande komponenter som utg\u00f6r ett modernt OS. Originalet av allt material kan du se h\u00e4r <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">). Ett typiskt exempel p\u00e5 anv\u00e4ndning:<\/a><\/noindex>. Observera att \u00f6vers\u00e4ttningen \u00e4r utf\u00f6rd oprofessionellt (relativt fritt), men jag hoppas att jag har bevarat den \u00f6vergripande meningen.<\/p>\n<p>Laborationsarbeten f\u00f6r detta \u00e4mne kan hittas h\u00e4r:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">original<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">original<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">min personliga anpassning<\/a><\/noindex><\/li>\n<\/ul>\n<p>Andra delar:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">Del 1: Intro<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446866\/\">Del 2: Abstraktion: process<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/447182\/\">Del 3: Introduktion till processernas API<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/449026\/\">Del 4: Introduktion till schemal\u00e4ggaren<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/450116\/\">Del 5: MLFQ-schemal\u00e4ggare<\/a><\/noindex><\/li>\n<\/ul>\n<p>Och du kan ocks\u00e5 kolla in min kanal p\u00e5 <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>Schemal\u00e4ggning: Multi-Level Feedback Queue<\/h2>\n<p>I denna f\u00f6rel\u00e4sning kommer vi att diskutera problemen med att utveckla en av de mest k\u00e4nda metoderna f\u00f6r<br \/>\nschemal\u00e4ggning, som kallas <b>Multi-Level Feedback Queue<\/b> (MLFQ). F\u00f6rsta g\u00e5ngen MLFQ-schemal\u00e4ggaren beskrevs var 1962 av Fernando J. Corbat\u00f3 i systemet k\u00e4nt som<br \/>\nCompatible Time-Sharing System (CTSS). Dessa arbeten (inklusive senare arbeten inom<br \/>\nMultics) presenterades senare f\u00f6r Turing Award. Schemal\u00e4ggaren har<br \/>\nsedan f\u00f6rb\u00e4ttrats och f\u00e5tt formen som vi ser i<br \/>\nn\u00e5gra moderna system.<\/p>\n<p>MLFQ-algoritmen f\u00f6rs\u00f6ker l\u00f6sa 2 grundl\u00e4ggande \u00f6verlappande problem.<br \/>\n<b>F\u00f6r det f\u00f6rsta<\/b>, den f\u00f6rs\u00f6ker optimera genomloppstiden, som vi diskuterade i den f\u00f6reg\u00e5ende f\u00f6rel\u00e4sningen, och som optimeras genom att k\u00f6ra de<br \/>\nkortaste uppgifterna f\u00f6rst. Men, OS vet inte hur l\u00e4nge en viss process kommer att ta, och detta<br \/>\n\u00e4r n\u00f6dv\u00e4ndig kunskap f\u00f6r att algoritmer som SJF, STCF ska fungera. <b>F\u00f6r det andra<\/b>, MLFQ f\u00f6rs\u00f6ker<br \/>\ng\u00f6ra systemet responsivt f\u00f6r anv\u00e4ndare (till exempel de som v\u00e4ntar och<br \/>\nser p\u00e5 sk\u00e4rmen i v\u00e4ntan p\u00e5 att uppgiften ska slutf\u00f6ras) och p\u00e5 s\u00e5 s\u00e4tt minimera<br \/>\nrespons tiden. Tyv\u00e4rr minskar algoritmer som RR respons tiden, men de p\u00e5verkar negativt<br \/>\ngenomloppstiden. D\u00e4rmed har vi v\u00e5rt problem: Hur kan vi designa en<br \/>\nschemal\u00e4ggare som uppfyller v\u00e5ra krav utan att veta n\u00e5got om<br \/>\nprocessens natur, generellt? Hur kan schemal\u00e4ggaren l\u00e4ra sig egenskaperna hos uppgifterna<br \/>\nsom den k\u00f6r och d\u00e4rmed fatta b\u00e4ttre beslut om schemal\u00e4ggning?<\/p>\n<p><u>K\u00e4rnproblemet: Hur schemal\u00e4gger man uppgifter utan perfekt kunskap?<br \/>\nHur kan vi utveckla en schemal\u00e4ggare som b\u00e5de minimerar respons tiden<br \/>\nf\u00f6r interaktiva uppgifter och samtidigt minimerar genomloppstiden utan tydlig<br \/>\nkunskap om uppgiftens exekveringstid?<\/u><\/p>\n<p>Notering: l\u00e4r sig av tidigare h\u00e4ndelser<\/p>\n<p>MLFQ-k\u00f6 \u00e4r ett utm\u00e4rkt exempel p\u00e5 ett system som l\u00e4r sig fr\u00e5n<br \/>\ntidigare h\u00e4ndelser f\u00f6r att f\u00f6ruts\u00e4ga framtiden. Liknande metoder f\u00f6rekommer ofta<br \/>\ni OS (och m\u00e5nga andra omr\u00e5den inom datavetenskap, inklusive<br \/>\nprediktioner inom h\u00e5rdvara och cachalgoritmer). Liknande metoder<br \/>\nfungerar n\u00e4r uppgifterna har beteendefaser och d\u00e4rmed \u00e4r f\u00f6ruts\u00e4gbara.<br \/>\nMen med s\u00e5dan teknik b\u00f6r man vara f\u00f6rsiktig, eftersom f\u00f6ruts\u00e4gelser mycket l\u00e4tt<br \/>\nkan visa sig vara felaktiga och leda systemet till att fatta s\u00e4mre beslut \u00e4n<br \/>\nvad som skulle vara fallet utan kunskap \u00f6verhuvudtaget.<\/p>\n<h3>MLFQ: Grundl\u00e4ggande regler<\/h3>\n<p>L\u00e5t oss titta p\u00e5 de grundl\u00e4ggande reglerna f\u00f6r MLFQ-algoritmen. \u00c4ven om det finns flera<br \/>\nimplementationer av denna algoritm, \u00e4r de grundl\u00e4ggande tillv\u00e4gag\u00e5ngss\u00e4tten liknande.<br \/>\nI den implementation vi kommer att titta p\u00e5, kommer MLFQ att ha flera<br \/>\nseparata k\u00f6er, d\u00e4r varje k\u00f6 har olika prioritet. N\u00e4r som helst<br \/>\n\u00e4r en uppgift som \u00e4r redo att k\u00f6ras i en k\u00f6. MLFQ anv\u00e4nder prioriteringar<br \/>\nf\u00f6r att avg\u00f6ra vilken uppgift som ska k\u00f6ras, det vill s\u00e4ga, uppgiften med h\u00f6gre<br \/>\nprioritet (uppgiften fr\u00e5n k\u00f6n med h\u00f6gst prioritet) kommer att k\u00f6ras f\u00f6rst.<br \/>\nSj\u00e4lvklart kan det finnas mer \u00e4n en uppgift i en specifik k\u00f6, s\u00e5 de<br \/>\nkommer att ha samma prioritet. I s\u00e5 fall kommer en RR-mekanism<br \/>\natt anv\u00e4ndas f\u00f6r att schemal\u00e4gga k\u00f6rningen mellan dessa uppgifter.<br \/>\nS\u00e5ledes kommer vi till tv\u00e5 grundl\u00e4ggande regler f\u00f6r MLFQ:<br \/>\nRegel 1: Om Prioritet(A) &gt; Prioritet(B), kommer uppgift A att k\u00f6ras (B kommer inte)<\/p>\n<ul>\n<li> Regel 2: Om Prioritet(A) = Prioritet(B), A och B k\u00f6rs med hj\u00e4lp av RR<\/li>\n<li> Baserat p\u00e5 ovanst\u00e5ende, \u00e4r nyckelelementen f\u00f6r MLFQ-schemal\u00e4ggning<\/li>\n<\/ul>\n<p>prioriteter. Ist\u00e4llet f\u00f6r att ge varje uppgift en fast prioritet,<br \/>\n\u00e4ndrar MLFQ sin prioritet baserat p\u00e5 observerat beteende.<br \/>\nTill exempel, om en uppgift st\u00e4ndigt sl\u00e4nger CPU-arbete i v\u00e4ntan p\u00e5 tangentbordsinmatning,<br \/>\nkommer MLFQ att h\u00e5lla processens prioritet h\u00f6g, eftersom det \u00e4r s\u00e5<br \/>\nen interaktiv process b\u00f6r fungera. Om en uppgift d\u00e4remot st\u00e4ndigt och<br \/>\nintensivt anv\u00e4nder CPU under en l\u00e4ngre period, kommer MLFQ att s\u00e4nka dess<br \/>\nprioritet. S\u00e5ledes kommer MLFQ att studera processers beteende under deras k\u00f6rning<br \/>\noch anv\u00e4nda detta beteende.<br \/>\nL\u00e5t oss rita ett exempel p\u00e5 hur k\u00f6erna skulle kunna se ut vid en viss tidpunkt<br \/>\noch d\u00e5 f\u00e5 n\u00e5got i stil med detta:<br \/>\nI detta schema ligger processerna A och B i k\u00f6n med h\u00f6gst prioritet. Process C<br \/>\n<img decoding=\"async\" alt=\"Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (\u00f6vers\u00e4ttning)\" src=\"\/wp-content\/uploads\/2019\/04\/3598e9ca43a56049625bdcf3074de472.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u00e4r n\u00e5gonstans i mitten, och process D i slutet av k\u00f6n. Enligt de ovan n\u00e4mnda<br \/>\nbeskrivningarna av MLFQ-algoritmen kommer schemal\u00e4ggaren att utf\u00f6ra uppgifter med h\u00f6gst prioritet.<br \/>\nenligt beskrivningarna av algoritmen kommer MLFQ-schemal\u00e4ggaren endast att k\u00f6ra uppgifter med h\u00f6gsta prioritet<br \/>\nprioriteras enligt RR, medan uppgifterna C och D inte kommer att vara aktuella.<br \/>\nSj\u00e4lvklart kommer en statisk snapshot inte att ge en fullst\u00e4ndig bild av hur MLFQ fungerar.<br \/>\nDet \u00e4r viktigt att f\u00f6rst\u00e5 hur bilden f\u00f6r\u00e4ndras \u00f6ver tid.<\/p>\n<h4>F\u00f6rs\u00f6k 1: Hur man \u00e4ndrar prioritet<\/h4>\n<p>Vid denna punkt m\u00e5ste det l\u00f6sas hur MLFQ kommer att justera prioriteringsniv\u00e5n<br \/>\nf\u00f6r uppgifter (och d\u00e4rigenom positionen f\u00f6r uppgiften i k\u00f6n) under hela dess livscykel. F\u00f6r<br \/>\ndetta m\u00e5ste man ha arbetsfl\u00f6det i \u00e5tanke: ett visst antal<br \/>\ninteraktiva uppgifter med kort tid av arbete (och d\u00e4rigenom frekvent frigivning av<br \/>\nCPU) och ett par l\u00e5nga uppgifter som anv\u00e4nder CPU hela sin arbetstid, d\u00e4r<br \/>\nresponsiviteten f\u00f6r s\u00e5dana uppgifter inte \u00e4r viktig. Och s\u00e5 kan man g\u00f6ra det f\u00f6rsta f\u00f6rs\u00f6ket<br \/>\natt implementera MLFQ-algoritmen med f\u00f6ljande regler:<\/p>\n<ul>\n<li> Rule3: N\u00e4r en uppgift kommer in i systemet placeras den i k\u00f6n med h\u00f6gst<\/li>\n<li>prioritet.<\/li>\n<li>Rule4a: Om en uppgift anv\u00e4nder hela det tilldelade tidsf\u00f6nstret, d\u00e5 s\u00e4nks dess<\/li>\n<li>prioritet.<\/li>\n<li>Rule4b: Om uppgiften frig\u00f6r CPU innan tidsf\u00f6nstret har l\u00f6pt ut, f\u00f6rblir den<\/li>\n<li>med samma prioritet.<\/li>\n<\/ul>\n<p><b>Exempel 1: En l\u00e5ngvarig uppgift<\/b><\/p>\n<p>I detta exempel placeras uppgiften vid ankomst med h\u00f6gsta<br \/>\nprioritet. Efter ett tidsf\u00f6nster p\u00e5 10 ms s\u00e4nks prioriteten av<br \/>\nschemal\u00e4ggaren. Efter n\u00e4sta tidsf\u00f6nster s\u00e4nks uppgiften till<br \/>\nden l\u00e4gsta prioriteten i systemet, d\u00e4r den f\u00f6rblir.<br \/>\n<img decoding=\"async\" alt=\"Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (\u00f6vers\u00e4ttning)\" src=\"\/wp-content\/uploads\/2019\/04\/9b4ee6de03aa92d7957d50b4ffa73949.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p><b>Exempel 2: En kort uppgift har anl\u00e4nt<\/b><\/p>\n<p>Nu ska vi se ett exempel p\u00e5 hur MLFQ f\u00f6rs\u00f6ker n\u00e4rma sig SJF. I detta<br \/>\nexempel finns tv\u00e5 uppgifter: A, som \u00e4r en l\u00e5ngvarig uppgift som konstant<br \/>\nanv\u00e4nder CPU och B, som \u00e4r en kort interaktiv uppgift. Anta att<br \/>\nA redan har arbetat en tid n\u00e4r uppgift B kommer.<br \/>\n<img decoding=\"async\" alt=\"Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (\u00f6vers\u00e4ttning)\" src=\"\/wp-content\/uploads\/2019\/04\/19c299b0519585fd1076a341a71f048b.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>I denna graf kan resultaten av scenariot ses. Uppgift A, som alla uppgifter,<br \/>\nsom anv\u00e4nder CPU hamnar l\u00e4ngst ner. Uppgift B kommer vid tid T=100 och kommer<br \/>\natt placeras i k\u00f6n med h\u00f6gsta prioritet. Eftersom tiden f\u00f6r dess arbete \u00e4r kort, kommer<br \/>\nden att avslutas innan den n\u00e5r den sista k\u00f6n.<\/p>\n<p>Fr\u00e5n detta exempel kan man f\u00f6rst\u00e5 algoritmens huvudm\u00e5l: eftersom algoritmen inte<br \/>\nvet om en uppgift \u00e4r l\u00e5ng eller kort, antar den f\u00f6rst att uppgiften<br \/>\nkort och ger den h\u00f6gsta prioritet. Om det verkligen \u00e4r en kort uppgift, s\u00e5<br \/>\nkommer den att utf\u00f6ras snabbt, annars, om det \u00e4r en l\u00e5ng uppgift, kommer den att ta tid<br \/>\nprioritet ned\u00e5t och snart bevisa att det faktiskt \u00e4r en l\u00e5ng uppgift som inte<br \/>\nkr\u00e4ver svar.<\/p>\n<p><b>Exempel 3: Vad g\u00e4ller in- och utmatning?<\/b><\/p>\n<p>L\u00e5t oss nu titta p\u00e5 ett exempel med in- och utmatning. Som n\u00e4mnts i regel 4b,<br \/>\nom en process frig\u00f6r processorn utan att ha anv\u00e4nt hela sin processor-tid,<br \/>\ns\u00e5 f\u00f6rblir den p\u00e5 samma prioriteringsniv\u00e5. Syftet med denna regel \u00e4r ganska enkelt<br \/>\n\u2014 om en interaktiv uppgift utf\u00f6r m\u00e5nga in- och utmatningsoperationer, till exempel och v\u00e4ntar<br \/>\np\u00e5 att anv\u00e4ndaren ska trycka p\u00e5 tangenterna eller musen, kommer en s\u00e5dan uppgift att frig\u00f6ra processorn<br \/>\ntidigare \u00e4n det tilldelade f\u00f6nstret. Vi vill inte s\u00e4nka prioriteten f\u00f6r en s\u00e5dan uppgift,<br \/>\noch d\u00e4rf\u00f6r f\u00f6rblir den p\u00e5 samma niv\u00e5.<br \/>\n<img decoding=\"async\" alt=\"Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (\u00f6vers\u00e4ttning)\" src=\"\/wp-content\/uploads\/2019\/04\/480d33a670fb62a639e5938dd59e30a1.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>Detta exempel visar hur algoritmen kommer att fungera med s\u00e5dana processer \u2014 den interaktiva uppgiften B, som beh\u00f6ver CPU endast i 1 ms innan den utf\u00f6r<br \/>\nin- och utmatningsprocessen och den l\u00e5nga uppgiften A, som anv\u00e4nder CPU hela sin tid.<br \/>\nMLFQ h\u00e5ller process B p\u00e5 den h\u00f6gsta prioriteten, eftersom den alltid forts\u00e4tter<br \/>\natt frig\u00f6ra CPU. Om B \u00e4r en interaktiv uppgift, d\u00e5 har algoritmen p\u00e5 s\u00e5 s\u00e4tt uppn\u00e5tt<br \/>\nsitt m\u00e5l att snabbt k\u00f6ra interaktiva uppgifter.<\/p>\n<p><b>Problem med den nuvarande MLFQ-algoritmen<\/b><\/p>\n<p>I de f\u00f6reg\u00e5ende exemplen har vi byggt en grundl\u00e4ggande version av MLFQ. Och det verkar som om den<br \/>\ng\u00f6r sitt jobb v\u00e4l och r\u00e4ttvist, f\u00f6rdelar processortid r\u00e4ttvist mellan<br \/>\nl\u00e5nga uppgifter och l\u00e5ter korta uppgifter eller uppgifter som intensivt anv\u00e4nder<br \/>\nin- och utmatning bearbeta snabbt. Tyv\u00e4rr inneh\u00e5ller detta tillv\u00e4gag\u00e5ngss\u00e4tt flera<br \/>\nallvarliga problem.<br \/>\n<b>F\u00f6r det f\u00f6rsta<\/b>, hungersproblem: om det finns m\u00e5nga interaktiva<br \/>\nuppgifter i systemet, kommer de att konsumera all processortid och d\u00e4rmed kommer ingen l\u00e5ng<br \/>\nuppgift att f\u00e5 m\u00f6jlighet att utf\u00f6ras (de sv\u00e4lter).<\/p>\n<p><b>F\u00f6r det andra<\/b>, smarta anv\u00e4ndare kan skriva sina program s\u00e5 att<br \/>\nde lurar schemal\u00e4ggaren. F\u00e4llan ligger i att g\u00f6ra n\u00e5got s\u00e5dant som tvingar<br \/>\nschemal\u00e4ggaren att ge processen mer processortid. Algoritmen som<br \/>\nbeskrivs ovan \u00e4r helt s\u00e5rbart f\u00f6r s\u00e5dana attacker: innan tidsf\u00f6nstret n\u00e4stan \u00e4r<br \/>\nutslutat beh\u00f6ver en in-och-ut operation (till n\u00e5gon, vilken som helst fil) utf\u00f6ras<br \/>\noch p\u00e5 s\u00e5 s\u00e4tt frig\u00f6ra CPU:n. Ett s\u00e5dant beteende g\u00f6r att man kan f\u00f6rbli i samma<br \/>\nk\u00f6 och \u00e5terf\u00e5 en st\u00f6rre procentandel av processortiden. Om man g\u00f6r detta<br \/>\nkorrekt (till exempel att k\u00f6ras 99 % av tiden under f\u00f6nstret innan CPU:n frig\u00f6rs),<br \/>\nkan en s\u00e5dan uppgift enkelt monopoliserar processorn.<\/p>\n<p>Slutligen kan programmet \u00e4ndra sitt beteende \u00f6ver tid. De uppgifter som<br \/>\nanv\u00e4nde CPU:n kan bli interaktiva. I v\u00e5rt exempel kommer s\u00e5dana<br \/>\nuppgifter inte att f\u00e5 r\u00e4tt hantering av schemal\u00e4ggaren, som de skulle ha f\u00e5tt av andra<br \/>\n(ursprungliga) interaktiva uppgifter.<\/p>\n<p><u>Fr\u00e5ga till publiken: vilka attacker p\u00e5 schemal\u00e4ggaren skulle kunna utf\u00f6ras i den moderna v\u00e4rlden?<br \/>\n<\/u><\/p>\n<h4>F\u00f6rs\u00f6k 2: H\u00f6ja prioriteten<\/h4>\n<p>Vi f\u00f6rs\u00f6ker \u00e4ndra reglerna och se om vi kan undvika problem med<br \/>\nsv\u00e4lt. Vad skulle vi kunna g\u00f6ra f\u00f6r att s\u00e4kerst\u00e4lla att CPU-relaterade<br \/>\nuppgifter f\u00e5r sin tid (\u00e4ven om det inte \u00e4r l\u00e4nge).<br \/>\nEn enkel l\u00f6sning p\u00e5 problemet skulle kunna vara att regelbundet<br \/>\nh\u00f6ja prioriteten f\u00f6r alla s\u00e5dana uppgifter i systemet. Det finns m\u00e5nga s\u00e4tt<br \/>\natt uppn\u00e5 detta, l\u00e5t oss f\u00f6rs\u00f6ka genomf\u00f6ra n\u00e5got enkelt som exempel: att omedelbart<br \/>\n\u00f6vers\u00e4tta alla uppgifter till h\u00f6gsta prioritet, d\u00e4rav den nya regeln:<\/p>\n<ul>\n<li><b>Regel 5<\/b>: Efter en viss period S, att \u00f6vers\u00e4tta alla uppgifter i systemet till h\u00f6gsta k\u00f6.<\/li>\n<\/ul>\n<p>V\u00e5r nya regel l\u00f6ser tv\u00e5 problem p\u00e5 en g\u00e5ng. F\u00f6r det f\u00f6rsta garanteras att processerna<br \/>\ninte sv\u00e4lter: uppgifter som befinner sig i den h\u00f6gsta k\u00f6n kommer att dela<br \/>\nprocessortid enligt RR-algoritmen och p\u00e5 s\u00e5 s\u00e4tt kommer alla processer att f\u00e5<br \/>\nprocessortid. F\u00f6r det andra, om en process som tidigare endast anv\u00e4nde<br \/>\nprocessorn blir interaktiv, kommer den att f\u00f6rbli i k\u00f6n med h\u00f6gre<br \/>\nprioritet efter att ha f\u00e5tt en h\u00f6jning av prioriteten till h\u00f6gsta.<br \/>\nL\u00e5t oss \u00f6verv\u00e4ga ett exempel. I det h\u00e4r scenariot ska vi granska en process som anv\u00e4nder<br \/>\n<img decoding=\"async\" alt=\"Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (\u00f6vers\u00e4ttning)\" src=\"\/wp-content\/uploads\/2019\/04\/3b8d879ab4479622684b126ec5af6af3.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>CPU och tv\u00e5 interaktiva, korta processer. Till v\u00e4nster visar bilden beteende utan prioriteringsh\u00f6jning, vilket inneb\u00e4r att en l\u00e5ng uppgift b\u00f6rjar sv\u00e4lta efter att tv\u00e5 interaktiva uppgifter anl\u00e4nder till systemet. Till h\u00f6ger utf\u00f6rs prioriteringsh\u00f6jning var 50ms, vilket g\u00f6r att alla processer garanterat f\u00e5r CPU-tid och kommer att k\u00f6ras periodiskt. 50ms \u00e4r h\u00e4r ett exempel; i verkligheten \u00e4r detta tal n\u00e5got st\u00f6rre.<br \/>\nDet \u00e4r uppenbart att till\u00e4gg av tidsperiodisk h\u00f6jning S leder till<br \/>\nden ofr\u00e5nkomliga fr\u00e5gan: vilket v\u00e4rde b\u00f6r s\u00e4ttas? En av de ansedda<br \/>\nsystemingenj\u00f6rerna John Ousterhout ben\u00e4mnde s\u00e5dana storheter i systemen som voo-doo<br \/>\nkonstanter, eftersom de p\u00e5 n\u00e5got s\u00e4tt kr\u00e4vde svart magi f\u00f6r korrekt<br \/>\ninst\u00e4llning. Och tyv\u00e4rr har S en s\u00e5dan arom. Om man s\u00e4tter v\u00e4rdet f\u00f6r h\u00f6gt<br \/>\nb\u00f6rjar de l\u00e5ngvariga uppgifterna sv\u00e4lta. Och om man s\u00e4tter v\u00e4rdet f\u00f6r l\u00e5gt,<br \/>\nf\u00e5r de interaktiva uppgifterna inte tillr\u00e4cklig CPU-tid.<\/p>\n<h4>F\u00f6rs\u00f6k 3: B\u00e4sta redovisning<\/h4>\n<p>Nu har vi ett annat problem som beh\u00f6ver l\u00f6sas: hur f\u00e5r vi inte<br \/>\nv\u00e5r schemal\u00e4ggare att bli lurad? Anklagade f\u00f6r denna m\u00f6jlighet \u00e4r<br \/>\nreglerna 4a, 4b, som till\u00e5ter en uppgift att beh\u00e5lla sin prioritet genom att frig\u00f6ra CPU<br \/>\ninnan den tilldelade tiden har g\u00e5tt ut. Hur hanterar vi detta?<br \/>\nL\u00f6sningen i det h\u00e4r fallet kan ses som b\u00e4sta redovisning av CPU-tid p\u00e5 varje<br \/>\nniv\u00e5 av MLFQ. Ist\u00e4llet f\u00f6r att gl\u00f6mma den tid programmet anv\u00e4nde<br \/>\nCPU:n under den tilldelade perioden, b\u00f6r den beaktas och sparas. Efter att<br \/>\nprocessen har f\u00f6rbrukat den tilldelade tiden, b\u00f6r den s\u00e4nkas till n\u00e4sta<br \/>\nprioritetsniv\u00e5. Nu spelar det ingen roll hur processen anv\u00e4nder sin tid \u2014 om<br \/>\nden konstant ber\u00e4knar p\u00e5 processorn eller om den g\u00f6r ett flertal anrop. P\u00e5 s\u00e5 s\u00e4tt<br \/>\nb\u00f6r regel 4 skrivas om till f\u00f6ljande:<\/p>\n<ul>\n<li><b>Rule4<\/b>: Efter att uppgiften har f\u00f6rbrukat sin tilldelade tid i den aktuella k\u00f6n (oavsett hur m\u00e5nga g\u00e5nger den har frigjort CPU:n) s\u00e4nks prioriteten f\u00f6r en s\u00e5dan uppgift (den flyttas ned\u00e5t i k\u00f6n).<\/li>\n<\/ul>\n<p>L\u00e5t oss titta p\u00e5 ett exempel:<br \/>\n<img decoding=\"async\" alt=\"Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (\u00f6vers\u00e4ttning)\" src=\"\/wp-content\/uploads\/2019\/04\/18c53e62b9b342d14a23995bd422ef5e.png\" style=\"display:block;margin: 0 auto;\">\u00bb<\/p>\n<p>Bilden visar vad som h\u00e4nder om man f\u00f6rs\u00f6ker lura schemal\u00e4ggaren, hur<br \/>\nom det skulle vara med de tidigare reglerna 4a, 4b, skulle resultatet bli till v\u00e4nster. Med den nya<br \/>\nregeln - resultatet till h\u00f6ger. F\u00f6re skyddet kunde vilken process som helst orsaka I\/O till avslut och<br \/>\nd\u00e4rmed dominera CPU:n, efter aktivering av skyddet, oavsett I\/O-beteende<br \/>\nkommer det fortfarande att sjunka i k\u00f6erna och d\u00e4rmed inte kunna or\u00e4ttvist<br \/>\ntillgodog\u00f6ra sig CPU-resurser.<\/p>\n<h4>F\u00f6rb\u00e4ttringar av MLFQ och andra problem<\/h4>\n<p>Med de ovan n\u00e4mnda f\u00f6rb\u00e4ttringarna uppst\u00e5r nya problem: en av de st\u00f6rsta<br \/>\nfr\u00e5gorna \u00e4r hur man ska parametrisera en s\u00e5dan schemal\u00e4ggare? Dvs. Hur m\u00e5nga skall det finnas<br \/>\nk\u00f6er? Vad b\u00f6r storleken p\u00e5 arbetsf\u00f6nstret vara inom k\u00f6n? Hur<br \/>\nofta b\u00f6r man h\u00f6ja programmets prioritet f\u00f6r att undvika sv\u00e4lt och<br \/>\nta h\u00e4nsyn till f\u00f6r\u00e4ndringar i programmets beteende? Det finns inget enkelt<br \/>\nsvar p\u00e5 dessa fr\u00e5gor och endast experiment med belastningar och efterf\u00f6ljande konfigurationer<br \/>\nav schemal\u00e4ggaren kan leda till en viss tillfredsst\u00e4llande balans.<\/p>\n<p>Till exempel till\u00e5ter de flesta implementationer av MLFQ att olika<br \/>\ntidsintervall tilldelas olika k\u00f6er. H\u00f6gt prioriterade k\u00f6er tilldelas vanligtvis<br \/>\nkorta intervall. Dessa k\u00f6er best\u00e5r av interaktiva uppgifter,<br \/>\nd\u00e4r v\u00e4xlingen mellan dem \u00e4r ganska k\u00e4nslig och b\u00f6r ta 10 millisekunder eller mindre.<br \/>\nI kontrast best\u00e5r l\u00e5gt prioriterade k\u00f6er av l\u00e5nga uppgifter som anv\u00e4nder<br \/>\nCPU:n. I det h\u00e4r fallet passar l\u00e5nga tidsintervall v\u00e4ldigt bra (100 ms).<br \/>\n<img decoding=\"async\" alt=\"Operativsystem: Tre enkla bitar. Del 5: Planering: Multi-Level Feedback Queue (\u00f6vers\u00e4ttning)\" src=\"\/wp-content\/uploads\/2019\/04\/4eb6c6669034adeb1615c29454fbb1dc.png\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>I detta exempel finns det 2 uppgifter som har arbetat i den h\u00f6gprioriterade k\u00f6n i 20<br \/>\nms, uppdelat i f\u00f6nster om 10 ms. 40 ms i den medelprioriterade k\u00f6n (f\u00f6nster om 20 ms) och i den l\u00e5gt prioriterade<br \/>\nk\u00f6n blev tidsf\u00f6nstret 40 ms, d\u00e4r uppgifterna avslutade sitt arbete.<\/p>\n<p>Implementation av MLFQ i Solaris-OS - en klass av tidsdelade schemal\u00e4ggare.<br \/>\nSchemal\u00e4ggaren tillhandah\u00e5ller en upps\u00e4ttning tabeller som exakt definierar hur<br \/>\nprioriteten f\u00f6r processen ska \u00e4ndras under dess livstid, vad storleken p\u00e5<br \/>\ndet tilldelade f\u00f6nstret ska vara och hur ofta uppgifternas prioriteringar ska h\u00f6jas. Systemadministrat\u00f6ren<br \/>\nkan interagera med denna tabell och f\u00e5 schemal\u00e4ggaren att bete sig<br \/>\nannorlunda. Som standard inneh\u00e5ller denna tabell 60 k\u00f6er med gradvis \u00f6kande<br \/>\nf\u00f6nsterstorlek fr\u00e5n 20 ms (h\u00f6gt prioritet) till flera hundra ms (l\u00e4gre prioritet), och<br \/>\n\u00e4ven med boost av alla uppgifter en g\u00e5ng per sekund.<\/p>\n<p>Andra MLFQ-schemal\u00e4ggare anv\u00e4nder inte tabeller eller specifika<br \/>\nregler som beskrivs i denna f\u00f6rel\u00e4sning, \u00e5 andra sidan ber\u00e4knar de prioriteringar med hj\u00e4lp av<br \/>\nmatematiska formler. Till exempel anv\u00e4nder schemal\u00e4ggaren i FreeBSD en formel f\u00f6r<br \/>\natt ber\u00e4kna den aktuella prioriteten f\u00f6r en uppgift, baserat p\u00e5 hur mycket processorn<br \/>\nhar anv\u00e4nt CPU. Dessutom f\u00f6rfaller CPU-anv\u00e4ndningen \u00f6ver tid, och p\u00e5 s\u00e5 s\u00e4tt<br \/>\nh\u00f6js prioriteten p\u00e5 ett n\u00e5got annat s\u00e4tt \u00e4n beskrivits ovan. Detta kallas s\u00e5<br \/>\nkallade decay-algoritmer. Fr\u00e5n version 7.1 anv\u00e4nds schemal\u00e4ggaren ULE i FreeBSD.<\/p>\n<p>Slutligen har m\u00e5nga schemal\u00e4ggare andra funktioner. Till exempel<br \/>\nreserverar vissa schemal\u00e4ggare de h\u00f6gsta niv\u00e5erna f\u00f6r att driva operativsystemet, vilket g\u00f6r att<br \/>\ningen anv\u00e4ndarprocess kan f\u00e5 h\u00f6gsta prioritet i<br \/>\nsystemet. Vissa system till\u00e5ter att ge tips f\u00f6r att hj\u00e4lpa<br \/>\nschemal\u00e4ggaren att korrekt s\u00e4tta prioriteringar. Till exempel kan man med hj\u00e4lp av kommandot <b>trevlig<\/b><br \/>\n\u00f6ka eller minska prioriteten f\u00f6r en uppgift och d\u00e4rigenom h\u00f6ja eller<br \/>\ns\u00e4nka programmets chanser till processorstid.<\/p>\n<h3>MLFQ: Sammanfattning<\/h3>\n<p>Vi har beskrivit en planeringsmetod som kallas MLFQ. Namnet<br \/>\nligger i dess funktion \u2014 den har flera k\u00f6er och anv\u00e4nder \u00e5terkoppling<br \/>\nf\u00f6r att best\u00e4mma uppgiftens prioritet.<br \/>\nDen slutgiltiga beskrivningen av reglerna kommer att vara som f\u00f6ljer:<\/p>\n<ul>\n<li><b>Regel1<\/b>: Om prioritet(A) &gt; Prioritet(B), kommer uppgift A att k\u00f6ras (B kommer inte att k\u00f6ras)<\/li>\n<li><b>Regel2<\/b>: Om prioritet(A) = Prioritet(B), A och B k\u00f6rs med RR<\/li>\n<li><b>Regel3<\/b>: N\u00e4r en uppgift kommer in i systemet, placeras den i k\u00f6n med h\u00f6gsta prioritet.<\/li>\n<li><b>Rule4<\/b>: Efter att uppgiften har f\u00f6rbrukat sin tilldelade tid i den aktuella k\u00f6n (oavsett hur m\u00e5nga g\u00e5nger den har frigjort CPU:n) s\u00e4nks prioriteten f\u00f6r en s\u00e5dan uppgift (den flyttas ned\u00e5t i k\u00f6n).<\/li>\n<li><b>Regel 5<\/b>: Efter en viss period S, att \u00f6vers\u00e4tta alla uppgifter i systemet till h\u00f6gsta k\u00f6.<\/li>\n<\/ul>\n<p>MLFQ \u00e4r intressant av f\u00f6ljande anledning \u2014 ist\u00e4llet f\u00f6r att kr\u00e4va f\u00f6rkunskaper om<br \/>\nuppdragets natur i f\u00f6rv\u00e4g, studerar algoritmen tidigare beteenden av uppgiften och s\u00e4tter<br \/>\nprioriteringar d\u00e4refter. P\u00e5 s\u00e5 s\u00e4tt f\u00f6rs\u00f6ker den klara tv\u00e5 m\u00e5l samtidigt \u2014 uppn\u00e5 prestanda f\u00f6r sm\u00e5 uppgifter (SJF, STCF) och r\u00e4ttvist k\u00f6ra l\u00e5ngvariga,<br \/>\nCPU-kr\u00e4vande uppgifter. D\u00e4rf\u00f6r anv\u00e4nder m\u00e5nga system, inklusive BSD och deras derivat,<br \/>\nSolaris, Windows, Mac, n\u00e5gon form av algoritm<br \/>\nMLFQ som grundl\u00e4ggande planeringsmetod.<\/p>\n<h4>Ytterligare material:<\/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.sv.html<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Scheduling_\">en.wikipedia.org\/wiki\/Scheduling_<\/a><\/noindex>(ber\u00e4kning)<\/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>K\u00e4lla: <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\/sv\/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=\"sv_SE\" \/>\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\/sv\/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\udd47Operativsystem: Tre enkla delar. Del 5: Planering: Multi-Level Feedback Queue (\u00f6vers\u00e4ttning) | ProHoster","description":"Introduktion till operativsystem Hej, Habr! Jag vill presentera en serie \u00f6versatta artiklar av en intressant litteratur \u2014 OSTEP.","canonical_url":"https:\/\/prohoster.info\/sv\/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":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/32730","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=32730"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/32730\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/24514"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=32730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=32730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=32730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}