{"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\/ro\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod","title":{"rendered":"Sisteme de operare: Trei piese facile. Partea 4: Introducere \u00een scheduler (traducere)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Introducere \u00een sistemele de operare<\/h1>\n<p>\nSalut, Habr! Vreau s\u0103 v\u0103 prezint o serie de articole-traduceri dintr-o literatur\u0103 care mi se pare interesant\u0103 - OSTEP. Acest material examineaz\u0103 \u00een mod profund func\u021bionarea sistemelor de operare de tip unix, \u0219i anume - gestionarea proceselor, diferitele planificatoare, memorie \u0219i alte componente asem\u0103n\u0103toare care formeaz\u0103 un sistem de operare modern. Pute\u021bi vizualiza originalul tuturor materialelor aici <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">aici<\/a><\/noindex>. V\u0103 rog s\u0103 \u021bine\u021bi cont c\u0103 traducerea a fost efectuat\u0103 neprofesional (destul de liber), dar sper c\u0103 am p\u0103strat sensul general.<\/p>\n<p>Lucr\u0103rile de laborator pentru aceast\u0103 materie le pute\u021bi g\u0103si aici:<\/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\">adaptarea mea personal\u0103<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nAlte p\u0103r\u021bi:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">Partea 1: Introducere<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446866\/\">Partea 2: Abstrac\u021bie: proces<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/447182\/\">Partea 3: Introducere \u00een API-ul proceselor<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/449026\/\">Partea 4: Introducere \u00een planificator<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nDe asemenea, m\u0103 pute\u021bi urm\u0103ri pe canalul meu de <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">telegram\u0103<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Introducere \u00een planificator<\/h2>\n<p>\n<u>Problema esen\u021bial\u0103: Cum s\u0103 dezvol\u021bi o politic\u0103 de planificator<br \/>\nCum ar trebui s\u0103 fie dezvoltate cadrele de baz\u0103 ale politicilor planificatorului? Care sunt presupunerile cheie? Ce metrici sunt importante? Ce tehnici fundamentale au fost folosite \u00een sistemele de calcul timpurii?<\/u><\/p>\n<h3>Presupunerile privind sarcina de lucru<\/h3>\n<p>\n \u00cenainte de a discuta politicile posibile, s\u0103 facem c\u00e2teva observa\u021bii simplificatoare despre procesele rulate \u00een sistem, care sunt denumite \u00een ansamblu <b>sarcina de lucru<\/b>. Definind sarcina de lucru ca parte critic\u0103 a dezvolt\u0103rii politicilor \u0219i cu c\u00e2t \u0219tii mai multe despre sarcin\u0103, cu at\u00e2t mai bun\u0103 va fi politica pe care o po\u021bi redacta.<\/p>\n<p>Vom face urm\u0103toarele presupuneri despre procesele rulate \u00een sistem, denumite uneori <b>tasks<\/b> (sarcini). Practic, toate aceste presupuneri nu sunt realiste, dar sunt necesare pentru dezvoltarea ideii.<\/p>\n<ol>\n<li> Fiecare sarcin\u0103 ruleaz\u0103 un timp identic,<\/li>\n<li> Toate sarcinile sunt ini\u021biate simultan,<\/li>\n<li> Sarcina ini\u021biat\u0103 ruleaz\u0103 p\u00e2n\u0103 la finalizarea sa,<\/li>\n<li> Toate sarcinile folosesc doar CPU,<\/li>\n<li> Timpul de execu\u021bie al fiec\u0103rei sarcini este cunoscut.<\/li>\n<\/ol>\n<h3>Metricile Planificatorului<\/h3>\n<p>\n Pe l\u00e2ng\u0103 unele presupuneri despre sarcin\u0103, este nevoie de un instrument de comparare a diferitelor politici de planificare: metricile planificatorului. O metric\u0103 este pur \u0219i simplu o m\u0103sur\u0103 a ceva. Exist\u0103 un anumit num\u0103r de metrici care pot fi folosite pentru compararea planificatorilor.<\/p>\n<p>Ca exemplu, vom folosi o metric\u0103 numit\u0103 <b>timp de rota\u021bie<\/b> (turnaround time). Timpul de rota\u021bie al unei sarcini este definit ca diferen\u021ba dintre timpul finaliz\u0103rii sarcinii \u0219i timpul la care sarcina a fost introdus\u0103 \u00een sistem.<\/p>\n<p><u>Tturnaround=Tfinalizare\u2212Tintrare<\/u><\/p>\n<p>Deoarece am presupus c\u0103 toate sarcinile au fost introduse \u00een acela\u0219i timp, atunci Ta=0 \u0219i astfel Tt=Tc. Aceast\u0103 valoare se va schimba natural atunci c\u00e2nd vom modifica presupunerile men\u021bionate anterior.<\/p>\n<p>O alt\u0103 metric\u0103 \u2014 <b>fairness<\/b> (fairness, echitate). Performan\u021ba \u0219i echitatea sunt adesea caracteristici opuse \u00een planificare. De exemplu, un planificator poate optimiza performan\u021ba, dar \u00een detrimentul a\u0219tept\u0103rii ini\u021bierii altor sarcini, reduc\u00e2nd astfel echitatea.<\/p>\n<h3>FIRST IN FIRST OUT (FIFO)<\/h3>\n<p>\n Cel mai de baz\u0103 algoritm pe care \u00eel putem implementa se nume\u0219te FIFO sau <b>first come (in), first served (out)<\/b>. Acest algoritm are c\u00e2teva avantaje: este foarte simplu de implementat \u0219i se potrive\u0219te cu toate ipotezele noastre, realiz\u00e2nd sarcina destul de bine.<\/p>\n<p>S\u0103 lu\u0103m un exemplu simplu. S\u0103 presupunem c\u0103 3 sarcini au fost atribuite simultan. Dar s\u0103 presupunem c\u0103 sarcina A a sosit pu\u021bin mai devreme dec\u00e2t celelalte, a\u0219a c\u0103 va ap\u0103rea mai devreme \u00een lista de execu\u021bie, la fel cum B se va afla rela\u021bionat cu V. S\u0103 presupunem c\u0103 fiecare dintre ele va fi executat\u0103 timp de 10 secunde. Care va fi astfel timpul mediu de execu\u021bie pentru aceste sarcini?<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de operare: Trei piese facile. Partea 4: Introducere \u00een scheduler (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/8c17c29e10ac8c2e15f5f9d865922e49.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCalcul\u00e2nd valorile \u2014 10+20+30 \u0219i \u00eemp\u0103r\u021bind la 3, ob\u021binem un timp mediu de execu\u021bie al programului egal cu 20 de secunde.<br \/>\n Acum \u00eencerc\u0103m s\u0103 ne schimb\u0103m ipotezele. \u00cen special ipoteza 1, astfel \u00eenc\u00e2t s\u0103 nu mai presupunem c\u0103 fiecare sarcin\u0103 are un timp de execu\u021bie egal. Cum se va comporta FIFO de data aceasta?<\/p>\n<p>Se dovede\u0219te c\u0103 timpii de execu\u021bie diferite ale sarcinilor au un impact extrem de negativ asupra productivit\u0103\u021bii algoritmului FIFO. S\u0103 presupunem c\u0103 sarcina A se va executa timp de 100 de secunde, \u00een timp ce B \u0219i V vor continua s\u0103 dureze c\u00e2te 10 fiecare.<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de operare: Trei piese facile. Partea 4: Introducere \u00een scheduler (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/a375f3d1571f24df30f446b9bc7a9a9e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Dup\u0103 cum se poate observa din diagram\u0103, timpul mediu pentru sistem va fi (100+110+120)\/3=110. Acest efect se nume\u0219te <b>efectul convoiului<\/b>, atunci c\u00e2nd anumi\u021bi consumatori de scurt\u0103 durat\u0103 ai unei resurse vor sta \u00een a\u0219teptare \u00een spatele unui consumator greu. Este asem\u0103n\u0103tor cu o coad\u0103 la magazinul alimentar, c\u00e2nd \u00eenaintea ta se afl\u0103 un cump\u0103r\u0103tor cu un c\u0103rucior plin. Cea mai bun\u0103 solu\u021bie pentru problem\u0103 este s\u0103 \u00eencerci s\u0103 schimbi casa de marcat sau s\u0103 te relaxezi \u0219i s\u0103 respiri ad\u00e2nc.<\/p>\n<h3>Shortest Job First<\/h3>\n<p>\n Se poate solu\u021biona cumva o astfel de situa\u021bie cu procese greoaie? Desigur. Un alt tip de planificare se nume\u0219te<b>Shortest Job First<\/b> (SJF). Algoritmul s\u0103u este, de asemenea, destul de primitiv \u2014 dup\u0103 cum sugereaz\u0103 \u0219i numele, sarcinile cele mai scurte vor fi executate prima dat\u0103, una dup\u0103 alta.<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de operare: Trei piese facile. Partea 4: Introducere \u00een scheduler (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/d0723e313adc9ce7367da611216bf3ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen acest exemplu, rezultatul execut\u0103rii acelora\u0219i procese va fi o \u00eembun\u0103t\u0103\u021bire a timpului mediu de rota\u021bie a programelor, care va fi egal cu <b>50 \u00een loc de 110<\/b>, ceea ce este practic de 2 ori mai bine.<\/p>\n<p>Astfel, conform presupunerii c\u0103 toate sarcinile sosesc \u00een acela\u0219i timp, algoritmul SJF pare a fi cel mai optim algoritm. Totu\u0219i, presupunerile noastre \u00eenc\u0103 nu par realiste. De data aceasta, vom schimba presupunerea 2 \u0219i vom considera c\u0103 sarcinile pot sosi \u00een orice moment, nu toate simultan. Ce probleme poate cauza acest lucru?<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de operare: Trei piese facile. Partea 4: Introducere \u00een scheduler (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/2f0145551779f2733281d12bffad3a45.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS\u0103 presupunem c\u0103 sarcina A (100s) sosesc prima \u0219i \u00eencepe s\u0103 fie executat\u0103. La momentul t=10 sosesc sarcinile B \u0219i C, fiecare av\u00e2nd o durat\u0103 de 10 secunde. Astfel, timpul mediu de execu\u021bie este (100+(110-10)+(120-10))\/3 = 103. Ce ar putea face programatorul pentru a \u00eembun\u0103t\u0103\u021bi situa\u021bia?<\/p>\n<h3>Shortest Time-to-Completion First (STCF)<\/h3>\n<p>\n Pentru a \u00eembun\u0103t\u0103\u021bi situa\u021bia, vom renun\u021ba la presupunerea 3 conform c\u0103reia programul este lansat \u0219i ruleaz\u0103 p\u00e2n\u0103 la final. De asemenea, vom avea nevoie de suport hardware \u0219i, dup\u0103 cum probabil a\u021bi ghicit, vom folosi <b>un temporizator<\/b> pentru a \u00eentrerupe sarcina \u00een execu\u021bie \u0219i <b>a schimba contexte<\/b>. Astfel, programatorul poate \u00eentreprinde ceva \u00een momentul sosirii sarcinilor B \u0219i C \u2014 s\u0103 opreasc\u0103 execu\u021bia sarcinii A \u0219i s\u0103 proceseze sarcinile B \u0219i C, iar dup\u0103 finalizarea acestora, s\u0103 continue execu\u021bia procesului A. Acest tip de programator se nume\u0219te <b>STCF<\/b>sau <b>Preemptive Job First<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de operare: Trei piese facile. Partea 4: Introducere \u00een scheduler (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/81644f82b7b1489f239ebbdc5d78000b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRezultatul acestui programator va fi astfel: ((120-0)+(20-10)+(30-10))\/3=50. Astfel, acest programator devine \u0219i mai optim pentru sarcinile noastre.<\/p>\n<h3>Metrica Timp de r\u0103spuns (Response Time)<\/h3>\n<p>\n Astfel, dac\u0103 \u0219tim timpul de execu\u021bie al sarcinilor \u0219i faptul c\u0103 aceste sarcini folosesc doar CPU, STCF va fi cea mai bun\u0103 solu\u021bie. \u0218i \u00een vremurile de mult uitate, aceste algoritmi au func\u021bionat destul de bine. Totu\u0219i, acum utilizatorul \u00ee\u0219i petrece cea mai mare parte a timpului la terminal \u0219i a\u0219teapt\u0103 interac\u021biuni interactive eficiente. A\u0219a a ap\u0103rut o nou\u0103 metric\u0103 \u2014 <b>timp de r\u0103spuns<\/b> (response).<\/p>\n<p>Timpul de r\u0103spuns se calculeaz\u0103 astfel:<\/p>\n<p><u>Tresponse=Tfirstrun\u2212Tarrival<\/u><\/p>\n<p>Astfel, pentru exemplul anterior, timpul de r\u0103spuns va fi: A=0, B=0, C=10 (abg=3,33).<\/p>\n<p>Se pare c\u0103 algoritmul STCF nu este at\u00e2t de bun \u00een situa\u021bia \u00een care 3 sarcini sosesc simultan \u2014 va trebui s\u0103 a\u0219tepte p\u00e2n\u0103 c\u00e2nd sarcinile mici se finalizeaz\u0103 complet. Astfel, algoritmul este bun pentru metrica timpului de rota\u021bie, dar slab pentru metrica interactivit\u0103\u021bii. Imagina\u021bi-v\u0103 c\u0103, a\u0219ezat la un terminal, \u00eencerc\u00e2nd s\u0103 tasta\u021bi caractere \u00eentr-un editor, trebuie s\u0103 a\u0219tepta\u021bi mai mult de 10 secunde deoarece o alt\u0103 sarcin\u0103 ocup\u0103 procesorul. Nu este deloc pl\u0103cut.<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de operare: Trei piese facile. Partea 4: Introducere \u00een scheduler (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/f1412665826f845fdc685ec3c1a5bdad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAstfel, ne confrunt\u0103m cu o alt\u0103 problem\u0103 \u2014 cum putem construi un programator care s\u0103 fie sensibil la timpul de r\u0103spuns?<\/p>\n<h3>Round Robin<\/h3>\n<p>\n Pentru a rezolva aceast\u0103 problem\u0103, a fost dezvoltat un algoritm <b>Round Robin<\/b> (RR). Ideea de baz\u0103 este destul de simpl\u0103: \u00een loc s\u0103 lans\u0103m sarcinile p\u00e2n\u0103 la completarea lor, vom rula o sarcin\u0103 pentru un anumit interval de timp (numit cuant\u0103 de timp) \u0219i apoi vom comuta la o alt\u0103 sarcin\u0103 din coad\u0103. Algoritmul repet\u0103 aceast\u0103 procedur\u0103 p\u00e2n\u0103 c\u00e2nd toate sarcinile sunt terminate. Timpul de execu\u021bie al programului trebuie s\u0103 fie multiplu al intervalului de timp \u00een care temporizatorul va \u00eentrerupe procesul. De exemplu, dac\u0103 temporizatorul \u00eentrerupe procesul la fiecare x=10ms, atunci dimensiunea ferestrei de execu\u021bie a procesului trebuie s\u0103 fie multiplu de 10 \u0219i s\u0103 fie 10, 20 sau x*10.<\/p>\n<p>S\u0103 lu\u0103m un exemplu: Sarcinile A, B, C sosesc simultan \u00een sistem \u0219i fiecare dintre ele dore\u0219te s\u0103 ruleze 5 secunde. Algoritmul SJF va executa fiecare sarcin\u0103 p\u00e2n\u0103 la finalizare \u00eenainte de a lansa o alta. Spre deosebire de algoritmul RR cu fereastra de execu\u021bie=1s, va parcurge sarcinile \u00een urm\u0103torul mod (fig. 4.3):<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de operare: Trei piese facile. Partea 4: Introducere \u00een scheduler (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/a7790cb63c880b286db2a2e3782d59b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(SJF din nou (r\u0103u pentru timpul de r\u0103spuns)<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de operare: Trei piese facile. Partea 4: Introducere \u00een scheduler (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/f7e82d68a6118828ea4561a4911744e2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(Round Robin (bun pentru timpul de r\u0103spuns)<\/p>\n<p>Timpul mediu de r\u0103spuns pentru algoritmul RR (0+1+2)\/3=1, \u00een timp ce pentru SJF (0+5+10)\/3=5.<\/p>\n<p>Este logic s\u0103 presupunem c\u0103 fereastra de timp este un parametru foarte important pentru RR; cu c\u00e2t este mai mic\u0103, cu at\u00e2t timpul de r\u0103spuns este mai mare. Totu\u0219i, nu trebuie s\u0103 fie prea mic\u0103, deoarece timpul de schimbare a contextului va juca, de asemenea, un rol \u00een performan\u021ba general\u0103. Astfel, alegerea timpului de fereastr\u0103 de execu\u021bie este stabilit\u0103 de arhitectul sistemului de operare \u0219i depinde de sarcinile care sunt planificate a fi executate. Schimbarea contextului nu este singura opera\u021bie de serviciu care consum\u0103 timp - programul \u00een execu\u021bie opereaz\u0103 \u0219i cu diverse cache-uri, iar la fiecare schimbare este necesar\u0103 salvarea \u0219i restaurarea acestui mediu, ceea ce poate necesita, de asemenea, mult timp.<\/p>\n<p>RR este un planificator excelent, dac\u0103 ne g\u00e2ndim doar la metricile timpului de r\u0103spuns. Dar cum se va comporta metrica timpului de \u00eentoarcere a sarcinii \u00een acest algoritm? S\u0103 lu\u0103m exemplul de mai sus, c\u00e2nd timpul de execu\u021bie pentru A, B, C este de 5s \u0219i ajung \u00een acela\u0219i timp. Sarcina A se va finaliza la 13s, B la 14s, C la 15s, iar timpul mediu de \u00eentoarcere va fi de 14s. Astfel, RR este cel mai slab algoritm pentru metricile de \u00eentoarcere.<\/p>\n<p>\u00cen termeni mai generali, orice algoritm de tip RR este corect, \u00eemp\u0103r\u021bind timpul de lucru pe CPU \u00een mod egal \u00eentre toate procesele. Astfel, aceste metrici intr\u0103 constant \u00een conflict \u00eentre ele.<\/p>\n<p>Prin urmare, avem mai multe algoritmi opu\u0219i \u0219i, \u00een acela\u0219i timp, \u00eenc\u0103 mai r\u0103m\u00e2n c\u00e2teva presupuneri - c\u0103 timpul sarcinii este cunoscut \u0219i c\u0103 sarcina utilizeaz\u0103 doar CPU.<\/p>\n<h3>Amestecarea cu I\/O<\/h3>\n<p>\n \u00cen primul r\u00e2nd, s\u0103 elimin\u0103m presupunerea 4, c\u0103 procesul utilizeaz\u0103 doar CPU; desigur, nu este a\u0219a, iar procesele pot accesa \u0219i alte echipamente.<\/p>\n<p>\u00cen momentul \u00een care un proces solicit\u0103 o opera\u021bie de intrare-ie\u0219ire, acesta trece \u00een starea blocat\u0103, a\u0219tept\u00e2nd finalizarea I\/O. Dac\u0103 I\/O este trimis c\u0103tre hard disk, aceast\u0103 opera\u021bie poate dura p\u00e2n\u0103 la c\u00e2teva ms sau mai mult, iar procesorul va fi inactiv \u00een acest moment. \u00cen acest timp, planificatorul poate ocupa procesorul cu un alt proces. Urm\u0103toarea decizie pe care va trebui s\u0103 o ia planificatorul este c\u00e2nd procesul va finaliza I\/O. C\u00e2nd se \u00eent\u00e2mpl\u0103 asta, va avea loc o \u00eentrerupere \u0219i sistemul de operare va schimba procesul care a solicitat I\/O \u00een starea de preg\u0103tire.<\/p>\n<p>S\u0103 lu\u0103m un exemplu din mai multe sarcini. Fiecare dintre ele necesit\u0103 50ms de timp de procesor. Totu\u0219i, prima va accesa I\/O la fiecare 10ms (care va fi de asemenea executat la fiecare 10ms). Procesul B, pe de alt\u0103 parte, folose\u0219te pur \u0219i simplu 50ms de procesor f\u0103r\u0103 I\/O.<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de operare: Trei piese facile. Partea 4: Introducere \u00een scheduler (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/a32f5346eda86042c18d6424c19ad6b9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen acest exemplu, vom folosi programatorul STCF. Cum se va comporta programatorul dac\u0103 vom rula pe el un proces precum A? Acesta va proceda dup\u0103 cum urmeaz\u0103 \u2014 va finaliza mai \u00eent\u00e2i complet procesul A, apoi procesul B.<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de operare: Trei piese facile. Partea 4: Introducere \u00een scheduler (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/9fb709a822b9fc35871b8a342ac38c7e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAbordarea tradi\u021bional\u0103 pentru a rezolva aceast\u0103 problem\u0103 este de a interpreta fiecare subtask de 10ms al procesului A ca o sarcin\u0103 separat\u0103. Astfel, la \u00eenceput, algoritmul STJF face o alegere clar\u0103 \u00eentre sarcina de 50ms \u0219i cea de 10ms. Apoi, c\u00e2nd subtaskul A se va finaliza, se va porni procesul B \u0219i I\/O. Dup\u0103 finalizarea I\/O, se va decide s\u0103 se repornesc procesul de 10ms A \u00een locul procesului B. Astfel, se poate realiza suprapunerea, c\u00e2nd CPU este folosit de un alt proces, \u00een timp ce primul a\u0219teapt\u0103 I\/O. Ca rezultat, sistemul este mai bine utilizat \u2014 \u00een momentul \u00een care procesele interactive a\u0219teapt\u0103 I\/O, pe procesor pot rula \u0219i alte procese.<\/p>\n<h3>Oracolul nu mai exist\u0103<\/h3>\n<p>\n Acum s\u0103 \u00eencerc\u0103m s\u0103 sc\u0103p\u0103m de presupunerea c\u0103 timpul de execu\u021bie al sarcinii este cunoscut. Aceasta este, \u00een general, cea mai proast\u0103 \u0219i nerealist\u0103 presupunere din \u00eentreaga list\u0103. De fapt, \u00een sistemele de operare medii, OS-ul \u00eensu\u0219i \u0219tie foarte pu\u021bin despre timpul de execu\u021bie al sarcinilor, cum atunci s\u0103 construim un programator f\u0103r\u0103 a \u0219ti c\u00e2t timp va dura execu\u021bia unei sarcini? Poate am putea folosi unele principii RR pentru a rezolva aceast\u0103 problem\u0103?<\/p>\n<h3>Rezultatul<\/h3>\n<p>\n Am examinat conceptele de baz\u0103 ale program\u0103rii sarcinilor \u0219i am analizat dou\u0103 familii de programatori. Primul ruleaz\u0103 sarcina cea mai scurt\u0103 la \u00eenceput, astfel cre\u0219te timpul de rota\u021bie, iar al doilea se \u00eemparte uniform \u00eentre toate sarcinile, sporind timpul de r\u0103spuns. Ambele algoritmi sunt slabi \u00een domeniile \u00een care sunt buni algoritmii celeilalte familii. De asemenea, am v\u0103zut cum utilizarea paralel\u0103 a CPU \u0219i I\/O poate \u00eembun\u0103t\u0103\u021bi performan\u021ba, dar nu am rezolvat problema viziunii sistemului de operare. \u00cen urm\u0103toarea lec\u021bie, vom analiza un programator care se uit\u0103 \u00een trecutul apropiat \u0219i \u00eencearc\u0103 s\u0103 prezic\u0103 viitorul. Acesta se nume\u0219te coada de feedback multi-nivel.<br \/>\n<br \/>Sursa: <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.2.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\/ro\/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.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Sisteme de Operare: Trei Piese U\u0219oare. Partea 4: Introducere \u00een programator (traducere) | ProHoster","description":"Introducere \u00een sistemele de operare Salut, Habr! Vreau s\u0103 v\u0103 prezint o serie de articole-traduceri dintr-o literatur\u0103 interesant\u0103 din punctul meu de vedere \u2014 OSTEP.","canonical_url":"https:\/\/prohoster.info\/ro\/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":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/32158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=32158"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/32158\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/23990"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=32158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=32158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=32158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}