Betribssystemer: Dräi einfach Stécker. Deel 2: Abstraktioun: Prozess (Iwwersetzung)

Aféierung fir Betribssystemer

Hey Habr! Ech géif gären op Är Opmierksamkeet eng Serie vun Artikelen-Iwwersetzunge vun enger interessant Literatur an menger Meenung ze bréngen - OSTEP. Dëst Material diskutéiert ganz déif d'Aarbecht vun Unix-ähnlechen Betribssystemer, nämlech d'Aarbecht mat Prozesser, verschidde Scheduler, Erënnerung an aner ähnlech Komponenten, déi e modernen OS ausmaachen. Dir kënnt d'Original vun all Material hei gesinn hei. Maacht weg datt d'Iwwersetzung onprofessionell (zimlech fräi) gemaach gouf, awer ech hoffen, datt ech déi allgemeng Bedeitung behalen hunn.

Labo Aarbecht zu dësem Thema kann hei fonnt ginn:

Aner Deeler:

Dir kënnt och mäi Kanal kucken op Telegramm =)

Loosst eis déi fundamentalst Abstraktioun kucken, déi den OS de Benotzer ubitt: de Prozess. D'Definitioun vum Prozess ass ganz einfach - et ass lafen Programm. De Programm selwer ass eng liewenslos Saach op der Disk - et ass eng Rei vun Instruktiounen a méiglecherweis e puer statesch Donnéeën, déi waarden op lancéiert ze ginn. Et ass den OS deen dës Bytes hëlt a se leeft, de Programm an eppes nëtzlech transforméiert.
Déi meescht dacks wëllen d'Benotzer méi wéi ee Programm zur selwechter Zäit lafen, zum Beispill, Dir kënnt e Browser, Spill, Media Player, Texteditor an dergläiche op Ärem Laptop lafen. Tatsächlech kann en typesche System Zénger oder Honnerte vu Prozesser gläichzäiteg lafen. Dës Tatsaach mécht de System méi einfach ze benotzen, Dir musst ni Suergen ob d'CPU gratis ass, Dir leeft just Programmer.

Dëst stellt de Problem op: wéi d'Illusioun vu ville CPUs ubitt? Wéi kann den OS d'Illusioun vun enger bal onendlecher Zuel vu CPUs erstellen, och wann Dir nëmmen eng kierperlech CPU hutt?

D'OS erstellt dës Illusioun duerch CPU Virtualiséierung. Andeems Dir ee Prozess ufänkt, da stoppt, en anere Prozess starten, a sou weider, kann den OS d'Illusioun behalen datt et vill virtuell CPUs gëtt, wann et tatsächlech een oder méi kierperlech Prozessoren gëtt. Dës Technik gëtt genannt Divisioun vun CPU Ressourcen duerch Zäit. Dës Technik erlaabt d'Benotzer sou vill gläichzäiteg Prozesser auszeféieren wéi se wëllen. D'Käschte vun dëser Léisung sinn d'Performance - well wann d'CPU vu verschiddene Prozesser gedeelt gëtt, gëtt all Prozess méi lues veraarbecht.
Fir CPU-Virtualiséierung ëmzesetzen, a besonnesch fir et gutt ze maachen, brauch d'OS souwuel Low-Level wéi High-Level Support. Niddereg Niveau Ënnerstëtzung genannt Mechanismen sinn Low-Level Methoden oder Protokoller déi den erfuerderlechen Deel vun der Funktionalitéit ëmsetzen. E Beispill vu sou enger Funktionalitéit ass Kontextschaltung, wat dem OS d'Fäegkeet gëtt ee Programm ze stoppen an en anere Programm um Prozessor ze lafen. Dës Zäit Divisioun ass an all modern Betribssystemer ëmgesat.
Op Top vun dëse Mechanismen ass eng Logik an den OS agebaut, a Form vun "Politik". Politik ass e gewëssen Entscheedungs-Algorithmus fir de Betribssystem. Esou Politiken, zum Beispill, entscheeden wéi ee Programm als éischt soll lancéiert ginn (aus enger Lëscht vu Kommandoen). Also, zum Beispill, gëtt dëse Problem vun enger Politik geléist genannt Scheduler (Scheduling Policy) a wann Dir eng Léisung auswielt, gëtt se vun esou Daten guidéiert wéi: Startupgeschicht (wat Programm am längsten an de leschte Minutten lancéiert gouf), wéi eng Laascht dëse Prozess dréit (wéi eng Zorte vu Programmer goufen lancéiert), Performance Metriken (ob de System ass optimiséiert fir interaktiv Interaktioun oder fir Duerchgang) a sou weider.

Abstraktioun: Prozess

