Linux-Kernel- Programmierung

Ähnliche Dokumente
Linux-Kernel- Programmierung

Linux-Kernel- Programmierung

Linux-Kernelprogrammierung

A Kompilieren des Kernels B Lineare Listen in Linux C Glossar Interessante WWW-Adressen Literaturverzeichnis...

Betriebssysteme. 4y Springer. Eine kompakte Einführung mit Linux. Albrecht Achilles. Mit 31 Abbildungen

Betriebssysteme R. Thomas (Stand : SS 2010)

ADDISON-WESLEY PUBLISHING COMPANY

Windows NT 4.0 in heterogenen Netzen

Betriebssysteme 1. Thomas Kolarz. Folie 1

Objektorientiertes Programmieren in C++

Die С ++-Programmiersprache

SCSI-Bus und IDE-Schnittstelle

Linux Kernelarchitektur

Windows 11. Grundlagen Praxis Optimierung. Klaus Fahnenstich Rainer G. Haselier ADDISON-WESLEY PUBLISHING COMPANY

Konzepte von Betriebssystemkomponenten. Gerätetreiber. Mario Körner

Robert Sedgewick. Algorithmen in Java. »il 1-4 Grundlagen Datenstrykturen Sortleren Suchen. java-beratung durch Michael Schidlowsky

Robert Sedgewick. Algorithmen in Java. Teil 1-4 Grundlagen Datenstrukturen Sortieren Suchen. Java-Beratung durch Michael Schidlowsky

Rootkits. Windows-Kernel unterwandern. Greg Hoglung, James Butler. An imprint of Pearson Education

Linux-Companion zur Systemadministration

Martin Fowler, Kendali Scott. UML - konzentriert. Die Standardobjektmodellierungssprache anwenden

Martin Fowler, Kendall Scott. UML konzentriert. Eine strukturierte Einführung in die Standard-Objektmodellierungssprache. 2., aktualisierte Auflage

Geräteverwaltung: Einführung

LiNUX-UNix-Systemprogrammierung

Der Rational Unified Process

Programmieren von UNIX-Netzen

Virtueller Speicher und Memory Management

IO-Flexpages in L4/Linux

Prüfung VO Betriebssysteme SS2008 / 7. Juli 2008

Rechnernutzung in der Physik. Betriebssysteme

Konzepte von Betriebssystemkomponenten

Grundkurs Betriebssysteme

OS/2 System- und Netzwerkprogrammierung

VBA mit Office 97 lernen

Rüdiger Brause. Betriebssysteme. Grundlagen und Konzepte. Dritte, überarbeitete Auflage Mit 170 Abbildungen. Springer

Achim Bühl, Peter Zöfel SPSS. Methoden für die Markt- und Meinungsforschung. Technische Unäversität Darmstadt

Betriebssysteme Grundlagen und Konzepte

C++GUI Programmierung mit Qt 4

Betriebssysteme. Tutorium 2. Philipp Kirchhofer

Objektorientierte Programmierung mit Java

librtipc - Bibliothek für echtzeitfähige Interprozesskommunikation

Systemsoftware (SYS) Fakultät für Informatik WS 2007/2008 Christian Baun. Übungsklausur

ITIL V3 Basis-Zertifizierung

Inhaltsverzeichnis. Carsten Vogt. Nebenläufige Programmierung. Ein Arbeitsbuch mit UNIX/Linux und Java ISBN:

Linux Paging, Caching und Swapping

Programmierung mit Access 7 für Windows 95

Microsoft FrontPage 98

Windows Scripting lernen

^ Springer Vi eweg. Grundkurs Betriebssysteme. Synchronisation, Prozesskommunikation, Virtualisierung. Architekturen, Betriebsmittelverwaltung,

C-Programmierung lernen

Linux-Treiber entwickeln

Programmieren mit Java

Magento Theme-Design. professionelle Themes für Ihren Shop Y%ADDISON-WESLEY. Entwerfen Sie Schritt für Schritt. Richard Carter

Objektorientierte Prozeßsimulation in C++

Teil 3: Konzepte von Betriebssystemen

I Grundlagen der System-Administration 8

Grundzüge der Volkswirtschaftslehre Eine Einführung in die Wissenschaft von Märkten

Microkernel-Betriebssysteme Mach, L4, Hurd

Was machen wir heute? Betriebssysteme Tutorium 2. Organisatorisches. Frage 2.1.a. Theorieblätter Abgabe. Antwort. Probleme mit OS/161?

Systemsoftware (SYS) Fakultät für Informatik WS 2008/2009 Christian Baun. Übungsklausur

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

Echtzeitbetriebssysteme

Aufbau eines modernen Betriebssystems (Windows NT 5.0)

Inhaltsverzeichnis VII. Teil I: PC- und Mikrocomputer-Technik

Windows-Testumgebung

C++für Naturwissenschaftler

Linux/Unix- Systemprogrammierung

Windows Scripting lernen

Inhaltsverzeichnis XII

TYP03-Extensions entwickeln

