{"id":30992,"date":"2019-10-31T21:38:47","date_gmt":"2019-10-31T18:38:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod\/"},"modified":"2019-10-31T21:38:47","modified_gmt":"2019-10-31T18:38:47","slug":"operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","title":{"rendered":"Sisteme de Operare: Trei Piese U\u0219oare. Partea 2: Abstrac\u021bie: Proces (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>original: <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html<\/a><\/noindex><\/li>\n<li>original: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">github.com\/remzi-arpacidusseau\/ostep-code<\/a><\/noindex><\/li>\n<li>adaptarea mea personal\u0103: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">github.com\/bykvaadm\/OS\/tree\/master\/ostep<\/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<\/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<p>S\u0103 lu\u0103m \u00een considerare cea mai fundamental\u0103 abstra\u021bie pe care sistemul de operare o ofer\u0103 utilizatorilor: procesul. Defini\u021bia unui proces este destul de simpl\u0103 \u2014 este <b>un program \u00een execu\u021bie<\/b>. Programul, \u00een sine, este un lucru lipsit de via\u021b\u0103, aflat pe disc\u2014este un set de instruc\u021biuni \u0219i poate c\u00e2teva date statice, a\u0219tept\u00e2nd momentul pornirii. Anume sistemul de operare ia ace\u0219ti bi\u021bi \u0219i \u00eei lanseaz\u0103, transform\u00e2nd programul \u00een ceva util.<br \/>\n Cel mai adesea utilizatorii doresc s\u0103 ruleze mai multe programe simultan, de exemplu, pute\u021bi deschide pe laptopul dvs. un browser, un joc, un player multimedia, un editor de text \u0219i a\u0219a mai departe. De fapt, un sistem tipic poate rula zeci \u0219i sute de procese simultan. Acest lucru face ca sistemul s\u0103 fie mai u\u0219or de utilizat; nu trebuie s\u0103 v\u0103 preocupa\u021bi niciodat\u0103 dac\u0103 CPU-ul este liber, pur \u0219i simplu porni\u021bi programele.<\/p>\n<p><i>Din acest punct de vedere, apare problema: cum s\u0103 se asigure iluzia a mai multor CPU? Cum poate sistemul de operare s\u0103 creeze iluzia unui num\u0103r practic nelimitat de CPU-uri, chiar dac\u0103 ave\u021bi doar un singur CPU fizic?<\/i><\/p>\n<p>Sistemul de operare creeaz\u0103 aceast\u0103 iluzie prin virtualizarea CPU-ului. Rul\u00e2nd un proces, apoi oprindu-l, apoi rul\u00e2nd un alt proces \u0219i a\u0219a mai departe, sistemul de operare poate men\u021bine iluzia c\u0103 exist\u0103 numeroase CPU-uri virtuale, de\u0219i, de fapt, va fi unul sau mai multe procesoare fizice. Aceast\u0103 tehnic\u0103 se nume\u0219te <b>\u00eemp\u0103r\u021birea resurselor CPU \u00een timp<\/b>. Aceast\u0103 tehnic\u0103 permite utilizatorilor s\u0103 ruleze at\u00e2tea procese simultane c\u00e2t doresc. Pre\u021bul acestei solu\u021bii este performan\u021ba \u2014 deoarece dac\u0103 CPU-ul este \u00eemp\u0103r\u021bit \u00eentre mai multe procese, fiecare proces va fi procesat mai lent.<br \/>\n Pentru a concretiza virtualizarea CPU-ului, \u0219i \u00een special pentru a o face bine, sistemul de operare are nevoie de suport at\u00e2t la nivel sc\u0103zut, c\u00e2t \u0219i la nivel \u00eenalt. Suportul la nivel sc\u0103zut se nume\u0219te <b>mecanisme<\/b> \u2014 acestea sunt metode sau protocoale la un nivel inferior care implementeaz\u0103 partea necesar\u0103 a func\u021bionalit\u0103\u021bii. Un exemplu de astfel de func\u021bionalitate este comutarea contextului, care permite sistemului de operare s\u0103 opreasc\u0103 un program \u0219i s\u0103 ruleze un alt program pe procesor. Aceast\u0103 divizare temporar\u0103 este implementat\u0103 \u00een toate sistemele de operare moderne.<br \/>\n Deasupra acestor mecanisme se afl\u0103 o logic\u0103 specific\u0103, \u00eencorporat\u0103 \u00een sistemul de operare, sub form\u0103 de \u201epolitici\u201d. <b>Politica<\/b> \u2014 este un algoritm prin care sistemul de operare ia decizii. De exemplu, astfel de politici decid ce program trebuie s\u0103 fie lansat (din lista de comenzi) \u00een primul r\u00e2nd. De exemplu, aceast\u0103 sarcin\u0103 este rezolvat\u0103 de o politic\u0103 numit\u0103 <b>politica de planificare (scheduling policy)<\/b> \u0219i, \u00een alegerea deciziei, se va ghida dup\u0103 date precum: istoricul de lansare (care program a fost activ cel mai mult \u00een ultima minut\u0103), ce sarcin\u0103 genereaz\u0103 acest proces (ce tipuri de programe au fost lansate), metricile de performan\u021b\u0103 (dac\u0103 sistemul este optimizat pentru interac\u021biune interactiv\u0103 sau pentru capacitate de transfer) \u0219i a\u0219a mai departe.<\/p>\n<h3>Abstrac\u021bie: procesul<\/h3>\n<p>\n Abstrac\u021bia unui program \u00een execu\u021bie, realizat\u0103 de sistemul de operare, este ceea ce numim <b>un proces<\/b>. A\u0219a cum am spus anterior, un proces este pur \u0219i simplu un program \u00een execu\u021bie, \u00eentr-un anumit interval de timp. Este programul prin care putem ob\u021bine informa\u021bii agregate din diverse resurse ale sistemului \u0219i la care se face referire sau pe care programul le afecteaz\u0103 \u00een timpul execu\u021biei sale.<br \/>\n Pentru a \u00een\u021belege componentele procesului, trebuie s\u0103 \u00een\u021belegem st\u0103rile sistemului: ce poate citi sau modifica programul \u00een timpul func\u021bion\u0103rii sale. \u00cen orice moment, trebuie s\u0103 \u0219tim ce elemente ale sistemului sunt importante pentru execu\u021bia programului.<br \/>\n Unul dintre elementele evidente ale st\u0103rii sistemului incluse \u00een proces este <b>memoria<\/b>. Instruc\u021biunile sunt stocate \u00een memorie. Datele pe care programul le cite\u0219te sau le scrie sunt de asemenea stocate \u00een memorie. Astfel, memoria pe care procesul o poate adresa (a\u0219a-numitul spa\u021biu de adresare) este o parte a procesului.<br \/>\n De asemenea, registrele fac parte din starea sistemului. Multe instruc\u021biuni sunt destinate s\u0103 schimbe valoarea registrelor sau s\u0103 citeasc\u0103 valoarea acestora, astfel \u00eenc\u00e2t registrele devin \u0219i ele o parte important\u0103 a func\u021bion\u0103rii procesului. <br \/>\nTrebuie men\u021bionat c\u0103 starea ma\u0219inii este format\u0103 \u0219i din anumite registre speciale. De exemplu,<b> IP \u2014 pointer-ul de instruc\u021biune<\/b> \u2014 este indicativul instruc\u021biunii pe care programul o execut\u0103 \u00een acest moment. Mai exist\u0103 <b>pointer-ul de stiv\u0103<\/b> \u0219i cel asociat cu acesta, <b>pointer-ul de cadru<\/b>, care sunt utilizate pentru gestionarea: parametrilor func\u021biilor, variabilelor locale \u0219i adreselor de retur.<br \/>\n\u00cen cele din urm\u0103, programele apeleaz\u0103 adesea la ROM (memorie de tip permanent). Informa\u021biile despre \u201eI\/O\u201d (input-output) trebuie s\u0103 includ\u0103 o list\u0103 a fi\u0219ierelor deschise de proces \u00een acel moment.<\/p>\n<h3>API-ul procesului<\/h3>\n<p>\n Pentru a \u00eembun\u0103t\u0103\u021bi \u00een\u021belegerea func\u021bion\u0103rii procesului, s\u0103 examin\u0103m exemple de apeluri de sistem care ar trebui s\u0103 fie incluse \u00een orice interfa\u021b\u0103 a sistemului de operare. Aceste API-uri sunt disponibile \u00eentr-o form\u0103 sau alta pe orice sistem de operare.<\/p>\n<p>\u25cf <b>Creeaz\u0103<\/b> (creare): \u00cen OS ar trebui s\u0103 existe o metod\u0103 prin care s\u0103 se poat\u0103 crea noi procese. Atunci c\u00e2nd introduci o comand\u0103 \u00een terminal sau deschizi o aplica\u021bie printr-un dublu click pe pictogram\u0103, se trimite o solicitare c\u0103tre OS pentru a crea un nou proces \u0219i pentru a lansa programul specificat.<br \/>\n\u25cf <b>\u0218tergere<\/b>: Dac\u0103 exist\u0103 o interfa\u021b\u0103 pentru crearea de procese, OS ar trebui s\u0103 ofere \u0219i op\u021biunea de a for\u021ba eliminarea unui proces. Majoritatea programelor se vor lansa \u0219i se vor \u00eencheia de la sine pe parcursul execu\u021biei. \u00cen caz contrar, utilizatorul ar dori s\u0103 aib\u0103 posibilitatea de a le \u00eenchide, iar astfel interfa\u021ba pentru oprirea procesului nu ar fi de prisos.<br \/>\n\u25cf <b>Wait <\/b>(a\u0219teptare): Uneori, este util s\u0103 a\u0219tep\u021bi finalizarea unui proces, a\u0219a c\u0103 sunt furnizate anumite interfe\u021be care permit a\u0219teptarea.<br \/>\n\u25cf <b>Control divers<\/b> (diverse control): Pe l\u00e2ng\u0103 \u00eenchiderea \u0219i a\u0219teptarea procesului, exist\u0103 \u0219i alte metode de control diverse. De exemplu, majoritatea sistemelor de operare ofer\u0103 posibilitatea de a suspenda un proces (oprirea execu\u021biei pentru o perioad\u0103) \u0219i apoi de a-l relua (continuarea execu\u021biei).<br \/>\n\u25cf <b>Stare <\/b>(stare): Exist\u0103 diverse interfe\u021be pentru a ob\u021bine informa\u021bii despre starea procesului, cum ar fi durata de func\u021bionare sau \u00een ce stare se afl\u0103 \u00een acest moment.<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de Operare: Trei Piese U\u0219oare. Partea 2: Abstrac\u021bie: Proces (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/eccf4ba3b12a60a54a62bb13986a7783.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Crearea procesului: detalii<\/h3>\n<p>Unul dintre aspectele interesante este cum programele se transform\u0103 \u00een procese. \u00cen special, cum sistemul de operare \u00eencarc\u0103 \u0219i ruleaz\u0103 un program. Cum este creat un proces specific.<br \/>\n\u00cen primul r\u00e2nd, sistemul de operare trebuie s\u0103 \u00eencarce codul programului \u0219i datele statice \u00een memorie (\u00een spa\u021biul de adres\u0103 al procesului). Programele sunt de obicei stocate pe un disc sau pe un SSD \u00eentr-un anumit format executabil. Astfel, procesul de \u00eenc\u0103rcare a programului \u0219i datelor statice \u00een memorie necesit\u0103 ca sistemul de operare s\u0103 citeasc\u0103 ace\u0219ti bi\u021bi de pe disc \u0219i s\u0103 \u00eei plaseze undeva \u00een memorie.<\/p>\n<p>\u00cen sistemele de operare mai vechi, procesul de \u00eenc\u0103rcare era realizat cu ner\u0103bdare (eagerly), adic\u0103 codul era \u00eenc\u0103rcat \u00een memorie \u00een \u00eentregime \u00eenainte ca programul s\u0103 fie lansat. Sistemele de operare moderne fac acest lucru \u00een mod lene\u0219 (lazily), adic\u0103 \u00eenc\u0103rc\u00e2nd buc\u0103\u021bi de cod sau date doar atunci c\u00e2nd sunt necesare programului \u00een timpul execu\u021biei sale.<\/p>\n<p>Dup\u0103 ce codul \u0219i datele statice sunt \u00eenc\u0103rcate \u00een memorie, sistemul de operare trebuie s\u0103 efectueze c\u00e2teva alte lucruri \u00eenainte de a lansa procesul. Un anumit spa\u021biu de memorie trebuie s\u0103 fie alocat pentru stiv\u0103. <b>Programele folosesc stiva pentru variabile locale, parametrii func\u021biilor \u0219i adresele de returnare<\/b>. Sistemul de operare aloc\u0103 aceast\u0103 memorie \u0219i o ofer\u0103 procesului. Stiva poate fi, de asemenea, alocat\u0103 cu anumite argumente, \u00een special, aceasta completeaz\u0103 parametrii func\u021biei main(), de exemplu, cu un array argc \u0219i argv.<\/p>\n<p>Sistemul de operare poate, de asemenea, s\u0103 aloce o anumit\u0103 cantitate de memorie pentru heap-ul programului. <b>Heap-ul este utilizat de programe pentru datele alocate dinamic la cerere<\/b>. Programele solicit\u0103 acest spa\u021biu, apel\u00e2nd func\u021bia <b>malloc()<\/b> \u0219i \u00eel elibereaz\u0103 explicit, apel\u00e2nd func\u021bia <b>free()<\/b>. O gr\u0103mad\u0103 este necesar\u0103 pentru structuri de date precum: liste legate, tabele de hash, arbori \u0219i altele. La \u00eenceput, pentru gr\u0103mad\u0103 se aloc\u0103 o cantitate mic\u0103 de memorie, dar pe parcursul func\u021bion\u0103rii programului, gr\u0103mada poate solicita o cantitate mai mare de memorie, printr-un apel de API de bibliotec\u0103 malloc(). Sistemul de operare este implicat \u00een procesul de alocare a unei cantit\u0103\u021bi mai mari de memorie pentru a ajuta la satisfacerea acestor cereri.<\/p>\n<p>Sistemul de operare va efectua, de asemenea, sarcini de ini\u021bializare, \u00een special cele legate de intrare-ie\u0219ire. De exemplu, \u00een sistemele UNIX, fiecare proces are \u00een mod implicit 3 descriptor de fi\u0219iere deschise, pentru fluxul standard de intrare, ie\u0219ire \u0219i erori. Aceste descriptoare permit programelor s\u0103 citeasc\u0103 intr\u0103rile de la terminal \u0219i, de asemenea, s\u0103 afi\u0219eze informa\u021bii pe ecran. <\/p>\n<p>Astfel, \u00eenc\u0103rc\u00e2nd codul \u0219i datele statice \u00een memorie, cre\u00e2nd \u0219i ini\u021bializ\u00e2nd stiva, precum \u0219i efectu\u00e2nd alte lucr\u0103ri legate de sarcinile de intrare-ie\u0219ire, OS preg\u0103te\u0219te terenul pentru executarea procesului. \u00cen cele din urm\u0103, r\u0103m\u00e2ne ultima sarcin\u0103: a lansa programul pentru execu\u021bie prin punctul s\u0103u de intrare, numit func\u021bia main(). Trec\u00e2nd la executarea func\u021biei main(), OS transfer\u0103 controlul CPU-ului procesului nou creat, astfel \u00eenc\u00e2t programul \u00eencepe s\u0103 ruleze. <\/p>\n<h3>Starea procesului<\/h3>\n<p>\n Acum, c\u00e2nd avem o oarecare \u00een\u021belegere despre ce este un proces \u0219i cum este creat, s\u0103 enumer\u0103m st\u0103rile procesului \u00een care acesta poate fi. \u00cen cea mai simpl\u0103 form\u0103, un proces poate fi \u00een una dintre aceste st\u0103ri:<br \/>\n\u25cf <b>Running<\/b>. \u00cen stare de execu\u021bie, procesul ruleaz\u0103 pe procesor. Asta \u00eenseamn\u0103 c\u0103 instruc\u021biunile sunt executate.<br \/>\n\u25cf <b>Gata<\/b>. \u00cen stare de preg\u0103tire, procesul este gata s\u0103 porneasc\u0103, dar din diverse motive, OS nu \u00eel execut\u0103 \u00een acel moment.<br \/>\n\u25cf <b>Blocat<\/b>. \u00cen stare de blocare, procesul efectueaz\u0103 diverse opera\u021biuni care nu \u00eei permit s\u0103 fie gata de execu\u021bie p\u00e2n\u0103 c\u00e2nd nu se \u00eent\u00e2mpl\u0103 un anumit eveniment. Un exemplu obi\u0219nuit este c\u00e2nd procesul ini\u021biaz\u0103 o opera\u021bie IO, acesta devine blocat \u0219i astfel un alt proces poate utiliza procesorul.<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de Operare: Trei Piese U\u0219oare. Partea 2: Abstrac\u021bie: Proces (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/d2c01bdb08e7b7aeea78edcbf6ce0250.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nImagin\u0103m aceste st\u0103ri ca pe un graf. A\u0219a cum putem vedea \u00een imagine, starea unui proces poate varia \u00eentre RUNNING \u0219i READY, la discre\u021bia sistemului de operare. Atunci c\u00e2nd starea procesului trece de la READY la RUNNING, \u00eenseamn\u0103 c\u0103 procesul a fost programat. Invers, acesta a fost eliminat din programare. \u00cen momentul \u00een care procesul devine BLOCKED, de exemplu, \u00eencep\u00e2nd o opera\u021biune IO, sistemul de operare \u00eel va men\u021bine \u00een aceast\u0103 stare p\u00e2n\u0103 la apari\u021bia unui anumit eveniment, cum ar fi finalizarea IO. \u00cen acel moment, va trece \u00een starea READY \u0219i, eventual, imediat \u00een starea RUNNING, dac\u0103 aceasta este decizia sistemului de operare. <br \/>\nS\u0103 arunc\u0103m o privire asupra unui exemplu despre cum dou\u0103 procese trec prin aceste st\u0103ri. Pentru \u00eenceput, s\u0103 ne imagin\u0103m c\u0103 ambele procese sunt lansate \u0219i fiecare folose\u0219te doar CPU. \u00cen acest caz, st\u0103rile lor vor ar\u0103ta astfel.<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de Operare: Trei Piese U\u0219oare. Partea 2: Abstrac\u021bie: Proces (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/904cef8e04c2f0d8eaf4fdc5860f5bfd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen exemplul urm\u0103tor, primul proces, dup\u0103 o anumit\u0103 perioad\u0103 de execu\u021bie, solicit\u0103 IO \u0219i trece \u00een starea BLOCKED, oferind altui proces oportunitatea de a porni (ILUSTRA\u021aIE 1.4). Sistemul de operare observ\u0103 c\u0103 procesul 0 nu folose\u0219te CPU \u0219i porne\u0219te procesul 1. \u00cen timpul execu\u021biei procesului 1, opera\u021biunea IO se finalizeaz\u0103, iar starea procesului 0 se schimb\u0103 \u00een READY. \u00cen cele din urm\u0103, procesul 1 se finalizeaz\u0103, iar odat\u0103 cu \u00eencheierea sa, procesul 0 este lansat, executat \u0219i finalizeaz\u0103 sarcina sa.<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de Operare: Trei Piese U\u0219oare. Partea 2: Abstrac\u021bie: Proces (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/06f44895cc976e7755c1f7bf5afe466b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Structura datelor<\/h3>\n<p>\n Sistemul de operare este, de asemenea, un program \u0219i, la fel ca orice alt program, are anumite structuri de date cheie, care monitorizeaz\u0103 diverse piese de informa\u021bii relevante. Pentru a urm\u0103ri starea fiec\u0103rui proces, sistemul de operare va men\u021bine o <b>list\u0103 de procese<\/b> pentru toate procesele \u00een starea READY \u0219i anumite informa\u021bii suplimentare pentru a urm\u0103ri procesele care se execut\u0103 \u00een prezent. De asemenea, sistemul de operare trebuie s\u0103 monitorizeze procesele blocate. Dup\u0103 finalizarea IO, sistemul de operare trebuie s\u0103 trezeasc\u0103 procesul corespunz\u0103tor \u0219i s\u0103-l transfere \u00een starea de preg\u0103tire pentru execu\u021bie.<\/p>\n<p>Astfel, de exemplu, sistemul de operare trebuie s\u0103 salveze starea registrelor procesorului. \u00cen momentul opririi procesului, starea registrelor este salvat\u0103 \u00een spa\u021biul de adresare al procesului, iar \u00een momentul relu\u0103rii execu\u021biei acestuia, valorile registrelor sunt restaurate \u0219i, astfel, se continu\u0103 execu\u021bia acestui proces.<\/p>\n<p>Pe l\u00e2ng\u0103 st\u0103rile ready, blocked, running, exist\u0103 \u0219i alte st\u0103ri. Uneori, \u00een momentul cre\u0103rii, un proces poate avea starea INIT. \u00cen cele din urm\u0103, un proces poate fi plasat \u00een starea FINAL, c\u00e2nd acesta s-a \u00eencheiat, dar informa\u021biile despre el nu au fost \u00eenc\u0103 \u0219terse. \u00cen sistemele UNIX, aceast\u0103 stare se nume\u0219te <b>proces-zombi<\/b>. Aceast\u0103 stare este util\u0103 \u00een situa\u021biile \u00een care procesul p\u0103rinte vrea s\u0103 afle codul de returnare al copilului; de exemplu, \u00een general 0 semnaleaz\u0103 o finalizare cu succes, iar 1 o eroare, totu\u0219i programatorii pot folosi coduri suplimentare de ie\u0219ire pentru a semnaliza diferite probleme. La finalizarea sa, procesul-p\u0103rinte face ultima apelare a sistemului, de exemplu wait(), pentru a a\u0219tepta \u00eencheierea procesului copil \u0219i a semnaliza sistemului de operare c\u0103 se pot \u0219terge orice date asociate cu procesul \u00eencheiat.<\/p>\n<p><img decoding=\"async\" alt=\"Sisteme de Operare: Trei Piese U\u0219oare. Partea 2: Abstrac\u021bie: Proces (traducere)\" src=\"\/wp-content\/uploads\/2019\/04\/4756790c823a7e9ebbe26ff067ca00cc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Punctele cheie ale prelegerii:<\/h3>\n<p>\n\u25cf <b>Procesul <\/b> \u2014 principala abstrare a unui program func\u021bional \u00een sistemul de operare. \u00cen orice moment, un proces poate fi descris prin starea sa: con\u021binutul memoriei \u00een spa\u021biul s\u0103u de adrese, con\u021binutul registrelor procesorului, inclusiv indicatorul de instruc\u021biuni \u0219i indicatorul de stiv\u0103, precum \u0219i informa\u021bii despre IO, cum ar fi fi\u0219ierele deschise, care sunt citite sau scrise.<br \/>\n\u25cf <b>API-ul procesului<\/b> const\u0103 din apeluri pe care programele le pot face \u00een leg\u0103tur\u0103 cu procesele. \u00cen general, acestea sunt apeluri pentru crearea, \u0219tergerea sau altele.<br \/>\n\u25cf Un proces se afl\u0103 \u00eentr-una din numeroasele st\u0103ri, inclusiv running, ready, blocked. Diferite evenimente, cum ar fi programarea, excluderea din programare sau a\u0219teptarea, pot schimba starea procesului dintr-una \u00een alta.<br \/>\n\u25cf <b>Lista proceselor<\/b> con\u021bine informa\u021bii despre toate procesele din sistem. Fiecare \u00eenregistrare din aceasta se nume\u0219te bloc de control al procesului, care, \u00een realitate, este o structur\u0103 ce con\u021bine toat\u0103 informa\u021bia necesar\u0103 despre un proces specific.<br \/>\n<br \/>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446866\/\">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":22968,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30992","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-2-abstraktsiya-protsess-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 2: \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f: \u041f\u0440\u043e\u0446\u0435\u0441\u0441 (\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-2-abstraktsiya-protsess-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:38:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:38:47+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 2: Abstrarea: Proces (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-2-abstraktsiya-protsess-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 2: \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f: \u041f\u0440\u043e\u0446\u0435\u0441\u0441 (\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-2-abstraktsiya-protsess-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:38:47+00:00","article:modified_time":"2019-10-31T18:38:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30992","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 03:59:23","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:26:04","updated":"2026-01-21 03:59:23","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\/30992","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=30992"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/30992\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/22968"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=30992"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=30992"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=30992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}