D'Abstraktioun vun engem lafende Programm ausgefouert vum Betribssystem ass wat mir nennen Prozess. Wéi virdru scho gesot, e Prozess ass einfach e lafende Programm, zu all momentaner Zäit. E Programm mat deem mir Resuméinformatioune vu verschiddene Systemressourcen kréien, déi dëse Programm während senger Ausféierung zougräift oder beaflosst.
Fir d'Komponente vum Prozess ze verstoen, musst Dir d'Staaten vum System verstoen: wat de Programm während senger Operatioun liesen oder änneren kann. Zu all Moment musst Dir verstoen wat Elementer vum System fir d'Ausféierung vum Programm wichteg sinn.
Ee vun den offensichtlechen Elementer vum System Staat datt de Prozess enthält ass Erënnerung. Uweisungen sinn an Erënnerung etabléiert. D'Donnéeën déi de Programm liest oder schreift sinn och an der Erënnerung. Also ass d'Erënnerung, déi e Prozess kann adresséieren (Adressraum genannt) Deel vum Prozess.
Och Deel vum System Staat sinn Registere. Vill Instruktioune si viséiert fir de Wäert vun de Registere z'änneren oder hire Wäert ze liesen, an domat ginn d'Register och e wichtege Bestanddeel vun der Operatioun vum Prozess.
Et soll feststellen, datt d'Maschinn Staat och aus e puer speziell Registere geformt ass. Zum Beispill, IP - Uweisunge Pointer - e Pointer op d'Instruktioun déi de Programm am Moment ausféiert. Et gëtt och Stackzeiger an am Zesummenhang mat et Kader Pointer, déi benotzt gi fir ze verwalten: Funktiounsparameter, lokal Variabelen a Retouradressen.
Endlech, Programmer Zougang oft ROM (read-nëmmen Erënnerung). Dës "I / O" (Input / Output) Informatioun soll eng Lëscht vun Dateien enthalen, déi aktuell vum Prozess opgemaach sinn.

Prozess API

Fir eist Verständnis ze verbesseren wéi de Prozess funktionnéiert, loosst eis Beispiller vu Systemruffen studéieren déi an all Betribssystem-Interface solle sinn. Dës APIe sinn an enger oder anerer Form op all OS verfügbar.

schafen (Schafung): D'OS muss eng Method enthalen déi Iech erlaabt nei Prozesser ze kreéieren. Wann Dir e Kommando an den Terminal gitt oder eng Applikatioun lancéiert andeems Dir op eng Ikon duebel klickt, gëtt en Uruff un d'OS geschéckt fir en neie Prozess ze kreéieren an dann de spezifizéierte Programm ze starten.
Läschen: Well et en Interface gëtt fir e Prozess ze kreéieren, sollt d'OS och d'Fäegkeet ubidden fir d'Entfernung vun engem Prozess ze zwéngen. Déi meescht Programmer starten an ophalen natierlech eleng wéi se lafen. Soss wéilt de Benotzer se kënnen ëmbréngen an dofir wier en Interface fir de Prozess ze stoppen nëtzlech.
waart (waart): Heiansdo ass et nëtzlech fir e Prozess ze waarden fir ze kompletéieren, sou datt e puer Schnëttplazen zur Verfügung gestallt ginn, déi d'Méiglechkeet hunn ze waarden.
Verschidde Kontroll (verschidde Kontroll): Nieft ëmbréngen an op de Prozess waarden, ginn et och aner verschidde Kontroll Methoden. Zum Beispill bidden déi meescht Betribssystemer d'Fäegkeet fir e Prozess ze afréieren (seng Ausféierung fir eng gewëssen Zäit ze stoppen) an et dann erëm opzehuelen (weider Ausféierung)
Status (Staat): Et gi verschidde Schnëttplazen fir e puer Informatiounen iwwer de Status vun engem Prozess ze kréien, wéi wéi laang et leeft oder wéi en Zoustand et am Moment ass.

Betribssystemer: Dräi einfach Stécker. Deel 2: Abstraktioun: Prozess (Iwwersetzung)

Prozess Kreatioun: Detailer

Eng vun den interessanten Saachen ass wéi genau Programmer a Prozesser transforméiert ginn. Besonnesch wéi d'OS de Programm ophëlt a leeft. Wéi genee de Prozess erstallt gëtt.
Als éischt muss d'OS de Programmcode a statesch Daten an d'Erënnerung lueden (an de Prozessadressraum). Programmer sinn normalerweis op enger Disk oder Solid-State Drive an engem ausführbare Format. Also, de Prozess vum Luede Programm a statesch Donnéeën an d'Erënnerung erfuerdert datt d'OS fäeg ass dës Bytes vun der Disk ze liesen an se iergendwou an der Erënnerung ze placéieren.