Grundkurs Betriebssysteme

Speicher- und Cacheverwaltung unter Linux. Ralf Petring & Guido Schaumann

Paul Molitor und Jörg Ritter VHDL. Eine Einführung. ein Imprint von Pearson Education

Projektmanagement. Konzeption und praktischer Einsatz des R/3 Moduls PS ADDISON-WESLEY. An imprint of Addison Wesley Longman, Inc.

8.4 Das Andrew File System Ausblicke Zusammenfassung 410 Übungen 411

MICROSOFT EXCEL 3.0 HOTLINE

Konzepte von Betriebssystem-Komponenten

Betriebssysteme Teil 11: Interprozess-Kommunikation

Grundlagen des Marketing

Konzepte von Betriebssystemkomponenten Referat am Thema: Adressräume, Page Faults, Demand Paging, Copy on Write Referent: Johannes Werner

Das Assembler-Buch. Trutz Eyke Podschun. Grundlagen und Hochsprachenoptimierung. 4., aktualisierte Auflage ADDISON-WESLEY

Statistik ohne Angst vor Formeln

Übungen zur Makroökonomie

4. Der Linux-Kernel. 4. weiterführendes Linuxtutorium 1

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

Systeme I: Betriebssysteme Kapitel 8 Speicherverwaltung

Manfred Precht, Nikolaus Meier, Joachim Kleinlein. EDV-Grundwissen. Eine Einführung in Theorie und Praxis der modernen EDV 4.

SCSI-Bus und IDE-Schnittstelle

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

I Grundlagen der parallelen Programmierung 1

Test (Lösungen) Betriebssysteme, Rechnernetze und verteilte Systeme

Relationale Datenbanken - Theorie und Praxis

Transkript:

Michael Beck, Harald Böhme, Mirko Dziadzka, Ulrich Kunitz, Robert Magnus, Dirk Verworner, Claus Schröter Linux-Kernel- Programmierung Algorithmen und Strukturen der Version 2.2 5., aktualisierte und erweiterte Auflage TT ADDISON-WESLEY An imprint of Pearson Education München Reading, Massachusetts Menlo Park, California New York Harlow, England Don Mills, Ontario Sydney Mexico City Madrid Amsterdam

Inhaltsverzeichnis Vorwort zur 5. Auflage Vorwort der Autoren zur 1. Auflage Vorwort von Linus Torvalds zur 1. Auflage xi xi xiv 1 Linux - Das Betriebssystem 1 1.1 Wesentliche Eigenschaften 3 1.2 Linux-Distributionen 5 2 Die Übersetzung des Kerns 7 2.1 Wo finde ich was? 7 2.2 Die Übersetzung 9 2.3 Zusätzliche Konfigurationsmöglichkeiten 11 3 Einführung in den Kern 15 3.1 Wichtige Datenstrukturen 20 3.1.1 Die Taskstruktur 20 3.1.2 Die Prozeßtabelle 28 3.1.3 Files und Inodes 29 3.1.4 Dynamische Speicherverwaltung 31 3.1.5 Warteschlangen und Semaphore 32 3.1.6 Systemzeit und Zeitgeber (Timer) 34 3.2 Zentrale Algorithmen 36 3.2.1 Signale 36 3.2.2 Interrupts 37 3.2.3 Booten des Systems 38 3.2.4 Timerinterrupt 40 3.2.5 Scheduler 43 3.3 Implementierung von Systemrufen 46 3.3.1 Wie funktionieren Systemrufe eigentlich? 46 3.3.2 Beispiele für einfache Systemrufe 48 3.3.3 Beispiele für komplexere Systemrufe 49 4 Die Speicherverwaltung 59 4.1 Das architekturunabhängige Speichermodell 61

vi Inhaltsverzeichnis 4.1.1 Speicherseiten 61 4.1.2 Virtueller Adreßraum 61 4.1.3 Übersetzung der linearen Adresse 64 4.1.4 Das Pagedirectory 66 4.1.5 Das mittlere Pagedirectory 66 4.1.6 Die Pagetabelle 67 4.2 Der virtuelle Adreßraum eines Prozesses 70 4.2.1 Das Nutzersegment 70 4.2.2 Virtuelle Speicherbereiche 71 4.2.3 Der Systemruf brk 76 4.2.4 Funktionen für das Mapping 76 4.2.5 Das Kernelsegment 77 4.2.6 Statische Speicherreservierung im Kernelsegment 78 4.2.7 Dynamische Speicherreservierung im Kernelsegment... 78 4.3 Das Caching der Blockgeräte 82 4.3.1 Blockpuffer 82 4.3.2 Update und Bdflush 84 4.3.3 Die Listenstrukturen des Puffercaches 85 X 4.3.4 Verwendung des Puffercaches 86 4.4 Paging unter Linux 88 4.4.1 Speicherseitenverwaltung und -cache 91 4.4.2 Speicherseitenreservierung 92 4.4.3 Seitenfehler und das Zurückladen einer Speicherseite... 96 5 Interprozeßkommunikation 99 5.1 Synchronisation im Kern 101 5.2 Kommunikation über Dateien 108 5.2.1 Das Sperren ganzer Dateien 109 5.2.2 Sperren von Dateibereichen 110 5.3 Pipes 114 5.4 Debugging mit ptrace 116 5.5 System VIPC 120 5.5.1 Zugriffsrechte, Nummern und Schlüssel 120 5.5.2 Semaphore 121 5.5.3 Messagequeues 124 5.5.4 Shared Memory 128 5.5.5 Die Befehle ipcs und ipcrm 132 5.6 IPC mit Sockets 134 5.6.1 Ein einfaches Beispiel 134 5.6.2 Die Implementierung von Unix-Domain-Sockets 138 6 Das LlNUX-Dateisystem 143 6.1 Grundlagen 144 6.2 Die Repräsentation von Dateisystemen im Kern 147 6.2.1 DasMounten 148

