{"id":32158,"date":"2019-10-31T21:45:27","date_gmt":"2019-10-31T18:45:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod\/"},"modified":"2019-10-31T21:45:27","modified_gmt":"2019-10-31T18:45:27","slug":"operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod","title":{"rendered":"Operating Systems: Three Easy Pieces. Part 4: Sissejuhatus planeerijasse (t\u00f5lge)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Sissejuhatus operatsioonis\u00fcsteemidesse<\/h1>\n<p>\nTere, Habr! Soovin esitleda teile huvitavate artiklite t\u00f5lgitud seeriat \u2014 OSTEP. K\u00e4esolevas materjalis uuritakse s\u00fcgavalt unix-laadsete operatsioonis\u00fcsteemide toimimist, nimelt \u2014 protsesside, erinevate planeerijate, m\u00e4lu ja teiste sarnaste komponentide t\u00f6\u00f6tamist, mis koosnevad kaasaegsest operatsioonis\u00fcsteemist. K\u00f5iki materjale saate n\u00e4ha siin <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">siit<\/a><\/noindex>. Palun arvestage, et t\u00f5lge on tehtud mitteprofessionaalselt (piisavalt vaba), kuid loodan, et \u00fcldine m\u00f5te on s\u00e4ilinud.<\/p>\n<p>K\u00e4esoleva aine laborit\u00f6id saab leida siit:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">originaal<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">originaal<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">minu isiklik kohandamine<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nTeised osad:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">Osa 1: Sissejuhatus<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446866\/\">Osa 2: Abstraktsioon: protsess<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/447182\/\">Osa 3: Sissejuhatus protsesside API-sse<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/449026\/\">Osa 4: Sissejuhatus ajastamisse<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nJa v\u00f5ite ka k\u00fclastada minu kanalit <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">Telegramis<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Sissejuhatus ajastamisse<\/h2>\n<p>\n<u>Probleemi olemus: Kuidas v\u00e4lja t\u00f6\u00f6tada ajastamispoliitika<br \/>\nKuidas peaksid olema v\u00e4lja t\u00f6\u00f6tatud ajastamispoliitika alused? Millised peaksid olema peamised eeldused? Millised n\u00e4itajad on olulised? Milliseid p\u00f5hitehnikaid kasutati varasemates arvutis\u00fcsteemides?<\/u><\/p>\n<h3>T\u00f6\u00f6koormuse eeldused<\/h3>\n<p>\n Enne kui arutada v\u00f5imalikke poliitikaid, teeme esmalt m\u00f5ned lihtsustavad k\u00f5rvalekalded s\u00fcsteemis k\u00e4ivitatud protsessidest, mida kokku nimetatakse <b>t\u00f6\u00f6koormuseks<\/b>. T\u00f6\u00f6koormuse m\u00e4\u00e4ramine on kriitiline osa poliitikate koostamisest ja mida rohkem te koormusest teate, seda kvaliteetsemat poliitikat te suudate kirjutada.<\/p>\n<p>Teeme j\u00e4rgmised eeldused s\u00fcsteemis k\u00e4ivitatud protsesside kohta, mida m\u00f5nikord nimetatakse <b>t\u00f6\u00f6deks<\/b> (jobs). Praktiliselt k\u00f5ik need eeldused ei ole realistlikud, kuid need on m\u00f5tte arendamiseks vajalikud.<\/p>\n<ol>\n<li> Iga \u00fclesanne t\u00f6\u00f6tab sama kaua,<\/li>\n<li> K\u00f5ik \u00fclesanded saadetakse samal ajal,<\/li>\n<li> Saadetud \u00fclesanne t\u00f6\u00f6tab kuni selle l\u00f5petamiseni,<\/li>\n<li> K\u00f5ik \u00fclesanded kasutavad ainult CPU-d,<\/li>\n<li> Iga \u00fclesande t\u00f6\u00f6aeg on teada.<\/li>\n<\/ol>\n<h3>Ajastamise n\u00e4itajad<\/h3>\n<p>\n Peale m\u00f5ningate t\u00f6\u00f6koormuse eelduste on vajalik ka mingi t\u00f6\u00f6riist erinevate ajastamispoliitikate v\u00f5rdlemiseks: ajastamise n\u00e4itajad. N\u00e4itaja on lihtsalt mingi m\u00f5\u00f5t mingi asja kohta. On olemas teatud kogus n\u00e4itajaid, mida saab kasutada ajastajate v\u00f5rdlemiseks.<\/p>\n<p>N\u00e4iteks kasutame n\u00e4itajat, mida nimetatakse <b>t\u00e4itmise ajaks<\/b> (turnaround time). \u00dclesande t\u00e4itmise aeg m\u00e4\u00e4ratakse kui erinevus \u00fclesande l\u00f5petamise aja ja \u00fclesande s\u00fcsteemi sisenemise aja vahel.<\/p>\n<p><u>Tturnaround=Tcompletion\u2212Tarrival<\/u><\/p>\n<p>Kuna me eeldasime, et k\u00f5ik \u00fclesanded sisenevad korraga, siis Ta=0 ja seega Tt=Tc. See v\u00e4\u00e4rtus muutub loomulikult, kui me muuda mainitud eeldusi.<\/p>\n<p>Teine n\u00e4itaja on <b>\u00f5iglus<\/b> (\u00f5iglus, ausus). T\u00f5husus ja ausus on sageli vastandlikud omadused planeerimises. N\u00e4iteks v\u00f5ib planeerija optimeerida t\u00f5husust, kuid see toob kaasa teiste \u00fclesannete ooteaja, mis omakorda v\u00e4hendab ausust.<\/p>\n<h3>ESIMENE SISSE, ESIMENE V\u00c4LJA (FIFO)<\/h3>\n<p>\n K\u00f5ige fundamentaalsem algoritm, mida me saame rakendada, nimetatakse FIFO-ks v\u00f5i <b>first come (in), first served (out)<\/b>. Sellel algoritmil on mitmeid eeliseid: see on v\u00e4ga lihtne rakendada ja vastab k\u00f5igile meie eeldustele, t\u00e4ites t\u00f6\u00f6d \u00fcsna h\u00e4sti.<\/p>\n<p>Vaatame lihtsat n\u00e4idet. Oletame, et kolm \u00fclesannet on samal ajal esitatud. Kuid oletame, et \u00fclesanne A saabus veidi varem kui k\u00f5ik teised, seega on see t\u00e4itmise loendis enne teisi, samuti nagu B seoses V-ga. Oletame, et iga\u00fche t\u00e4itmiseks kulub 10 sekundit. Milline on sel juhul nende \u00fclesannete keskmine t\u00e4itmise aeg?<\/p>\n<p><img decoding=\"async\" alt=\"Operating Systems: Three Easy Pieces. Part 4: Sissejuhatus planeerijasse (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/8c17c29e10ac8c2e15f5f9d865922e49.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nArvutades v\u00e4\u00e4rtused \u2014 10+20+30 ja jagades 3-ga, saame keskmiseks t\u00e4itmise ajaks 20 sekundit.<br \/>\n N\u00fc\u00fcd proovime muuta meie eeldusi. Eelk\u00f5ige eeldust 1 ja mitte enam eeldada, et iga \u00fclesanne t\u00e4itub sama kaua. Kuidas k\u00e4itub FIFO sel korral?<\/p>\n<p>Kuidas selgub, et erinevad t\u00e4itmise ajad m\u00f5jutavad FIFO algoritmi efektiivsust \u00e4\u00e4rmiselt negatiivselt. Oletame, et \u00fclesanne A t\u00e4itub 100 sekundit, samas kui B ja V j\u00e4\u00e4vad ikka 10 sekundile.<\/p>\n<p><img decoding=\"async\" alt=\"Operating Systems: Three Easy Pieces. Part 4: Sissejuhatus planeerijasse (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/a375f3d1571f24df30f446b9bc7a9a9e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Kuna jooniselt on n\u00e4ha, et s\u00fcsteemi keskmine aeg ilmneb (100+110+120)\u20443=110. Sellist efekti nimetatakse <b>konvoiefektiks<\/b>, kus m\u00f5ned l\u00fchiajalised ressursikasutajad seisavad j\u00e4rjekorras raskete kasutajate j\u00e4rel. See on sarnaselt j\u00e4rjekorraga toidupoes, kus teie ees on ostja, kellel on t\u00e4is ostuk\u00e4ru. Parim lahendus probleemile on proovida kassapidajat vahetada v\u00f5i lihtsalt rahuneda ja s\u00fcgavalt hingata.<\/p>\n<h3>L\u00fchim T\u00f6\u00f6 Esimene<\/h3>\n<p>\n Kas on v\u00f5imalik sellist olukorda raskete protsessidega kuidagi lahendada? Loomulikult. Teine t\u00fc\u00fcpi planeerimine on nimetatud<b>L\u00fchim T\u00f6\u00f6 Esimene<\/b> (SJF). Selle algoritm on samuti piisavalt primitiivne \u2014 nagu nimest selgub, k\u00e4ivituvad k\u00f5igepealt k\u00f5ige l\u00fchemad \u00fclesanded \u00fcksteise j\u00e4rel.<\/p>\n<p><img decoding=\"async\" alt=\"Operating Systems: Three Easy Pieces. Part 4: Sissejuhatus planeerijasse (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/d0723e313adc9ce7367da611216bf3ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSelles n\u00e4ites on sama protsesside k\u00e4ivitamise tulemuseks keskmise programmi p\u00f6\u00f6rdeaja paranemine, mis on v\u00f5rdne <b>50 asemel 110<\/b>, mis on praktiliselt kaks korda parem.<\/p>\n<p>Seega, eeldades, et k\u00f5ik \u00fclesanded saabuvad samal ajal, tundub SJF algoritm olevat k\u00f5ige optimaalsem algoritm. Ent meie eeldused ei tundu siiski realistlikud. Seekord muudame eeldust 2 ja kujutame ette, et \u00fclesanded v\u00f5ivad saabuda igal ajal, mitte k\u00f5ik korraga. Millistele probleemidele see v\u00f5ib viia?<\/p>\n<p><img decoding=\"async\" alt=\"Operating Systems: Three Easy Pieces. Part 4: Sissejuhatus planeerijasse (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/2f0145551779f2733281d12bffad3a45.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOletame, et \u00fclesanne A (100s) saabub esimesena ja alustab t\u00e4itmist. Hetkel t=10 saabuvad \u00fclesanded B ja C, kummagi t\u00e4itmise aeg on 10 sekundit. Seega, keskmine t\u00e4itmise aeg on (100+(110-10)+(120-10))\/3 = 103. Mida v\u00f5iks planeerija teha, et olukorda parandada?<\/p>\n<h3>L\u00fchim t\u00e4itmise kestus esimesena (STCF)<\/h3>\n<p>\n Olukorra parandamiseks j\u00e4tame k\u00f5rvale eelduse 3, et programm on k\u00e4ivitatud ja t\u00f6\u00f6tab l\u00f5puni. Lisaks on meil vaja riistvara tuge ja nagu sa v\u00f5isid arvata, kasutame me <b>taimerit<\/b> aktiveerimat\u00f6\u00f6tava \u00fclesande katkestamiseks ja <b>kontekstide vahetamiseks<\/b>. Seega v\u00f5ib planeerija midagi ette v\u00f5tta, kui saabuvad \u00fclesanded B ja C \u2014 katkestada \u00fclesande A t\u00e4itmise ja alustada \u00fclesannete B ja C t\u00f6\u00f6tlemist ning p\u00e4rast nende l\u00f5petamist j\u00e4tkata \u00fclesande A t\u00e4itmist. Sellist planeerijat nimetatakse <b>STCF<\/b>v\u00f5i <b>Katkestatav t\u00f6\u00f6 esimesena<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Operating Systems: Three Easy Pieces. Part 4: Sissejuhatus planeerijasse (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/81644f82b7b1489f239ebbdc5d78000b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSelle planeerija t\u00f6\u00f6 tulemuseks on j\u00e4rgmine: ((120-0)+(20-10)+(30-10))\/3=50. Seega, selline planeerija muutub meie \u00fclesannete jaoks veelgi optimaalsemaks.<\/p>\n<h3>Aeg reageerimiseks (Response Time)<\/h3>\n<p>\n Seet\u00f5ttu, kui teame \u00fclesannete t\u00e4itmise aega ja et need \u00fclesanded kasutavad ainult CPU-d, on STCF parim lahendus. Kunagi ammu t\u00f6\u00f6tasid need algoritmid \u00fcsna h\u00e4sti. Siiski veedab kasutaja n\u00fc\u00fcd suurema osa ajast terminalis ja ootab t\u00f5husat interaktiivset suhtlemist. Nii s\u00fcndis uus m\u00f5\u00f5dik \u2014 <b>reaktsiooniaeg<\/b> ().<\/p>\n<p>Reaktsiooniaeg arvutatakse j\u00e4rgmiselt:<\/p>\n<p><u>Tresponse=Tfirstrun\u2212Tarrival<\/u><\/p>\n<p>Seega, eelneva n\u00e4ite puhul on reaktsiooniaeg j\u00e4rgmine: A=0, B=0, C=10 (abg=3,33).<\/p>\n<p>Selgub, et algoritm STCF ei ole v\u00e4ga hea juhul, kui 3 \u00fclesannet saabuvad korraga \u2014 tal tuleb oodata, kuni v\u00e4iksemad \u00fclesanded on t\u00e4ielikult l\u00f5pule viidud. Seega on algoritm hea p\u00f6\u00f6rdumisaja m\u00f5\u00f5dikute jaoks, kuid halb interaktiivsuse m\u00f5\u00f5dikute jaoks. Kujutage ette, et proovite terminalis s\u00fcmboleid tekstiredaktorisse sisestada, kuid peate ootama rohkem kui 10 sekundit, kuna m\u00f5ni teine \u00fclesanne kasutab protsessorit. See pole just meeldiv.<\/p>\n<p><img decoding=\"async\" alt=\"Operating Systems: Three Easy Pieces. Part 4: Sissejuhatus planeerijasse (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/f1412665826f845fdc685ec3c1a5bdad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSeega seisame silmitsi teise probleemiga \u2014 kuidas saame luua ajakava, mis oleks vastutulelik reageerimise ajale?<\/p>\n<h3>Ringk\u00e4ik<\/h3>\n<p>\n Selle probleemi lahendamiseks on v\u00e4lja t\u00f6\u00f6tatud algoritm <b>Ringk\u00e4ik<\/b> (RR). P\u00f5him\u00f5te on bastante lihtne: selle asemel, et k\u00e4ivitada \u00fclesandeid kuni nende t\u00e4ieliku l\u00f5puleviimiseni, k\u00e4ivitame \u00fclesande teatud ajavahemikuks (mida nimetatakse ajakvotiks) ja seej\u00e4rel switchime j\u00e4rgmise \u00fclesande juurde queue's. Algoritm kordab oma t\u00f6\u00f6d, kuni k\u00f5ik \u00fclesanded on l\u00f5pule viidud. Samuti peab programmi t\u00e4itmise aeg olema ajaga, mil timer katkestab protsessi. N\u00e4iteks, kui timer katkestab protsessi iga x=10ms, peab protsessi t\u00e4itmise aken olema 10-iga jagatav ja olema 10, 20 v\u00f5i x*10.<\/p>\n<p>Vaadakem n\u00e4idet: \u00dclesanded A, B ja C saabuvad korraga s\u00fcsteemi ja iga\u00fcks neist soovib t\u00f6\u00f6tada 5 sekundit. Algoritm SJF t\u00e4idab iga \u00fclesande l\u00f5puni enne, kui k\u00e4ivitab j\u00e4rgmise. Vastupidiselt algoritmile RR, mille k\u00e4ivitusaeg on 1s, t\u00f6\u00f6deldakse \u00fclesandeid j\u00e4rgmiselt (joonis 4.3):<\/p>\n<p><img decoding=\"async\" alt=\"Operating Systems: Three Easy Pieces. Part 4: Sissejuhatus planeerijasse (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/a7790cb63c880b286db2a2e3782d59b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(SJF j\u00e4lle (halb reageerimise ajal)<\/p>\n<p><img decoding=\"async\" alt=\"Operating Systems: Three Easy Pieces. Part 4: Sissejuhatus planeerijasse (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/f7e82d68a6118828ea4561a4911744e2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(Ringk\u00e4ik (hea reageerimise ajal)<\/p>\n<p>Keskmine reageerimisaeg algoritmile RR (0+1+2)\/3=1, samas kui SJF puhul (0+5+10)\/3=5.<\/p>\n<p>On loogiline eeldada, et ajavahemik on RR jaoks v\u00e4ga oluline parameeter \u2014 mida l\u00fchem on see, seda k\u00f5rgem on vastamise aeg. Kuid seda ei tohi teha liiga l\u00fchikeseks, kuna konteksti vahetamine m\u00e4ngib samuti oma osa \u00fcldises j\u00f5udluses. Seet\u00f5ttu m\u00e4\u00e4rab t\u00e4itmise akna valiku OS arhitekt, s\u00f5ltuvalt \u00fclesannetest, mida on plaanis t\u00e4ita. Konteksti vahetamine ei ole ainus abiprotseduur, mis aega kulutab \u2014 k\u00e4ivitatud programm tegeleb paljude muude asjadega, n\u00e4iteks erinevate vahem\u00e4lu s\u00fcsteemidega ning iga vahetamise puhul tuleb seda keskkonda salvestada ja taastada, mis v\u00f5ib samuti n\u00f5uda palju aega.<\/p>\n<p>RR on suurep\u00e4rane planeerija, kui r\u00e4\u00e4kida vaid vastamise aja m\u00f5\u00f5dikust. Kuid kuidas k\u00e4itub \u00fclesande ringluse m\u00f5\u00f5dik selle algoritmi puhul? Vaadake eespool toodud n\u00e4idet, kus A, B, C t\u00f6\u00f6aeg on 5s ja nad saabuvad samal ajal. \u00dclesanne A l\u00f5petab kell 13, B kell 14, C kell 15 ja keskmine ringluse aeg saab olema 14s. Seega on RR k\u00f5ige halvem algoritm ringluse m\u00f5\u00f5diku jaoks.<\/p>\n<p>\u00dcldisemalt \u00f6eldes, on iga RR t\u00fc\u00fcpi algoritm aus \u2014 see jagab CPU t\u00f6\u00f6aega v\u00f5rdselt k\u00f5ikide protsesside vahel. Ja seet\u00f5ttu on need m\u00f5\u00f5dikud pidevas konfliktis omavahel.<\/p>\n<p>Seega on meil mitu vastuolulist algoritmi ja veelgi on m\u00f5ned oletused \u2014 et \u00fclesande aeg on teada ja et \u00fclesanne kasutab ainult CPU-d.<\/p>\n<h3>Segamine I\/O-ga<\/h3>\n<p>\n Esmalt eemaldame oletuse 4, et protsess kasutab ainult CPU-d, mis loomulikult ei ole t\u00f5si, ja protsessid v\u00f5ivad p\u00f6\u00f6rduda ka muude seadmete poole.<\/p>\n<p>Kohe, kui m\u00f5ni protsess taotleb sisse-\/v\u00e4ljundoperatsiooni, muutub protsess blokeerituks, oodates I\/O l\u00f5petamist. Kui I\/O saadetakse k\u00f5vakettale, v\u00f5ib selline operatsioon kesta mitu ms v\u00f5i kauem, ja sel hetkel on protsessor inaktiveeritud. Selle aja jooksul saab ajakava kasutada protsessorit m\u00f5ne teise protsessiga. J\u00e4rgmine otsus, mille planeerija peab langetama, on see, millal protsess l\u00f5petab oma I\/O. Kui see juhtub, toimub katkestus ja OS viib I\/O taotlenud protsessi valmis olekusse.<\/p>\n<p>Vaatame mitme \u00fclesande n\u00e4idet. Iga\u00fchel neist on vaja 50 ms protsessori aega. Siiski p\u00f6\u00f6rdub esimene I\/O poole iga 10 ms (mis toimub samuti iga 10 ms). Protsess B kasutab lihtsalt 50 ms protsessorit ilma I\/O-ta.<\/p>\n<p><img decoding=\"async\" alt=\"Operating Systems: Three Easy Pieces. Part 4: Sissejuhatus planeerijasse (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/a32f5346eda86042c18d6424c19ad6b9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSelles n\u00e4ites kasutame STCF planeerijat. Kuidas k\u00e4itub planeerija, kui me k\u00e4ivitame sellel protsessi A? See teeb j\u00e4rgmist \u2014 esmalt t\u00e4idab see t\u00e4ielikult protsessi A ja seej\u00e4rel protsessi B.<\/p>\n<p><img decoding=\"async\" alt=\"Operating Systems: Three Easy Pieces. Part 4: Sissejuhatus planeerijasse (t\u00f5lge)\" src=\"\/wp-content\/uploads\/2019\/04\/9fb709a822b9fc35871b8a342ac38c7e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTraditsiooniline l\u00e4henemine selle probleemi lahendamiseks on t\u00f5lgendada iga 10 ms alam\u00fclesanne protsessist A eraldi \u00fclesandena. Nii et stardiga STJF algoritmiga on valik 50 ms \u00fclesande ja 10 ms \u00fclesande vahel ilmne. Kui alam\u00fclesanne A on l\u00f5petatud, k\u00e4ivitub protsess B ja I\/O. P\u00e4rast I\/O l\u00f5petamist on otsustatud uuesti k\u00e4ivitada 10 ms protsess A asemel protsessi B. Nii on v\u00f5imalik saavutada kattuvus, kus CPU-d kasutab teine protsess, samal ajal kui esimene ootab I\/O. L\u00f5ppkokkuv\u00f5ttes on s\u00fcsteem paremini kasutatud \u2014 ajal, mil interaktiivsed protsessid ootavad I\/O, saavad protsessoril t\u00f6\u00f6tada ka teised protsessid.<\/p>\n<h3>Oraaklit enam ei ole.<\/h3>\n<p>\n N\u00fc\u00fcd proovime loobuda eeldusest, et \u00fclesande t\u00f6\u00f6aeg on teada. See on \u00fcldiselt halvim ja ebareaalne eeldus kogu loendist. Tegelikult teavad keskmised tavalised operatsioonis\u00fcsteemid \u00fclesannete t\u00e4itmise aja kohta v\u00e4ga v\u00e4he, kuidas siis luua planeerijat teadmata, kui kaua \u00fclesanne kestab? V\u00f5ib-olla saame kasutada m\u00f5ningaid RR p\u00f5him\u00f5tteid selle probleemi lahendamiseks?<\/p>\n<h3>Kokkuv\u00f5te<\/h3>\n<p>\n Oleme k\u00e4sitlenud p\u00f5hitegevusi \u00fclesannete planeerimise osas ja vaadanud kahte planeerijate perekonda. Esimene k\u00e4ivitab k\u00f5ige l\u00fchema \u00fclesande k\u00f5igepealt, suurendades seel\u00e4bi p\u00f6\u00f6rdeaega, teine aga jaguneb k\u00f5ikide \u00fclesannete vahel \u00fchtlaselt, et suurendada reageerimise aega. M\u00f5lemad algoritmid on halvad seal, kus teise perekonna algoritmid on head. Samuti oleme vaadelnud, kuidas CPU ja I\/O paralleelne kasutamine v\u00f5ib parandada j\u00f5udlust, kuid ei ole siiski lahendanud operatsioonis\u00fcsteemi ennustamise probleemi. J\u00e4rgmises loengus vaatame planeerijat, mis vaatab l\u00e4himinevikku ja p\u00fc\u00fcab tulevikku ennustada. Seda nimetatakse multi-level feedback queue.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/449026\/\">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":23990,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32158","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 4: \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-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:45:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:45:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 4: Sissejuhatus planeerijasse (t\u00f5lge) | ProHoster","description":"Sissejuhatus operatsioonis\u00fcsteemidesse Tere, Habr! Soovin tutvustada teile huvitavat artiklite seeriat, mis on t\u00f5lgitud \u00fcritustest, mis mulle meeldivad \u2014 OSTEP.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 4: \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-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:45:27+00:00","article:modified_time":"2019-10-31T18:45:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32158","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"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 09:34:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:03:25","updated":"2026-01-21 09:34:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=32158"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32158\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/23990"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=32158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=32158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=32158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}