{"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\/pl\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","title":{"rendered":"Systemy operacyjne: Trzy \u0142atwe kawa\u0142ki. Cz\u0119\u015b\u0107 2: Abstrakcja: Proces (t\u0142umaczenie)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Wprowadzenie do system\u00f3w operacyjnych<\/h1>\n<p>\nCze\u015b\u0107, Habr! Chc\u0119 przedstawi\u0107 Wam seri\u0119 artyku\u0142\u00f3w-przek\u0142ad\u00f3w jednej ciekawej literatury \u2014 OSTEP. W tym materiale omawiane s\u0105 do\u015b\u0107 dog\u0142\u0119bnie zasady dzia\u0142ania system\u00f3w operacyjnych typu unix, a mianowicie \u2014 praca z procesami, r\u00f3\u017cnymi planistami, pami\u0119ci\u0105 i innymi podobnymi komponentami, kt\u00f3re sk\u0142adaj\u0105 si\u0119 na nowoczesny system operacyjny. Orygina\u0142 wszystkich materia\u0142\u00f3w mo\u017cna zobaczy\u0107 tutaj <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">tutaj<\/a><\/noindex>. Prosz\u0119 pami\u0119ta\u0107, \u017ce t\u0142umaczenie zosta\u0142o wykonane w spos\u00f3b nieprofesjonalny (dosy\u0107 lu\u017ano), ale mam nadziej\u0119, \u017ce og\u00f3lny sens zachowa\u0142em.<\/p>\n<p>Laboratoria dotycz\u0105ce tego tematu mo\u017cna znale\u017a\u0107 tutaj:<\/p>\n<ul>\n<li>orygina\u0142: <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>orygina\u0142: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">github.com\/remzi-arpacidusseau\/ostep-code<\/a><\/noindex><\/li>\n<li>moja osobista adaptacja: <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>\nInne cz\u0119\u015bci:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">Cz\u0119\u015b\u0107 1: Wst\u0119p<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nMo\u017cecie r\u00f3wnie\u017c zajrze\u0107 na m\u00f3j kana\u0142 w <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">telegramie<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Rozwa\u017cmy najbardziej fundamentaln\u0105 abstrakcj\u0119, kt\u00f3r\u0105 system operacyjny oferuje u\u017cytkownikom: proces. Definicja procesu jest do\u015b\u0107 prosta \u2014 to <b>dzia\u0142aj\u0105ca aplikacja<\/b>. Program sam w sobie jest bez\u017cywotnym obiektem, znajduj\u0105cym si\u0119 na dysku \u2014 to zestaw instrukcji i by\u0107 mo\u017ce jakie\u015b statyczne dane, kt\u00f3re czekaj\u0105 na moment uruchomienia. To system operacyjny bierze te bajty i uruchamia je, przekszta\u0142caj\u0105c program w co\u015b u\u017cytecznego.<br \/>\n Najcz\u0119\u015bciej u\u017cytkownicy chc\u0105 uruchamia\u0107 wi\u0119cej ni\u017c jeden program jednocze\u015bnie, na przyk\u0142ad mo\u017cesz uruchomi\u0107 na swoim laptopie przegl\u0105dark\u0119, gr\u0119, odtwarzacz multimedialny, edytor tekstu i tym podobne. W rzeczywisto\u015bci typowy system mo\u017ce uruchamia\u0107 dziesi\u0105tki, a nawet setki proces\u00f3w jednocze\u015bnie. Fakt ten sprawia, \u017ce system jest \u0142atwiejszy w u\u017cyciu, nigdy nie musisz si\u0119 martwi\u0107 o to, czy CPU jest wolny, po prostu uruchamiasz programy.<\/p>\n<p><i>St\u0105d wynika problem: jak zapewni\u0107 iluzj\u0119 wielu CPU? Jak system operacyjny mo\u017ce stworzy\u0107 iluzj\u0119 praktycznie niesko\u0144czonej liczby CPU, nawet je\u015bli masz tylko jeden fizyczny CPU?<\/i><\/p>\n<p>System operacyjny tworzy t\u0119 iluzj\u0119 poprzez wirtualizacj\u0119 CPU. Uruchamiaj\u0105c jeden proces, nast\u0119pnie go zatrzymuj\u0105c, uruchamiaj\u0105c inny proces i tak dalej, system operacyjny mo\u017ce utrzymywa\u0107 iluzj\u0119 istnienia wielu wirtualnych CPU, chocia\u017c faktycznie b\u0119dzie to jeden lub kilka fizycznych procesor\u00f3w. Technika ta nazywa si\u0119 <b>dzieleniem zasob\u00f3w CPU w czasie<\/b>Ta technika pozwala u\u017cytkownikom uruchamia\u0107 tyle r\u00f3wnoleg\u0142ych proces\u00f3w, ile chc\u0105. Kosztem tego rozwi\u0105zania jest wydajno\u015b\u0107 \u2013 poniewa\u017c je\u015bli CPU dzieli wiele proces\u00f3w, ka\u017cdy proces b\u0119dzie przetwarzany wolniej.<br \/>\n Aby zrealizowa\u0107 wirtualizacj\u0119 CPU, a zw\u0142aszcza aby robi\u0107 to dobrze, system operacyjny potrzebuje zar\u00f3wno wsparcia niskopoziomowego, jak i wysokopoziomowego. Wsparcie niskopoziomowe nazywane jest <b>mechanizmami<\/b> \u2013 to niskopoziomowe metody lub protoko\u0142y, kt\u00f3re wdra\u017caj\u0105 potrzebn\u0105 cz\u0119\u015b\u0107 funkcjonalno\u015bci. Przyk\u0142adem takiej funkcjonalno\u015bci jest prze\u0142\u0105czanie kontekstu, kt\u00f3re pozwala systemowi operacyjnemu wstrzyma\u0107 jeden program i uruchomi\u0107 na procesorze inny program. Takie podzia\u0142 czasu jest realizowany we wszystkich nowoczesnych systemach operacyjnych.<br \/>\n Na szczycie tych mechanizm\u00f3w znajduje si\u0119 pewna logika, zakodowana w systemie operacyjnym, w postaci \u201epolityk\u201d. <b>Polityka<\/b> \u2013 to pewien algorytm podejmowania decyzji przez system operacyjny. Takie polityki, na przyk\u0142ad, decyduj\u0105, kt\u00f3ry program trzeba uruchomi\u0107 (z listy zada\u0144) w pierwszej kolejno\u015bci. Na przyk\u0142ad, takie zadanie rozwi\u0105\u017ce polityka nazywana <b>polityk\u0105 harmonogramu (scheduling policy)<\/b> i przy wyborze decyzji b\u0119dzie kierowa\u0107 si\u0119 takimi danymi jak: historia uruchamiania (kt\u00f3ry program by\u0142 uruchomiony najd\u0142u\u017cej w ostatniej minucie), jakie obci\u0105\u017cenie generuje dany proces (jakie typy program\u00f3w zosta\u0142y uruchomione), metryki wydajno\u015bci (czy system jest zoptymalizowany do interaktywnej wsp\u00f3\u0142pracy, czy do przepustowo\u015bci) i tak dalej.<\/p>\n<h3>Abstrakcja: proces<\/h3>\n<p>\n Abstrakcja dzia\u0142aj\u0105cego programu, wykonywana przez system operacyjny, to to, co nazywamy <b>proces<\/b>. Jak ju\u017c wspomniano wcze\u015bniej, proces to po prostu dzia\u0142aj\u0105cy program w ka\u017cdym momencie czasowym. Program, za pomoc\u0105 kt\u00f3rego mo\u017cemy uzyska\u0107 zbiorcze informacje z r\u00f3\u017cnych zasob\u00f3w systemu, do kt\u00f3rych ten program si\u0119 odnosi lub kt\u00f3re te program obejmuje w trakcie swojego dzia\u0142ania.<br \/>\n Aby zrozumie\u0107 sk\u0142adniki procesu, nale\u017cy zrozumie\u0107 stany systemu: co program mo\u017ce odczytywa\u0107 lub modyfikowa\u0107 podczas swojej pracy. W ka\u017cdym momencie czasu nale\u017cy zna\u0107, kt\u00f3re elementy systemu s\u0105 istotne dla wykonania programu.<br \/>\n Jednym z oczywistych element\u00f3w stanu systemu, kt\u00f3re obejmuje proces, jest <b>pami\u0119\u0107<\/b>. Instrukcje s\u0105 umieszczane w pami\u0119ci. Dane, kt\u00f3re program odczytuje lub zapisuje, tak\u017ce znajduj\u0105 si\u0119 w pami\u0119ci. W ten spos\u00f3b pami\u0119\u0107, kt\u00f3r\u0105 proces mo\u017ce adresowa\u0107 (tzw. przestrze\u0144 adresowa), jest cz\u0119\u015bci\u0105 procesu.<br \/>\n Cz\u0119\u015bci\u0105 stanu systemu s\u0105 r\u00f3wnie\u017c rejestry. Wiele instrukcji ma na celu zmian\u0119 warto\u015bci rejestr\u00f3w lub ich odczyt, w ten spos\u00f3b rejestry staj\u0105 si\u0119 istotn\u0105 cz\u0119\u015bci\u0105 dzia\u0142ania procesu. <br \/>\nNale\u017cy zauwa\u017cy\u0107, \u017ce stan maszyny jest r\u00f3wnie\u017c formowany przez niekt\u00f3re specjalne rejestry. Na przyk\u0142ad,<b> IP \u2014 wska\u017anik instrukcji<\/b> \u2014 wskazuje na instrukcj\u0119, kt\u00f3r\u0105 program wykonuje w danymmomencie. Istnieje tak\u017ce <b>wska\u017anik stosu<\/b> i zwi\u0105zany z nim <b>wska\u017anik ramki<\/b>, kt\u00f3re s\u0105 u\u017cywane do zarz\u0105dzania: parametrami funkcji, zmiennymi lokalnymi i adresami powrotu.<br \/>\nNa koniec programy cz\u0119sto odwo\u0142uj\u0105 si\u0119 do ROM (pami\u0119ci sta\u0142ej). Tego rodzaju informacje o \u201eI\/O\u201d (wej\u015bcie-wyj\u015bcie) powinny zawiera\u0107 list\u0119 plik\u00f3w, kt\u00f3re s\u0105 aktualnie otwarte przez proces.<\/p>\n<h3>API Procesu<\/h3>\n<p>\n Aby poprawi\u0107 zrozumienie dzia\u0142ania procesu, zbadamy przyk\u0142ady wywo\u0142a\u0144 systemowych, kt\u00f3re powinny by\u0107 zawarte w ka\u017cdym interfejsie systemu operacyjnego. Te API s\u0105 w tej czy innej formie dost\u0119pne na ka\u017cdym systemie operacyjnym.<\/p>\n<p>\u25cf <b>Utw\u00f3rz<\/b> (tworzenie): W systemie operacyjnym musi by\u0107 dost\u0119pna jakakolwiek metoda umo\u017cliwiaj\u0105ca tworzenie nowych proces\u00f3w. Gdy wprowadzasz polecenie w terminalu lub uruchamiasz aplikacj\u0119 przez podw\u00f3jne klikni\u0119cie ikony, wysy\u0142ane jest \u017c\u0105danie do systemu operacyjnego o stworzenie nowego procesu i uruchomienie wskazanej aplikacji.<br \/>\n\u25cf <b>Usuni\u0119cie<\/b>: Skoro istnieje interfejs do tworzenia procesu, system operacyjny powinien r\u00f3wnie\u017c umo\u017cliwi\u0107 wymuszone zako\u0144czenie procesu. Wi\u0119kszo\u015b\u0107 program\u00f3w naturalnie b\u0119dzie si\u0119 uruchamia\u0107 i ko\u0144czy\u0107 sama w miar\u0119 wykonywania. W przeciwnym razie u\u017cytkownik chcia\u0142by mie\u0107 mo\u017cliwo\u015b\u0107 zako\u0144czenia ich, w zwi\u0105zku z czym interfejs do zatrzymania procesu b\u0119dzie przydatny.<br \/>\n\u25cf <b>Oczekiwanie <\/b>(oczekiwanie): Czasami przydatne jest, aby poczeka\u0107 na zako\u0144czenie procesu, dlatego zapewniane s\u0105 r\u00f3\u017cne interfejsy umo\u017cliwiaj\u0105ce oczekiwanie.<br \/>\n\u25cf <b>Inna kontrola<\/b> (r\u00f3\u017cne zarz\u0105dzanie): Opr\u00f3cz zabijania i oczekiwania na proces istniej\u0105 tak\u017ce inne r\u00f3\u017cnorodne metody kontrolne. Na przyk\u0142ad wi\u0119kszo\u015b\u0107 system\u00f3w operacyjnych oferuje mo\u017cliwo\u015b\u0107 zamra\u017cania procesu (wstrzymanie jego wykonywania na pewien czas) i nast\u0119pne wznowienie (kontynuacj\u0119 wykonywania)<br \/>\n\u25cf <b>Status <\/b>(stan): Istniej\u0105 r\u00f3\u017cne interfejsy do uzyskania informacji o statusie procesu, takie jak czas jego dzia\u0142ania lub w jakim stanie obecnie si\u0119 znajduje.<\/p>\n<p><img decoding=\"async\" alt=\"Systemy operacyjne: Trzy \u0142atwe kawa\u0142ki. Cz\u0119\u015b\u0107 2: Abstrakcja: Proces (t\u0142umaczenie)\" src=\"\/wp-content\/uploads\/2019\/04\/eccf4ba3b12a60a54a62bb13986a7783.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Tworzenie procesu: szczeg\u00f3\u0142y<\/h3>\n<p>Jedn\u0105 z interesuj\u0105cych rzeczy jest to, jak programy przekszta\u0142caj\u0105 si\u0119 w procesy. Szczeg\u00f3lnie to, jak system operacyjny podnosi i uruchamia program. Jak dok\u0142adnie tworzony jest proces.<br \/>\nW pierwszej kolejno\u015bci system operacyjny musi za\u0142adowa\u0107 kod programu i dane statyczne do pami\u0119ci (do przestrzeni adresowej procesu). Programy zazwyczaj znajduj\u0105 si\u0119 na dysku lub no\u015bniku SSD w odpowiednim formacie wykonywalnym. W zwi\u0105zku z tym proces \u0142adowania programu i danych statycznych do pami\u0119ci wymaga od systemu operacyjnego mo\u017cliwo\u015bci odczytu tych bajt\u00f3w z dysku i umieszczenia ich gdzie\u015b w pami\u0119ci.<\/p>\n<p>W poprzednich systemach operacyjnych proces \u0142adowania by\u0142 wykonywany niecierpliwie (eagerly), co oznacza, \u017ce kod by\u0142 \u0142adowany do pami\u0119ci w ca\u0142o\u015bci przed uruchomieniem programu. Nowoczesne systemy operacyjne robi\u0105 to leniwie (lazily), czyli \u0142aduj\u0105c kawa\u0142ki kodu lub danych tylko wtedy, gdy s\u0105 one potrzebne programowi podczas jego wykonywania.<\/p>\n<p>Po za\u0142adowaniu kodu i danych statycznych do pami\u0119ci, system operacyjny musi wykona\u0107 jeszcze kilka czynno\u015bci przed uruchomieniem procesu. Musi zosta\u0107 przydzielona pewna ilo\u015b\u0107 pami\u0119ci na stos. <b>Programy u\u017cywaj\u0105 stosu do zmiennych lokalnych, parametr\u00f3w funkcji i adres\u00f3w powrotu<\/b>. System operacyjny przydziela t\u0119 pami\u0119\u0107 i przekazuje j\u0105 procesowi. Stos mo\u017ce by\u0107 r\u00f3wnie\u017c przydzielany z pewnymi argumentami, w szczeg\u00f3lno\u015bci wype\u0142nia parametry funkcji main(), takie jak tablice argc i argv.<\/p>\n<p>System operacyjny mo\u017ce tak\u017ce przydziela\u0107 pewn\u0105 ilo\u015b\u0107 pami\u0119ci na stert\u0119 (heap) programu. <b>Stos jest u\u017cywany przez programy do jawnie \u017c\u0105danych dynamicznie przydzielonych danych<\/b>. Programy \u017c\u0105daj\u0105 tej przestrzeni, wywo\u0142uj\u0105c funkcj\u0119 <b>malloc()<\/b> i jawnie j\u0105 zwalniaj\u0105, wywo\u0142uj\u0105c funkcj\u0119 <b>free()<\/b>. Stos u\u017cywany jest dla struktur danych jak: listy powi\u0105zane, tabele haszowe, drzewa i inne. Na pocz\u0105tku alokowana jest ma\u0142a ilo\u015b\u0107 pami\u0119ci dla stosu, ale z czasem w trakcie dzia\u0142ania programu stos mo\u017ce za\u017c\u0105da\u0107 wi\u0119kszej ilo\u015bci pami\u0119ci poprzez wywo\u0142anie API malloc(). System operacyjny jest zaanga\u017cowany w proces alokacji wi\u0119kszej ilo\u015bci pami\u0119ci, aby pom\u00f3c w zaspokojeniu tych \u017c\u0105da\u0144.<\/p>\n<p>System operacyjny b\u0119dzie r\u00f3wnie\u017c realizowa\u0142 zadania inicjalizacji, w szczeg\u00f3lno\u015bci te dotycz\u0105ce wej\u015bcia-wyj\u015bcia. Na przyk\u0142ad w systemach UNIX ka\u017cdy proces domy\u015blnie ma 3 otwarte deskryptory plik\u00f3w dla standardowego strumienia wej\u015bcia, wyj\u015bcia i b\u0142\u0119d\u00f3w. Deskryptory te umo\u017cliwiaj\u0105 programom odczytywanie wej\u015bcia z terminala oraz wypisywanie informacji na ekran. <\/p>\n<p>W ten spos\u00f3b, \u0142aduj\u0105c kod i dane statyczne do pami\u0119ci, tworz\u0105c i inicjalizuj\u0105c stos oraz wykonuj\u0105c inne prace zwi\u0105zane z realizacj\u0105 zada\u0144 wej\u015bcia-wyj\u015bcia, system operacyjny przygotowuje grunt do realizacji procesu. Ostatecznie pozostaje ostatnie zadanie: uruchomienie programu przez jego punkt wej\u015bcia, zwany funkcj\u0105 main(). Przechodz\u0105c do realizacji funkcji main(), system operacyjny przekazuje kontrol\u0119 CPU nowo utworzonemu procesowi, w ten spos\u00f3b program zaczyna si\u0119 wykonywa\u0107. <\/p>\n<h3>Stan procesu<\/h3>\n<p>\n Teraz, gdy mamy pewne zrozumienie, czym jest proces i jak jest tworzony, wymie\u0144my stany procesu, w kt\u00f3rych mo\u017ce si\u0119 znajdowa\u0107. W najprostszej formie proces mo\u017ce znajdowa\u0107 si\u0119 w jednym z tych stan\u00f3w:<br \/>\n\u25cf <b>Running<\/b>. W stanie uruchomionym proces jest realizowany na procesorze. Oznacza to, \u017ce nast\u0119puje wykonanie instrukcji.<br \/>\n\u25cf <b>Gotowy<\/b>. W stanie gotowo\u015bci proces jest gotowy do uruchomienia, ale z jakiego\u015b powodu system operacyjny nie wykonuje go w danej chwili.<br \/>\n\u25cf <b>Zablokowany<\/b>. W stanie zablokowanym proces wykonuje pewne operacje, kt\u00f3re uniemo\u017cliwiaj\u0105 mu bycie gotowym do wykonania, dop\u00f3ki nie wyst\u0105pi jakie\u015b zdarzenie. Przyk\u0142adem mo\u017ce by\u0107, gdy proces inicjalizuje operacj\u0119 IO, staje si\u0119 zablokowany, a w ten spos\u00f3b inny proces mo\u017ce u\u017cywa\u0107 procesora.<\/p>\n<p><img decoding=\"async\" alt=\"Systemy operacyjne: Trzy \u0142atwe kawa\u0142ki. Cz\u0119\u015b\u0107 2: Abstrakcja: Proces (t\u0142umaczenie)\" src=\"\/wp-content\/uploads\/2019\/04\/d2c01bdb08e7b7aeea78edcbf6ce0250.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017cna wyobrazi\u0107 sobie te stany jako graf. Jak mo\u017cemy zobaczy\u0107 na ilustracji, stan procesu mo\u017ce si\u0119 zmienia\u0107 mi\u0119dzy RUNNING a READY wed\u0142ug uznania systemu operacyjnego. Gdy stan procesu zmienia si\u0119 z READY na RUNNING, oznacza to, \u017ce proces zosta\u0142 zaplanowany. W przeciwn\u0105 stron\u0119 \u2014 usuni\u0119ty z kolejki. W momencie, gdy proces staje si\u0119 BLOCKED, na przyk\u0142ad, inicjuj\u0105c operacj\u0119 IO, system operacyjny b\u0119dzie utrzymywa\u0142 go w tym stanie do momentu wyst\u0105pienia pewnego wydarzenia, na przyk\u0142ad zako\u0144czenia IO. W tym momencie nast\u0105pi przej\u015bcie w stan READY, a by\u0107 mo\u017ce natychmiast do stanu RUNNING, je\u015bli tak zdecyduje system operacyjny. <br \/>\nPrzyjrzyjmy si\u0119 przyk\u0142adowi, jak dwa procesy przechodz\u0105 przez te stany. Na pocz\u0105tek wyobra\u017amy sobie, \u017ce oba procesy s\u0105 uruchomione i ka\u017cde z nich u\u017cywa tylko CPU. W takim przypadku ich stany b\u0119d\u0105 wygl\u0105da\u0142y nast\u0119puj\u0105co.<\/p>\n<p><img decoding=\"async\" alt=\"Systemy operacyjne: Trzy \u0142atwe kawa\u0142ki. Cz\u0119\u015b\u0107 2: Abstrakcja: Proces (t\u0142umaczenie)\" src=\"\/wp-content\/uploads\/2019\/04\/904cef8e04c2f0d8eaf4fdc5860f5bfd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW nast\u0119pnym przyk\u0142adzie pierwszy proces po pewnym czasie pracy \u017c\u0105da IO i przechodzi w stan BLOCKED, daj\u0105c drugiemu procesowi mo\u017cliwo\u015b\u0107 uruchomienia (RYS. 1.4). System operacyjny widzi, \u017ce proces 0 nie korzysta z CPU i uruchamia proces 1. W trakcie wykonywania procesu 1 \u2014 IO ko\u0144czy si\u0119 i status procesu 0 zmienia si\u0119 na READY. Na koniec proces 1 ko\u0144czy si\u0119, a po jego zako\u0144czeniu proces 0 jest uruchamiany, wykonuje swoje zadanie i ko\u0144czy prac\u0119.<\/p>\n<p><img decoding=\"async\" alt=\"Systemy operacyjne: Trzy \u0142atwe kawa\u0142ki. Cz\u0119\u015b\u0107 2: Abstrakcja: Proces (t\u0142umaczenie)\" src=\"\/wp-content\/uploads\/2019\/04\/06f44895cc976e7755c1f7bf5afe466b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Struktura danych<\/h3>\n<p>\n System operacyjny sam w sobie jest programem, a jak ka\u017cdy inny program ma pewne kluczowe struktury danych, kt\u00f3re \u015bledz\u0105 r\u00f3\u017cnorodne istotne informacje. Aby \u015bledzi\u0107 stan ka\u017cdego procesu, system operacyjny b\u0119dzie utrzymywa\u0142 pewien <b>lista proces\u00f3w<\/b> dla wszystkich proces\u00f3w w stanie READY oraz dodatkowe informacje do \u015bledzenia proces\u00f3w, kt\u00f3re s\u0105 aktualnie wykonywane. Ponadto system operacyjny musi \u015bledzi\u0107 r\u00f3wnie\u017c zablokowane procesy. Po zako\u0144czeniu IO, system operacyjny musi obudzi\u0107 odpowiedni proces i przenie\u015b\u0107 go w stan gotowo\u015bci do uruchomienia.<\/p>\n<p>Na przyk\u0142ad, system operacyjny musi zapisa\u0107 stan rejestr\u00f3w procesora. W momencie zatrzymania procesu stan rejestr\u00f3w jest zapisany w przestrzeni adresowej procesu, a w momencie wznowienia jego pracy \u2014 przywraca warto\u015bci rejestr\u00f3w, a tym samym kontynuuje wykonywanie tego procesu.<\/p>\n<p>Opr\u00f3cz stan\u00f3w gotowych, zablokowanych i dzia\u0142aj\u0105cych istniej\u0105 r\u00f3wnie\u017c inne stany. Czasami w momencie tworzenia proces mo\u017ce mie\u0107 stan INIT. W ko\u0144cu proces mo\u017ce by\u0107 umieszczony w stanie FINAL, gdy ju\u017c zako\u0144czy\u0142 dzia\u0142anie, ale informacje o nim nie zosta\u0142y jeszcze usuni\u0119te. W systemach UNIX taki stan nazywa si\u0119 <b>procesem-zombie<\/b>. Ten stan jest przydatny, gdy proces macierzysty chce pozna\u0107 kod zwrotu procesu potomnego; zazwyczaj 0 informuje o pomy\u015blnym zako\u0144czeniu, a 1 o b\u0142\u0119dzie, jednak programi\u015bci mog\u0105 u\u017cywa\u0107 dodatkowych kod\u00f3w wyj\u015bcia, sygnalizuj\u0105c r\u00f3\u017cne problemy. Po zako\u0144czeniu proces macierzysty wykonuje ostatnie wywo\u0142anie systemowe, na przyk\u0142ad wait(), aby poczeka\u0107 na zako\u0144czenie pracy procesu potomnego i poinformowa\u0107 system operacyjny, \u017ce mo\u017cna usun\u0105\u0107 wszelkie dane zwi\u0105zane z zako\u0144czonym procesem.<\/p>\n<p><img decoding=\"async\" alt=\"Systemy operacyjne: Trzy \u0142atwe kawa\u0142ki. Cz\u0119\u015b\u0107 2: Abstrakcja: Proces (t\u0142umaczenie)\" src=\"\/wp-content\/uploads\/2019\/04\/4756790c823a7e9ebbe26ff067ca00cc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Kluczowe punkty wyk\u0142adu:<\/h3>\n<p>\n\u25cf <b>Proces <\/b> \u2014 g\u0142\u00f3wna abstrakcja dzia\u0142aj\u0105cego programu w systemie operacyjnym. W ka\u017cdej chwili proces mo\u017cna opisa\u0107 przez jego stan: zawarto\u015b\u0107 pami\u0119ci w jego przestrzeni adresowej, zawarto\u015b\u0107 rejestr\u00f3w procesora, w tym wska\u017anik instrukcji i wska\u017anik stosu oraz informacj\u0119 o IO, na przyk\u0142ad o otwartych plikach, kt\u00f3re s\u0105 odczytywane lub zapisywane.<br \/>\n\u25cf <b>API Procesu<\/b> sk\u0142ada si\u0119 z wywo\u0142a\u0144, kt\u00f3re programy mog\u0105 dokonywa\u0107 w odniesieniu do proces\u00f3w. Zwykle s\u0105 to wywo\u0142ania tworzenia, usuwania lub inne.<br \/>\n\u25cf Proces znajduje si\u0119 w jednym z wielu stan\u00f3w, w tym dzia\u0142aniu, gotowo\u015bci, zablokowanym. R\u00f3\u017cne wydarzenia, takie jak planowanie, wyj\u0105tek z planowania lub oczekiwanie mog\u0105 zmienia\u0107 stan procesu z jednego na inny.<br \/>\n\u25cf <b>Lista proces\u00f3w<\/b> zawiera informacje o wszystkich procesach w systemie. Ka\u017cdy wpis w niej nazywa si\u0119 blokiem steruj\u0105cym procesu, kt\u00f3ry w rzeczywisto\u015bci jest struktur\u0105, zawieraj\u0105c\u0105 wszystkie niezb\u0119dne informacje o danym procesie.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <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.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\/pl\/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.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\/pl\/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\udd47Operating Systems: Three Easy Pieces. Cz\u0119\u015b\u0107 2: Abstrakcja: Proces (t\u0142umaczenie) | ProHoster","description":"Wprowadzenie do system\u00f3w operacyjnych Cze\u015b\u0107, Habr! Chc\u0119 przedstawi\u0107 wam seri\u0119 artyku\u0142\u00f3w-przek\u0142ad\u00f3w jednej ciekawej, moim zdaniem, literatury \u2014 OSTEP.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/30992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=30992"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/30992\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/22968"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=30992"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=30992"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=30992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}