ebook img

Systemprogrammierung in UNIX / Linux: Grundlegende Betriebssystemkonzepte und praxisorientierte Anwendungen PDF

307 Pages·2012·3.93 MB·German
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Systemprogrammierung in UNIX / Linux: Grundlegende Betriebssystemkonzepte und praxisorientierte Anwendungen

Erich Ehses | Lutz Köhler | Petra Riemer | Horst Stenzel | Frank Victor Systemprogrammierung in UNIX / Linux Erich Ehses | Lutz Köhler | Petra Riemer Horst Stenzel | Frank Victor Systemprogrammierung in UNIX / Linux Grundlegende Betriebssystemkonzepte und praxisorientierte Anwendungen Mit 37 Abbildungen STUDIUM Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über <http://dnb.d-nb.de> abrufbar. Das in diesem Werk enthaltene Programm-Material ist mit keiner Verpflichtung oder Garantie irgend - einer Art verbunden. Der Autor übernimmt infolgedessen keine Verantwortung und wird keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieses Programm-Materials oder Teilen davon entsteht. Höchste inhaltliche und technische Qualität unserer Produkte ist unser Ziel. Bei der Produktion und Auslieferung unserer Bücher wollen wir die Umwelt schonen: Dieses Buch ist auf säuref reiem und chlorfrei gebleichtem Papier gedruckt. Die Einschweißfolie besteht aus Polyäthylen und damit aus organischen Grundstoffen, die weder bei der Herstellung noch bei der Verb rennung Schadstoffe freisetzen. 1. Auflage 2012 Alle Rechte vorbehalten © Vieweg+Teubner Verlag|Springer Fachmedien Wiesbaden GmbH 2012 Lektorat: Christel Roß|Maren Mithöfer Vieweg+Teubner Verlag ist eine Marke von Springer Fachmedien. Springer Fachmedien ist Teil der Fachverlagsgruppe Springer Science+Business Media. www.viewegteubner.de Das Werk einschließlich aller seiner Teile ist urheberrechtlich ge schützt. Jede Verwertung außerhalb der engen Grenzen des Ur heber rechts ge set zes ist ohne Zustimmung des Verlags unzuläss ig und strafb ar. Das gilt insb es ondere für Vervielfältigungen, Über setzun gen, Mikro verfil mungen und die Ein speiche rung und Ver ar b eitung in elek tro nischen Syste men. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Umschlaggestaltung: KünkelLopka Medienentwicklung, Heidelberg Druck und buchbinderische Verarbeitung: AZ Druck und Datentechnik, Berlin Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier Printed in Germany ISBN 978-3-8348-1418-0 Vorwort Betriebssystemkonzepte und systemnahe Programmierung sind seit jeher klassi- sche Disziplinen in der Informatik-Ausbildung an Hochschulen. Dieses Lehr- und Übungsbuch wendet sich an Sie, liebe Studierende! In kompakter Form werden die wichtigsten Betriebssystem-Konzepte erläutert, wobei Praxisbezug und Programmierung von Beispielen in UNIX/Linux im Mit- telpunkt stehen. Das Buch ist so gestaltet, dass theoretische und praktische Teile in zehn eigenständigen Modulen behandelt werden. Die für die praktische Anwen- dung geschriebenen Teile enden jeweils mit Übungsaufgaben zu UNIX/Linux. An den meisten Hochschulen schließen Fächer, wie Betriebssysteme, mit einer mündlichen Prüfung oder einer Klausur. Wir hoffen, dass unser Lehrbuch Ihnen die Vorbereitung dazu erleichtert und wünschen Ihnen viel Erfolg und Spaß beim Lernen. Dieses Buch hätte ohne die Hilfe anderer nicht entstehen können. Einen ganz besonders großen Dank richten wir an Sebastian Walk, der die Endkor- rektur und die Koordination übernommen hat. Norbert Gesper, Karl-Heinz Kohlenbeck und Mario Linke, die uns seit vielen Jah- ren im Praktikum unterstützen, gebührt unsere Anerkennung ihrer hervorragen- den Leistungen. Herzlichen Dank! Weiterhin bedanken wir uns bei allen Studierenden der Fachhochschule Köln, die uns zur Veröffentlichung dieses Buches ermutigt haben. Für Marianne, Sarah und Philipp Erich Ehses, Bonn Für Manuela, Luisa und Christina Frank Victor, Bonn Für Caroline, Nicolas, Anna Horst Stenzel, Rheinbach Für Jens Petra Riemer, Gummersbach Institut für Informatik, Gummersbach, im Juli 2011 Inhaltsverzeichnis (cid:2) Abbildungsverzeichnis ..................................................................................................... IX (cid:2) (cid:2) 1 Einführung und Überblick ..................................................................................... 1 (cid:2) (cid:2) 1.1 Der Aufbau eines Computersystems ............................................................ 1 (cid:2) (cid:2) 1.2 Grundbegriffe ................................................................................................... 3 (cid:2) (cid:2) 1.3 Betriebssystemstrukturen ............................................................................... 4 (cid:2) (cid:2) 1.4 Geschichtliche Entwicklung ........................................................................... 7 (cid:2) (cid:2) 1.5 Überblick über das Buch ................................................................................. 9 (cid:2) (cid:2) 2 Das Betriebssystem UNIX ..................................................................................... 11 (cid:2) (cid:2) 2.1 Grundlagen ..................................................................................................... 11 (cid:2) (cid:2) 2.2 UNIX- und Linux-Systeme in der Praxis .................................................... 20 (cid:2) (cid:2) 2.3 Exkurs: Geschichtliche Entwicklung von UNIX und Linux .................... 21 (cid:2) (cid:2) 3 Script-Programmierung in UNIX/Linux ............................................................. 23 (cid:2) (cid:2) 3.1 Was versteht man unter Script-Programmen? ........................................... 23 (cid:2) (cid:2) 3.2 Programmierung von UNIX/Linux-Scripten ............................................. 23 (cid:2) (cid:2) 3.3 Praxisbeispiele ................................................................................................ 36 (cid:2) (cid:2) 3.4 Übungen .......................................................................................................... 40 (cid:2) (cid:2) 4 UNIX-Prozesse und elementare Kommunikation ............................................. 43 (cid:2) (cid:2) 4.1 UNIX-Prozesse ............................................................................................... 43 (cid:2) (cid:2) 4.5 Pipes ................................................................................................................. 59 (cid:2) (cid:2) 4.6 Shared Memory .............................................................................................. 65 (cid:2) (cid:2) 4.7 Übungen .......................................................................................................... 71 (cid:2) (cid:2) 5 Prozessmodell, Nebenläufigkeit und Synchronisation .................................... 73 (cid:2) (cid:2) 5.1 Der Prozessbegriff .......................................................................................... 73 (cid:2) (cid:2) 5.2 Parallelität ....................................................................................................... 88 (cid:2) (cid:2) 5.3 Synchronisationsprimitive für den wechselseitigen Ausschluss ............ 92 (cid:2) (cid:2) 5.4 Beispiele für Synchronisationsprobleme .................................................. 125 (cid:2) (cid:2) 5.5 Übungen ........................................................................................................ 134 (cid:2) (cid:2) 6 Anwendungsszenarien zur Interprozess-Kommunikation ........................... 137 (cid:2) (cid:2) 6.1 Semaphore und Shared Memory ............................................................... 137 (cid:2) (cid:2) 6.2 Dateien als Sperrmechanismus .................................................................. 143 VIII Inhaltsverzeichnis (cid:2) (cid:2) 6.3 Nachrichtenwarteschlangen ...................................................................... 144 (cid:2) (cid:2) 6.4 Signale ........................................................................................................... 150 (cid:2) (cid:2) 6.5 Übungen ....................................................................................................... 161 (cid:2) (cid:2) 7 UNIX-Dateisystem .............................................................................................. 163 (cid:2) (cid:2) 7.1 Grundlagen .................................................................................................. 163 (cid:2) (cid:2) 7.2 Systemaufrufe zum Dateisystem .............................................................. 173 (cid:2) (cid:2) 7.3 NFS (Network File System) ....................................................................... 196 (cid:2) (cid:2) 7.4 Übungen ....................................................................................................... 202 (cid:2) (cid:2) 8 Verteilte Systeme ................................................................................................. 205 (cid:2) (cid:2) 8.1 Grundlagen .................................................................................................. 206 (cid:2) (cid:2) 8.2 Aufgaben von Kommunikationsprotokollen .......................................... 213 (cid:2) (cid:2) 8.3 TCP/IP ........................................................................................................... 216 (cid:2) (cid:2) 8.4 Sockets .......................................................................................................... 221 (cid:2) (cid:2) 8.5 Remote Procedure Call ............................................................................... 235 (cid:2) (cid:2) 8.6 Übungen ....................................................................................................... 256 (cid:2) (cid:2) 9 Strategien zum Scheduling und zur Speicherverwaltung ............................. 259 (cid:2) (cid:2) 9.1 Prozess-Scheduling ..................................................................................... 259 (cid:2) (cid:2) 9.2 Scheduling-Verfahren ................................................................................. 262 (cid:2) (cid:2) 9.3 Zweistufiges Scheduling ............................................................................ 270 (cid:2) (cid:2) 9.4 Speicherverwaltung .................................................................................... 272 (cid:2) (cid:2) 9.5 Swapping ...................................................................................................... 274 (cid:2) (cid:2) 9.6 Paging ........................................................................................................... 278 (cid:2) (cid:2) 9.7 Übungen ....................................................................................................... 286 (cid:2) (cid:2) 10 Zusammenfassung und Ausblick ..................................................................... 287 (cid:2) (cid:2) 10.1Kernideen und wichtige Konzepte aus diesem Buch ............................. 287 (cid:2) (cid:2) 10.2Die Grenzen des Buches: Was wurde nicht behandelt? ......................... 287 (cid:2) (cid:2) 10.3Wo findet man weitergehende Informationen? ...................................... 288 (cid:2) Literatur ........................................................................................................................... 289 (cid:2) Internet-Links .................................................................................................................. 291 (cid:2) Installationshinweise für Linux, Eclipse und den C-Compiler ................................ 293 (cid:2) Index ............................................................................................................................... 297 Abbildungsverzeichnis (cid:2) Abbildung 2-1: Schichtenmodell von UNIX .................................................................. 12 (cid:2) Abbildung 4-1: Parallelisierung einer Vektoraddition ................................................. 45 (cid:2) Abbildung 4-2: UNIX/Linux-Systemaufruf-Modell ..................................................... 46 (cid:2) Abbildung 4-3: UNIX/Linux-Prozesse im Zusammenhang mit login ....................... 48 (cid:2) Abbildung 4-4: Elementare Prozess-Synchronisation .................................................. 57 (cid:2) Abbildung 4-5: Pipe in UNIX/Linux ............................................................................... 60 Abbildung 4-6: Erster Schritt der Pipe-Erzeugung: Alle Prozesse haben den Ein- (cid:2) und Ausgang der Pipe zur Verfügung .............................................. 62 Abbildung 4-7: Zweiter Schritt der Pipe-Erzeugung: Jeder Prozess hat nur noch (cid:2) den für ihn relevanten Ein- und Ausgang zur Verfügung. ............. 62 (cid:2) Abbildung 4-8: Struktur von Shared Memory .............................................................. 66 (cid:2) Abbildung 5-1: Prozessmodell ........................................................................................ 77 (cid:2) Abbildung 5-2: Prozessübergangsdiagramm ................................................................ 78 (cid:2) Abbildung 5-3: Implementierung von Prozessen ......................................................... 80 (cid:2) Abbildung 5-4: Semaphore ............................................................................................ 100 (cid:2) Abbildung 5-5: Das Petrinetz des wechselseitigen Ausschlusses mittels Monitor 112 (cid:2) Abbildung 5-6: Monitorobjekt ....................................................................................... 113 (cid:2) Abbildung 5-7: Das Barrieren-Problem ........................................................................ 125 (cid:2) Abbildung 5-8: Petrinetz für das Leser-Schreiber-Problem ...................................... 129 (cid:2) Abbildung 5-9: Kreisverkehr ......................................................................................... 131 (cid:2) Abbildung 6-1: Struktur von Nachrichtenwarteschlangen ....................................... 145 (cid:2) Abbildung 7-1: Das Mount-Konzept ............................................................................ 168 (cid:2) Abbildung 7-2: Der Weg vom Filedeskriptor zum Datenblock ................................ 188 (cid:2) Abbildung 7-3: Die Verbindung des NFS- und des Mount-Konzepts ..................... 197 (cid:2) Abbildung 7-4: Das Virtuelle Dateisystem (vgl. [Tanenbaum 2009]) ...................... 200 (cid:2) Abbildung 8-1: OSI-Modell, Protokoll-Ebenen ........................................................... 214 (cid:2) Abbildung 8-2: TCP/IP-Schichtenmodell ..................................................................... 218 (cid:2) Abbildung 8-3: Aufruf von FTP im TCP/IP-Netz ....................................................... 219 (cid:2) Abbildung 8-4: Einbindung von Sockets in UNIX ..................................................... 222 (cid:2) Abbildung 8-5: Verbindungsorientierter Server ......................................................... 230 (cid:2) Abbildung 8-6: Client-Server-Kommunikation bei RPC ........................................... 238 (cid:2) Abbildung 8-7: RPC-Programmdateien ....................................................................... 248 (cid:2) Abbildung 9-1: Zweistufiges Scheduling mit CPU- und Speicher-Scheduler ........ 271 (cid:2) Abbildung 9-2: Speicherzuteilung beim Swapping .................................................... 274 Abbildung 9-3: Speicherallokation mittels Bitmap ..................................................... 275 X Abbildungsverzeichnis Abbildung 9-4: Hardwareseitige Unterstützung der Technik des virtuellen (cid:2) Speichers (MMU)................................................................................. 278 Abbildung 9-5: Organisation des virtuellen und realen Speichers in Seiten und (cid:2) Seitenrahmen sowie deren Abbildung ............................................. 279 (cid:2) Abbildung 9-6: Der Clock-Algorithmus ....................................................................... 282 (cid:2) Abbildung 9-7: Buddy-Algorithmus zur UNIX-Speicherverwaltung ..................... 284 1 Einführung und Überblick 1.1 Der Aufbau eines Computersystems Seit 1945, als der Aufsatz von John von Neumann über den speicherprogrammier- baren Computer erschien, hat sich nichts Grundsätzliches am Aufbau eines Com- puters geändert. Allerdings wurden die Details erheblich modi(cid:2)ziert. Dort, wo von Neumann die prinzipielle Funktionsweise skizzierte, gibt es heute komplexe Lösungen für einzelne Komponenten. 1.1.1 Der Prozessor Der Prozessor eines Computers vereinigt zwei wichtige Grundaufgaben, nämlich die Steuerung der Befehlsbearbeitung (Steuerwerk) und die Durchführung der Be- fehle (Rechenwerk). Die klassische Befehlsbearbeitung besteht in dem Wechsel von Befehlholen/Befehldekodieren und Befehlsausführung. Moderne Architekturen haben auf dem Prozessor umfassende Cache-Strukturen. Dabei wird der Befehls- strom vom Datenstrom getrennt, so dass beide Aktivitäten gleichzeitig ablaufen können. In der Regel ist vorgesehen, dass auch weitere Schritte verschränkt ausge- führt werden können (superskalare Architektur). Die Befehlsausführung durch den Prozessor ist für das Betriebssystem vollständig transparent. Das Betriebs- system ist jedoch immer dann gefragt, wenn es darum geht festzulegen, welcher Aktivitätsstrang (Prozess, Thread) gerade durch den Prozessor ausgeführt werden soll. Ein laufender Thread wird im Prozessor durch mehrere Register unterstützt. Der Befehlszähler (program counter) zeigt immer auf den nächsten zu bearbeitenden Befehl. Der Zeiger auf den aktuellen lokalen Speicherbereich einer Prozedur (frame pointer) und der Zeiger auf das Ende des Programmstacks (stack pointer) bestimmen den aktuellen lokalen Kontext. Andere wichtige Register legen die Zuordnung der logischen Speicheradressen eines Prozesses zu den physikalischen Adressen des Hauptspeichers fest. Schließlich gibt es weitere Register, die Zwischenergebnisse und andere nützliche Daten speichern. Bei einem Prozesswechsel muss das Betriebssystem dafür sorgen, dass der jeweilige Kontext in Form der Register- inhalte gespeichert bzw. wieder hergestellt wird. 1.1.2 Der Speicher Der Speicher eines Computersystems dient dazu, Programmanweisungen und Daten aufzubewahren. Um maximalen Durchsatz mit großer Speicherkapazität zu vereinen, ist er in der Regel als Speicherhierarchie organisiert. Das Betriebssystem übernimmt die Aufgabe, den einzelnen Prozessen einen von der physikalischen E. Ehses et al., Systemprogrammierung in UNIX / Linux, DOI 10.1007/978-3-8348-8277-6_1, © Vieweg+Teubner Verlag | Springer Fachmedien Wiesbaden GmbH 2012 2 1 Einführung und Überblick Realisierung abstrahierten logischen Speicher anzubieten. Dabei stellt es auch sicher, dass jeder Prozess seinen eigenen Speicher mit eigenem Adressraum vor- findet. 1.1.3 Das Betriebssystem als erweiterte Maschine Höhere Programmiersprachen können dem Programmierer die Arbeit abnehmen, Anweisungen speziell für eine bestimmte Prozessorarchitektur zu formulieren. Sie sind jedoch nicht in der Lage, die erheblich vielfältigere und komplexere Steue- rung der Rechnerperiphere, angefangen von den unterschiedlichen Steuerungen für Festplatten, zu übernehmen. Es ist eine der zentralen Aufgaben eines Be- triebssystems, eine neutrale Abstraktion für die unterschiedlichen Hardwaregeräte anzubieten. Für den Programmierer erscheint nur die Aufgabe, z.B. Daten in eine Datei zu schreiben. Die konkrete Ansteuerung des Schreibkopfes der Festplatte unter Beachtung aller möglichen Randbedingungen ist alleinige Aufgabe des Be- triebssystems. Die Kapselung der Hardware ist in der Regel so vollständig, dass ein Benutzerprozess grundsätzlich niemals in der Lage ist, unmittelbar mit der Hardware zu kommunizieren (auch nicht wenn er in Maschinensprache pro- grammiert wurde). In diesem Sinne stellt die Schnittstelle des Betriebssystems das Maschinenmodell dar, mit dem sich der Programmierer auseinander setzen muss. 1.1.4 Das Betriebssystem als Ressourcenmanager Alle heutigen Betriebssysteme unterstützen die quasiparallele Ausführung mehre- rer Prozesse und praktisch alle Systeme erlauben auch mehreren Benutzern den gleichzeitigen Zugang zum System. In einer solchen Umgebung muss unbedingt sichergestellt sein, dass sich verschiedene Prozesse oder gar unterschiedliche Be- nutzer nach Möglichkeit nicht gegenseitig stören. Dies bedeutet im Einzelnen: (cid:2) Jeder Prozess muss seinen eigenen logischen Adressraum für die Ausführung seines Programms bekommen. (cid:2) Da der Prozessor immer nur einen einzigen Prozess ausführen kann, muss dafür gesorgt werden, dass auch alle Prozesse genügend „Rechenzeit“ zu- geteilt bekommen. (cid:2) Die Festplatte muss so gesteuert und verwaltet werden, dass die Daten un- terschiedlicher Prozesse konsistent und sicher verwaltet werden und dass ein effizienter Zugriff möglich ist. (cid:2) Peripheriegeräte und andere Aufgaben der Ein- und Ausgabe (z.B. Daten- kommunikation) müssen allen Prozessen zur Verfügung stehen. Eine wesentliche Aufgabe für ein Betriebssystem besteht darin, die verschiedenen Ressourcen ef(cid:2)zient zu verwalten. Allerdings gibt es keine perfekte Strategie für alle möglichen Fälle. Die Eigenschaften verschiedener Ressourcen sind zu unter- schiedlich:

Description:
UNIX / Linux spielt heute in der Praxis eingesetzter Systemplattformen eine entscheidende Rolle. In diesem Buch finden Sie einen schnellen Einstieg in die Systemprogrammierung. Neben Grundlagen und Konzepten lernen Sie die wesentlichen Systemaufrufe kennen. Sie erfahren, wie UNIX / Linux aufgebaut i
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.