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