{"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\/sv\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","title":{"rendered":"Operativsystem: Tre enkla bitar. Del 2: Abstraktion: Process (\u00f6vers\u00e4ttning)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Introduktion till operativsystem<\/h1>\n<p>\nHej, Habr! Jag vill presentera f\u00f6r er en serie \u00f6vers\u00e4ttningsartiklar av en intressant litteratur \u2014 OSTEP. I detta material behandlas djupg\u00e5ende hur unix-liknande operativsystem fungerar, n\u00e4mligen arbetet med processer, olika schemal\u00e4ggare, minne och andra liknande komponenter som utg\u00f6r ett modernt OS. Originalet av allt material kan du se h\u00e4r <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">). Ett typiskt exempel p\u00e5 anv\u00e4ndning:<\/a><\/noindex>. Observera att \u00f6vers\u00e4ttningen \u00e4r utf\u00f6rd oprofessionellt (relativt fritt), men jag hoppas att jag har bevarat den \u00f6vergripande meningen.<\/p>\n<p>Laborationsarbeten f\u00f6r detta \u00e4mne kan hittas h\u00e4r:<\/p>\n<ul>\n<li>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>min personliga anpassning: <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>\nAndra delar:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">Del 1: Intro<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nOch du kan ocks\u00e5 kolla in min kanal p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">telegram<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>L\u00e5t oss titta p\u00e5 den mest grundl\u00e4ggande abstraktionen som OS erbjuder anv\u00e4ndare: processen. Definitionen av en process \u00e4r ganska enkel \u2014 det \u00e4r <b>ett k\u00f6rande program<\/b>. Ett program i sig \u00e4r en livl\u00f6s sak, bel\u00e4gen p\u00e5 disken \u2013 det \u00e4r en upps\u00e4ttning instruktioner och m\u00f6jligen n\u00e5gra statiska data, som v\u00e4ntar p\u00e5 att bli startade. Det \u00e4r operativsystemet som tar dessa byte och k\u00f6r dem, vilket f\u00f6rvandlar programmet till n\u00e5got nyttigt.<br \/>\n Oftast vill anv\u00e4ndare k\u00f6ra mer \u00e4n ett program samtidigt, till exempel kan du k\u00f6ra en webbl\u00e4sare, ett spel, en mediaplayer, en textredigerare och s\u00e5 vidare p\u00e5 din laptop. Faktiskt kan ett typiskt system k\u00f6ra tiotals och hundratals processer samtidigt. Denna fakta g\u00f6r systemet enklare att anv\u00e4nda, du beh\u00f6ver aldrig oroas f\u00f6r om CPU:n \u00e4r ledig, du startar bara programmen.<\/p>\n<p><i>H\u00e4rav uppst\u00e5r problemet: hur ska man skapa illusionen av flera CPU:er? Hur kan operativsystemet skapa illusionen av praktiskt taget ett o\u00e4ndligt antal CPU:er, \u00e4ven om du bara har en fysisk CPU?<\/i><\/p>\n<p>Operativsystemet skapar denna illusion genom CPU-virtualisering. Genom att k\u00f6ra en process, sedan stanna den, k\u00f6ra en annan process och s\u00e5 vidare, kan OS uppr\u00e4tth\u00e5lla illusionen av att det finns m\u00e5nga virtuella CPU:er, \u00e4ven om det i sj\u00e4lva verket bara handlar om en eller flera fysiska processorer. Denna teknik kallas <b>CPU-resurser tidsdelning<\/b>. Denna teknik g\u00f6r det m\u00f6jligt f\u00f6r anv\u00e4ndare att k\u00f6ra s\u00e5 m\u00e5nga samtidiga processer som de \u00f6nskar. Priset f\u00f6r denna l\u00f6sning \u00e4r prestanda \u2013 eftersom om CPU:n delas av flera processer kommer varje process att bearbetas l\u00e5ngsammare.<br \/>\n F\u00f6r att m\u00f6jligg\u00f6ra CPU-virtualisering, och s\u00e4rskilt f\u00f6r att g\u00f6ra det bra, kr\u00e4ver operativsystemet b\u00e5de l\u00e5g- och h\u00f6g-niv\u00e5 st\u00f6d. L\u00e5g-niv\u00e5 st\u00f6d kallas <b>mekanismer<\/b> \u2013 det \u00e4r l\u00e5g-niv\u00e5 metoder eller protokoll som implementerar den n\u00f6dv\u00e4ndiga funktionaliteten. Ett exempel p\u00e5 s\u00e5dan funktionalitet \u00e4r kontextv\u00e4xling, som ger operativsystemet m\u00f6jlighet att stoppa ett program och starta ett annat program p\u00e5 processorn. Denna tidsdelning \u00e4r implementerad i alla moderna operativsystem.<br \/>\n Ovanf\u00f6r dessa mekanismer finns viss logik inbyggd i operativsystemet, i form av \"policys\". <b>Policy<\/b> \u2013 \u00e4r en specifik algoritm f\u00f6r beslutsfattande i operativsystemet. S\u00e5dana policies avg\u00f6r till exempel vilket program som ska k\u00f6ras (fr\u00e5n kommandolistan) f\u00f6rst. S\u00e5ledes kommer en policy, som kallas <b>schemal\u00e4ggare (scheduling policy)<\/b> att v\u00e4gledas av information som: starthistorik (vilket program har k\u00f6rt l\u00e4ngst under den senaste minuten), vilken belastning varje process har (vilka typer av program som har k\u00f6rts), prestandametrik (\u00e4r systemet optimerat f\u00f6r interaktivt samspel eller f\u00f6r genomstr\u00f6mning) och s\u00e5 vidare.<\/p>\n<h3>Abstraktion: process<\/h3>\n<p>\n Abstraktionen av ett k\u00f6rande program, utf\u00f6rt av operativsystemet, \u00e4r vad vi kallar <b>process<\/b>. Som redan n\u00e4mnts \u00e4r en process helt enkelt ett k\u00f6rande program vid en viss tidpunkt. Programmet med vilket vi kan f\u00e5 sammanfattande information fr\u00e5n olika systemresurser, och som programmet f\u00e5r tillg\u00e5ng till eller p\u00e5verkar under sin k\u00f6rning.<br \/>\n F\u00f6r att f\u00f6rst\u00e5 komponenterna i en process m\u00e5ste vi f\u00f6rst\u00e5 systemtillst\u00e5nd: vad programmet kan l\u00e4sa eller \u00e4ndra under sin k\u00f6rning. Vid varje given tidpunkt m\u00e5ste vi f\u00f6rst\u00e5 vilka systemelement som \u00e4r viktiga f\u00f6r programmets genomf\u00f6rande.<br \/>\n Ett av de uppenbara elementen i systemets tillst\u00e5nd som processen inkluderar \u00e4r <b>minnet<\/b>. Instruktionerna lagras i minnet. Data som programmet l\u00e4ser eller skriver lagras ocks\u00e5 i minnet. D\u00e4rf\u00f6r \u00e4r det minne som processen kan adressera (det s\u00e5 kallade adressutrymmet) en del av processen.<br \/>\n En annan del av systemets tillst\u00e5nd \u00e4r registren. M\u00e5nga instruktioner syftar till att \u00e4ndra v\u00e4rdet av registren eller l\u00e4sa deras v\u00e4rde, vilket g\u00f6r att registren ocks\u00e5 blir en viktig del av processens funktion. <br \/>\nDet b\u00f6r noteras att maskinens tillst\u00e5nd ocks\u00e5 best\u00e5r av vissa specialregister. Till exempel,<b> IP \u2014 instruction pointer<\/b> \u2014 pekaren till den instruktion som programmet f\u00f6r n\u00e4rvarande exekverar. Det finns ocks\u00e5 <b>stack pointer<\/b> och den relaterade <b>frame pointer<\/b>, som anv\u00e4nds f\u00f6r att hantera: funktionsparametrar, lokala variabler och \u00e5terv\u00e4ndsadresser.<br \/>\nSlutligen h\u00e4nvisar program ofta till ROM (l\u00e4sminne). Den information om 'I\/O' (ing\u00e5ng\/utg\u00e5ng) b\u00f6r inneh\u00e5lla en lista \u00f6ver filer som processen har \u00f6ppnat f\u00f6r tillf\u00e4llet.<\/p>\n<h3>Process API<\/h3>\n<p>\n F\u00f6r att f\u00f6rb\u00e4ttra f\u00f6rst\u00e5elsen av processens funktion ska vi studera exempel p\u00e5 systemanrop som m\u00e5ste ing\u00e5 i varje operativsystems gr\u00e4nssnitt. Dessa API \u00e4r p\u00e5 ett eller annat s\u00e4tt tillg\u00e4ngliga p\u00e5 varje operativsystem.<\/p>\n<p>\u25cf <b>Skapa<\/b> (skapande): Operativsystemet m\u00e5ste ha n\u00e5gon metod som g\u00f6r det m\u00f6jligt att skapa nya processer. N\u00e4r du skriver ett kommando i terminalen eller startar en applikation genom att dubbelklicka p\u00e5 ikonen, skickas en beg\u00e4ran till operativsystemet f\u00f6r att skapa en ny process och sedan starta det angivna programmet.<br \/>\n\u25cf <b>Ta bort<\/b>: Eftersom det finns ett gr\u00e4nssnitt f\u00f6r att skapa en process, m\u00e5ste operativsystemet ocks\u00e5 erbjuda m\u00f6jlighet till tvingad borttagning av processen. De flesta program kommer naturligtvis att startas och avslutas av sig sj\u00e4lva i takt med att de k\u00f6rs. I annat fall skulle anv\u00e4ndaren vilja kunna avsluta dem, och ett gr\u00e4nssnitt f\u00f6r att stoppa processen skulle d\u00e4rf\u00f6r vara anv\u00e4ndbart.<br \/>\n\u25cf <b>V\u00e4nta <\/b>(v\u00e4ntande): Ibland \u00e4r det anv\u00e4ndbart att v\u00e4nta p\u00e5 att processen ska slutf\u00f6ras, s\u00e5 vissa gr\u00e4nssnitt tillhandah\u00e5lls f\u00f6r att m\u00f6jligg\u00f6ra detta.<br \/>\n\u25cf <b>\u00d6vrig kontroll<\/b> (olika styrningar): F\u00f6rutom att d\u00f6da och v\u00e4nta p\u00e5 processer finns det ocks\u00e5 olika kontrollmetoder. Till exempel ger de flesta operativsystem m\u00f6jligheten att frysa en process (stoppa dess k\u00f6rning under en viss tid) och att sedan \u00e5teruppta den (forts\u00e4tta exekveringen).<br \/>\n\u25cf <b>Status <\/b>(status): Det finns olika gr\u00e4nssnitt f\u00f6r att f\u00e5 information om en process, s\u00e5som hur l\u00e4nge den har k\u00f6rts eller vilket tillst\u00e5nd den befinner sig i.<\/p>\n<p><img decoding=\"async\" alt=\"Operativsystem: Tre enkla bitar. Del 2: Abstraktion: Process (\u00f6vers\u00e4ttning)\" src=\"\/wp-content\/uploads\/2019\/04\/eccf4ba3b12a60a54a62bb13986a7783.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Skapande av process: detaljer<\/h3>\n<p>En intressant aspekt \u00e4r hur program faktiskt omvandlas till processer. S\u00e4rskilt hur operativsystemet laddar och startar ett program. Hur en process skapas konkret.<br \/>\nF\u00f6rst m\u00e5ste operativsystemet ladda programmets kod och statiska data till minnet (i processens adressutrymme). Program ligger vanligtvis p\u00e5 disken eller en solid-state-enhet i n\u00e5got k\u00f6rbart format. D\u00e4rf\u00f6r kr\u00e4ver processen att ladda program och statiska data till minnet att operativsystemet kan l\u00e4sa dessa byte fr\u00e5n disken och placera dem n\u00e5gonstans i minnet.<\/p>\n<p>I tidiga operativsystem utf\u00f6rdes laddningsprocessen ivrigt (eagerly), vilket betyder att koden laddades helt till minnet innan programmet startades. Moderna operativsystem g\u00f6r detta lat (lazily), genom att ladda bitar av kod eller data bara n\u00e4r de beh\u00f6vs av programmet under dess k\u00f6rning.<\/p>\n<p>Efter att koden och de statiska data har laddats in i minnet m\u00e5ste operativsystemet utf\u00f6ra ytterligare n\u00e5gra steg innan processen kan startas. Ett visst minnesutrymme m\u00e5ste avs\u00e4ttas f\u00f6r stacken. <b>Program anv\u00e4nder stacken f\u00f6r lokala variabler, funktionsparametrar och returadresser.<\/b>. Operativsystemet avs\u00e4tter detta minne och ger det till processen. Stacken kan ocks\u00e5 avs\u00e4ttas med vissa argument, specifikt fyller den funktionsparametrarna f\u00f6r main(), som till exempel en array av argc och argv.<\/p>\n<p>Operativsystemet kan ocks\u00e5 avs\u00e4tta ett visst minnesutrymme f\u00f6r programmets heap. <b>Heapen anv\u00e4nds av program f\u00f6r explicit beg\u00e4rd dynamiskt allokerad data.<\/b>. Program beg\u00e4r detta utrymme genom att anropa funktionen <b>malloc()<\/b> och frig\u00f6r det explicit genom att anropa funktionen <b>free()<\/b>H\u00f6gen beh\u00f6vs f\u00f6r datatyper som: l\u00e4nkade listor, hash-tabeller, tr\u00e4d och andra. I b\u00f6rjan reserveras en liten m\u00e4ngd minne f\u00f6r h\u00f6gen, men med tiden kan h\u00f6gens minnesbeg\u00e4rningar \u00f6ka genom biblioteks-API-anropet malloc(). Operativsystemet \u00e4r involverat i att tilldela mer minne f\u00f6r att hj\u00e4lpa till att uppfylla dessa beg\u00e4rningar.<\/p>\n<p>Operativsystemet kommer ocks\u00e5 att utf\u00f6ra initialiseringsuppgifter, s\u00e4rskilt de som r\u00f6r in- och utmatning. Till exempel har varje process i UNIX-system som standard 3 \u00f6ppna filbeskrivare f\u00f6r standard inmatnings-, utmatnings- och felstr\u00f6m. Dessa beskrivare g\u00f6r det m\u00f6jligt f\u00f6r program att l\u00e4sa in data fr\u00e5n terminalen samt att skriva ut information p\u00e5 sk\u00e4rmen. <\/p>\n<p>Genom att ladda kod och statiska data i minnet, skapa och initiera stacken och \u00e4ven utf\u00f6ra annat relaterat till in- och utmatningsuppgifter f\u00f6rbereder operativsystemet plattformen f\u00f6r processens utf\u00f6rande. Till slut finns det en sista uppgift: att k\u00f6ra programmet via dess ing\u00e5ngspunkt, kallad funktionen main(). N\u00e4r kontrollen \u00f6verg\u00e5r till funktionen main() \u00f6verl\u00e4mnar operativsystemet kontrollen till den nyligen skapade processen, vilket g\u00f6r att programmet b\u00f6rjar k\u00f6ras. <\/p>\n<h3>Processens tillst\u00e5nd<\/h3>\n<p>\n Nu n\u00e4r vi har en viss f\u00f6rst\u00e5else av vad en process \u00e4r och hur den skapas, l\u00e5t oss lista de tillst\u00e5nd som en process kan befinna sig i. I sin enklaste form kan processen befinna sig i ett av dessa tillst\u00e5nd:<br \/>\n\u25cf <b>Running<\/b>. I k\u00f6rande tillst\u00e5nd k\u00f6rs processen p\u00e5 processorn. Det inneb\u00e4r att instruktionerna utf\u00f6rs.<br \/>\n\u25cf <b>Redo<\/b>. I klart tillst\u00e5nd \u00e4r processen redo att starta, men av n\u00e5gon anledning utf\u00f6r operativsystemet den inte vid den aktuella tidpunkten.<br \/>\n\u25cf <b>Blockerad<\/b>. I blockerat tillst\u00e5nd utf\u00f6r processen operationer som g\u00f6r att den inte \u00e4r redo att k\u00f6ras f\u00f6rr\u00e4n en viss h\u00e4ndelse intr\u00e4ffar. Ett vanligt exempel \u00e4r n\u00e4r processen initierar en IO-operation, blir den blockerad och p\u00e5 s\u00e5 s\u00e4tt kan en annan process anv\u00e4nda processorn.<\/p>\n<p><img decoding=\"async\" alt=\"Operativsystem: Tre enkla bitar. Del 2: Abstraktion: Process (\u00f6vers\u00e4ttning)\" src=\"\/wp-content\/uploads\/2019\/04\/d2c01bdb08e7b7aeea78edcbf6ce0250.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nT\u00e4nk dig dessa tillst\u00e5nd som ett graf. Som vi kan se p\u00e5 bilden kan processens tillst\u00e5nd v\u00e4xla mellan RUNNING och READY efter operativsystemets (OS) beslut. N\u00e4r processens tillst\u00e5nd f\u00f6r\u00e4ndras fr\u00e5n READY till RUNNING betyder det att processen har schemalagts. I motsatt riktning \u2014 avbruten fr\u00e5n schemal\u00e4ggning. I det \u00f6gonblick processen blir BLOCKED, till exempel under en IO-operation, kommer OS att h\u00e5lla den i detta tillst\u00e5nd tills en viss h\u00e4ndelse intr\u00e4ffar, som exempelvis avslutandet av IO. I det \u00f6gonblicket \u00f6verg\u00e5r den till tillst\u00e5ndet READY och kan omedelbart g\u00e5 till tillst\u00e5ndet RUNNING, om OS s\u00e5 beslutar. <br \/>\nL\u00e5t oss titta p\u00e5 ett exempel p\u00e5 hur tv\u00e5 processer g\u00e5r igenom dessa tillst\u00e5nd. F\u00f6rst f\u00f6rest\u00e4ller vi oss att b\u00e5da processerna \u00e4r aktiva och vardera anv\u00e4nder endast CPU. I s\u00e5dana fall kommer deras tillst\u00e5nd att se ut p\u00e5 f\u00f6ljande s\u00e4tt.<\/p>\n<p><img decoding=\"async\" alt=\"Operativsystem: Tre enkla bitar. Del 2: Abstraktion: Process (\u00f6vers\u00e4ttning)\" src=\"\/wp-content\/uploads\/2019\/04\/904cef8e04c2f0d8eaf4fdc5860f5bfd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI n\u00e4sta exempel beg\u00e4r den f\u00f6rsta processen IO efter en tid av arbete och \u00f6verg\u00e5r till tillst\u00e5ndet BLOCKED, vilket ger den andra processen m\u00f6jlighet att starta (FIG 1.4). OS ser att process 0 inte anv\u00e4nder CPU och startar process 1. Under tiden som process 1 k\u00f6rs avslutas IO och status f\u00f6r process 0 \u00e4ndras till READY. Slutligen avslutas process 1, och n\u00e4r den \u00e4r klar startas process 0, k\u00f6rs och avslutar sin uppgift.<\/p>\n<p><img decoding=\"async\" alt=\"Operativsystem: Tre enkla bitar. Del 2: Abstraktion: Process (\u00f6vers\u00e4ttning)\" src=\"\/wp-content\/uploads\/2019\/04\/06f44895cc976e7755c1f7bf5afe466b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Databasstruktur<\/h3>\n<p>\n Operativsystemet sj\u00e4lv \u00e4r ett program och precis som alla andra program har den vissa nyckeldata strukturer som sp\u00e5rar olika relevanta informationsbitar. F\u00f6r att sp\u00e5ra tillst\u00e5ndet f\u00f6r varje process kommer OS att underh\u00e5lla en viss <b>processlista<\/b> f\u00f6r alla processer i tillst\u00e5ndet READY och viss ytterligare information f\u00f6r att sp\u00e5ra de processer som f\u00f6r n\u00e4rvarande k\u00f6rs. Dessutom m\u00e5ste OS sp\u00e5ra och blockera processer. Efter att IO avslutats \u00e4r OS skyldig att v\u00e4cka den n\u00f6dv\u00e4ndiga processen och \u00e5terf\u00f6ra den till ett tillst\u00e5nd av beredskap f\u00f6r start.<\/p>\n<p>S\u00e5, till exempel, m\u00e5ste OS spara tillst\u00e5ndet f\u00f6r processorns register. Vid stopp av processen sparas registertillst\u00e5ndet i processens adressutrymme, och vid forts\u00e4ttning av dess arbete \u00e5terst\u00e4lls registerv\u00e4rdena och processen forts\u00e4tter d\u00e4rmed sin utf\u00f6rande.<\/p>\n<p>F\u00f6rutom tillst\u00e5nden ready, blocked, running finns det \u00e4ven vissa andra tillst\u00e5nd. Ibland kan en process vid skapandet ha tillst\u00e5ndet INIT. Slutligen kan processen s\u00e4ttas i tillst\u00e5ndet FINAL n\u00e4r den redan har avslutats, men informationen om den har \u00e4nnu inte rensats. I UNIX-system kallas detta tillst\u00e5nd <b>zombiprocess<\/b>. Detta tillst\u00e5nd \u00e4r anv\u00e4ndbart n\u00e4r f\u00f6r\u00e4ldraprocessen vill veta \u00e5terv\u00e4ndande kod fr\u00e5n barnprocessen, till exempel signalerar vanligtvis 0 en framg\u00e5ngsrik avslutning, medan 1 indikerar ett fel, men programmerare kan skapa ytterligare utg\u00e5ngskoder som signalerar olika problem. Vid avslutning g\u00f6r f\u00f6r\u00e4ldraprocessen det sista systemanropet, till exempel wait(), f\u00f6r att v\u00e4nta p\u00e5 att barnprocessen ska avslutas och signalera OS att det \u00e4r okej att rensa bort data relaterade till den avslutade processen.<\/p>\n<p><img decoding=\"async\" alt=\"Operativsystem: Tre enkla bitar. Del 2: Abstraktion: Process (\u00f6vers\u00e4ttning)\" src=\"\/wp-content\/uploads\/2019\/04\/4756790c823a7e9ebbe26ff067ca00cc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Centrykt punkter i f\u00f6rel\u00e4sningen:<\/h3>\n<p>\n\u25cf <b>Process <\/b> \u00e4r den huvudsakliga abstraktionen av ett k\u00f6rande program i OS. Vid varje given tidpunkt kan en process beskrivas utifr\u00e5n dess tillst\u00e5nd: minnesinneh\u00e5llet i dess adressutrymme, inneh\u00e5llet i processorns register, inklusive instruction pointer och stack pointer samt information om IO, s\u00e5som \u00f6ppna filer som l\u00e4ses eller skrivs.<br \/>\n\u25cf <b>Process API<\/b> best\u00e5r av anrop som program kan g\u00f6ra ang\u00e5ende processer. Vanligtvis handlar det om anrop f\u00f6r skapande, borttagning eller andra.<br \/>\n\u25cf Processen befinner sig i ett av m\u00e5nga tillst\u00e5nd, inklusive running, ready, blocked. Olika h\u00e4ndelser, s\u00e5som schemal\u00e4ggning, uteslutning fr\u00e5n schemal\u00e4ggning eller v\u00e4ntan kan omvandla en process fr\u00e5n ett tillst\u00e5nd till ett annat.<br \/>\n\u25cf <b>Processlistan<\/b> inneh\u00e5ller information om alla processer i systemet. Varje post i den kallas process control block, vilket faktiskt \u00e4r en struktur som inneh\u00e5ller all n\u00f6dv\u00e4ndig information om en specifik process.\u2003<br \/>\n<br \/>K\u00e4lla: <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.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 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\/sv\/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. Del 2: Abstraktion: Process (\u00f6vers\u00e4ttning) | ProHoster","description":"Introduktion till operativsystem Hej, Habr! Jag vill presentera en serie \u00f6versatta artiklar av en intressant litteratur \u2014 OSTEP.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/30992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=30992"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/30992\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/22968"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=30992"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=30992"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=30992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}