5.Vorlesung Betriebssysteme (BTS) Christian Baun cray@unix-ag.uni-kl.de Hochschule Mannheim Fakultät für Informatik Institut für Betriebssysteme 30.3.2007
Wiederholung vom letzten Mal Redundant Array of independent Disks (RAID-Level 0, 1 und 5) Daten von Ein- und Ausgabegeräten lesen Zeichen-/blockorientierte Geräte Adressraum Speicherkapazitäten (16, 32, 64 Bit) Virtueller Speicher Memory Management Unit Segmentorientierter Speicher Seitenorientierter Speicher Adressumwandlung bei segmentorientiertem und seitenorientiertem Speicher 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 2
Heute Systemaufrufe (System Calls) Prozesse Prozess-Kontext Prozesszustände Prozessübergänge Prozessmodelle 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 3
Systemaufrufe (1) Die Menge der Systemaufrufe (System Calls) ist die Schnittstelle, die das Betriebssystem den Anwendungsprogrammen zur Verfügung stellt. Systemaufrufe stellen für die Benutzer-Prozesse die einzige Schicht zum Zugriff auf die Betriebssystemfunktionalität, also die Benutzung der Hardware eines Computer-Systems dar. Ein Systemaufruf ist ein Funktionsaufruf im Betriebssystem, der einen Sprung vom User Mode (Benutzermodus) in den priviligierten Kernel Mode (Kernel-Modus) auslöst (= Moduswechsel). Die Systemaufrufe erlauben es den Benutzerprogrammen, Prozesse, Dateien und andere Betriebsmittel zu erzeugen und zu verwalten. Wenn die Operation, wegen der der Systemaufruf ausgelöst wurde, erledigt ist, wird die Kontrolle dem Benutzerprogramm zurückgeben. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 4
Schichtenmodell von Linux/UNIX-Betriebssystemen Benutzer Bibliothekenschnittstelle Systemaufrufschnittstelle Benutzerschnittstelle Shell, Anwendungsprogramme (Shell, Editoren, Compiler,...) Standardbibliothek (fork, open, close, read, write,...) Linux/UNIX-Betriebssystem (Speicherverwaltung, Dateisystem, Prozessverwaltung, E/A,...) Hardware (CPU, Hauptspeicher, Festplatten, I/O-Geräte,...) 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 5
Systemaufrufe (2) Einfach gesagt ist ein Systemaufruf eine Anfrage eines Prozesses an den Kernel, um einen Dienst des Kernel in Anspruch zu nehmen. Der Mechanismus der Systemaufrufe ist bei allen Betriebssystemen unterschiedlich, wenn auch vergleichbar. Systemaufrufe werden genauso wie Bibliotheksfunktionen aufgerufen. In einem C-Programm ist kein Unterschied erkennbar. Im Gegensatz zu einer Bibliotheksfunktion, wird die Leistung eines Systemaufrufs im Betriebssystemkern (Kernel), also außerhalb des Adressraums des aufrufenden Prozesses, erbracht. Im Prinzip können bei Systemaufrufen zwischen Prozess und Kernel beliebige Daten ausgetauscht werden. In der Praxis beschränkt man sich im Design auf einfache Datentypen, die leicht zwischen den Adressräumen transportiert werden können. Dabei handelt es sich um Integer-Werte, Zeigerwerte in Registern und Puffer, die kopiert werden müssen. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 6
Systemaufruf ioctl() Der Systemaufruf ioctl() ermöglicht es Programmen unter Linux/UNIX-Betriebssystemen gerätespezifische Befehle abzusetzen. Die Syntax des Systemaufrufs ist: ioctl (Filedeskriptor, Aktionsanforderung, Parameter); Typische Einsatzszenarien von ioctl() sind: Formatierung einer Diskettenspur, Initialisieren eines Modems oder einer Soundkarte, usw. ioctl() ermöglicht die Kommunikation mit und Steuerung von zeichenorientierten Geräten (Maus, Tastatur, Drucker, Terminals,...) und blockorientierten Geräten (Festplatten, CD-/DVD-Laufwerke und Disketten-Laufwerke,...). Weitere Systemaufrufe unter Linux/UNIX sind: poll, select, mmap, writev, write, fsync, idle, umask, chroot, dup, pipe, exit,... Gute Übersicht: LINUX System Call Quick Reference von Jialong He. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 7
Systemaufrufe und Bibliothek Moderne Betriebssysteme stellen eine Bibliothek bereit, die sich logisch zwischen den Benutzer-Prozessen und dem Kern befindet. Die Bibliothek ist für die Vermittlung der Kommunikation der Benutzer- Prozesse mit dem Kern und die Moduswechsel zwischen Benutzermodus und Kernel-Modus zuständig. Vorteile, die der Einsatz einer Bibliothek mit sich bringt, sind eine erhöhte Portabilität, da kein oder nur sehr wenig Bedarf besteht, dass die Applikationen direkt mit dem Kern des Betriebssystems kommunizieren und eine erhöhte Sicherheit, da die Applikationen nicht selbst den Wechsel in den Kernel-Modus durchführen können. Beispiele für eine solche Bibliothek sind die Standard C Library (UNIX), die GNU C-Bibliothek glibc (Linux), die C Library Implementationen (BSD) und die Microsoft C/C++ Runtime Library. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 8
read(fd, buffer, nbytes); Return zum Aufrufer Systemaufruf in den Kern 5 Put code for read in register Systemaufrufbehandlung Bibliotheksfunktion read 4 10 Erhöhe Stackpointer 11 Rufe read auf 3 Push fd 2 Push &buffer 1 Push nbytes 6 9 Benutzerprogramm ruft read auf Benutzeradressraum Kerneladressraum Verteilung 7 8 Quelle: Andrew S. Tannenbaum, Moderne Betriebssysteme 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 9
Schritt für Schritt (1) Bevor die Bibliotheksfunktion für read aufgerufen wird, die dann wiederrum den Systemaufruf read ausführt, legt das Programm in Schritt 1-3 die Parameter auf den Stack. In Schritt 4 erfolgt der Sprung in die Bibliotheksfunktion. Die Bibliotheksfunktion speichert in Schritt 5 die Nummer des Systemaufrufs da, wo das Betriebssystem es erwartet, z.b. in einem Register. In Schritt 6 wird die TRAP-Funktion ausgeführt, um vom normalen Benutzermodus in den priviligierten Kernel-Modus zu wechseln. Der Programmcode im Kernel springt anhand der Nummer des Systemaufrufs zu dem richtigen Systemaufruf, der in einer Tabelle aus Funktionszeigern mit allen Systemaufrufen steht. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 10
Schritt für Schritt (2) Die Nummer des Systemaufrufs ist ein Index für den richtigen Eintrag in der Tabelle der Systemaufrufe (Schritte 7), die das Betriebssystem kennt. In Schritt 8 startet der Systemaufruf. Sobald der Systemaufruf abgeschlossen ist, kann in Schritt 9 die Kontrolle an die Bibliothek zurückgegeben werden, die die TRAP-Funktion ausführte. Diese Funktion kehrt danach in Schritt 10 zum Benutzerprogramm so zurück, wie es auch eine normale Funktion getan hätte. Damit der Systemaufruf beendet werden kann, muss das Benutzerprogramm in Schritt 11 genau wie nach jedem Funktionsaufruf den Stack aufräumen. Das Programm kann jetzt ganz normal weiterarbeiten. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 11
Beispiel für einen System Call #include <syscall.h> #include <unistd.h> #include <stdio.h> #include <sys/types.h> int main(void) { long ID1, ID2; // Direkter Systemaufruf ID1 = syscall(sys_getpid); printf ("syscall(sys_getpid)=%ld\n", ID1); // Von der glibc ausgeführter Systemaufruf ID2 = getpid() printf ("getpid()=%ld\n", ID2); } return(0); 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 12
Definition: Prozesse Ein Prozess ist ein Programm, dass sich in Ausführung bzw. Bearbeitung befindet (lat. procedere = voranschreiten). Prozesse sind dynamische Objekte und repräsentieren sequentielle Aktivitäten in einem Computersystem. Ein Prozess umfasst außer dem Programmcode noch den Prozesskontext und seit UNIX einen geschützten Prozessadressraum: Der Prozesskontext wird wesentlich durch den Inhalt der Register in der CPU und die Daten im Hauptspeicher bestimmt. Der Prozessadressraum ist eine Liste von Speicherstellen (virtueller Speicher), in denen der Prozess lesen und schreiben darf. Auf einem Computersystem sind immer mehrer Aktivitäten (Prozesse) in Ausführung. Der Prozessor wird also im raschen Wechsel zwischen den Aktivitäten hin- und hergeschaltet. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 13
Der Prozess-Kontext Drei Arten von Kontextinformation speichert das Betriebssystem: Benutzer-Kontext Hardware-Kontext System-Kontext Die Informationen im Hardware-Kontext und System-Kontext werden vom Betriebssystem im Prozesskontrollblock verwaltet. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 14
Benutzer-Kontext Der Benutzer-Kontext umfasst die Daten des Prozesses im zugewiesenen Adressraum. Jedem Prozess wird ein eigener Adressraum zugeordent, in dem sich u.a. das ausführbare Programm und die Programmdaten befinden. Der Adressraum ist eine Liste von Speicherstellen, in denen der Prozess lesen und schreiben darf. Die Speicherstellen sind von der Adresse 0 an aufwärts durchnummieriert. Der Adressraum ist eine Abstraktion des physischen Speichers und unabhängig von der verwendeten Speichertechnologie. = Virtueller Speicher 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 15
Hardware-Kontext Der Hardware-Kontext umfasst die Inhalte der Register in der CPU zum Zeitpunkt der Prozess-Ausführung und die Seitentabelle. Einige wichtige Register, deren Inhalt bei einem Kontextwechsel gesichert werden muss, sind: Befehlszähler Stack-Pointer Integer-Register Floating-Point-Register Diese Informationen sind wichig, wenn ein Prozess im Rahmen des Multitaskings bei einem Kontextwechsel durch einen anderen Prozess unterbrochen wird. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 16
System-Kontext Das System-Kontext sind die Informationen, die das Betriebssystem über einen Prozess speichert. Beispiele sind: Prozessnummer (PID) Prozesszustand Information über Eltern- oder Kindprozesse Prioritäten Identifier Zugriffsrechte auf Ressourcen Quotas Zur Verfügung stehde Menge der einzelnen Ressourcen Laufzeit Geöffnete Dateien Zugeordnete Geräte 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 17
Prozesse (1) Jeder Prozess hat seinen eigenen Prozesskontext, der von den Kontexten der anderen Prozesse meist unabhängig ist. Immer wenn eine Aktivität bzw. ein Prozess den Prozessor abgibt, wird ihr Kontext, also der Inhalt der CPU-Register an einer sicheren Stelle gerettet (zwischengespeichert). Erhält der Prozess wieder den Zugriff auf die CPU, wird der Inhalt des Kontext wiederhergestellt und die Register werden mit den zuvor gespeicherten Daten geladen. Prozessmanagement und Prozessinteraktion machen den nichtmonopolisierten, geschützten Zugriff auf CPU und Speicher erst möglich. Jeder Prozess befindet sich zu jedem Zeitpunkt in einem bestimmten Zustand. Dieser Zustand gibt an, ob der Prozess gerade auf der CPU ausgeführt wird bzw. ausgeführt werden kann. = Zustandsdiagramm der Prozesse 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 18
Prozesszustände Ein Prozess wird zu Beginn der einer Programmausführung erzeugt und bei der Terminierung des Programms beendet. Die Ausführung eines Programms kann zur Erzeugung bzw. Beendigung weiter Prozesse führen. Jeder Prozess befindet sich zu jedem Zeitpunkt in einem Zustand. Wie viele unterschiedliche Zustände es gibt, hängt vom Prozessmodell des Betriebssystems ab. Frage: Wie viele unterschiedliche Prozesszustände braucht ein Prozessmodell mindestens? 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 19
Das 2-Zustands-Prozessmodell Prinzipiell genügen zwei Prozesszustände, denn ein Prozess kann die CPU zugeteilt haben (rechnend) oder er wartet auf die Zuteilung der CPU (nicht rechnend). Da die nicht-zuteilung der CPU für einen Prozess verschiedene Ursachen haben kann, kann das Prozessmodell praktisch beliebig verfeinert werden. nicht rechnend Zuteilung der CPU Entzug der CPU assign resign rechnend Start Terminierung 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 20
Konzeptioneller Fehler des 2-Zustands-Prozessmodells Das 2-Zustands-Prozessmodell geht davon aus, dass alle Prozesse immer zur Ausführung bereit sind. Das ist aber unrealistisch. Es gibt fast immer Prozesse, die blockiert sind und z.b. auf das Ergebnis eines E/A-Geräts oder eines anderen Prozesses warten. Lösung: Die nicht rechnenden Prozesse müssen in zwei Gruppen unterschieden werden Prozesse die bereit (ready) sind. Prozesse die blockiert (blocked) sind. = 3-Zustands-Prozessmodell 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 21
Das 3-Zustands-Prozessmodell Beim 3-Zustands-Prozessmodell befindet sich jeder Prozess in einem der drei Zustände: rechnend (running): Der Prozess besitzt den Zugriff auf die CPU und führt auf dieser Instruktuktionen aus. bereit (ready): Der Prozess könnte unmittelbar Instruktionen auf der CPU ausführen und wartet aktuell auf die Zuteilung der CPU. blockiert (blocked): Der Prozess kann momentan nicht weiter ausgeführt werden und wartet aktuell auf das Eintreten eines Ereignisses oder einer Bedingung. Dabei kann es sich z.b. um eine Nachricht eines anderen Prozesses oder eines Eingabe-/Ausgabegeräts oder aber um das Eintreten eines bestimmten Synchronisationsereignisses handeln. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 22
Prinzip des 3-Zustands-Prozessmodells Ereignis eingetreten ready blockiert (blocked) Warten auf Ereignis block bereit Zuteilung der CPU assign rechnend (ready) (running) Entzug der CPU resign add retire Start Terminierung 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 23
Prozessübergänge add: Prozesserzeugung durch einen Programmstart oder einen anderen Prozess und Einordnung in die Liste der Prozesse im Zustand bereit. retire: Der aktuell rechnende Prozess terminiert. Alle durch den Prozess belegten Ressourcen werden freigegeben. assign: Die CPU wird einem Prozess im Zustand bereit zugeteilt, der nun mit der CPU arbeiten kann und in den Zustand rechnend wechselt. block: Der rechnende Prozess wartet auf eine Nachricht oder ein Synchronisationsereigniss und wechselt in den Zustand blockiert. resign: Dem rechnenden Prozess wird wegen einer Entscheidung des Schedulers die CPU entzogen und er wechselt in den Zustand bereit. ready: Die Bedingung, wegen der der Prozess blockiert wurde, ist nun erfüllt und der Prozess wechselt in den Zustand bereit. Die Zustandsübergänge sind die Aufgabe des Dispatchers. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 24
Das 5-Zustands-Prozessmodell Es kann empfehlenswert sein, das 3-Zustands-Prozessmodell um zwei weitere Prozesszustände zu erweitern. neu (new): Der Prozess ist erzeugt, wurde aber vom Betriebssystem noch nicht der Menge der Prozesse zugefügt, die unmittelbar Instruktionen auf der CPU ausführen könnten und auf die Zuteilung der CPU warten. exit (exit): Der Prozess existiert noch, wurde vom Betriebssystem aber aus der Menge der ausführbaren Prozesse entfernt. Die Prozesszustände neu und exit haben durchaus ihre Berechtigung. Auf manchen Computer-Systemen wird die Anzahl der ausführbaren Prozesse limitiert, um Ressourcen (Speicher) zu sparen. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 25
Prinzip des 5-Zustands-Prozessmodells Ereignis eingetreten ready blockiert (blocked) Warten auf Ereignis block bereit Zuteilung der CPU assign rechnend (ready) Entzug der CPU resign (running) enter exit neu (new) beendet (exit) add retire Start Terminierung 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 26
Das 6-Zustands-Prozessmodell Ist nicht genügend (realer) Hauptspeicher für alle laufenden Prozesse verfügbar, was häufig der Fall ist, müssen Teile von Prozessen oder ganze Prozesse ausgelagert werden. Dieser Vorgang des Auslagerns wird als Swapping bezeichnet. Ein intelligentes Betriebssystem wird Prozesse auslagern, die im Zustand blockiert sind. Die ausgelagerten Prozesse werden in eine Queue auf die Festplatte geschrieben. Durch den freigewordenen Platz kann ein Prozess in der Suspend Queue oder ein anderer Prozess in den Speicher geladen und von der CPU ausgeführt werden. Es macht also durchaus Sinn, das 5-Zustands-Prozessomodell um einen weiteren Prozesszustand suspendiert (suspended) zu erweitern. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 27
Prinzip des 6-Zustands-Prozessmodells suspendiert suspendieren (suspended) blockiert Warten auf Ereignis Ereignis eingetreten (blocked) block ready aktivieren bereit Zuteilung der CPU assign rechnend (ready) Entzug der CPU resign (running) enter exit neu (new) beendet (exit) add retire Start Terminierung 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 28
Optimierung des 6-Zustands-Prozessmodells Wenn ein Prozess ausgelagert (suspendiert) wurde, ist es besser, den frei gewordenen Platz im Hauptspeicher zu verwenden einen ausgelagerten Prozess zu aktivieren, als einen neuen Prozess zu nehmen. Dieses Vorgehen macht aber nur Sinn, wenn der aktivierte Prozess nicht mehr blockiert ist. Was im 6-Zustands-Prozessmodell fehlt, ist die Möglichkeit, die ausgelagerten Prozesse in blockierte und nicht-blockierte Prozesse zu unterscheiden. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 29
Prinzip des 7-Zustands-Prozessmodells blockiert, suspendiert aktivieren suspendieren ready blockiert (blocked) ready block bereit, suspendiert enter aktivieren enter bereit (ready) assign resign rechnend (running) exit neu (new) beendet (exit) add retire Start Terminierung 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 30
Prozessmodell von Linux/UNIX Unter Linux/UNIX-Betriebssystemen gibt es mehr als die bereits bekannten Prozesszustände = 9-Zustands-Prozessmodell. Der Zustand rechnend (running) wird unterteilt in die Zustände user rechnend (kernel running) für Prozesse, die im normalen Modus User Mode (Benutzermodus) laufen kernel rechnend (user running) für Prozesse, die im priviligierten Kernel-Modus laufen. Der Zustand bereit (ready) wird unterteilt in die Zustände bereit (ready) für Prozesse, die neu in den Speicher geladen wurde oder aufgeweckt wurden. verdrängt (preempted) für Prozesse, die durch einen Timeout in ihrer Ausführung unterbrochen wurden. 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 31
Die Namen der Prozesszustände variieren Einige Prozesszustände haben unter Linux/UNIX andere Namen Der Prozesszustand exit heißt zombie Der Prozesszustand suspendiert heißt swapped Der Prozesszustand blockiert heißt swapped Der Prozesszustand neu heißt created 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 32
Prinzip des 9-Zustands-Prozessmodells asleep, swapped suspendieren asleep im Speicher verdrängt (preempted) return user rechnend wake up Ereignis tritt ein wake up warten auf Ereignis sleep block bereit, swapped suspendieren aktivieren bereit (ready) assign kernel rechnend system call, interrupt return zu wenig Speicher enter enter ausreichend Speicher exit created (new) Start add Zombie (exit) retire Terminierung 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 33
Nächste Vorlesung: 19.4.2007 5.Vorlesung Betriebssysteme (BTS) Hochschule Mannheim Folie 34