Humboldt-Universität zu Berlin, Institut für Informatik

* Linux-Kernel-Programmierung

Algorithmen und Strukturen der Version 1.2

3., erweiterte und aktualisierte Auflage

Michael Beck, Harald Böhme, Mirko Dziadzka,
Ulrich Kunitz, Robert Magnus, Dirk Verworner


ISBN:                   3-89319-939-5
beigelegt:              CD-ROM mit Slackware und Dokumentationen
Seiten:                 503
Preis:                  79,90 DM
Verlag:                 Addison-Wesley (Deutschland) GmbH


Das Buch umfaßt folgende Kapitel und Anhänge :

Vorwort zur 3., aktualisierten und erweiterten Auflage
Vorwort zur 2., korrigierten Auflage
Vorwort der Autoren zur 1. Auflage
Vorwort von Linus Torvalds zur 1. Auflage
1 Linux -- Das Betriebssystem
1.1 Wesentliche Eigenschaften
1.2 Linux-Distributionen
2 Die Übersetzung des Kerns
2.1 Wo finde ich was?
2.2 Die Übersetzung
2.3 Zusätzliche Konfigurationsmöglichkeiten
3 Einführung in den Kern
3.1 Wichtige Datenstrukturen
3.1.1 Die Taskstruktur
3.1.2 Die Proze&suml;tabelle
3.1.3 Files und Inodes
3.1.4 Dynamische Speicherverwaltung
3.1.5 Warteschlangen und Semaphore
3.1.6 Systemzeit und Zeitgeber (Timer)
3.2 Zentrale Algorithmen
3.2.1 Signale
3.2.2 Interrupts
3.2.3 Booten des Systems
3.2.4 Timerinterrupt
3.2.5 Scheduler
3.3 Implementation von Systemrufen
3.3.1 Wie funktionieren Systemrufe eigentlich ?
3.3.2 Beispiele für einfache Systemrufe
Der Systemruf getpid
Der Systemruf nice
Der Systemruf pause
3.3.3 Beispiele für komplexere Systemrufe
Der Systemruf fork
Der Systemruf execve
Der Systemruf wait
3.3.4 Implementation eines neuen Systemrufes
4 Die Speicherverwaltung
4.1 Das architekturunabhängige Speichermodell
4.1.1 Speicherseiten
4.1.2 Virtueller Adre&suml;raum
4.1.3 Übersetzung der linearen Adresse
4.1.4 Das Pagedirectory
4.1.5 Das mittlere Pagedirectory
4.1.6 Die Pagetabelle
4.2 Der virtuelle Adre&suml;raum eines Prozesses
4.2.1 Das Nutzersegment
4.2.2 Virtuelle Speicherbereiche
4.2.3 Der Systemruf brk
4.2.4 Funktionen für das Mapping
4.2.5 Das Kernelsegment
4.2.6 Statische Speicherreservierung im Kernelsegment
4.2.7 Dynamische Speicherreservierung im Kernelsegment
4.3 Das Caching der Blockgeräte
4.3.1 Blockpuffer
4.3.2 Die Prozesse update und bdflush
4.3.3 Die Listenstrukturen des Puffercaches
4.3.4 Verwendung des Puffercaches
4.4 Paging unter Linux
4.4.1 Das Finden einer freien Seite
4.4.2 Seitenfehler und das Zurückladen einer Speicherseite
5 Interproze&suml;kommunikation
5.1 Synchronisation im Kern
5.2 Kommunikation über Dateien
5.2.1 Das Sperren ganzer Dateien
5.2.2 Sperren von Dateibereichen
5.3 Pipes
5.4 Debugging mit ptrace
5.5 System V IPC
5.5.1 Zugriffsrechte, Nummern und Schlüssel
5.5.2 Semaphore
5.5.3 Messagequeues
5.5.4 Shared Memory
5.5.5 Die Befehle ipcs und ipcrm
5.6 IPC mit Sockets
5.6.1 Ein einfaches Beispiel
5.6.2 Die Implementation von Unix-Domain-Sockets
6 Das Linux -Dateisystem
6.1 Grundlagen
6.2 Die Repräsentation von Dateisystemen im Kern
6.2.1 Das Mounten
6.2.2 Superblockoperationen
6.2.3 Die Inode
6.2.4 Inode-Operationen
6.2.5 Die File-Struktur
6.2.6 File-Operationen
6.2.7 Das Öffnen einer Datei
6.2.8 Der Verzeichniscache
6.3 Das Proc -Dateisystem
6.4 Das Ext2 -Dateisystem
6.4.1 Der Aufbau des Ext2 -Dateisystems
6.4.2 Verzeichnisse im Ext2 -Dateisystem\pmacend {
6.4.3 Blockallokation im {\pem Ext2\/ -Dateisystem\pmacend {
6.4.4 Erweiterungen des {\pem Ext2\/ -Dateisystem\pmacend { s
7 Gerätetreiber unter Linux
7.1 Zeichen- und Blockgeräte
7.2 Polling- und Interruptbetrieb
7.2.1 Polling
7.2.2 Interruptbetrieb
7.2.3 Bottom Halfs -- Die unteren Interrupthälften
7.2.4 DMA-Betrieb
7.3 Die Hardware
7.3.1 Hardwareerkennung
7.3.2 Automatische Interrupterkennung
7.4 Die Implementation eines Treibers
7.4.1 Die Setup-Funktion
7.4.2 Init
7.4.3 Open und Release
7.4.4 Read und Write
7.4.5 IOCTL
7.4.6 Select
7.4.7 Lseek
7.4.8 MMap
7.4.9 Readdir, Fsync und Fasync
7.4.10 Check\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em media\unhbo x \voidb@x \kern .06em \vbox {\hrule width.3em change und Revalidate
7.5 Ein Beispiel für den DMA-Betrieb
8 Netzwerkimplementation
8.1 Einführung und Überblick
8.1.1 Das Schichtenmodell der Netzwerkimplementation
8.1.2 Die Reise der Daten
8.2 Wichtige Strukturen
8.2.1 Die {\ptt socket -Struktur
8.2.2 Die Struktur sk_buff -- Pufferverwaltung im Netzwerk
8.2.3 Der INET-Socket -- spezieller Teil eines Sockets
8.2.4 Protokolloperationen in der proto-Struktur
8.2.5 Die allgemeine Struktur einer Socketadresse
8.3 Netzwerkgeräte unter {\psc Linux \pmacend
8.3.1 Ethernet
8.3.2 SLIP und PLIP
8.3.3 Das Loopback-Gerät
8.3.4 Das Dummy-Gerät
8.4 ARP -- Address Resolution Protocol
8.5 IP
8.5.1 Allgemeines über IP
8.5.2 Funktionen des IP
8.5.3 Routing
8.5.4 Das IP-Multicasting und IGPM
8.5.5 IP-Paketfilter
8.5.6 Das IP-Accounting und IP-Firewalling
8.6 UDP
8.6.1 Funktionen des UDP
8.6.2 Weitere Funktionen
8.7 TCP
8.7.1 Allgemeines zum TCP
8.7.2 Der TCP-Kommunikationsendpunkt
8.7.3 Funktionen des TCP
8.8 Die Paketschnittstelle -- eine Alternative?
9 Module und Debugging
9.1 Was sind Module\pcomma ?
9.2 Implementation im Kernel
9.2.1 Signatur von Symbolen
9.3 Was kann als Modul implementiert werden?
9.4 Ein Beispielmodul
9.5 Debugging
9.5.1 Änderungen sind der Anfang vom Ende
9.5.2 Der beste Debugger -- printk()
9.5.3 Debuggen mit GDB

A Systemrufe
A.1 Die Prozeßverwaltung
A.2 Das Dateisystem
A.3 Die Kommunikation
A.4 Die Speicherverwaltung
A.5 Die Initialisierung
A.6 Und der ganze Rest
B Kernnahe Kommandos
B.1 free - Übersicht über den Systemspeicher
B.2 ps - Ausgabe der Prozeßstatistik
B.3 Nachträgliche Kernkonfiguration
B.4 top - Die CPU-Charts
B.5 Init - Primus inter pares
B.6 shutdown - Das Herunterfahren des Systems
B.7 strace - Observierung eines Prozesses
B.8 Konfiguration des Netzwerk-Interfaces
B.9 traceroute - Der Ariadnefaden im Internet
B.10 Konfiguration einer seriellen Schnittstelle
B.11 Konfiguration einer parallelen Schnittstelle
B.12 mount - Der Berg im Dateisystem!
Mount-Optionen des Ext2-Dateisystems
Mount-Optionen des MS-DOS-Dateisystems
Mount-Optionen des ISO-Dateisystems
Mount-Optionen des HPFS
Mount-Optionen des NFS
C Das Proc-Dateisystem
D Der Boot-Prozeß
D.1 Ablauf des Bootens
D.2 LILO -- der Linux-Lader
D.2.1 MS-DOS-MBR startet LILO
D.2.2 LILO wird von einem Bootmanager gestartet
D.2.3 LILO im Master-Boot-Record
D.2.4 LILO-Dateien
Die Konfigurationsdatei
Die Disktab-Datei
D.2.5 LILO-Bootparameter
D.2.6 LILO-Startmeldungen
D.2.7 Fehlermeldungen
E Nützliche Kernfunktionen
L Literaturverzeichnis
I Index

Erstellt am 15. Juni 1994, geändert am 3. Juli 1995

Dirk Verworner
linux@informatik.hu-berlin.de