A fréie Betribssystemer gouf de Luedeprozess éierlech gemaach, dat heescht datt de ganze Code an d'Erënnerung gelueden gouf ier de Programm gestart gouf. Modern Betribssystemer maachen dat faul, dat heescht, Luede Stécker vu Code oder Daten nëmmen wann de Programm se während senger Ausféierung verlaangt.

Wann de Code an d'statesch Donnéeën an d'OS Erënnerung gelueden sinn, ginn et e puer méi Saachen déi musse gemaach ginn ier de Prozess ka lafen. E puer Betrag vun Erënnerung muss fir de Stack zougewisen ginn. Programmer benotzen de Stack fir lokal Variabelen, Funktiounsparameter a Retouradressen. D'OS verdeelt dës Erënnerung a gëtt et dem Prozess. De Stack kann och mat e puer Argumenter zougewisen ginn, speziell et fëllt d'Parameteren vun der Haaptrei () Funktioun, zum Beispill mat enger Array vun argc an argv.

De Betribssystem kann och e puer Erënnerung un de Programmkoup allocéieren. De Koup gëtt vu Programmer benotzt fir explizit dynamesch allokéiert Donnéeën ze froen. Programmer froen dëse Raum andeems Dir d'Funktioun urufft malloc () a kläert et explizit andeems Dir d'Funktioun rufft fräi (). De Koup ass gebraucht fir Datestrukture wéi verlinkte Blieder, Hashtabellen, Beem an anerer. Fir d'éischt gëtt eng kleng Quantitéit vun Erënnerung un de Koup zougewisen, awer mat der Zäit, wéi de Programm leeft, kann de Koup méi Erënnerung ufroen duerch d'Bibliothéik API Call malloc (). De Betribssystem ass am Prozess involvéiert fir méi Erënnerung ze verdeelen fir ze hëllefen dës Uriff ze befridden.

De Betribssystem wäert och Initialiséierungsaufgaben ausféieren, besonnesch déi am Zesummenhang mat I/O. Zum Beispill, op UNIX Systemer, huet all Prozess par défaut 3 oppene Dateideskriptoren, fir Standard Input, Output a Feeler. Dës Handle erlaben Programmer fir Input vum Terminal ze liesen an och Informatioun um Bildschierm ze weisen.

Also, andeems Dir Code a statesch Donnéeën an d'Erënnerung laden, de Stack erstellt an initialiséiert, an aner Aarbecht maache mat der Ausféierung vun I / O Aufgaben, preparéiert d'OS d'Bühn fir de Prozess auszeféieren. Endlech gëtt et nach eng lescht Aufgab: de Programm duerch säin Entréespunkt lafen, genannt Main () Funktioun. Andeems Dir d'Haaptfunktioun () ausféiert, iwwerdréit den OS d'CPU-Kontroll op den nei erstallten Prozess, also fänkt de Programm auszeféieren.

Prozess Staat

Elo datt mir e bësse Verständnis hunn wat e Prozess ass a wéi et erstallt gëtt, loosst eis d'Prozessstate oplëschten an deem et ka sinn. A senger einfachster Form kann e Prozess an engem vun dëse Staaten sinn:
Leeft. Wann Dir leeft, leeft de Prozess op de Prozessor. Dëst bedeit datt d'Instruktioune ausgefouert ginn.
fäerdeg. Am prett Zoustand ass de Prozess prett fir ze lafen, awer aus irgendege Grënn féiert d'OS et net op der spezifizéierter Zäit aus.
blockéiert. Am blockéierten Zoustand mécht e Prozess e puer Operatiounen aus, déi verhënneren datt et prett ass fir auszeféieren bis e puer Event geschitt. Een allgemengt Beispill ass wann e Prozess eng IO Operatioun initiéiert, et gëtt blockéiert sou datt en anere Prozess de Prozessor benotze kann.

Betribssystemer: Dräi einfach Stécker. Deel 2: Abstraktioun: Prozess (Iwwersetzung)

Dir kënnt dës Staaten a Form vun enger Grafik virstellen. Wéi mir am Bild kënne gesinn, kann de Prozesszoustand tëscht RUNNING a READY änneren no der Diskretioun vum OS. Wann den Zoustand vun engem Prozess vun READY op RUNNING ännert, heescht et datt de Prozess geplangt ass. Am Géigendeel Richtung - aus dem Layout geläscht. Am Moment wou e Prozess BLOCKED gëtt, zum Beispill, initiéieren ech eng IO Operatioun, d'OS hält et an dësem Zoustand bis e puer Event geschitt, zum Beispill d'Réalisatioun vun IO. am Moment den Iwwergank zum READY-Staat an eventuell direkt an den RUNNING-Staat wann d'OS esou decidéiert.
Loosst eis e Beispill kucken wéi zwee Prozesser duerch dës Staaten bewegen. Fir unzefänken, loosst eis virstellen datt béid Prozesser lafen, a jidderee benotzt nëmmen d'CPU. An dësem Fall wäerten hir Staaten esou ausgesinn.

