{"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\/de\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","title":{"rendered":"Betriebssysteme: Drei einfache Teile. Teil 2: Abstraktion: Prozess (\u00dcbersetzung)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Einf\u00fchrung in Betriebssysteme<\/h1>\n<p>\nHallo, Habr! Ich m\u00f6chte Ihnen eine Serie von \u00dcbersetzungen einer interessanten Literatur \u2014 OSTEP \u2014 vorstellen. In diesem Material wird die Funktionsweise von Unix-\u00e4hnlichen Betriebssystemen ziemlich gr\u00fcndlich behandelt, insbesondere die Arbeit mit Prozessen, verschiedenen Planern, Speicher und anderen \u00e4hnlichen Komponenten, die ein modernes Betriebssystem ausmachen. Das Original aller Materialien k\u00f6nnen Sie hier ansehen <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">hier<\/a><\/noindex>. Bitte beachten Sie, dass die \u00dcbersetzung unprofessionell (relativ frei) durchgef\u00fchrt wurde, aber ich hoffe, dass ich den allgemeinen Sinn bewahrt habe.<\/p>\n<p>Die Laborarbeiten zu diesem Thema finden Sie hier:<\/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>meine pers\u00f6nliche Anpassung: <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>\nAndere Teile:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">Teil 1: Einf\u00fchrung<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nUnd Sie k\u00f6nnen auch meinen Kanal auf <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">Telegramm<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Schauen wir uns die grundlegendste Abstraktion an, die das Betriebssystem den Benutzern bietet: den Prozess. Die Definition eines Prozesses ist recht einfach \u2014 es ist eine <b>ausgef\u00fchrte Programm<\/b>. Ein Programm an sich ist eine lebloses Ding, das sich auf der Festplatte befindet \u2014 es ist ein Satz von Anweisungen und m\u00f6glicherweise einigen statischen Daten, die darauf warten, gestartet zu werden. Es ist das Betriebssystem, das diese Bytes nimmt und sie ausf\u00fchrt, wobei es das Programm in etwas N\u00fctzliches verwandelt.<br \/>\n H\u00e4ufig m\u00f6chten Benutzer mehr als ein Programm gleichzeitig ausf\u00fchren, beispielsweise k\u00f6nnen Sie auf Ihrem Laptop einen Browser, ein Spiel, einen Media Player, einen Texteditor und \u00c4hnliches starten. Tats\u00e4chlich kann ein typisches System Dutzende und Hunderte von Prozessen gleichzeitig ausf\u00fchren. Diese Tatsache macht das System benutzerfreundlicher, man muss sich nie sorgen, ob die CPU frei ist, man startet einfach Programme.<\/p>\n<p><i>Hieraus ergibt sich das Problem: Wie schafft man die Illusion vieler CPUs? Wie kann das Betriebssystem die Illusion praktischerweise unz\u00e4hliger CPUs erzeugen, auch wenn man nur einen physischen CPU hat?<\/i><\/p>\n<p>Das Betriebssystem erzeugt diese Illusion durch die Virtualisierung der CPU. Indem es einen Prozess startet, ihn dann stoppt, einen anderen Prozess startet und so weiter, kann das Betriebssystem die Illusion aufrechterhalten, dass es viele virtuelle CPUs gibt, obwohl es sich tats\u00e4chlich um einen oder mehrere physische Prozessoren handelt. Diese Technik wird genannt <b>CPU-Ressourcenteilung nach Zeit<\/b>. Diese Technik erlaubt es Benutzern, so viele gleichzeitige Prozesse auszuf\u00fchren, wie sie m\u00f6chten. Der Preis f\u00fcr diese L\u00f6sung ist die Leistung \u2013 da, wenn die CPU von mehreren Prozessen geteilt wird, jeder Prozess langsamer bearbeitet wird.<br \/>\n F\u00fcr die Umsetzung der CPU-Virtualisierung, insbesondere um dies gut zu tun, ben\u00f6tigt das Betriebssystem sowohl niedrige als auch hohe Unterst\u00fctzung. <b>Niedriglevelunterst\u00fctzung<\/b> \u2013 das sind niedriglevel Methoden oder Protokolle, die den erforderlichen Funktionsbereich implementieren. Ein Beispiel f\u00fcr eine solche Funktionalit\u00e4t ist das Kontextwechseln, das dem Betriebssystem erm\u00f6glicht, ein Programm anzuhalten und ein anderes auf der CPU zu starten. Diese zeitliche Teilung ist in allen modernen Betriebssystemen implementiert.<br \/>\n Oben auf diesen Mechanismen liegt eine gewisse Logik, die im Betriebssystem in Form von \u201ePolitiken\u201c angelegt ist. <b>Politik<\/b> \u2013 das ist ein Algorithmus zur Entscheidungsfindung des Betriebssystems. Solche Politiken entscheiden beispielsweise, welches Programm (aus der Befehlsliste) zuerst gestartet werden soll. So wird beispielsweise diese Aufgabe durch eine Politik gel\u00f6st, die als <b>Planungspolitik (scheduling policy)<\/b> bezeichnet wird und bei der Auswahl der L\u00f6sung auf Daten wie folgt zur\u00fcckgreift: Laufhistorie (welches Programm am l\u00e4ngsten in der letzten Minute ausgef\u00fchrt wurde), welche Last dieser Prozess verursacht (welche Programmarten ausgef\u00fchrt wurden), Leistungsmetriken (ob das System f\u00fcr interaktive Interaktion oder f\u00fcr Durchsatz optimiert ist) usw.<\/p>\n<h3>Abstraktion: Prozess<\/h3>\n<p>\n Die Abstraktion eines laufenden Programms, das vom Betriebssystem ausgef\u00fchrt wird, ist das, was wir <b>Prozess<\/b>nennen. Wie bereits fr\u00fcher erw\u00e4hnt, ist ein Prozess einfach ein laufendes Programm zu jedem Zeitpunkt. Ein Programm, mithilfe dessen wir zusammenfassende Informationen von verschiedenen Systemressourcen abrufen k\u00f6nnen und auf die diese Programme w\u00e4hrend ihrer Ausf\u00fchrung zugreifen oder die sie betreffen.<br \/>\n Um die Bestandteile eines Prozesses zu verstehen, muss man die Zust\u00e4nde des Systems verstehen: was das Programm w\u00e4hrend seiner Ausf\u00fchrung lesen oder \u00e4ndern kann. Zu jedem Zeitpunkt muss man verstehen, welche Elemente des Systems f\u00fcr die Ausf\u00fchrung des Programms wichtig sind.<br \/>\n Eines der offensichtlichen Elemente des Systemzustands, das den Prozess umfasst, ist <b>der Speicher<\/b>. Die Anweisungen befinden sich im Speicher. Die Daten, die das Programm liest oder schreibt, werden ebenfalls im Speicher gespeichert. Daher ist der Speicher, den der Prozess adressieren kann (der sogenannte Adressraum), Teil des Prozesses.<br \/>\n Auch die Register sind Teil des Systemzustands. Viele Anweisungen zielen darauf ab, den Wert von Registern zu \u00e4ndern oder ihren Wert zu lesen, und somit werden die Register ebenfalls zu einem wichtigen Teil der Arbeitsweise des Prozesses. <br \/>\nEs ist zu beachten, dass der Maschinenzustand auch aus bestimmten speziellen Registern besteht. Zum Beispiel<b> IP \u2014 der Befehlszeiger<\/b> \u2014 ist der Zeiger auf den Befehl, den das Programm gerade ausf\u00fchrt. Es gibt auch einen <b>Stackzeiger<\/b> und den dazugeh\u00f6rigen <b>Rahmenzeiger<\/b>, die zur Verwaltung von Funktionen, lokalen Variablen und R\u00fccksprungadressen verwendet werden.<br \/>\nSchlie\u00dflich greifen Programme h\u00e4ufig auf den ROM (nichtfl\u00fcchtiger Speicher) zu. Diese Informationen \u00fcber \"I\/O\" (Eingabe\/Ausgabe) sollten eine Liste von Dateien enthalten, die der Prozess gerade ge\u00f6ffnet hat.<\/p>\n<h3>Process API<\/h3>\n<p>\n Um das Verst\u00e4ndnis der Arbeitsweise eines Prozesses zu verbessern, betrachten wir Beispiele f\u00fcr Systemaufrufe, die in jedes Betriebssystem-Interface integriert werden sollten. Diese APIs sind in irgendeiner Form auf jedem OS verf\u00fcgbar.<\/p>\n<p>\u25cf <b>Erstellen<\/b> (Erstellung): Das Betriebssystem muss eine Methode zur Verf\u00fcgung stellen, um neue Prozesse zu erstellen. Wenn Sie einen Befehl im Terminal eingeben oder eine Anwendung durch Doppelklick auf das Symbol starten, wird eine Anfrage an das Betriebssystem gesendet, um einen neuen Prozess zu erstellen und das angegebene Programm zu starten.<br \/>\n\u25cf <b>L\u00f6schen<\/b>: Da es eine Schnittstelle zur Erstellung von Prozessen gibt, muss das Betriebssystem auch die M\u00f6glichkeit bieten, Prozesse gewaltsam zu l\u00f6schen. Die meisten Programme werden sich nat\u00fcrlich selbst starten und beenden, w\u00e4hrend sie ausgef\u00fchrt werden. Andernfalls m\u00f6chte der Benutzer in der Lage sein, sie zu beenden, und somit w\u00e4re eine Schnittstelle zum Stoppen von Prozessen nicht \u00fcberfl\u00fcssig.<br \/>\n\u25cf <b>Warten <\/b>(Warten): Manchmal ist es n\u00fctzlich, auf die Beendigung eines Prozesses zu warten, daher werden einige Schnittstellen bereitgestellt, die die M\u00f6glichkeit des Wartens bieten.<br \/>\n\u25cf <b>Sonstige Steuerung<\/b> (verschiedene Steuerung): Neben dem T\u00f6ten und Warten auf den Prozess gibt es noch andere verschiedene Kontrollmethoden. Zum Beispiel bieten die meisten Betriebssysteme die M\u00f6glichkeit, einen Prozess einzufrieren (seine Ausf\u00fchrung f\u00fcr eine gewisse Zeit zu stoppen) und anschlie\u00dfend fortzusetzen (die Ausf\u00fchrung wieder aufzunehmen).<br \/>\n\u25cf <b>Status <\/b>(zustand): Es gibt verschiedene Schnittstellen, um Informationen \u00fcber den Status des Prozesses zu erhalten, wie die Dauer seiner Ausf\u00fchrung oder in welchem Zustand er sich gerade befindet.<\/p>\n<p><img decoding=\"async\" alt=\"Betriebssysteme: Drei einfache Teile. Teil 2: Abstraktion: Prozess (\u00dcbersetzung)\" src=\"\/wp-content\/uploads\/2019\/04\/eccf4ba3b12a60a54a62bb13986a7783.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Prozess erstellen: Details<\/h3>\n<p>Eine der interessanten Dinge ist, wie Programme genau in Prozesse umgewandelt werden. Insbesondere, wie das Betriebssystem ein Programm l\u00e4dt und startet. Wie genau ein Prozess erstellt wird.<br \/>\nZun\u00e4chst muss das Betriebssystem den Programmcode und die statischen Daten in den Arbeitsspeicher (in den Adressraum des Prozesses) laden. Programme sind normalerweise auf einer Festplatte oder einem SSD in einem bestimmten ausf\u00fchrbaren Format gespeichert. Daher erfordert der Prozess des Ladens des Programmcodes und der statischen Daten in den Speicher vom Betriebssystem die F\u00e4higkeit, diese Bytes von der Festplatte zu lesen und sie irgendwo im Speicher zu platzieren.<\/p>\n<p>In fr\u00fchen Betriebssystemen wurde der Ladeprozess ungeduldig (eagerly) durchgef\u00fchrt, was bedeutet, dass der Code vollst\u00e4ndig in den Speicher geladen wurde, bevor das Programm gestartet wurde. Moderne Betriebssysteme tun dies faul (lazily), indem sie Teile des Codes oder der Daten nur dann laden, wenn sie w\u00e4hrend der Programmausf\u00fchrung ben\u00f6tigt werden.<\/p>\n<p>Nachdem der Code und die statischen Daten in den Speicher geladen sind, muss das Betriebssystem noch einige Dinge erledigen, bevor der Prozess gestartet wird. Ein gewisser Teil des Speichers muss f\u00fcr den Stack reserviert werden. <b>Programme verwenden den Stack f\u00fcr lokale Variablen, Funktionparameter und R\u00fccksprungadressen.<\/b>. Das Betriebssystem weist diesen Speicher zu und gibt ihn dem Prozess. Der Stack kann auch mit bestimmten Argumenten reserviert werden, speziell f\u00fcllt er die Parameter der Funktion main(), beispielsweise mit dem Array argc und argv.<\/p>\n<p>Das Betriebssystem kann auch einen bestimmten Teil des Speichers f\u00fcr den Heap des Programms reservieren. <b>Der Heap wird von Programmen f\u00fcr ausdr\u00fccklich angeforderte dynamisch zugewiesene Daten verwendet.<\/b>. Programme beantragen diesen Speicher mit dem Aufruf der Funktion <b>malloc()<\/b> und geben ihn ausdr\u00fccklich frei, indem sie die Funktion <b>free()<\/b>. Der Heap ist f\u00fcr Datenstrukturen wie: verkettete Listen, Hash-Tabellen, B\u00e4ume und andere erforderlich. Zun\u00e4chst wird ein kleines St\u00fcck Speicher f\u00fcr den Heap reserviert, aber im Laufe der Programmausf\u00fchrung kann der Heap \u00fcber die bibliotheksseitige API-Funktion malloc() mehr Speicher anfordern. Das Betriebssystem ist in den Prozess der Zuweisung zus\u00e4tzlichen Speichers eingebunden, um diesen Anforderungen nachzukommen.<\/p>\n<p>Das Betriebssystem wird auch Initialisierungsaufgaben ausf\u00fchren, insbesondere solche, die mit Ein- und Ausgabe zu tun haben. In UNIX-Systemen hat jeder Prozess standardm\u00e4\u00dfig 3 ge\u00f6ffnete Dateideskriptoren f\u00fcr den Standard-Eingangs-, Ausgangs- und Fehlerstrom. Diese Deskriptoren erm\u00f6glichen es Programmen, Eingaben vom Terminal zu lesen und Informationen auf dem Bildschirm auszugeben. <\/p>\n<p>So bereitet das Betriebssystem den Raum f\u00fcr die Ausf\u00fchrung eines Prozesses vor, indem es Code und statische Daten in den Speicher l\u00e4dt, einen Stapel erstellt und initialisiert sowie andere Aufgaben im Zusammenhang mit der Durchf\u00fchrung von Ein- und Ausgaben ausf\u00fchrt. Schlie\u00dflich bleibt die letzte Aufgabe: das Programm \u00fcber seinen Einstiegspunkt, die Funktion main(), zur Ausf\u00fchrung zu bringen. Wenn die Ausf\u00fchrung der Funktion main() \u00fcbergeben wird, \u00fcbergibt das Betriebssystem die Kontrolle an die neu erstellte Prozessinstanz, wodurch das Programm ausgef\u00fchrt wird. <\/p>\n<h3>Zustand des Prozesses<\/h3>\n<p>\n Jetzt, da wir ein gewisses Verst\u00e4ndnis davon haben, was ein Prozess ist und wie er erstellt wird, lassen Sie uns die Zust\u00e4nde des Prozesses auflisten, in denen er sich befinden kann. In seiner einfachsten Form kann sich ein Prozess in einem dieser Zust\u00e4nde befinden:<br \/>\n\u25cf <b>Laufend<\/b>. Im laufenden Zustand wird der Prozess vom Prozessor ausgef\u00fchrt. Das bedeutet, dass Anweisungen ausgef\u00fchrt werden.<br \/>\n\u25cf <b>Bereit<\/b>. Im bereiten Zustand ist der Prozess bereit zur Ausf\u00fchrung, aber aus bestimmten Gr\u00fcnden wird er im gegebenen Moment nicht vom Betriebssystem ausgef\u00fchrt.<br \/>\n\u25cf <b>Blockiert<\/b>. Im blockierten Zustand f\u00fchrt der Prozess bestimmte Operationen aus, die es ihm nicht erm\u00f6glichen, bereit zur Ausf\u00fchrung zu sein, bis ein bestimmtes Ereignis eintritt. Ein h\u00e4ufiges Beispiel ist, wenn der Prozess eine IO-Operation initialisiert, wird er blockiert, sodass ein anderer Prozess den Prozessor nutzen kann.<\/p>\n<p><img decoding=\"async\" alt=\"Betriebssysteme: Drei einfache Teile. Teil 2: Abstraktion: Prozess (\u00dcbersetzung)\" src=\"\/wp-content\/uploads\/2019\/04\/d2c01bdb08e7b7aeea78edcbf6ce0250.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMan kann sich diese Zust\u00e4nde als Graf vorstellen. Wie auf dem Bild zu sehen ist, kann der Zustand eines Prozesses zwischen RUNNING und READY nach Ermessen des Betriebssystems wechseln. Wenn der Zustand eines Prozesses von READY nach RUNNING wechselt, bedeutet das, dass der Prozess geplant wurde. Umgekehrt wird er von der Planung entfernt. In dem Moment, in dem ein Prozess BLOCKED wird, zum Beispiel wenn eine IO-Operation initiiert wird, wird das Betriebssystem ihn in diesem Zustand halten, bis ein Ereignis eintritt, beispielsweise das Ende der IO. In diesem Moment wechselt der Prozess zur\u00fcck in den Zustand READY und m\u00f6glicherweise sofort in den Zustand RUNNING, wenn das das Betriebssystem entscheidet. <br \/>\nLassen Sie uns ein Beispiel anschauen, wie zwei Prozesse durch diese Zust\u00e4nde gehen. Zun\u00e4chst nehmen wir an, dass beide Prozesse gestartet sind und jeder nur die CPU nutzt. In diesem Fall w\u00fcrden ihre Zust\u00e4nde wie folgt aussehen.<\/p>\n<p><img decoding=\"async\" alt=\"Betriebssysteme: Drei einfache Teile. Teil 2: Abstraktion: Prozess (\u00dcbersetzung)\" src=\"\/wp-content\/uploads\/2019\/04\/904cef8e04c2f0d8eaf4fdc5860f5bfd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIm n\u00e4chsten Beispiel fordert der erste Prozess nach einer gewissen Zeit der Ausf\u00fchrung IO an und wechselt in den Zustand BLOCKED, wodurch dem anderen Prozess die M\u00f6glichkeit gegeben wird, zu starten (ABB. 1.4). Das Betriebssystem sieht, dass Prozess 0 die CPU nicht nutzt, und startet Prozess 1. W\u00e4hrend der Ausf\u00fchrung von Prozess 1 wird das IO abgeschlossen und der Status von Prozess 0 \u00e4ndert sich in READY. Schlie\u00dflich ist Prozess 1 abgeschlossen, und nach dessen Abschluss wird Prozess 0 gestartet, ausgef\u00fchrt und endet seine Arbeit.<\/p>\n<p><img decoding=\"async\" alt=\"Betriebssysteme: Drei einfache Teile. Teil 2: Abstraktion: Prozess (\u00dcbersetzung)\" src=\"\/wp-content\/uploads\/2019\/04\/06f44895cc976e7755c1f7bf5afe466b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Datenstruktur<\/h3>\n<p>\n Das Betriebssystem selbst ist ein Programm und hat wie jedes andere Programm einige wichtige Datenstrukturen, die verschiedene relevante Informationen verfolgen. Um den Zustand jedes Prozesses zu verfolgen, wird das Betriebssystem eine gewisse <b>Prozessliste<\/b> f\u00fcr alle Prozesse im Zustand READY und einige zus\u00e4tzliche Informationen zur Verfolgung von Prozessen, die gerade laufen, f\u00fchren. Zudem muss das Betriebssystem auch blockierte Prozesse \u00fcberwachen. Nach Abschluss der IO ist das Betriebssystem verpflichtet, den entsprechenden Prozess zu wecken und ihn in den Zustand der Bereitschaft zu versetzen.<\/p>\n<p>So muss das Betriebssystem beispielsweise den Zustand der CPU-Register speichern. Im Moment der Beendigung eines Prozesses wird der Zustand der Register im Adressraum des Prozesses gespeichert und beim Fortsetzen seiner Ausf\u00fchrung \u2013 die Werte der Register wiederhergestellt, um so die Ausf\u00fchrung dieses Prozesses fortzusetzen.<\/p>\n<p>Neben den Zust\u00e4nden ready, blocked und running gibt es noch einige andere Zust\u00e4nde. Manchmal kann ein Prozess im Moment seiner Erstellung den Zustand INIT haben. Schlie\u00dflich kann ein Prozess in den Zustand FINAL versetzt werden, wenn er bereits beendet ist, aber die Informationen \u00fcber ihn noch nicht bereinigt wurden. In UNIX-Systemen wird dieser Zustand genannt <b>Zombie-Prozess<\/b>. Dieser Zustand ist n\u00fctzlich, wenn der Elternprozess den R\u00fcckgabecode des Kindes erfahren m\u00f6chte, zum Beispiel signalisiert in der Regel 0 einen erfolgreichen Abschluss und 1 einen Fehler, jedoch k\u00f6nnen Programmierer zus\u00e4tzliche R\u00fcckgabecodes erstellen, um verschiedene Probleme anzuzeigen. Beim Abschluss f\u00fchrt der Elternprozess den letzten Systemaufruf, wie wait(), aus, um auf die Beendigung des Kinderprozesses zu warten und das Betriebssystem dar\u00fcber zu informieren, dass alle mit dem abgeschlossenen Prozess verbundenen Daten bereinigt werden k\u00f6nnen.<\/p>\n<p><img decoding=\"async\" alt=\"Betriebssysteme: Drei einfache Teile. Teil 2: Abstraktion: Prozess (\u00dcbersetzung)\" src=\"\/wp-content\/uploads\/2019\/04\/4756790c823a7e9ebbe26ff067ca00cc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Schl\u00fcsselpunkte der Vorlesung:<\/h3>\n<p>\n\u25cf <b>Prozess <\/b> \u2014 die Hauptabstraktion eines laufenden Programms im Betriebssystem. Zu jedem Zeitpunkt kann ein Prozess durch seinen Zustand beschrieben werden: der Inhalt des Speichers in seinem Adressraum, der Inhalt der Prozessorregister, einschlie\u00dflich des Instruction Pointers und des Stack Pointers, sowie Informationen \u00fcber IO, wie beispielsweise ge\u00f6ffnete Dateien, die gelesen oder geschrieben werden.<br \/>\n\u25cf <b>Process API<\/b> besteht aus Aufrufen, die Programme in Bezug auf Prozesse machen k\u00f6nnen. Normalerweise handelt es sich um Aufrufe zum Erstellen, L\u00f6schen oder andere.<br \/>\n\u25cf Der Prozess befindet sich in einem der vielen Zust\u00e4nde, einschlie\u00dflich running, ready, blocked. Verschiedene Ereignisse, wie z.B. das Scheduling, die Ausnahme vom Scheduling oder das Warten, k\u00f6nnen den Zustand eines Prozesses von einem in einen anderen \u00fcberf\u00fchren.<br \/>\n\u25cf <b>Prozessliste<\/b> enth\u00e4lt Informationen \u00fcber alle Prozesse im System. Jeder Eintrag darin wird als Prozesskontrollblock bezeichnet, der tats\u00e4chlich eine Struktur darstellt, die alle notwendigen Informationen \u00fcber einen bestimmten Prozess enth\u00e4lt.\u2003<br \/>\n<br \/>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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\udd47Betriebssysteme: Drei einfache Teile. Teil 2: Abstraktion: Prozess (\u00dcbersetzung) | ProHoster","description":"Einf\u00fchrung in Betriebssysteme Hallo, Habr! Ich m\u00f6chte Ihnen eine Reihe von Artikel\u00fcbersetzungen einer interessanten Literatur \u2014 OSTEP \u2014 vorstellen.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/30992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=30992"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/30992\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/22968"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=30992"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=30992"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=30992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}