Inhaltsverzeichnis vii 6.2.2 Superblockoperationen 151 6.2.3 Dielnode 154 6.2.4 Inode-Operationen 156 6.2.5 Die File-Struktur 160 6.2.6 File-Operationen 160 6.2.7 Das Öffnen einer Datei 165 6.3 Das sysctl-interface 168 6.4 Das Ext2-Dateisystem 170 6.4.1 Der Aufbau des xf2-dateisystems 170 6.4.2 Verzeichnisse im Ext2-Dateisystem 172 6.4.3 Blockallokation im xö-dateisystem 173 6.4.4 Erweiterungen des Ex 2-Dateisystems 174 7 Gerätetreiber unter Linux 177 7.1 Zeichen- und Blockgeräte 178 7.2 Hardware 180 7.2.1 Port I/O 180 7.2.2 Der Dinosaurier - ISA Bus 181 7.2.3 PCI-Bus 190 7.3 Polling, Interrupts und Wait Queues 196 7.3.1 Polling 196 7.3.2 Interruptbetrieb 197 7.3.3 Interrupt Sharing 199 7.3.4 Bottom Halfs - die unteren Interrupthälften 200 7.3.5 Task Queues 201 7.3.6 Timer 204 7.4 Die Implementierung eines Treibers 206 7.4.1 Beispiel - PC Lautsprechertreiber 206 7.4.2 Ein einfacher Treiber 209 7.4.3 Die Setup-Funktion 211 7.4.4 Die Request-Funktion 212 7.4.5 Init 215 7.4.6 Open und Release 217 7.4.7 Read und Write 218 7.4.8 IOCTL 221 7.4.9 Poll 224 7.4.10 Lseek 226 7.4.11 MMap. 226 7.4.12 Fasync 228 7.4.13 Readdir, Fsync 230 7.4.14 Check_ media_ change und Revalidate 231 7.5 Dynamische und statische Treiber 231 8 Netzwerkimplementierung 233 8.1 Einführung und Überblick 234

viii Inhaltsverzeichnis 8.1.1 Das Schichtenmodell der Netzwerkimplementation 235 8.1.2 Die Reise der Daten 236 8.2 Wichtige Strukturen 241 8.2.1 Die socket-struktur 241 8.2.2 Die Struktur sk_ buff-pufferverwaltung im Netzwerk. 242 8.2.3 Der INET-Socket - spezieller Teil eines Sockets 245 8.2.4 Protokolloperationen in der pro to-struktur 248 8.2.5 Die allgemeine Struktur einer Socketadresse 251 8.3 Netzwerkgeräte unter Linux 252 8.3.1 Ethernet 258 8.3.2 SLIP und PLIP 259 8.3.3 Das Loopback-Gerät 259 8.3.4 Das Dummy-Gerät 259 8.3.5 Ein Beispielgerät 260 9 Module und Debugging 265 9.1 Was sind Module? 265 9.2 Implementierung im Kernel 266 9.2.1 Signatur von Symbolen 269 9.3 Bedeutung der Objektsektionen für Module und Kern 269 9.4 Parameterübergabe 271 9.5 Was kann als Modul implementiert werden? 273 9.6 Der Kernel-Dämon 273 9.7 Ein Beispielmodul 275 9.8 Debugging 276 9.8.1 Änderungen sind der Anfang vom Ende 277 9.8.2 Derbeste Debugger-printk () 278 9.8.3 Debuggen mit GDB 279 10 Multiprocessing 281 10.1 Die Intel-Mehrprozessorspezifikation 281 10.2 Probleme bei Mehrprozessorsystemen 283 10.3 Änderungen am Kern 284 10.3.1 Initialisierung des Kerns 284 10.3.2 Scheduling 285 10.3.3 Interruptbehandlung 285 10.4 Atomare Operationen 285 10.4.1 Der atomare Datentyp 285 10.4.2 Zugriffe auf den atomaren Datentyp 286 10.4.3 Ändern und Test von atomaren Variablen 286 10.5 Spinlccks 287 10.5.1 Zutrittsfunktionen 287 10.5.2 Read-Write-Spinlocks 288 A Systemrufe 289