Book description
Dieses Lehrbuch bietet eine umfassende Einführung in die Grundlagen der Betriebssysteme und in die Systemprogrammierung. Im Vordergrund stehen die Prinzipien moderner Betriebssysteme und die Nutzung ihrer Dienste für die systemnahe Programmierung.Methodisch wird ein Weg zwischen der Betrachtung anfallender Probleme und ihren Lösungen auf einer theoretischen und einer praktischen Basis beschritten. Dabei orientiert sich der Autor an den beiden am meisten verbreiteten Systemwelten, nämlich Unix/Linux und Windows. Zudem werden die wichtigsten Prozessorgrundlagen erklärt, soweit sie für das Verständnis der internen Funktionsweise eines Betriebssystems hilfreich sind.Die 4. Auflage ist in zahlreichen Details überarbeitet, an einigen Stellen ergänzt und generell aktualisiert. Neu aufgenommen wurden z.B. das Thread-Pool-Konzept, Completely Fair Scheduler (CFS), Windows Registry und Container-Systeme wie Docker.
Table of contents
- Cover
- Über den Autor
- Titel
- Impressum
- Vorwort zur 4. Auflage
- Vorwort zur 3. Auflage
- Vorwort zur 1. und 2. Auflage
- Inhaltsverzeichnis
-
1 Einführung
- 1.1 Zweck
- 1.2 Definitionen
- 1.3 Einordnung im Computersystem
- 1.4 Betriebssystemarten
- 1.4.1 Klassische Einteilungen
- 1.4.2 Moderne Einteilungen
- 1.4.3 Geschichte
- 1.5 Betriebssystemarchitekturen
- 1.5.1 Architekturformen
- 1.5.2 Benutzer-/Kernmodus
- 1.5.3 Monolithische Systeme
- 1.5.4 Geschichtete Systeme
- 1.5.5 Mikrokernsysteme (Client/Server-Modell)
- 1.5.6 Multiprozessorsysteme
- 1.5.7 Verteilte Betriebssysteme
- 1.5.8 Beispiele von Systemarchitekturen
- 1.5.9 Zukünftige Systemarchitekturen aus Sicht der Forschung
-
2 Programmausführung und Hardware
- 2.1 Rechner- und Prozessorgrundlagen
- 2.1.1 Grundmodell eines Rechners
- 2.1.2 Befehlsverarbeitung in der CPU
- 2.1.3 Prozessoraufbau
- 2.1.4 Allgemeine Prozessorregister (general purpose registers)
- 2.1.5 Steuerregister (control registers)
- 2.2 Grundlagen des Adressraums
- 2.2.1 Adressraumtypen
- 2.2.2 Bytereihenfolge (byte ordering)
- 2.2.3 Adressraumbelegungsplan (memory map)
- 2.2.4 Ausrichtungsregeln im Adressraum
- 2.2.5 Adressraumbelegung durch Programme
- 2.2.6 Adressraumnutzung durch C-Programme
- 2.3 Grundlagen der Programmausführung
- 2.3.1 Quell- und Binärcode
- 2.3.2 Programmausführung und Programmzähler (PC)
- 2.3.3 Funktionsweise des Stapels und Stapelzeigers (SP)
- 2.3.4 Funktion des Programmstatusworts (PSW)
- 2.3.5 Programmunterbrechungen (interrupts)
- 2.3.6 Privilegierte Programmausführung (Benutzer-/Kernmodus)
- 2.4 Unterprogrammmechanismen
- 2.4.1 Unterprogrammaufruf und Komplettierung
- 2.4.2 Formen des Unterprogrammaufrufs
- 2.4.3 Parameterübergabe beim Unterprogrammaufruf
- 2.4.4 Realisierung der Parameterübergabe und lokale Variablen
-
3 Systemprogrammierung
- 3.1 Wahl der Systemprogrammiersprache
- 3.1.1 Mischsprachenprogrammierung
- 3.1.2 Programmiersprache C++
- 3.1.3 Java Native Interface (JNI)
- 3.1.4 Microsoft .NET-Sprachen
- 3.2 Laufzeitsystem der Programmiersprache C
- 3.3 Unterprogrammtechniken
- 3.3.1 Formale und aktuelle Parameter
- 3.3.2 Idempotente Unterprogramme
- 3.4 Grundlagen der Systemprogrammierung
- 3.4.1 Dienstanforderung und Erbringung
- 3.4.2 Dienstparameter und Resultate
- 3.4.3 Umgebungsvariablenliste (environment list)
- 3.4.4 Dateideskriptoren & Handles
- 3.4.5 Systemdatentypen
- 3.4.6 Anfangsparameter für Prozesse
- 3.4.7 Beendigungsstatus von Programmen
- 3.4.8 Fehlerbehandlung
- 3.4.9 Programmierung für 32- und 64-Bit-Systeme
- 3.5 Systemprogrammierschnittstellen
- 3.5.1 Aufrufverfahren
- 3.5.2 Unix-Programmierschnittstelle
- 3.5.3 Windows-Programmierschnittstelle
-
4 Prozesse und Threads
- 4.1 Parallelverarbeitung
- 4.1.1 Darstellung paralleler Abläufe
- 4.1.2 Hardware-Parallelität
- 4.1.3 Software-Parallelität
- 4.1.4 Begriffe
- 4.2 Prozessmodell
- 4.2.1 Grundprinzip
- 4.2.2 Prozesserzeugung und Terminierung
- 4.2.3 Prozesse unter Unix
- 4.2.4 Funktionsweise der Unix-Shell
- 4.2.5 Prozesse & Jobs unter Windows
- 4.2.6 Vererbung unter Prozessen
- 4.2.7 Systemstart und Prozesshierarchie
- 4.2.8 Ausführungsmodelle für Betriebssysteme
- 4.3 Threads
- 4.3.1 Thread-Modell
- 4.3.2 Vergleich Prozesse zu Threads
- 4.3.3 Implementierung des Multithreading
- 4.3.4 Windows Threads, Fibers und Services
- 4.3.5 Services
- 4.3.6 Threads unter Unix
- 4.3.7 Thread-Pool-Konzept
- 4.3.8 Anwendungsprobleme
- 4.4 Prozessorzuteilungsstrategien
- 4.4.1 Quasiparallelität im Einprozessorsystem
- 4.4.2 Prozess- und Thread-Zustände
- 4.4.3 Konzeptionelle Prozessverwaltung
- 4.4.4 Zuteilungsstrategien
- 4.4.5 Multiprozessor-Scheduling
- 4.4.6 POSIX-Thread-Scheduling
- 4.4.7 Java-Thread-Scheduling
- 4.4.8 Scheduling unter Windows
- 4.4.9 Scheduling unter Unix
-
5 Synchronisation von Prozessen und Threads
- 5.1 Synchronisationsbedarfe und Lösungsansätze
- 5.1.1 Problem der Ressourcenteilung
- 5.1.2 Verlorene Aktualisierung (lost update problem)
- 5.1.3 Inkonsistente Abfrage (inconsistent read)
- 5.1.4 Absicherung mit Selbstverwaltung – naiver Ansatz
- 5.1.5 Absicherung mit Selbstverwaltung – korrekter Ansatz
- 5.1.6 Absicherung mit Systemmitteln
- 5.2 Semaphore
- 5.2.1 Semaphortypen
- 5.2.2 Implementierungsfragen
- 5.3 Anwendung der Semaphore
- 5.3.1 Absicherung kritischer Bereiche (mutual exclusion)
- 5.3.2 Synchronisation von Abläufen (barrier synchronization)
- 5.3.3 Produzenten & Konsumenten (producer and consumer)
- 5.3.4 Leser & Schreiber (readers and writers)
- 5.3.5 Problem der Prioritätsumkehrung (priority inversion)
- 5.3.6 Weitere Anwendungsprobleme
- 5.4 Implementierungen von Semaphoren
- 5.4.1 Semaphore unter Unix
- 5.4.2 Semaphore unter Windows
- 5.5 Unix-Signale
- 5.5.1 Idee & Grundprinzip der Unix-Signale
- 5.5.2 Programmierung der Signale
- 5.5.3 Signale im Multithreading
- 5.5.4 Realtime-Signale
- 5.6 Verklemmungsproblematik (deadlocks)
- 5.6.1 Ursache
- 5.6.2 Deadlock-Bedingungen
- 5.6.3 Lösungsansätze und ihre Beurteilung
- 5.7 Praktische Erwägungen zur Parallelprogrammierung
- 5.7.1 Grenzen der Leistungssteigerung (Amdahl‘s Law)
- 5.7.2 Korrektheitsbedingungen der Parallelität
- 5.7.3 Vermeidung von Synchronisationsengpässen
- 5.7.4 Speicherkonsistenz (memory consistency)
-
6 Kommunikation von Prozessen und Threads
- 6.1 Überblick über Synchronisation und Kommunikation
- 6.2 Nachrichtenbasierte Verfahren
- 6.2.1 Allgemeine Aspekte
- 6.2.2 Unix-Pipes
- 6.2.3 Windows-Pipes
- 6.2.4 Unix Message Queues
- 6.2.5 Windows-Messages
- 6.2.6 Windows-Mailslots
- 6.3 Speicherbasierte Verfahren
- 6.3.1 Gemeinsamer Speicher unter Windows
- 6.3.2 Gemeinsamer Speicher unter Unix
- 6.4 Monitor
- 6.4.1 Grundprinzip
- 6.4.2 Java-Monitor
- 6.4.3 Monitornachbildung mit Bedingungsvariablen
- 6.5 Rendezvous
- 6.5.1 Grundprinzip
- 6.5.2 Synchronisation in Client/Server-Systemen (barber shop)
- 6.6 Rechnerübergreifende Interprozesskommunikation
- 6.6.1 Netzwerksoftware
- 6.6.2 Berkeley-Sockets
- 6.6.3 Remote Procedure Call (RPC)
- 6.6.4 Überblick über Middleware
-
7 Ein- und Ausgabe
- 7.1 Peripherie
- 7.1.1 Einordnung im Rechnermodell
- 7.1.2 Begriffsdefinitionen
- 7.2 Ein-/Ausgabeabläufe
- 7.2.1 Programmgesteuerte Ein-/Ausgabe
- 7.2.2 Ein-/Ausgabe mittels Programmunterbrechungen
- 7.2.3 Ein-/Ausgabe mittels DMA
- 7.2.4 Ein-/Ausgabearten im Vergleich
- 7.3 Ein-/Ausgabesystem
- 7.3.1 Treiber
- 7.3.2 Geräteverwaltung
- 7.3.3 Treiberschnittstelle
- 7.3.4 Ein-/Ausgabeschnittstelle
- 7.3.5 Ein-/Ausgabepufferung
- 7.3.6 Treibermodell in Linux
- 7.3.7 Treibermodelle in Windows (WDM & WDF)
- 7.4 Massenspeicher
- 7.4.1 Wichtigste Massenspeicher
- 7.4.2 Eigenschaften von Festplattenlaufwerken (HDD)
- 7.4.3 Eigenschaften von Festkörperlaufwerken (SSD)
- 7.4.4 Speicher-Anschlussmöglichkeiten
- 7.4.5 Pufferung von Zugriffsdaten (disk cache)
- 7.4.6 Speicher-Virtualisierung durch RAID
- 7.5 Benutzerinteraktion aus Systemsicht (Benutzeroberflächen)
- 7.5.1 Allgemeines
- 7.5.2 Systemarchitekturen
- 7.5.3 Programmiermodelle
- 7.5.4 Die Unix-Shell als Kommandointerpreter
- 7.5.5 Funktionsweise und Programmierung des X-Window-Systems
- 7.5.6 Funktionsweise und Programmierung des Windows-GUI
-
8 Speicherverwaltung
- 8.1 Speichersystem
- 8.1.1 Einordnung im Rechnermodell
- 8.1.2 Grundlegende Speicherprinzipien
- 8.1.3 Speicherhierarchie & Lokalitätsprinzip
- 8.1.4 Cache-Funktionsweise
- 8.2 Dynamische Speicherbereitstellung (Heap)
- 8.2.1 Verwaltungsalgorithmen
- 8.2.2 Grundprinzip der Speicherzuordnung
- 8.2.3 Übersicht Implementierungsvarianten
- 8.2.4 Variante A: Variable Zuordnungsgröße
- 8.2.5 Variante B: Feste Blockgrößen bzw. Größenklassen
- 8.2.6 Variante C: Mehrfache einer festen Blockgröße
- 8.2.7 Variante D: Buddy-System
- 8.2.8 Heap-Erweiterung
- 8.2.9 Heap-Management in Windows
- 8.3 Verwaltung von Prozessadressräumen
- 8.3.1 Adressraumnutzung durch Programme
- 8.3.2 Adressraumverwaltung durch das Betriebssystem
- 8.4 Realer Speicher
- 8.4.1 Monoprogrammierung
- 8.4.2 Multiprogrammierung mit Partitionen
- 8.4.3 Verfahren für knappen Speicher
- 8.5 Virtueller Speicher
- 8.5.1 Adressumsetzung
- 8.5.2 Seitenwechselverfahren (demand paging)
- 8.5.3 Speicherabgebildete Dateien
- 8.5.4 Gemeinsamer Speicher (shared memory)
-
9 Dateisysteme
- 9.1 Dateisystemkonzepte
- 9.1.1 Logische Organisation
- 9.1.2 Dateisystemfunktionen
- 9.1.3 Gemeinsame Dateinutzung
- 9.1.4 Speicherabgebildete Dateien
- 9.2 Realisierung von Dateisystemen
- 9.2.1 Konzeptionelles Modell
- 9.2.2 Blockspeicher als Grundlage
- 9.2.3 Organisationsprinzipien
- 9.3 UFS – traditionelles Unix-Dateisystem
- 9.3.1 Datenträgeraufteilung
- 9.3.2 Dateihaltung und Verzeichnisorganisation
- 9.3.3 Index Nodes (Inodes)
- 9.4 FAT– traditionelles Windows-Dateisystem
- 9.4.1 Datenträgeraufteilung
- 9.4.2 Aufbau der Belegungstabelle (FAT)
- 9.4.3 Verzeichnisdaten
- 9.5 NTFS – modernes Windows-Dateisystem
- 9.5.1 Entstehung und Eigenschaften
- 9.5.2 Logische Struktur und Inhalt einer NTFS-Partition
- 9.5.3 NTFS-Streams
- 9.5.4 Dateispeicherung
- 9.5.5 Dateiverzeichnisse
- 9.6 ZFS – zukunftweisendes Dateisystem
- 9.6.1 Datenträgerverwaltung
- 9.6.2 Datenintegrität
- 9.6.3 Pufferung und Deduplizierung
- 9.6.4 Interoperabilität
- 9.7 Netzwerkdateisysteme
- 9.7.1 Logische Sicht
- 9.7.2 Implementierung
- 9.7.3 NFS – Network File System in Unix
- 9.7.4 SMB – Netzwerkdateisystem in Windows
- 9.8 Spezielle Dateisystemtechnologien
- 9.8.1 Protokollierende Dateisysteme
- 9.8.2 Schattenkopie
- 9.8.3 Disk Scheduling
- 9.9 Datenträgerpartitionierung
- 9.9.1 Anwendungsbereiche
- 9.9.2 Master Boot Record (MBR)
- 9.9.3 GUID Partition Table (GPT)
-
10 Programmentwicklung
- 10.1 Software-Entwicklungswerkzeuge
- 10.1.1 Ablauf der Programmübersetzung
- 10.1.2 Darstellung von Übersetzungsvorgängen mittels T-Notation
- 10.1.3 Automatisierte Übersetzung
- 10.1.4 Versionsverwaltung
- 10.2 Adressraumbelegung und Relokation
- 10.2.1 Storage Class
- 10.2.2 Programmorganisation in Sektionen
- 10.2.3 Relokation von Programmen
- 10.3 Programmbibliotheken
- 10.3.1 Grundlagen und Begriffe
- 10.3.2 Anwendungsbereiche
- 10.3.3 Programmbibliotheken unter Unix
- 10.3.4 Programmbibliotheken unter Windows
- 10.4 Skriptprogrammierung unter Unix
- 10.4.1 Anwendungsbereiche
- 10.4.2 Die Shell als Programminterpreter
- 10.4.3 Portabilität und Kompatibilität
- 10.4.4 Erstellung von Skriptprogrammen
- 10.4.5 Ausführung von Skriptprogrammen
- 10.4.6 Elemente der Skriptsprache
- 10.4.7 Shell-Befehle
- 10.4.8 Shell-Variablen
- 10.4.9 Stringoperatoren für Shell-Variable
- 10.4.10 Metazeichen
- 10.4.11 Synonyme und Funktionen
- 10.4.12 Bedingte Tests (conditional tests)
- 10.4.13 Arithmetik
- 10.4.14 Kontrollstrukturen für Skripte
- 10.5 Anwendungs- und Systemkonfiguration
- 10.5.1 Konfiguration mit Textdateien
- 10.5.2 Konfiguration mit Registrierungsdatenbank
- 11 Sicherheit
-
12 Virtualisierung
- 12.1 Anwendungsbereiche
- 12.2 Virtualisierungstypen
- 12.2.1 Virtuelle Prozessoren
- 12.2.2 Virtuelle Prozessumgebungen
- 12.2.3 Virtuelles Betriebssystem
- 12.2.4 Virtueller Desktop
- 12.2.5 Virtuelle Ressourcen
- 12.2.6 Sandboxing (virtuelles Laufzeitsystem)
- 12.2.7 Virtuelle Computer (Stufe Computerhardware)
- 12.3 Virtual Machine Monitor bzw. Hypervisor
- 12.3.1 Anforderungen
- 12.3.2 VMM-Funktionsweise
- 12.3.3 VMM-Typen
- 12.3.4 Unikernel
- 12.4 Einsatzgebiete
- 13 Mobile Betriebssysteme
- A Anhang
- Literaturhinweise
- Index
Product information
- Title: Betriebssysteme, 4th Edition
- Author(s):
- Release date: September 2019
- Publisher(s): dpunkt
- ISBN: 9783864907050
You might also like
video
Full Stack Web Development Mastery Course - Novice to Expert
Full stack development refers to the development of both frontend (client-side) and backend (server-side) portions of …
audiobook
Technically Wrong
Buying groceries, tracking our health, finding a date: whatever we want to do, odds are that …
video
Introduction to ChatGPT and OpenAI
OpenAI ChatGPT is a powerful language model that uses advanced ML techniques to generate human-like text …
audiobook
How to Do Nothing
A galvanizing critique of the forces vying for our attention-and our personal information-that redefines what we …