Betribssystemer: Dräi einfach Stécker. Deel 2: Abstraktioun: Prozess (Iwwersetzung)

Am folgende Beispill freet den éischte Prozess, no enger Zäit Lafen, IO a gitt an de BLOCKED Staat, an erlaabt en anere Prozess ze lafen (FIG 1.4). D'OS gesäit datt de Prozess 0 d'CPU net benotzt a fänkt de Prozess 1 un. Während de Prozess 1 leeft, ass IO ofgeschloss an de Status vum Prozess 0 ännert sech op READY. Schlussendlech ass de Prozess 1 ofgeschloss, a beim Ofschloss fänkt de Prozess 0 un, ausféiert a fäerdeg seng Aarbecht.

Betribssystemer: Dräi einfach Stécker. Deel 2: Abstraktioun: Prozess (Iwwersetzung)

Daten Struktur

D'OS selwer ass e Programm, a grad wéi all aner Programm, huet et e puer Schlësseldatenstrukturen déi verschidde relevant Informatiounsstécker verfollegen. Fir den Zoustand vun all Prozess ze verfolgen, ënnerstëtzt d'OS e puer Prozess Lëscht fir all Prozesser am READY Staat an e puer zousätzlech Informatioune fir Prozesser ze verfolgen déi am Moment lafen. Och d'OS soll blockéiert Prozesser iwwerwaachen. Nom IO fäerdeg ass, muss d'OS den erfuerderleche Prozess erwächen an et an engem Zoustand setzen fir ze lafen.

Zum Beispill muss den OS den Zoustand vun de Prozessorregistere bewahren. Am Moment wou de Prozess stoppt, gëtt den Zoustand vun de Registere am Adressraum vum Prozess gespäichert, an am Moment wou seng Operatioun weider geet, ginn d'Wäerter vun de Registere restauréiert an doduerch d'Ausféierung vun dësem Prozess weider.

Zousätzlech zu prett, blockéiert, lafend Staaten, ginn et e puer aner Staaten. Heiansdo, zum Zäitpunkt vun der Schafung, kann e Prozess am INIT Staat sinn. Endlech kann e Prozess am FINAL Staat gesat ginn wann et scho fäerdeg ass, awer seng Informatioun ass nach net geläscht. Op UNIX Systemer gëtt dësen Zoustand genannt Zombie Prozess. Dëse Staat ass nëtzlech fir Fäll wou en Elterendeel de Retourcode vun engem Kand wësse wëll, zum Beispill, normalerweis 0 Signaler Erfolleg an 1 e Feeler, awer Programméierer kënnen zousätzlech Ausgangscodes erausginn fir verschidde Probleemer ze signaliséieren. Wann d'Eltereprozess ofgeschloss ass, mécht et e finalen Systemruff, sou wéi wait (), fir ze waarden fir datt de Kandprozess ofgeschloss ass an dem OS signaliséiert datt et all Daten, déi mam ofgeschlossene Prozess assoziéiert sinn, läschen.

Betribssystemer: Dräi einfach Stécker. Deel 2: Abstraktioun: Prozess (Iwwersetzung)

Schlësselpunkte vum Virtrag:

Prozess - d'Haaptabstraktioun vun engem lafende Programm am OS. Zu all Moment kann e Prozess duerch säin Zoustand beschriwwe ginn: den Inhalt vun der Erënnerung a sengem Adressraum, den Inhalt vun de Prozessorregistere, inklusiv Instruktiounspointer a Stackpointer, an IO Informatioun, sou wéi oppene Dateien déi gelies oder geschriwwe ginn.
Prozess API besteet aus Appellen déi Programmer op Prozesser maachen. Typesch sinn dës erstellen, läschen oder aner Uriff.
● De Prozess ass an engem vu ville Staaten, dorënner Lafen, prett, blockéiert. Verschidde Eventer wéi Fuerplang, Ausnahmen vum Fuerplang, oder Waarde kënnen den Zoustand vun engem Prozess vun engem zu engem aneren änneren.
Prozess Lëscht enthält Informatiounen iwwer all Prozesser am System. All Entrée an et gëtt e Prozesskontrollblock genannt, wat an der Realitéit eng Struktur ass déi all néideg Informatioun iwwer e spezifesche Prozess enthält. 

Source: will.com

Setzt e Commentaire