Inhaltsverzeichnis | 6 |
Vorwort | 14 |
1 Einführung und Uberblick | 16 |
1.1 Aufgaben des Kerns | 17 |
1.2 Implementierungsstrategien | 17 |
1.3 Bestandteile des Kernels | 18 |
2 Prozessverwaltung | 34 |
2.1 Prozessprioritäten | 35 |
2.2 Lebenszyklus eines Prozesses | 37 |
2.3 Repräsentation von Prozessen | 40 |
2.4 Systemaufrufe zur Prozessverwaltung | 51 |
2.5 Implementierung des Schedulers | 67 |
2.6 Erweiterungen des Schedulers | 80 |
3 Speicherverwaltung | 86 |
3.1 Überblick | 86 |
3.2 Organisation nach dem (N)UMA-Modell | 88 |
3.3 Seitentabellen | 98 |
3.4 Initialisierung der Speicherverwaltung | 105 |
3.5 Verwaltung des physikalischen Speichers | 132 |
3.6 Der Slab-Allokator | 162 |
3.7 Verwaltung des virtuellen Prozessspeichers | 185 |
3.8 Prozessorcache- und TLB-Steuerung | 225 |
4 Interprozesskommunikation und Locking | 230 |
4.1 Steuerungsmechanismen | 230 |
4.2 Locking-Mechanismen des Kerns | 234 |
4.3 System V-Interprozesskommunikation | 240 |
4.4 Andere IPC-Mechanismen | 253 |
5 Gerätetreiber | 262 |
5.1 IO-Architektur | 262 |
5.2 Zugriff auf Erweiterungsgeräte | 268 |
5.3 Treiberregistrierung | 272 |
5.4 Verbindung mit dem Dateisystem | 274 |
5.5 Treiberoperationen | 278 |
5.6 Ressourcen-Reservierung | 298 |
5.7 Bussysteme | 304 |
6 Module | 328 |
6.1 Module verwenden | 329 |
6.2 Module einfügen und löschen | 336 |
6.3 Automatisierung und Hotplugging | 356 |
6.4 Versionskontrolle | 359 |
7 Das virtuelle Dateisystem | 366 |
7.1 Dateisystemtypen | 367 |
7.2 Das Common File Model | 368 |
7.3 Aufbau des VFS | 373 |
7.4 Arbeiten mit VFS-Objekten | 392 |
7.5 Standardfunktionen | 410 |
8 Dateisystemimplementierungen | 416 |
8.1 Second Extended Filesystem | 418 |
8.2 Third Extended Filesystem | 461 |
8.3 Das Dateisystem | 466 |
9 Netzwerke | 506 |
9.1 Verkettete Computer | 507 |
9.2 ISO/OSI- und TCP/IP-Referenzmodell | 507 |
9.3 Kommunikation über Sockets | 511 |
9.4 Das Schichtmodell der Netzwerkimplementierung | 519 |
9.5 Socketpuffer | 521 |
9.6 Datenübertragungsschicht | 524 |
9.7 Vermittlungsschicht | 532 |
9.8 Transportschicht | 549 |
9.9 Anwendungsschicht | 564 |
10 Systemaufrufe | 572 |
10.1 Grundlagen der Systemprogrammierung | 572 |
10.2 Vorhandene Systemaufrufe | 579 |
10.3 Realisierung von Systemaufrufen | 584 |
11 Kernel-Aktivitäten und Zeitfluss | 602 |
11.1 Interrupts | 602 |
11.2 Software-Interrupts | 621 |
11.3 Tasklets und Work Queues | 624 |
11.4 Wait Queues und Completions | 627 |
11.5 Kerneltimer | 632 |
12 Page- und Buffer-Cache | 644 |
12.1 Struktur des Page-Caches | 645 |
12.2 Der Buffer-Cache | 648 |
12.3 Adressräume | 650 |
12.4 Implementierung des Puffer-Caches | 658 |
13 Datensynchronisation | 674 |
13.1 pdflush | 675 |
13.2 Starten eines neuen Threads | 676 |
13.3 Thread-Initialisierung | 676 |
13.4 Durchführen der Arbeit | 678 |
13.5 Periodisches Zurückschreiben | 679 |
13.6 Assoziierte Datenstrukturen | 679 |
13.7 Zentrale Steuerung | 682 |
13.8 Superblock-Synchronisation | 684 |
13.9 Inoden-Synchronisation | 685 |
13.10 Verstopfungen | 689 |
13.11 Zurückschreiben unter Druck | 692 |
13.12 Systemaufrufe zur Synchronisationskontrolle | 694 |
13.13 Vollständige Synchronisierung | 694 |
13.14 Synchronisieren einzelner Dateien | 696 |
13.15 Synchronisieren von Memory Mappings | 698 |
14 Swapping | 700 |
14.1 Überblick | 700 |
14.2 Swapping im Linux-Kernel | 704 |
14.3 Verwaltung von Swap-Bereichen | 708 |
14.4 Der Swap-Cache | 718 |
14.5 Zurückschreiben der Daten | 730 |
14.6 Seitenauswahl – Swap Policy | 731 |
14.7 Behandlung von Page Faults | 747 |
14.8 Auslösen des Swappings | 751 |
14.9 Verkleinern anderer Caches | 756 |
Literaturverzeichnis | 760 |
Index | 762 |
Symbole | 770 |