Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels...
Transcript of Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels...
A
Kompilieren des Kernels
Aueh wenn heute die Notwendigkeit in der Regel nicht mehr hoch ist , seineneigenen Kernel zu erzeugen, da viele Hardwaretreiber dynamisch in das laufende System eingebunden werden konnen (vgl. 10.5), gibt es doch ein paarCriinde, die zu einem eigenen Kernel fuhren konnen :
• Sicherheit serwagungen:Loadable Modules konnen im Zweifelsfall missbr aucht werden. Wenn alles, was der Kernel fur eine bestimmte sehr sichere Produktionsumgebung ben6tigt , bereit s fest eingebunden ist , konnen an dieser Stelle keineSchwachstellen mehr auft reten.Dies bedeutet jedoch, dass alle Patches - alle sicherheits relevanten Anderungen am Kernel und den eingebundenen Modules - manuell nachgehalten werden miissen und zu einer erne uten Kompilation des Kernels fiihren .
• Mitarbeit an der Linux-Entwicklung:Ohne Testen des jeweils modifizierten Kernels ist eine Mit arbeit niehtmoglich.
• Interesse:Urn einige Aspekte besser zu verstehen sowie aus Neugier kann man versuchsweise Kernel kompilieren .
• Spezielle Hardware usw.:In manchen Situationen , in denen Treiber fiir neue Hardware noch nichtzum "Repe rtoire" von Linux gehoren, wohl aber schon als Testversionenbzw. als Eigenentwicklung vorliegen , muss man den Kernel mit den Treibern kompilieren .
Was ist zu beacht en , damit man sich mit der Er zeugung eines neuen Kernelskeine Probleme einhandelt?
• Es muss darauf geachtet werden , dass alle Entwicklungswerk zeuge in derbenotigt en Version vorliegen . Dies betrifft zunachst den C-Compiler gee.Als weit eres unabdingbar es Werkzeug wird make eingesetz t . make greift aufeine Datei Makefile zu, die Regeln fur die Erzeugung des Kernel definiert .
248 A Kompilieren des Kernels
• Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum ,namlich /usr/src/linux-2. 6.4-54 .5 , inst alliert sein. Aus der Namensgebung kann abgeleite t werden, dass es sich urn die Kernelversion 2, Patchlevel 6, Sublevel 4, Extraversion -54.5 handelt . Mit Hilfe des KommandosIn sollte usr/ src/Ti.nux auf dieses Directory verweisen.
• Die verwendeten neuen Pat ches miissen geladen und mittels patch in dieQuellen eingefiigt werden . Sollen eigene Veranderungen des Quelltextesvorgenommen werden, so miissen sie jetz t vorgenommen werden.
• Mit tels cd /usr/src/linux ist in das entsprechende Verzeichnis zu wechseln. Die Datei Makefile ist anzupasse n: die Variable Extraversion sollte einen neuen Wert bekommen, z.B. -54.5spc . Damit werden benotigteModule in dem Directory /lib/modules/2 . 6.4-54.5spc abgelegt undstoren die zum laufenden System gehorenden Module nicht . Durch geeignete Namensgebung System.map-2. 6.4-54. 5spc kann die neu erst elIteSystemmap neben der Syst emmap des laufenden Systems exist ieren.
• Nun ist die Konfiguration des Kernels festzulegen . Die Beschreibung befindet sich in der Datei . config. Diese kann aus dem laufenden Systemmit dem Aufru f
make oldconfig && make prepare
erzeugt werden. Urn die Kernelkonfiguration geeignet zu modifizieren, kannman mit dem Befehl
make xconf ig
auf ein X-Fenster zur Konfigur ation zugreifen. Die Konfiguration gliedertsich in einzelne Unterabschnit te, die je nach Anforderung verandert werdenmussen , Wicht ige Abschnit te, die ggf. auch Querbeziige haben, sind:- "Code mat ur ity level opt ions": Eine Veranderung der Eintrage wird
not ig, wenn an den Cerat etreibern gearbeite t wird .- "General set up" : Setzungen , die nur unter sehr bestimmten Urnstanden
verandert werden sollten.- "Loadable module support": Wenn man darauf verzichten mochte, Mo
dule dynamisch nachzuladen, miissen hier Veranderungen vorgenommen werden. Dafiir miissen aber die benotigten Module fest in denKernel einkompiliert werden.
- "Processor type": Hier lasst sich der verwendete Prozessor genauer festlegen und damit eine hohere Optimierung des Kernels erzielen.
- "Bus options": Je nach verwendeten Bus-Systemen im Rechner konneneinige Eintrage fallen gelassen oder miissen sogar eingeschaltet werden.
- "Device drivers": Hier werden die unterschiedlichen Hardware-Ausstattungen beschrieben und darnit die benotigten Cerate-Treiber zur Kernel-Konfiguration angefordert .
- "Executable file format" : Dieser Eintrag beschreibt, welche Dat eiformat e als ausfiihrbare Programme und Libraries unterstii tzt werden.
A Kompi lieren des Kernels 249
- AuBerdem gibt es eine Reihe von Optionen zur Sicherheit , Kryptogra-phie, Kernel Debugging und Profiling usw.
Viele der gesetz ten Konfigurationsanforderungen lassen sich fest kompilieren oder als Loadable Module erzeugen - sofern die Unterstiitzung dafiirvorgesehen ist .
• Nach der Erz eugung der Konfigur ation kann mit dem Kompilieren begonnen werden :
make dep clean bzlmage
t rag t die Abhiingigkeit en in die diversen Makefiles ein, auf die wahrendder Erzeugung automatisch zugegriffen wird , loscht alte Object-Dateienund stofit die Kompilation des Kernels an. Der neu erzeugte Kernel istanschlieBend unter /usr/ src/linux/arch!i386/boot/bzimage zu finden .
• Die Module sind anschliebend mit
make modules && make modul es_i ns t all
zu erzeugen. Sie werden dab ei autornat isch in das Verzeichn is mit demNam en lib/modules/2 . 6. 4 -54 . 5spc kopiert .
• Danach muss das neue Kernel-Im age zusammen mit der Systemmap indas Boot-Verzeichnis kopiert werden . Urn Schwierigkeit en zu entgehen ,miissen dab ei die Versionsnummem usw. verwendet werd en . Da wir unsim Verzeichn is /usr/ s r c/linux befinden , lauten die Befehle
cp arch/i386/boot/bzimage /boot/vml inuz -2.6.4-54 .5spc
und
cp arch/i386/boot /System. map /boot/System .map-2.6.4-54 .5spc
• Ggf. muss noch eine Ini t ial Ramdisk erzeugt werden . Diese wird unterUmstanden gebra ucht , wei! der zu ladende Kernel vieIIeicht besondereTreiber verwenden muss, urn auf die P latten zugreifen zu konnen . DerAufruf lautet in diesem Beispiel
mkini trd -k vmlinuz-2.6. 4-54 .5spc -i initrd-2.6.4-54.5spc
• Als let zter Schritt ist der verwendete Bootloader anzupassen , damit auchder neue Kernel geladen werd en kann . Bei Verwendung von GRU B konntedie Datei anschlieBend wie in Abb . A.I aussehen:
250 A Kompilieren des Kernels
# Modified by YaST2. Last modification on Tue May 18 15:03:25 2004
color Yhite/blue black/light-graydefault °timeout 8gfxmenu (hdO,4)/message
#Don't change comment - YaST2 identifier: Original name: linuxtitle Linux
kernel (hdO,4)/vmlinuz root=/dev/hda6 vga=Ox31a splash=silent \desktop resume=/dev/hda8 shoYopts
initrd (hdO,4)/initrd
#Don't change comment - YaST2 identifier: Original name: LinuxSPCtitle TestVersion
kernel (hdO,4)/vmlinuz-2 .6.4-54 .5spc root=/dev/hda6 vga=Ox31a \splash=silent desktop resume=/dev/hda8 shoYopts
initrd (hdO,4)/initrd-2.6 .4-54 .5spc
#Don't change comment - YaST2 identifier: Original name: yindoystitle yindoys
root (hdO,O)chainloader +1
#Don't change comment - YaST2 identifier: Original name: failsafetitle Failsafe
kernel (hdO,4)/vmlinuz root=/dev/hda6 shoYopts ide=nodma \apm=off acpi=off vga=normal noresume nosmp noapic \maxcpus=O 3
initrd (hdO,4)/initrd
#Don't change comment - YaST2 identifier: Original name: Linux-9 .0title Linux-9.0
kernel (hdO,12)/vmlinuz root=/dev/hda14 vga=Ox31a \splash=silent desktop resume=/dev/hda8 SSOYOpts
initrd (hdO,12)/initrd
#Don't change comment - YaST2 identifier: Original name: Mem-Testtitle Speichertest
kernel (hdO,4)/memtest.bin
Listing A.I. Beispiel fur eine GRUB-B ootloader Datei
B
Lineare Listen in Linux
Neben der Verwendung von Strukturen gehoren verket tete Listen zum wicht igen Handwerkszeug, das bei Betriebssystemen - und hier bei Linux - eingesetz t wird. Die Beschaftigung mit Algorithmen und Dat enstrukturen findethier ihre konkrete Anwendung. Nun konnten an jeder Stelle, an der Linuxverket tete Listen einsetzt , diese neu programmiert werden . Urn diesem Wildwuchs vorzub eugen , muss sich jeder Linux-Programmierer an das hierfiir hereitgestellte Werkzeug halt en, das in include/linux/list . h entha lten ist .
Die typische List enform , die Linux verwendet , ist die doppelt- verkettetezirkulare Liste, die in der unten gezeigten Abb . schematisch dargestellt ist.Jeder Eintrag ist zusa tzlich mit zwei Pointern versehen: next , der zum nachsten Eintrag zeigt, prey, der auf den vorangehenden verweist . Der next-Pointerdes "letzte n" Eintrags zeigt auf den ersten, der prey-Pointer des "ersten" Eint rags verweist auf den letzten. Folgt man den Zeigern immer in einer Richtung, so werden nacheinander aIle List eneintrage durchlaufen. Tatsachlich istes gleichgiilt ig, ob es einen "ersten" oder "letzten" Eintrag gibt , denn aIleEintrage sind gleichberecht igt .
~ ~I -Jt
I
~\
Abb. BiL, Schematische Darstellung einer doppelt-verkett eten zirkularen Liste
In der Header-Datei werden die Zeiger-Strukturen bereitgestellt durch dieStruktur list--.head. Dabei wird bewusst der in der Abb . B.l angedeutete Datenteil weggelassen, urn eine allgemeine Form von Listen erzeugen zu k6nnen.
252 B Lineare Listen in Linux
Deshalb muss die Struktur list...head in andere Strukturen eingebettet werden , wie wir es in vielen Beispielen gesehen haben, so beim PCB auf S. 21.Die Definition von list...head hat folgende Form:
struct list_head {struct list_head *next , *prev;
};
Es fehlen noch die entsprechenden Listen-Operationen. Auch diese werden inder Header-Dat ei bereitgestellt .
SolI ein List enelement hinter dem "Listenkopf" l head eingefUgt werden ,so steht dafiir die inline-F'unktion lisLaddO zur VerfUgung. Die Definitionsieht so aus:
static inline void list_addCstruct list_head *new,struct list_head *head)
{
__list_addCnew, head, head->next) ;}
static inline void __list_addCstruct list_head *new,struct list_head *prev,struct list_head *next)
{
next->prev new;new->next = next;new->prev = prev ;prev->next = new;
}
lisLaddO greift also auf die inline-Funkt ion __Li.st .caddf ) zu, die die notwendigen Pointer-Operationen enthalt. Da es sich bei beiden F'unktionen urn"inline"-F'unkt ionen hand elt , ersetzt der Compiler den Aufruf von list_addOzunachst durch den Aufrufvon __List .iaddO zusammen mit den Argumentenund modifiziert diesen anschlieBend durch den dort vereinbarten Code. Aufdiese Weise wird jeweils direkt ents prechender C-Code ohne F'unktionsaufrufegeneriert ; das Hinzufugen eines Listenelements wird dadurch sehr schnell. DieZeit fur diese Operation ist vom Typ 0(1) , also unabhangig von der Anzahlder Listenelemente.
Der Grund fur die Einfiihrung der F'unktion __ListaddO liegt darin, dassauch die Moglichkeit vorh anden sein solIte, einen Eintrag am "Ende" der Listeanzufiigen. Der Aufruf dafur lautet List.cadd.naaLO. Auf Grund der doppeltverketteten zyklischen Listenstruktur entspricht dies dem Einfiigen direkt vordem "Listenkopf". Und das kann ebenfalls mit __Li.st..add O erreicht werden,wenn man die Argumente anders wahlt, es muss nur der Listenkopf durchhead->prev und der Nachfolger durch head ersetzt werden:
lOa alle Listenelemente gleichberechtigt sind, handelt es sich dabei urn irgendeinListenelement.
B Lineare Listen in Linux 253
static inline void list_add_tailCstruct list_head *new,struct list_head *head)
{
__l ist_addCnew, head->prev , head) ;}
Auch Stacks und Queues lassen sich auf diese Weise implementieren: werdenmit list_add 0 Elemente angefiigt und das letz te Element weitergereicht , sohaben wir einen Stack; wenn list-add_tail 0 zum Anfiigen verwendet wirdund das erste Element weitergereicht wird, so entspricht das einer Queue.
Funktionen zum Entnehmen aus der Queue miissen naturlich ebenfallsbereit gest ellt werden: Lasu.del O nimmt das angegebene Element aus derListe.
static inline void list_delCstruct list_head *entry){
__list_del Centry->prev , entry->next);entry->next LIST_POISON1 ;entry->prev = LIST_POISON2;
}
static inline void __list_del Cstruct list_head * prev,struct list_head * next)
{
next->prev = prev ;prev->next = next ;
}
list_delO berechnet den Vorganger und Nachfolger und ruft mit dieser Information die Funktion __List ..de'l O auf, die ihrerseits die eigentl ichen Pointeroperationen in der Liste vornimmt. Danach bleibt nur noch die Aufgabe,die Zeiger des aus der Liste entfernten Elements so zu set zen, dass sie nichtmehr als giilt ige Zeiger interpretiert werden konnen . list-delO gibt jedochnicht den Speicher frei, den das herausgeloste Element belegt ; das ware auchfatal, wei! in der Regel mit dem herausgelosten Element noch etwas geschehenmuss.
static inline void list_del_initCstruct list_head *entry){
__list_del (entry->prev , entry->next) ;INIT_LIST_HEADCentry) ;
}
#define INIT_LIST_HEADCptr) do { \Cptr)->next = Cptr ); Cptr)->prev
} while CO)Cptr) ; \
Die obige inline-Funktion list_deLinit 0 zeigt eine zweite Funkt ion zumEntnehmen aus einer Liste; im Unte rschied zu list_delO wird die Struktur
254 B Lineare List en in Linux
list-head des herausgelost en Elements so initialisiert , dass sie einen eigenenListenkopf bildet .
Urn herauszufinden, ob eine Liste leer ist , wird List..empty O eingesetz t .Ist der Nachfolger des Kopfes mit dem Kopf identi sch, so gibt es kein Elementin der Liste:
static inline int list_empty(const struct list_head *head){
return head->next == head;}
Auch das Entnehmen eines Element s und Einfiigen in eine andere List e wirdbenotigt . Dies erledigt Lf.at.move 0 folgendermaBen:
static inline void list_move(struct list_head *list,struct list_head *head)
{
__list_del (list->prev , list->next);list_add(list, head);
}
Entsprechend ist Las t move.faa), 0 aufgebaut .Zwei List en lassen sich durch list-splice 0 zu einer zusammenfiigen:
static inline void list_splice(struct list_head *list,struct list_head *head)
{
if (llist_empty(list))__list_splice(list, head) ;
}
static inline void __list_splice(struct list_head *list,struct list_head *head)
{
struct list_head *first = l ist->next;struct list_head *last = list->prev;struct list_head *at = head->next ;
first->prev = head;head->next first ;
last->next at ;at->prev = last ;
}
Nachdem geklart ist , dass die einzufugende Liste nicht leer ist , wird sie hinterdem Listenkopf head durch den Aufruf von __list_splice 0 eingeftigt . DiePointeroperationen sind selbst erklarend .
Sollen aIle Listenelement e durchlaufen werden, urn eine bestimmte Aktion mit ihnen durchzufiihren , muss eine for-Schleife geschrieben werden,
B Lineare List en in Linux 255
die - ausgehend von einem Listenelement - bei jedem Durchlauf den Zeigerauf das nachfolgende Element benutzt , bis wir wieder beim urspriinglichenElement angekommen sind. Dies erledigt ganz elegant fiir uns das MakroLi.su.for.ieach O :
#define list_for_each(pos. head) \for (pos = (head)->next. prefetch(pos->next); pos != (head) ; \
pos = pos->next . prefetch(pos->next))
Aber damit haben wir noch nicht die zu bearbeitenden Daten! Tatsachlichwollen wir diejenige Struktur bearb eiten , in der der jeweilige Listenkopf eingebettet ist . Dazu stellt die Datei list. h ein weiteres Makro bereit:
#define list_entry (ptr. type. member) \container_of (ptr. type. member)
container-of 0 2 ist ein Makro, das die beiden Makros member-type 0 3 undoffsetof 0 4 benutzt :
#define container_of(ptr, type, member) ({ \const member_type (type , member) *__mptr (ptr); \(type *)( (char *) __mptr - offsetof(type.member) );})
#define member_type (type. member) __typeof __( «type *)O)->member
#define offsetof(TYPE, MEMBER) « s i ze_t ) &«TYPE *)O)->MEMBER)
Ein Quelltext-Beispiel aus der Datei fs/inode. c lautet:
list_for_each(act_head , &inode_in_use) {inode = list_entry (act_head , struct inode, i_list);if (inode->i_sb == sb && IS_QUOTAINIT(inode))
remove_inode_dquot_ref(inode, type, tofree_head);}
Was passiert nun mit diesem Quelltext. Schauen wir uns an, was der MakroCompiler, d.h. die erste Phase des C-Compilers , daraus macht . Das Makrolist_for-eachO wird durch eine for- Schleife ersetzt. act-head ist dabeider jeweils betrachtete akt uelle Listenkopf, &inode_in_use derjenige Listenkopf, bei der der Durchlauf startet . Wird er wieder erreicht , so wird diefor-Schleife beendet . Die Ersetz ung, die der Compiler auf Grun d des Makr oslist_for-eachO vornimmt, sieht folgendermaBen aus:
2Definiert in include/linux/kernel .h.3Ebenda.4off s et of ist in include/linux/stddef .h definiert .
256 B Lineare Listen in Linux
for (act_inode_in_use = (inode_in_use)->next,prefetch(act_inode_in_use->next) ;act_inode_in_use != (inode_in_use); \act_inode_in_use = act_inode_in_use->next,prefetch(act_inode_in_use->next)) {
inode = list_entry (act_inode_in_use, struct inode, i_list);if (inode->i_sb == sb && IS_QUOTAINIT(inode))
remove_inode_dquot_ref(inode, type , tofree_inode_in_use);}
Die zweite Ersetzung erfolgt durch das Makro list_entryO , wobei diese Ersetzung selbst noch weitere Ersetzungen durchlauft. Zuniichst wirdlist_entryO durch contarnercr 0 ersetzt , sodann erfolgt die Ersetzungvon member.rtype 0 und offsetof O . Der endlich tibersetzte Text sieht dannso aus:
for (act_inode_in_use = (inode_in_use)->next,prefetch(act_inode_in_use->next);act_inode_in_use != (inode_in_use);act_inode_in_use = act_inode_in_use->next,prefetch(act_inode_in_use->next)) {
inode = ({const __typeof __( «inode *)O)->i_list ) *__mptr
(a ct_inode_in_use);(inode *)( (char *) __mptr -
«size_t) &«inode *)O)->i_list ) ) ;})i f (inode->i_sb == sb && IS_QUOTAINIT(inode))
remove_inode_dquot_ref(inode , type, tofree_ inode_in_use) ;}
_...lIlptr zeigt auf den Listenkopf Llist in der Strukt ur inode , dieser Listenkopf ist die durch offsetof 0 berechnete Anzahl von Bytes vom Beginn derinode-Struktur ent fernt.
c
Glossar
Access-Bit ist ein Bit , das bei Paging on demand in der Pagetable eingesetztwird , urn fur eine Page anzuzeigen, ob in letzter Zeit ein Zugriff auf dieseerfolgte . Es wird bei Schreib- und Leseoperationen auf dieser Page von derCPU gesetzt. Das Access-Bit wird in regelmafiigen Abstanden uberpruftund anschlieBend zuruckgeset zt. 1st bei der Uberpriifung das Bit gesetzt ,wird diese Page bei Linux an den Anfang der "act ive"-Liste einget ragen.
ACID (Atomicity, Consiste ncy, Isolation, Dur abili ty) ist die Abkutzung furdie Anford erungen, die an eine Trans aktion gest ellt werd en.
ACL (Access Cont rol List : Zugriffskontroll-Liste) ist eine Verallgemeinerungder Zugriffsrechte, die die Rechte fur jeden einzelnen Benutzer regelt .
Adressraum ist eine zusammenhangende Menge logischer Adressen, die zueinem Prozess gehoren.
Allocation bezeichnet das Bereitstellen von Platz im Speicher oder auf derPlat te.
Altern bezeichnet eine Met hode, urn mit St arvation (Verhungern) umzugehen . Schedu ling, das auf Pri ori taten basiert , neigt dazu , gering priorisierteProzesse verhungern zu lassen . Altern erhoht die Priorit at nicht bearbeiteter Prozesse nach Ablauf einer vorgegebenen Zeitspanne, so dass nachmehreren Perioden die Pri orit at eines solchen Prozesses so hoch ist , dassauch er beim Scheduling berucksichtigt wird .
Assembler iiberset zt Programmtext , der aus logischen Adressen und lesbarenMaschinenanweisungen best eht , in ausfuhrbaren Code.
Atomar heiBt eine Folge von Maschinen-Instruktionen , die nicht durch einenInterrupt unterbrochen werden kann .
Basisregister errnoglicht es, eine logische auf eine physische Adresse abzubilden: im Basisregist er (Register) der CPU wird die physische Anfangsadresse eines Bereichs gespeichert . Bei jedem Speicherzugriff auf diesen Bereichwird zur logischen Adresse der Inh alt des Basisregisters hinzuaddiert .
Batch (Stapelverarbeit ung) wird eine Verarb eitung von Jobs (P rozessen) genannt , die ohne Benutzer-In teraktion erfolgt . Wichtiger als die Reaktio nszeit ist bei der Batch-Verarbeit ung in der Regel der Durchsatz, weshalb
258 C Glossar
bei Batch-orientierten Betriebssystemen die Algorithmen des Schedulersanders gewahlt werden mussen als z.B. bei Timesharing-orientierten Betriebssystemen. Doch auch bei Timesharing-orientierten Betriebssystemengibt es haufig die Moglichkeit , Prozesse als Bat ch im Hintergrund zu starten.
Benutzer ist ein Anwender (Person oder Programm, z.B. Datenbankmanagementsystem) , der dem System unter einer eindeutigen Kennung (userid)bekannt ist . Ein Benutzer besitzt Rechte , die festlegen, auf welche Dateienund welche Objekte er zugreifen darf.
Best Fit wird eine Strategie genannt , die die kleinste Speicherliicke sucht , diefur die Speicheranforderung ausreicht. Vgl. auch First Fit und Worst Fit.
BIOS (Basic Input/Output System) ist das in einem ROM gespeicherte elementare Bootprogramm zum Starten eines Rechners. Das BIOS ist inseinen Fahigkeiten sehr beschrankt, es kann nicht viel mehr, als den erst en Block einer Platte einzulesen und das darin enthaltene Programm zust arten.
BKL (Big Kernel Lock) ist eine veraltete Sperrtechnik unter Linux, die inzwischen weitgehend aus dem Kernel verschwunden ist . Es handelt sichurn einen globalen Spinlock , der dur ch feiner granulierte Sperren abgelostwird.
Block bezeichnet die Einheit , in der Daten auf Platten usw. abgelegt werden.Eine Partition ist dab ei in Blocke gleicher GroBe aufget eilt und enthaltein eigenes Filesystem. Ein Block kann direkt gelesen bzw. geschriebenwerden.
Blockgruppe wird zur Fein-Einteilung einer Platte bzw. Partition benutzt, urnDatei-Informationen, Directories und zugehorige Dateien moglichst dichtbeieinander zu speichern und die Bewegung des Plattenarms beim sequentiellen Zugriff auf eine in einer Blockgruppe gespeicherte Datei moglichstklein zu halten.
Bootblock ist der erste Block auf einer Platte oder Partition, der unter anderem Code zum Starten eines Betriebssystems enthalten kann .
Bootmanager dient zum Starten eines Betriebssystems. Dazu wird der jeweilige Kernel von einer vorgegehenen Plattenposition geladen und anschlieBend die Kontrolle an den geladenen Kernel iibergeben. Bootmanager dienen in der Regel dazu , das Booten unterschiedlicher Betriebssysteme zu ermoglichen. Dabei kann haufig beim Start des Bootmanagers dasgewiinschte Betriebssystem in einem Menii ausgewahlt werden; zusatzli chlassen sich Optionen an den zu startenden Kernel iibergeben . TypischeBootmanager sind LILO oder GRUB .
Bootstrapping bezeichnet das schrittweise Laden immer leistungsfahigererProgramme, bis zuletzt das Betriebssystem selbst geladen und initialisiertwerden kann .
Bottom Half ist der zweite Teil eines teilbaren Interrupts-Handlers nach derTop Half. Wahrend im ersten Teil, der Top Half, die unverzuglich ablaufen muss, keine Interrupts zugelassen sind , kann in der Bottom Half nor-
C Glossar 259
mal auf Interrupts reagiert werden . Ziel der Aufteilung ist es, einerseitsmoglichst schnell auf Interrupts zu reagieren, urn die Hardwar e fur dienachst e Aufgab e frei zu machen , andererseits dem Interrupt-Handler zuermoglichen, auch anspruchsvolle, Ressourcen-intensive Aufgaben durchzufiihren.
Buddy System Algorithmus zielt dar auf ab, effizient zusammenhangende freieSpeicherblocke bereitstellen zu konnen . Dazu werden freigegebene Speicherblocke daraufhin untersucht , ob ihr "Buddy" - ihr Nachbar - ebenfallsfrei ist . In diesem Falle werden die freien Blocke zu einer groferen Einheit zusammengefasst . Das Verfah ren ist so konzipiert , dass die Anzahlzusammengefasste r Blocke jeweils eine 2er Po tenz bildet . Diese Zusammenfassung kann tiber mehrere Stufen erfolgen.
Bus bezeichnet die physische Verbindung unterschiedlicher Bauteile, z.B.CPU und Speicher . Damit die Bau teile miteinander kommunizieren konnen , muss der jeweilige Bus vorgegebene Spezifikationen erfilllen.
Busy Wait ist eine Methode, aktiv auf die Verfugbarkeit einer Ressource zuwarten . Mit "akt iv" ist dab ei gemeint , dass das Programm in einer enggefUhrten Endlosschleife die Ressource abfragt , ob sie bereit ist . Die Schleife wird in dem Augenblick verlassen , in dem die Verfugb arkeit erkanntwird. Dieses Verfahren kann bei Betriebssystemen sinnvoll eingesetzt werden , die nur einen Task unterstiitzten . Bei Multitasking-Betriebssystemenist dieser Ansatz aber problematisch, weil die CPU "Blindarbeit" leist et ,die keinem Benutzer-Prozess zu Gute kommt.
Cache beze ichnet eine Hardware- und Software-unters tiitzte Organisation,urn schnell auf Information zuzugreifen, die andernfalls nur langsam zubeschaffen ist . Dab ei wird die gewiinschte Information nach dem erstennotwendigen Zugriff in einem schnelleren Speicher fur eine gewisse Zeit spanne aufbewahrt . Findet in dieser Zeit spanne erne ut ein Zugriff aufdiese Information statt , so geniigt der Zugriff auf den schnellen Speicher ,es muss nicht mehr auf den langsamen Speicher zugegriffen werden. Beispiele sind der auf der CPU integrierte Cache, der viele Zugriffe der CPUauf den lan gsameren Hauptspeicher vermeidet , oder die I/O-Puffer , die esermoglichen, lan gsame Pl at tenzugriffe zu vermeiden, wenn die gewunschteInformation bereits im Hauptspeicher ist.
Client-Server-Architektur siehe CS.Compiler dient dazu , den lesbaren Quellt ext eines Programms einer hoh eren
Programmiersprache in ausfiihrbare Maschineninstruktionen umzusetzen.Copy-on-Writ e ist eine Methode, das Erz eugen von Pages fiir einen P rozess
erst dann durchzufuhren , wenn es wirkli ch notig ist : wird ein Prozess durchforkO erze ugt, so konnen der Eltern- und der Kind-Prozess solange diegleichen Pages benutzen , bis einer der beiden Prozesse durch SchreibenAnderungen daran vornimmt . In diesem Fall muss fiir den Kind-Prozessdie Page zunachst neu angelegt und kopiert werden . Dieses Vorgehen erspart das unnotige Kopieren vieler Pages.
260 C Glossar
Contiguous ist eine Dateiorganisation, bei der die Blocke einer Datei zusammenhangend mit aufsteigenden Blocknummern ohne Liicken bereitgestelltwerden.
CPU (Central Processing Unit) ist derjenige Teil des Rechners , in demdie Maschinen-Instruktionen ausgefiihrt werden. Neben dem Rechenwerk(ALU) und einer Adressiereinheit sind Register und in der Regel ein interner Cache integriert.
Critical Section (kritischer Abschnitt) bezeichnet bei kooperierenden Prozessen einen atomar zu bearbeitenden Code-Abschnitt, in dem sich zu einemgegebenen Zeitpunkt nur einer der Prozesse aufhalten darf ("gegenseitigerAusschluss"). Diese Code-Abschnitte sehen in der Regel bei den Prozessenunterschiedlich aus . Sperren (Lock) werden eingesetzt, urn das Betretendes kritischen Abschnitts zu regeln. Indem garantiert wird, dass sich jeweils nur ein Prozess in seinem kritischen Abschnitt befindet, werden RaceConditions verhindert. Damit solI vermieden werden, dass zwei Prozessegleichzeitig im gleichen Bereich (z.B. Shared Memory oder Shared Files)lesend oder schreibend zugreifen.
CS (Client-Server-Architektur) ist eine unsymmetrische Architektur, in derein Prozess - haufig auf einem entfernten Rechner - seine Dienste alsServer anbietet, die andere Rechner, die sogenannten Clients, anfordern.
Current Directory bezeichnet das momentane Arbeitsverzeichnis eines Benutzers. In diesem werden alle erzeugten Dateien gespeichert, sofern kein Pfadangegeben wird, und von diesem werden aIle relativen Suchen (Pfad) nachDateien gestartet.
Current File Position bezeichnet die Position des Lese-/Schreibzeigers einergeoffneten Datei. Von dieser Stelle an werden die nachsten Bytes tibertragen.
Daemon ist ein im Hintergrund laufender Prozess, der Dienste anbietet. Esgibt keine direkte Benutzer-Interaktion, vielmehr wartet ein Daemon darauf, von einem anderen Programm aktiviert zu werden .
Datenkompression hilft, das Volumen gespeicherter oder iibertragener Datenzu reduzieren. Vertreter verlustfreier Kompression (das Original lasst sicheindeutig ohne Verlust wieder herstellen) sind zip, rar, arj usw. Nebenden verlustfreien Verfahren konnen in bestimmten Fallen auch verlustbehaftete Verfahren eingesetzt werden, so beispielsweise JPEG bei Bildern.
Dateisystem siehe Filesystem.Directory strukturiert ein Filesystem, indem dadurch logische Bereiche fur
die Dateien geschaffen werden . In der Regel werden darin Name, Rechte,Speicherort . .. der darin enthaltenen Dateien vermerkt.
Direkter Zugriff (direct I/O) wird ein Zugriff auf einen Block genannt, beidem auf Grund der Position in der logischen Datei die physische Blocknummer ermittelt wird, ohne die davor (und dahinter) liegenden Bereicheder Datei zu beachten.
DMA (Direct Memory Access) dient dazu, Daten zwischen Speicherbereichenoder Speicher und Peripherie ohne CPU-Beteiligung zu kopieren. Damit
C Glossar 261
wird die CPU nur noch zum Initialisieren des entsprechenden Bausteines benotigt und somit entlaste t ; sie kann sich damit anderen Aufgabenwidmen.
DOS hief ein sehr populares Single User Single Tasking "Bet riebssystem" furdie PC-Architektur .
Durchsatz bezeichnet die pro Zeiteinheit erledigte Menge an Prozessen . DiesesMaB ist besonders fur Batch-orienti erte Systeme wichtig.
Echtzeit Unt er diesem Schlagwort werden Anforderungen an ein Betriebssystem verstand en, auf ein Ereignis innerhalb einer vorgegebenen (sehrkurzen) Zeitspanne garantiert zu reagieren.
Environment (Umgebung) bezeichnet in Unix-Bet riebssystemen eine Mengevon Null-terminierten Zeichenketten, die dazu dienen , Umgebungsvariabien und deren Werte einem Prozess zu iibergeben. Das Environment wirdbeim Duplizieren eines Prozesses mittels forkO-Aufruf und einer nachfolgenden Uberlagerung durch ein neues auszufiihrendes Programm mit Hilfeder exec O-Familie vererb t . Das Environment kann bei der Uberlagerungmit dem speziellen Aufru f execveO neu gesetz t werden.
EXT2 (extended filesystem, version 2) ist ein unter Linux gangiges Filesystern.
Externe Fragmentierung ist eine Fragmentierung, bei der im Gegensatz zurinternen Fragmentierung die Liicken auf der Platte bzw. im Speicher keinerDat ei bzw. keinem Prozess zugeordnet werden konnen.
FCFS siehe FIFO.Feedback wird bei manchen Schedulern eingesetzt , urn auf ein sich verandern
des Profile der Prozesse angemessen zu reagieren. Wechselt z.B. ein Prozess nach interaktiver Eingabe in eine Phase intensiver Berechnung ohneweitere Benutzereingaben, so kann ein Scheduler ohne Feedback diesesandere Verhalt en nicht beriicksicht igen.
Fehlercod e siehe Retu rncode.FIFO (First In First Out , auch als FCFS - First Come First Serve bezeich
net) ist eine Speicher-interne Organisation, bei der "Nachrichten" (oderauch Arbeitsauft rage) eingeste llt und in der Reihenfolge des Ankommenswieder ausgelesen werden konnen .
Filedeskriptor oder auch File-Handle ist eine Int eger , die das Betriebssystembeim Offnen einer Datei als eindeut igen Wert vergibt . Sie identifiziertinnerhalb eines Prozesses eine geoffnete Dat ei. AIle weiteren Zugriffe aufdie geoffnete Datei erfolgen unter Nennung dieses Deskriptors.
Filesystem dient zur Bearbeitung und Speicherung von Dateien auf Pl atte(oder ahnlichen Datentragern). Es muss die Benennung der Dateien , denZugriff auf die Dateien sowie die Wahrung der Zugriffsrechte unterstiitzen.
Firewire ist ein serieller Bus zum schnellen Dat enaustausch zwischen Peripheriegerat en. Die Cerate konnen dabei direkt mit einander kommunizieren.
First Fit eine Strat egie, die nach dem ersten Vorkommen von geniigend freiemzusammenhangenden Speicher sucht (vgl. Best Fit und Worst Fit) .
262 C Glossar
Fragmentierung entsteht, wenn im Speicher oder auf der Platte wahrendder Arbeit Blocke belegt bzw. freigegeben werden . Die freien Bereicheverandem sich standig; je nach Organisation kann es dazu kommen, dasszwar viel freier Platz vorhanden ist, aber die Lucken nicht mehr zulassen, grofere zusammenhangende Bereiche zu belegen. Durch Defragmentierung wird dann versucht, zumindest einen Teil der belegten Bereiche sozu verschieben, dass wieder hinreichend groBe Lucken entstehen. MancheFilesysteme haben Strategien zur Vermeidung von Fragmentierung.
Frame teilt bei Paging den physischen Speicher in Blocke gleicher GroBe. DieBlockgrofie ist so auf die Adressierung ausgerichtet , dass der erste Teil derAdresse den Frame adressiert , der zweite Teil eindeutig alle Adressen einesFrames beschreibt. Die Frame-Grofe ist auf Grund heutiger Architektureneine 2er Potenz, der Anfang jedes Frames liegt ebenfalls auf einer 2erPotenz. Page- und Frame-Orofe stimmen iiberein.
Freelist ist eine Organisation zur Verwaltung freier Speicherbereiche.glibc ist eine C-Bibliothek, die dazu dient, Standard-C-Funktionen in ent
sprechende System Calls umzusetzen.Granularitat bezeichnet allgemein die Feinheit, in der eine Ressource wie zum
Beispiel der Speicher unterteilt werden kann . Hohe Cranularitat bedeutet,dass sich die Ressource besonders fein einteilen lasst .
Grenzregister ist eine Methode des Speicherschutzes: wahrend das Basisregister auf den Beginn des zum Prozess gehorigen Speicherbereiches zeigt,enthalt das Grenzregister die obere Grenze fur die logische Adresse. Uberschreitet die logische Adresse diese Grenze, so wird ein Illegal Address Interrupt ausgelost. Wahrend das Basisregister auch bei heutigen RechnerArchitekturen noch recht deutlich zu sehen ist, ist die Funktion des Grenzregisters iiblicherweise in das Paging verlagert worden .
GRUB ist ein Bootmanager.Handler siehe Interrupt Handler.Hashing ist eine Methode, einen groBen, aber nur sparlich benutzten Adress
raum durch einen Algorithmus auf einen kleinen Adressraum abzubilden,der jedoch so groB sein muss, dass alle benutzten Adressen des groBenAdressraums darin eindeutig abgebildet werden konnen. Vorteil des Hashings bei guter Hashfunktion ist der sehr schnelle Zugriff, problematischjedoch die Ermittlung einer guten Hashfunktion.
Header werden bei Datenpaketen verwendet, die im Netz verschickt werdensollen. Durch die Header wird die Schichtenarchitektur der Netzsoftwareunterstiitzt: jede Ebene kapselt das an sie iibergebene Paket mit einemHeader, d.h. fugt ein Byte-Array vor das Datenpaket , das die notwendigen Informationen zur Verarbeitung durch diese Schicht enthalt. BeimHochreichen eines Datenpakets in eine iibergeordnete Schicht wird dieserHeader naturlich entfernt. In manchen Fallen werden zusatzlich Trailerbenotigt , Byte-Arrays, die hinten an das Datenpaket angehangt werden .
C Glossar 263
Heap ist eine Speicherstruktur, die von Prozessen benutzt wird , urn lokaleVariablen und temporiire Datenstrukturen aufzubewahren und beliebigwieder zu loschen .
HOME heiBt eine Environment-Variable in Unix-Syste men, die den Pfad zumWurzelverzeichnis des Benutzers enthalt .
Hotplug bezeichnet die Moglichkeit , bei laufendem Betrieb Cerat e hinzuzufiigen bzw. zu ent fernen. Die Ereignisse werden iiberwacht , die Cerat ewerden automatisch einschlieBlich benotigter Treiber eingebunden.
Indexed ist eine Dateiorganisat ion, bei der die Dat eiblocke tiber zusatzlicheIndexblocke verwalt et werden. Die einzelnen Blocks konnen bei der Allocation frei gewahlt werden.
Indirektion tritt auf, wenn der Zugriff auf einen Block tiber ein- oder mehrstufige Indexe erfolgt .
init-Prozess ist ein Prozess, der zu Beginn vom Kernel aufgerufen wird , unddazu dient, in einem Unix-Betriebssystem die gesamte Prozess-Hierarchiezu starten: jeder Prozess ist direkt oder tiber mehrere Zwischenschrittedurch forkO aus dem init-Prozess hervorgegangen.
Initial Ramdisk oder RAM-Disk heiBt eine Datei, die wahr end des Bootvorganges in den Speicher geladen wird . Die Organisationform der Datei entspricht dem Abbild einer Diskette, die gelesen werden kann , bevor weitergehende Filetreiber geladen sind. Die RAM-Disk wird vom Bootmanagerlesend zur VerfUgung geste llt , bevor der Kernel gestartet wird. Sie wirddazu benutzt , urn Treiber zu laden, die friih im Bootprozess zur Verfugungstehen miissen, wahrend noch keine komplexen Filesysteme gelesen werdenkonnen . Als typische Module fur eine Initial Ramdisk sind SCSI-Treiberund das Reiser-Filesystem zu nennen.
initrd siehe Initial Ramdisk.inline ist eine Technik in der C-Programmierung, urn einen Funktionsauf
ruf zu beschleunigen. Es handelt sich dabei urn eine Anweisung an denPracompiler. Anstatt die Funktion durch Call aufzurufen, wird der Quelltext der Funktion vor dem Ubersetzen substituiert .
Inod e ist eine Dat enstruktur, die die wesentli chen Informationen tiber eineDatei ent halt , wie Rechte, GroBe, Zeitpunkt des Erzeugens, Eigentiimer,usw. - mit Ausnahme des Dat einamens.
Int erne Fragmentierung sind Lucken auf der Platte oder im Speicher , die dadurch entstehen, dass der einer Dat ei bzw. einem Prozess zugeordnetePlatz nicht vollstandi g ausgefullt wird .
Interrupt ist eine synchrone oder asynchrone Unterbrechung der gerade bearbeiteten Instruktions-Folge. Eine synchrone Unterbrechung, auch Signalgenannt , liegt vor , wenn der Prozessor Ausnahmen im Rahmen seinerVerarbeitung erkennt , z.B. Division durch Null . Wahrend bei KernelRoutinen diese Situationen intern verarbeitet und in Form eines FehlerCodes zuriickgegeben werden, dienen bei Bearbeitung von Prozessen imUser Mode Signale dazu , Proz ess-spezifische Handl er fiir diese Ausnahm enaufzurufen. Asynchrone Unterbrechungen kommen durch exte rne Ereig-
264 C Glossar
nisse zustande, die nicht mit der CPU- Verarbeitung zusammenhangen:die Hardware erkennt das Eintreten eines solchen Ereignisses und erzeugtden Interrupt, der Prozessor wechselt dabei in den Kernel Mode.
Int errupt Handler ist eine Prozedur, die auf Grund einer Unterbrechung sofort ausgefiihrt werden soll. Dem Interrupt liegt das Eintreten eines Ereignisses zu Grunde - z.B. Ankunft eines Datenpaketes aus dem Netz- , auf das der Handler entsprechend reagieren solI. Handler werden inder Regel darauf achte n mussen, wahrend ihrer Verarb eitung Interruptsweitgehend zu unterdriicken. Das bringt Probleme mit sich, wenn die zubearb eitende Aufgabe sehr Ressourcen-intensiv ist. Deshalb wird haufigversucht , den Handler in eine Top Half, die sehr schnell ausgefiihrt werdenmuss und dabei Interrupts weitgehend unterdruckt , und in eine BottomHalf zu unterteilen, die spater ausgefuhrt werden kann und bzgl. der Interrup ts wesentlich unproblematischer ist . Damit Handler aufgerufen werdenkonnen, miissen sie dem System bekannt gemacht werden.
Interrupt-Kontext ist ein Zustand , in den der Kernel durch das Eintreffeneines Interrupts kommt . Befindet sich der Kernel im Interrupt-Kontext ,diirfen keine Funktionen aufgerufen werden, die blockieren. Die "normale"Verarb eitung hingegen erfolgt im Prozess-Kontext .
Illegal Address Interrupt wird erzeugt, wenn ein Prozess versucht , auf eineAdresse zuzugreifen, die nicht zu seinem Adressraum gehort.
IP (Internet Protocol) gehort zur Internet-Protokoll Familie TCP l IP und entspricht dem Data link layer des ISOIOSI-Modells. IP ist das Protokoll derVermittlungsschicht , TCP und UDP sind die Protokolle der Transp ortschicht .
IP C (Inter Process Communication ) ist eine Implementierung von Kommunikationsmechanismen zwischen Prozessen eines Rechners, auf dem einUnix-Betriebssystem lauft . Es werden Message Queues, Semaphoren undShared Memory bereitgestellt . Zur Kommunikation gehoren zwar auchPip es, Named Pipes und Signale, jedoch gehoren diese auf Grund ihrerImplementation nicht zu IP C.
IRQ siehe Int errupt Request .ISA-Bridge verbindet den PCI-Bus mit dem ISA-Bus.ISA-Bus ist ein veralteter Bus, der in der PC-Architektur verwendet wurde
und auch heute noch zur Einbindung einiger Festplatten und ControllerKarten benutzt wird.
ISAM (Indexed Sequential Access Method) bezeichnet eine Zugriffsmethodefiir Dat eien, die sowohl sequent iellen als auch index-basiert en Zugriff unterst iitzt .
Kernel bezeichnet denjenigen Teil des Betriebssystems, der als eine Einheitkompiliert wird. Er bietet grundlegende Dienste an. Je grofier der Kernel,desto hoher in der Regel die Komplexitat der Software und die Gefahrfehlerhafter Programmierung. Dies spricht fiir moglichst schlanke Kernel,bei denen viel Arbeit in ladbare Module verlagert wird.
C Glossar 265
Kernel Mode ist ein Zustand der CPU. Die CP U wechselt aus dem User Mode in den Kern el Mode, wenn ein System Call ausgefiihrt wird oder einInterrupt auftritt . Im Kernel Mode sind samtliche Instruktionen zulassig ,das Betriebssystem hat damit vollstandige Kontrolle tiber den Rechner.
Kryptographi e bezeichnet eine Verschltisselung zum Schutz gespeicherter odertibertragener Dat en gegen Ausspahen. Es gibt eine Vielzahl von Verfahren , dabei wird zwischen symmetrischen und asymmetrischen Verfahrenunterschieden . Zu den symmetrischen gehoren z.B. DES, Twofish; asymmetrische Verfahren werden auch als Public Key Verfahren bezeichnet .
Leichtgewichtiger Prozess bezeichnet in der Regel einen Thread , der alle Ressourcen mit seinem Proz ess te ilt und nur eigenstandig dem Schedulingunterworfen ist , einen eigenen Stack und einen Bereich besitzt , in demdie Register der CPU gespeichert werden konnen, wenn der Thread dieCPU nicht besitzt. In Linux wird damit ein Proz ess verst anden, der mitgeeigneten Flags mit Hilfe des clone 0 -System Calls erzeugt wird. DieFlags beschreiben, welche Ressourcen die beiden Prozesse gemeinsam teilen. Sind die Flags CLONE_FS, CLONEYILES, CLONE-YM und CLONE_THREADgesetzt , so entspricht dies in der Auswirkung einem Thread.
Library ist eine Sammlung von tibersetzten Prozeduren und Funktionen . DerCode , der z.B. vom C-Compiler gcc erzeugt wird , ist in der Regel erstdann lauffahig, wenn er mit entsprechenden Bibliotheken gelinkt wird ,da erst darin die Umsetzung von Stand ard-Aufrufen wie z.B. openO inent sprechende System Calls vorgenommen wird .
LIFO (Last In , First Out) ist eine Speicher-interne Organisation, bei der Information eingestellt und in umgekehrter Reihenfolge wieder ausgelesenwerden kann (Beispiel: Stack) .
LILO ist ein Bootmanager.Link (Verkntipfung) stellt eine Verb indung zwischen Filesyst em-Objekten
her. Unix unterscheidet zwischen "symbolischen" und "harten" Links . Einsymbolischer Link spiegelt das Obj ekt scheinbar an einer bestimmten Stelle des Dat eibaum s. Link und das Ziel des Links sind nicht fest verbunden:wird das Ziel geloscht, dann verbleibt der Link im System, zeigt aber insLeere. Ein harter Link hingegen greift auf eine bereits vorhandene Inodezu. Harte Links konnen nur innerhalb cines Filesystems eingesetzt werden.
Liste - hier verkettete Liste - ist eine Dat enstruktur, die im Code von Betri ebssyst emen sehr intensiv genutzt wird . Bei einer einfach verkettetenListe ent halt jeder Listeneint rag einen Zeiger auf den nachfolgenden Eintrag. Der Eintrag des let zten Elements zeigt auf Null. Bei einer doppeltverketteten Liste enthalt jeder Eint rag zwei Zeiger : zum Vorganger undzum Nachfolger. Listen besitzen einen Listenkopf, der einen Zeiger auf daserste Listenelement bzw. auf das "erste" und das "letzte" List enelementbei einer doppelt verket teten List e enthalt .
Listenkopf siehe Liste.Loadable Module bezeichnet ein Modul , das der Kernel bei Bedarf nachladen
kann . Als Beispiel kann das Modul fat .ko dienen. Der Kernel ladt dieses
266 C Glossar
Modul , wenn eine FAT-partit.ionierte Partition, z.B. eine unter Windowserst elIte Diskette, in den Dateibaum eingefiigt werden solI.
Lock bezeichnet eine Sperre, die verhindert , dass auf ein bestimmtes Obj ektzugegriffen werden kann. Sperren im Linux-Kernel werden tiber BKL (veralte t ), Semaphoren und Spinlocks erzeugt.
Logische Adresse ist diejenige Adresse, unter der eine Datenstruktur oder eineFunktion dem Programm bekannt ist . Urn zugreifen zu konnen, muss dielogische Adresse in die physische Adresse umgewandelt werden.
Longt erm Scheduler ist ein Scheduler , der insbesondere bei Batch-Syst emenvon Interesse ist . Aus einer Warteliste von Auftragen wahlt er denjenigenaus, der als nachstes als Prozess in das System iibemommen werden solI.
LRU (Least Recently Used) bezeichnet einen Ansatz beim Paging on Demand , urn die oft benutzten Pages moglichst im Speicher zu behalt en .Da ein Blick in die Zukunft nicht moglich ist , richtet man den Blick indie Vergangenheit : eine Page, die lange nicht benutzt worden ist ("leastrecently used") , wird wohl auch in naher Zukunft nicht benotigt .
Magic Signature, magic number oder Magische Zahl bezeichnet ein oder mehrere Byt es, die an bestimmter Stelle eines Obj ekts gespeichert werden. Ausdem dort gespeicherten Inhalt kann das Betri ebssystem gewisse Inform ationen ableiten: steht dort etwas anderes als erwartet , so hand elt es sichgar antiert nicht urn das gewtinschte Obj ekt. So benutzt beispielsweise dasKommando file unter anderem diesen Mechanismus , urn den speziellen"Typ" einer Datei zu bestimmen.
Makro (Macro) ist Code fur den Pracompiler , also nicht in der Quellspr acheselbst geschrieben. Er muss erst noch durch den Pracompiler in entsprechenden Quelltext umgesetzt werden. Dies erfolgt auf Grund der MacroDefinition durch Auswertung der verwendeten Argum ent e.
Maschineninstruktion ist eine ein oder mehrere Byt e umfassende Instruktion,die die CPU direkt verwerten kann . Assembler- oder Quell-Code hingegen ist lesbar , kann aber yom Proz essor nicht direkt verarbeitet werden,sondern muss erst durch einen Compiler in eine geeignete Folge von Maschineninstruktionen umgewandelt werden.
MBR (Master Boot Record) ist der erste Sektor einer Plat te, der die Partitionstabelle und ein kleines Programm enthalt, das den ersten Sektor einerPartition laden und das dortige Programm starten kann .
Mediumterm Scheduler beschiiftigt sich damit , unter den ausgelagerten Prozessen denjenigen auszuwahlen, der wieder als rechenbereiter Prozess indie "Bereit" -Schlange eingegliedert werden soIl.
Message Queue gehort zu IPC. Diese Organisation ermoglicht es (mehreren)nicht verwandten Prozessen , Nachrichten auszutauschen. Eine MessageQueue kann FIFO benutzt werden, es gibt jedoch auch die Moglichkeit ,"PriorWiten" festzulegen und damit das FIFO zu umgehen .
MMU (Memory Management Unit) ist diejenige Einheit eines Rechners , diedie logische Adresse, die im Programm verwendet wird und mit der dieCPU arbeitet, in die physische Adresse des realen Speichers umwandelt .
C Glossar 267
Die MMU kann ein eigenstandiger Baust ein oder in der CPU integriertsein.
Modul siehe loadable Module.mount bezeichnet in Unix-Syste men das Einfiigen einer Partition in den Ver
zeichnisbaum.Multiprozessor Syst eme haben mehr als eine CPU . Sie konnen eng oder lose
gekoppelt sein: eng gekoppelt bedeutet gemeinsamen Zugriff der CPUsauf einen Hauptspeicher , lose gekoppelt : jeder CPU ist ein Speicher zugeordnet , die CPUs konnen nicht direkt auf den Speicher einer anderenCPU zugreifen, die Kopplung erfolgt tiber einen Kommunikationsbus. Linux unterstii t zt enge Kopplung. Dabei kann der Zugriff einer CPU auf denSpeicher mit unterschiedlicher Effizienz erfolgen, je nachdem, wie "nahe"der Speicher der jeweiligen CPU zugeordnet ist (vgl. NUMA) .
Multi tasking bedeutct , dass das Betriebssystem die "parallele" - "gleichzeit ige" - Bearb eitung mehrerer Tasks unterstii tzt. Im eigent lichen Sinne kannes Parallelverarb eitung nur bei Mehrprozessor-Systemen geben; parallelbedeutet , dass die Tasks durch die Verwendung eines Schedulers scheinbar gleichzeit ig bearbeitet werden . Damit einher geht die Notwendigkeit ,Speicherschutz zu implementieren, damit ein Prozess nicht auf den Speicherplatz eines anderen Prozesses zugreifen kann .
Multiuser heiBt , das Betriebssystem unterstiitzt mehrere Benutzer. Damitmuss zugleich ein Rechte-System bereitgestellt werden, damit Dat eien gegen unerlaubten Zugriff geschiitzt und Programme nur von autorisiertenBenutzern gestartet werden konnen.
Named P ipe ist eine FIFO-Organisation im Speicher , die fur die Prozesse wieeine Dat ei aussehen, jedoch werden keine Daten auf der Plat te gespeichert ; es wird jedoch die Inod e fur die Pipe auf der Platte abgelegt. ImGegensat z zu Pipes werden sie durch mkfifoO bzw. mknod -p angelegt,anschlieBend konnen Prozesse mit Hilfe des dabei vergebenen Namensdarauf zugreifen. Somit konnen auch Prozesse, die nicht mit tels forkOmiteinander verwand t sind, tiber diesen Mechanismus kommunizieren .
NFS (Network File System) ist ein von einem NFS-Server iiber das Netzbereitgestelltes Filesystem. Daneben unterst iitzt Linux noch CODA, NCPund 8MB.
NTFS (New Technology File System) ist ein in der Microsoft-Welt verwendetes Filesystem.
NUMA (Non Uniform Memory Access) bezeichnet (Mehrprozessor-) Architekturen, bei denen die Geschwindigkeit des Speicherzugriffs von der CPUund der Adresse im Speicher abhangt .
00 ist eine in der Informatik gebrauchliche Notation , urn den Rechenaufwandeines Algorithmus abzuschatzen. 0(1) besagt insbesondere, dass der Rechena ufwand konst ant ist, unabhangig von der Anzahl der Eingaben.
Page Faul t ist ein Int errupt , der bei Paging on demand ausgelost wird , wennauf eine Page zugegriffen werden solI, die zwar zu dem Prozess gehort , aber
268 C Glossar
im Augenblick des Zugriffs nicht im Speicher vorhanden ist. Das Valid Bitzeigt an, ob die Page momentan im Speicher abgebildet ist.
Page unterstiitzt beim Paging eine Umsetzung des logischen Adressraums inden physischen Adressraum. Der logische Adressraum wird in Blocke gleicher GroBe (Pages) unterteilt, die GroBe stimmt mit der Frame-Grofeiiberein. Diese Blocke werden mit Hilfe der Pagetable auf Frames im Speicher abgebildet.
Page Cache ist ein Cache, in dem Pages vorgehalten werden.Pagetable wird bei Paging verwendet, urn die Umsetzung von logischer zu
physischer Adresse zu erreichen.Paging bezeichnet eine Speicherverwaltung, die externe Fragmentierung des
Speichers vermeidet. Der Speicher wird in Frames eingeteilt, der logischeAdressraum eines Prozesses in Pages . Die Pages werden unter Zuhilfenahme einer Pagetable auf die Frames abgebildet.
Paging on demand liegt vor, wenn Paging verwendet wird und Speicherplatzfiir die Pages dynamisch bei Zugriff angefordert wird .
Partition ist eine Unterteilung einer Platte. Der Benutzer nimmt Partitionenwie eigenstandige Platten wahr.
Patch ist eine Anderung einer oder mehrerer (QueIl-)Dateien des Betriebssystems - bzw. allgemein eines Software-Systems -, urn einen Fehler zubeheben.
PATH heiBt in Unix-Betriebssystemen eine Umgebungsvariable, die die Suche nach ausfiihrbaren Programmen errnoglicht. Wird ein Name so benutzt, dass er als ausfiihrbare Datei interpretiert wird, so wird nach einerausfiihrbaren Datei gleichen Namens in den in dieser Variablen aufgefiihrten Directories gesucht und zwar in der Reihenfolge der Nennungen. DieSuche wird beendet, wenn die Datei gefunden wird oder wenn das letzteder Directories erfolglos durchsucht wurde.
PCB (process control block) ist eine systemabhangige Datenstruktur, in deraIle wichtigen Informationen iiber einen Prozess gespeichert werden .
PCI-Bridge ist ein Baustein, der CPU, Speicher und PCI-Bus miteinanderverbindet. Heute werden statt dessen in der Regel zwei Bausteine eingesetzt: North- und South-Bridge.
PCI-Bus ist ein paralleler Bus , urn Rechner-intern Interface-Karten zu integrieren.
Physische Adresse bezeichnet diejenige Adresse im Speicher, an der eineF'unktion oder Datenstruktur gespeichert ist . Wahrend im Programm 10gische Adressen verwendet werden, setzt die MMU die logische Adressein die physische Adresse des realen Speichers urn.
PDA (Personal Digital Assistant) bezeichnet Cerate, die urspriinglich dafiirgedacht waren , Kalendereintrage, Adressen und Notizen zu verwalten. AufGrund der GroBe - iiblicherweise fehlt eine Platte - und damit einhergehender Speicherkapazitat muss das Betriebssystem minimal ausgelegtwerden .
C Glossar 269
pid (process identifier ) ist in der Regel ein Wert vom Typ Integer oder Long,der den jeweiligen Prozess identifiziert . Zu jedem Zeitpunkt kann es hochstens einen Prozess im System mit einer bestimmten pid geben.
Pipe ist eine FIFO-Organisat ion im Speicher. 1m Gegensatz zur Named Pipekonnen Pipes nur zwischen Prozessen verwendet werden, die durch forkO(ggf. iiber mehrere Stufen) mite inander verwand t sind. AuBerdem miissensie im Gegensatz zu Named Pipes nicht geoffnet werden, sondern stehenmit dem Anlegen zur Verfiigung.
Pfad beschreibt den Weg durch die Baum struktur eines Filesystems zur Datei.Der absolute Pfad beginnt beim Wurzelverzeichnis, der relative Pfad beimCurrent Directory.
Plat t e ist ein giingiges Block-orientiertes Speichermedium fiir Dateien , daswahlfreien Zugriff erlaubt .
Plattenpartition siehe Par ti tion.Pointer (Zeiger) werden in Programmi ersprachen wie C benutzt , urn auf den
Speicherplatz zu verweisen, an dem eine Dat enstruktur oder Funktiongespeichert ist . Auch bei Platten konn en Pointer eingeset zt werden , sieent halten dann die Nummer eines physischen Blocks der Platte.
PO ST (Power-On Self-Test ) wird bei der Initialisierung eines Rechners durchgefiihrt. Dabei werden die vorhandenen Cerate ermittelt und iiberpriiftund anschlieBend eine Zuordn ung der Interrupts und I/O-Ports vorgenommen.
Pracompiler ist eine insbesondere in der C-Programmierung verwendete Technik , iibersichtlichere Prog ramme zu erste llen. Der Pracompiler lauft vorder eigentlichen Ubersetz ungphase des C-Compilers. Er wertet die Makr oAnweisungen #include- , #def ine- und #if aus und ersetzt sie im Quelltext durch C-Cod e.
Preemptiv bezeichnet Scheduling-St rategien, die Ressourcen - insbesonderedie CPU - einem Prozess entziehen.
Prioritat wird bei manchen Scheduling-St rategien verwendet, urn Proz essemit hoherer Prioritat solchen mit geringerer Prioritat vorzuziehen.
Privilegierter Modus siehe Kernel Mode.Programm bezeichnet eine Datei, die ausfiihrbaren Code erhalt . Dieser ist in
der Regel mit Hilfe eines Compilers sowie eines Linkers aus einem SourceCode erzeugt worden.
Process Control Block siehe PCB.Program Counter ist ein CPU-Register , das auf die gerade ausgefiihrte Ma
schineninst rukt ion zeigt . Wiihrend der Ausfiihrung wird der Inhalt desRegisters in der Regel um die Anzahl der Bytes, die diese Instruktioneinnimmt , erhoht; der Program Counte r zeigt damit auf die folgende Maschineninst rukt ion. Hand elt es sich jedoch bei der bearb eiteten Maschineninstruktion um eine Verzweigung, einen Prozeduraufruf oder entsprechendes, so wird stattdessen diejenige Adresse im Program Counte r eingetragen, bei der die Vera rbeit ung fortgesetzt werden soll.
270 C Glossar
Prozess ist ein Programm in Ausfuhrung. Genauer: PCB, Speicher , der denausfuhrbaren Programm-Code und die Daten enthalt, und weitere zugeordnete Ressourcen bilden einen Prozess, der beim Scheduling berucksichtigt werden kann .
Prozess-Kontext ist der Zustand , in dem ein Prozess mit dem Kernel gekoppelt ist . In diesem Zustand diirfen Funktionen aufgerufen werden, dieblockieren, also z.B. sleep O.
PSE (Page Size Extension oder auch Large Pages) verandert die Umsetzungder logischen auf die physische Adresse: die Page- und Frame-Grofle wirdauf 4 MB (22 Bit bzgl. der Adressierung innerhalb der Page) angehoben.
Race Condi tions konnen auftreten , wenn zwei oder mehr Prozesse lesend undandernd auf dieselbe Datenstruktur zugreifen. Je nach Ausfuhrungsreihenfolge kann das Ergebnis unterschiedlich ausfallen. Da jedoch durchdas Scheduling keine Aussage tiber die Reihenfolge der Zugriffe gemachtwerden kann , muss in solchen Fallen ein korrekter Ablauf durch Lockserzwungen werden .
Readahead (Vorablesen) dient der Performance-Steigerung beim sequent iellen Lesen einer Dat ei: bei der Anforderung eines Blockes werden die folgenden Blocke ebenfalls mitgelesen, da die Annahme zugrunde liegt , dassdie Datei nur gering fragmentiert ist und somit die nachsten physischenBlocke auf dem Speichermedium auch den Inhalt der logisch folgendenBlocke enthalten.
Reakt ionszeit nennt man diejenige Zeit , die bei online-Bearbeit ung zwischender Termin al-Eingabe und der erste n Reaktion des Systems dar auf vergeht . Zu lange Reaktionszeiten hemmen den Arbeitsfluss.
Realtime siehe Echtzeit .Recht - bei Multiuser-Betriebssystemen miissen Rechte fiir die Benutz er ein
gefuhrt werden, damit der Zugriff auf Dat eien und ausfiihrbare Programme vom Betri ebssystem kontrolliert werden kann .
Red-Black-Tree (auch RB-Tree) bezeichnet eine besondere binare Baumstruktur mit gefarb ten Knoten. Diese Struktur erftillt folgende Eigenschaften:alle Knoten sind rot oder schwarz, wobei nie zwei rot e Knoten aufeinanderfolgen. Die Wurzel selbst ist schwarz , wie auch die Blatter. Die Anzahl derschwarzen Knoten von einem beliebigen Knot en im Baum zu einem Blattist auf jedem Pfad gleich. Damit lassen sich die gute n Eigenschaften desbinaren Suchens vereinen mit guten Algorithmen zur Balancierung. DieBalancierung hat die Komplexitat O(log n) .
Reentrant bezeichnet man ausfuhrbaren Code, der von mehreren Prozessen gleichzeit ig benutzt werden kann. Viele Programme sind in UnixBetriebssystemen so ausgelegt . Dadurch wird bei einem System, das mehrere Benutzer gleichzeit ig bedient , in der Regel weniger Speicher belegtals wenn die Programme nicht reentrant waren.
Register sind Speichereinheiten in der CPU . Die CPU kann ohne Verzug - imGegensatz zum integrierten Cache-Speicher oder zum Speicher - auf die
C Glossar 271
Register zugreifen. Anzahl , Grofe und Verwendung der Register hangenvon der jeweiligen CP U-Familie abo
Reiserfs ist ein unter Linux verwendetes Journaling Filesyst em. Es ist insb esondere fur die Verwaltung sehr vieler kleiner Dat eien geeignet .
Relokabel (verschiebbar) ist ausfuhrbarer Code, wenn er an andere Speicherort e verschoben werden darf. Dies set zt zumindest voraus, dass bei derAdressierung keine absoluten Adressen verwendet werden .
Ressourcen sind aIle "Objekte " ~ wie Dat eien , Cerat e, Speicher uSW. ~, dieein Betriebssystem den Proz essen zur Verfiigung ste llt .
Returncode bezeichnet den Ruckgabewert einer Funktion, der vom Typ Integer ist. (Fast) aIle System Calls haben einen Returncode, der anzeigt ,ob die Verarbeitung erfolgreich war oder nicht . In der Regel bedeutet Returncode = 0 korrekte Verarbeitung, Returncode < 0, dass ein Fehler beider Bearbeitung des System Calls auft rat.
ROM (Read Only Memory) wird in der Rechnerarchitektur in der Regel dazubenutzt , ein element ares Bootprogramm aufzunehmen, das den Bootprozess startet .
Round Robin ist ein einfacher Scheduling-Algorithmus, der aIle Prozesse fair- in diesem FaIle gleichmaflig - bedienen soll, Jeder Prozess bekommt ,sobald er vom Scheduler die CPU erhalt , eine Zeitscheibe zugeordnet , innerhalb derer er rechnen darf, Gibt er durch einen Interrupt die Kontrollevorzeitig ab, wird der nachste Prozess ausgewahlt, ansonsten wird er mitAblauf der Zeitscheibe von der CPU verdrangt , der Scheduler wahlt dennachst en Proz ess aus. Die Wahl der Lange der Zeitscheibe beeinflusst dieses Verfahren erheblich.
Scatter gather Technik bedeutet , dass bei einem 1/0-Vorgang im Speicherverstreute Blocks gemeinsam bearb eitet werden.
Scheduler ist diejenige Komponente des Betriebssystems, die einen rechenbereiten Prozess auswahlt, urn ihm die CPU zuzute ilen. Auch fiir 1/0Auftrage kann es I/O-Scheduler geben , deren Aufgabe es ist , aus denAuftragen nach vorgegebenen Kriterien den nachsten auszuwahlen.
Scheduling ist der Algorithmus, den der Scheduler bei seiner Auswahl benutzt .
SCSI ist ein paralleler Bus zur Datenubert ragung zwischen Rechner undCeraten .
Segmenti erung ist eine Einteilung des Adressraum s nach "inhalt lichen Kriterien". Wahrend Paging den Adressraum formal in gleich groBe Blocksunterteilt , ist Segmentierung auf den Software-Entwicklungsprozess ausgerichtet : Der Adressraum wird aufgete ilt in Code- , Stack-, Dat ensegment e;diese Aufteilung kann auch auf Funktionsebene erfolgen.
Semaphore wurd e von Djiks tra eingefUhrt, urn den Zugriff auf Critical Sections zu regeln und dadurch Race Conditions zu vermeiden. Bei der Semaphore handelt es sich urn einen abstrakten Datentyp , der zwei Zustandeeinnehmen kann und die beiden Operationen wait 0 und signal 0 anbietet. wait () pruft , ob bereit s ein Prozess seine Critical Section betreten hat
272 C Glossar
und legt in diesem FaIle den aufrufenden Prozess in einer Warteschlangeab osignal 0 muss vom Prozess sofort nach Verlassen der Critical Sectionaufgerufen werden, wartende Prozesse werden dann aufgeweckt. Die IPCImplementierung von Semaphoren verallgemeinert diesen Ansatz in zweiRichtungen:- Semaphoren-Werte konnen nicht-negative Integer-Werte bis zu einer vorgegebenen maximalen GroBe annehmen,- es konnen mehrere Semaphoren-Werte in einer Semaphore zusammengefasst werden,- in einer atomaren Operation kann auf mehrere Semaphoren-Werte einerSemaphore zugegriffen werden.
Sequentieller Zugriff bezeichnet das aufeinander folgende Lesen bzw. Schreiben aller Bytes einer Datei.
Server siehe CS.Shared Memory ist Speicherbereich, auf den mehrere Prozesse gemeinsam zu
greifen konnen . IPC stellt neben Message Queues und Semaphoren auchShared Memory zur Verfugung .
Shell ist ein Prozess, der eine Kommando-orientierte Benutzeroberfliiche zurVerfiigung stellt. Es gibt mehrere unterschiedliche Implementierungen aufUnix-ahnlichen Betriebssystemen. Eine vielgebrauchte Implementierungist die Bash-Shell.
Shortterm Scheduler bezeichnet denjenigen Scheduler, der aus einer Mengevon rechenbereiten Prozessen den niichsten auswahlt, dem die CPU zugeteilt wird. Der Algorithmus muss eine sehr kurze Laufzeit besitzen, da erext rem haufig aufgerufen wird.
Signal ist eine synchrone Unterbrechung des Instruktionsflusses, siehe Interrupt .
Slab dient als Cache fur Datenstrukturen, die vom Kernel benotigt werden.Durch die Zusammenfassung gleicher Objekte konnen frei gewordene Speicherpliitze sofort wieder fur Objekte derselben Art benutzt werden; damitwird zum einen der Fragmentierung des Speichers entgegengewirkt, zumanderen konnen aufwiindige Funktionen zur Initialisierung der Objekteweitgehend vermieden werden .
SMP (Symmetric Multi Processor) ist eine Multiprozessor-Architektur, in deraIle CPUs gleichwertig sind, d.h . laufende Prozesse konnen jeder CPUzugewiesen werden.
Soft-IRQ (SoftInterrupt Request) ist in Linux ein Mechanismus zur Ausfuhrung der Bottom Half in der Bearbeitung eines Interrupts. Ein Soft-IRQmuss statisch in den Kernel eingebunden werden. Damit er ausgefuhrtwird, muss er signalisiert werden .
Speicher wird synonym fur fluchtigen , direkt adressierbaren Hauptspeicherverwendet. Der Zugriff auf diesen Speicher ist urn ein Vielfaches schnellerals der Zugriff auf nicht fluchtigen Speicher wie z.B. Plattenspeicher, istjedoch langsam im Vergleich zum CPU internen Cache.
C Glossar 273
Speicheradresse zeigt auf einen Platz ("Zelle") im Speicher , auf den zugegriffen werden kann .
Sperre siehe Lock.Spinlock ist eine bestimmte Art von Lock. Das Spinlock war tet akti v auf die
Freigabe des gewiinschten Objekts. Es wird bei Multiprozessor-Systemeneingesetzt, urn den gleichzeit igen Zugriff von mehreren P rozessoren aus zuunterbinden.
Stack ist eine LIFO-Or ganisation , in der ein Prozess Obj ekte ablegen kann .Ein Stack wird unter anderem in vielen Umgebungen eingesetzt, urn beiFunktionsaufrufen Argumente und Riicksprungadresse abzulegen.
Startadresse ist diejenige logische Adresse eines Adressraum s, bei der die Verarbeitung des Prozesses aufgenommen wird .
Starvation (Verhungern) ist ein Problem Prioritat s-orienti erten Schedulings.Haufig wird Altern eingefuhrt , urn Starvation zu vermeiden: Prozessenwird sehr spat oder schlimmstenfalls gar nicht die CPU zugeteilt (giltanalog fur den I/O-Scheduler).
Superblock ent halt wichtige Informationen tiber die jeweilige Plattenpartition.
Swap Bereich ist eine besonders eingerichte te Plattenpar ti tion zur Aufnahm evon aus dem Speicher verdra ngten Pages. Anstelle einer Plat tenpartitionkann ggf. auch eine zusammenhangende Dat ei verwendet werden.
Swapping verlagert Teile eines Prozesses aus dem Speicher in den wesentlich langsamer zugreifbaren Swap Bereich. Damit wird schneller Speicherwieder frei.
Synchronisation ist notig, wenn Prozesse auf gemeinsame Ressourcen - z.B.Dat enstrukturen - zugreifen. Damit der Eintrit t in die Crit ical Sectionkontrolliert erfolgt , werden an dieser Ste lle die Prozesse "synchronisiert" .Dazu werden unter anderem Semaphoren eingesetzt.
Syste m Call ist ein Aufruf einer Kernel Routine von einem Prozess aus. Bibliotheken dienen dazu, Standard-Funkt ionen in geeignete System Callsund deren Aufruf-Struktur urnzusetzen. Ein System Call entspricht einemspeziellen Interrupt , der Prozessor wechselt in den Kernel Mode.
Syst emmap ent halt die Einstiegspunkte zu den Routinen des Kernels.Task siehe Prozess.Tasklet ist eine spezielle Form zur Ausfiihrung der Bot tom Half in der
Bearbeitung eines Int errupts. Ein Tasklet basiert auf dem Soft-IRQMechanismus, ist aber wesentlich flexibler . Der Handl er kann dynamischangemeldet werden. Damit er ausgefiihrt wird , muss er signalisiert werden.
TCP (Transmission Control Protocol) ist ein verbindungsorientiertes Protokoll der TCP / IP Protokoll-Familie, das ein feste Verbindung zwischenClient und Server herstellt (vgl. IP und UDP).
Thrashing tritt auf, wenn bei Paging on demand Speicher so knapp wird ,dass Pages, die gleich wieder benot igt werden, durch Swapping aus demSpeicher verdrangt werden .
Thread siehe Leichtgewichtiger Prozess.
274 C Glossar
Timesharing nennt man System, das dafiir ausgerichtet ist , mehrere interaktive Benutzer gleichzeitig zu bedienen. Dazu muss insbesondere ein geeigneter Scheduling-Algorithmus ausgewahlt werden. Typisch sind Variantendes Round Robin.
Time slice siehe Zeitscheibe.Top Half wird bei der Behandlung von Interrupts eingesetzt. Der Interrupt
Handler wird dazu , sofern moglich, aufgete ilt in die Top Half und dieBot tom Half. Die Top Half muss unverzuglich ablaufen und unterdrii cktin der Regellokal alle Int errupts oder global denjenigen Interrupt , auf dengerade reagiert wird.
Trailer siehe Header .Transaktions-orientiert: Die Bearbeitung muss die Kriterien Atomaritat , Kon
sistenz, Isolation und Dauerhaftigkeit (englisch ACID) erfullen, also entweder komplett ausgefuhr t werden oder gar keine .Anderung hinterlassen.
Treiber bezeichnet in der Regel Software, die fur Int erface-Karten bzw. Cerat espezifisch geschrieben ist . Dabei mussen die Besonderheiten der Hardwareberu cksichtigt werden.
UDP (User Datagram Protocol) ist ein verbindungsloser Paket-orienti erterDienst der Protokoll-Familie TCP l IP (vgl. IP und TCP) .
Unterbrechung siehe Interrupt .USB (Universal Serial Bus) ist ein serieller Bus, urn einen Rechner mit exte r
nen (USB-) Peripheriegeraten zu verbinden.User Mode Ein Zustand der CPU (vgl. Kernel Mode). Bei Bearb eitung von
Benutzer-Prozessen befindet sich die CPU im User Mode. In diesem Zustand sind zumindest alle I/O-Operationen unzuliissig. Damit kann einBenutzer-Prozess nur mit Hilfe von System Calls - und somit mit Hilfedes Betri ebssystems - auf gewimschte Dienste des Rechners zugreifen.
Valid Bit ist ein Bit , das in der Pagetable benutzt wird, urn anzuzeigen, obdie jeweilige Page im Speicher abgebildet ist oder nicht . 1st das Valid Bitbei einem Zugriff nicht gesetzt, so wird ein Page Fault Interrupt ausgelost.Der Handl er muss die gewiinschte Page vorn Swapping Space holen, wennsie bereits dorthin ausgelagert worden war , oder eine neue Page erzeugenund mit den gewunschten Daten laden, wenn die Page noch nicht angelegtworden ist .
Verhungern siehe Starvation .VFAT (Virtual File Allocation Table) ist ein in der Microsoft-Welt eingesetz
tes Filesyst em.VFS (Virtual File Syst em) bezeichnet in Linux eine Verallgemeinerung eines
Filesystems. Diese Schnit tstelle ermoglicht es, auf unterschiedliche konkrete Filesysteme wie ext 2, reiserfs oder nfs zuzugreifen.
Virtuelle Speicherverwaltung dient dazu, den Speicher dynamisch zu verwalten. Es wird Paging verwendet , der Speicher ist in Frames eingete ilt , dieUmsetzung von logischer zu physischer Adresse ist darauf eingerichtet .Zusatzlich wird die Hardware so erweitert, dass ein Page-Zugriff auf eine zum Adressraum des Prozesses gehorige Page, die nicht im Speicher
C Glossar 275
abgebildet ist , zu einem Page Fault-Interrupt ftihrt . Dadurch wird dieentsprechende Page im Speicher angelegt und - wenn not ig - die Datengeladen. Das Verfahren wird als Paging on demand bezeichnet .
VMA (Virtual Machine Architecture) bezeichnet in der IBM-Architektur eineVirtualisierung der Hardware. Damit wird es moglich, mehrere Betriebssysteme auf einem Rechner gleichzeit ig laufen zu lassen , wobei jedes System den Rechner allein zu besit zen scheint . VMWare, Bochs und ahnlicheSysteme bilden dieses Vorgehen heute fur die x86-Architektur nacho
VM/CMS ist (oder besser: war) ein einfaches Single User, Single TaskingDOS-ahnliches Bet riebssyst em, das in der IBM-GroBrechnerwelt zur Dialog-Unterstiitzung diente. Durch Einsat z unter VM/SP konnte dann eineVielzahl solcher Systeme bereitgestellt und damit viele Benutzer parallelbedient werden.
VM/SP (Virtual Machine/ Syst em Product) siehe VMA.Wait Queue ist eine bestimmte Datenstruktur zur Aufnahm e von Prozessen
(genauer P CBs) , die auf ein best immtes Ereignis warten. Ein in einer WaitQueue aufgenommener Prozess wird beim Scheduling nicht beriicksichtigt ,er muss erst durch das Eintreten des gewiinschten Ereignisses geweckt undaus der Wait Queue entfernt werden.
War teschlange siehe Wait Queue.Wrapp er ist eine Funktion, die als Schnittst elle zwischen dem Aufrufer und
dem eigent lichen Aufru f benutzt wird. Dabei kann die Wrapp er-Funktionz.B. die Sicherheit durch weiteren Code erhohen. Die aufgerufene Funktion muss einen ents prechenden Schutz dann nicht mehr implementieren.Dies ist insbesondere dann interessant , wenn der Wrapper auf mehrereFunktionen zugreift .
Work Queue ist in Linux ein besonderes Verfahren, bei der Int errupt-Behandlung diejenigen Arbeitsschritte, die nicht sofort durchgefuhr t werdenmiissen (Bot tom Half) , in eine Queue einzutragen, aus der heraus siezu einem geeigneten Zeitpunkt von einem Kernel-Thread bearbeitet werden. Ein wesentlicher Unterschied zu anderen Bot tom Half-Methoden liegtdarin, dass die Bearbeitung im Prozess-Kontext und nicht im InterruptKont ext erfolgt .
Worst fit sucht den groBten zusammenhangenden freien Speicherplatz, damitwird bei der Speicherung die zur iickbleibende Lucke am grofiten (vgl. BestFit und First Fit) .
Wurzelverzeichnis ist in Unix-Syste men derjenige Dateiknoten, von dem ausdas ganze Filesyst em in Baum form aufgespannt wird .
Zeitscheibe wird bei Round Robin Scheduling eingesetz t und ist diejenigeZeit , die einem Prozess eingeraumt wird , wenn er die CP U zugeordnetbekommt . Spat estens mit Ablauf der Zeitscheibe wird dem Prozess dieCPU entzogen (preemptiv) und der nachste rechenbereite Prozess erhaltdie CPU .
Zone beschreibt Speicherbereiche mit gleichen Eigenschaft en: gerade in derPC-Architektur gibt es Bereiche, die (zumindest von alt en Interface-
276 C Glossar
Karten) nicht tiber DMA angesprochen werden konnen, sowie Bereiche,die nicht permanent im Kernel-Adressraum eingebunden sein konnen.
Verkettet ist eine Dateiorganisation, wenn die Blocke einer Datei tiber Pointerverkettet sind und bei der Allocation eines Blockes ein beliebiger freierBlock gewahlt werden kann.
Interessante WWW-Adressen
Trotz der Gefah r , dass Links schnell veral t en , mochte ich hier einige wicht igewww-Adressen angebe n in der Hoffnung, dass sie eine Weile erhalten bleiben:
• http ://www .cs .cf .ac .uk/Dave/C/Eine ausfuhr liche Ein fuhr ung in C einschlieBlich Pracompil er und UnixSystem Calls.
• http://www .dit .upm.es/-jmseyas/linux/kernel/hackers-docs .htmlEine umfangreiche Liste von online-Dokumenten und Buchern zum LinuxKernel.
• http ://www .kernel .org/Die offizielle Quelle fur die Linux-Kernel,
• http ://www .linux .o rg/Ein informatives Linux-Portal.
• http: //www.novell.com/de-de/linux/suse/Ehemals http ://www.suse .deein wichtiger Dist ributor , der mit seinen Mailinglisten und seiner Sup portund Hardware-Datenbank eine Reihe von Problemen losen hilft .
• http ://www . inf .fh-dortmund .deVon dort aus fuhren die Links Personen, gefolgt von Prof. Dr . AlbrechtAchilles auf meine Homepage. Unter dem Link Betriebssysteme sinddie verwendeten Beispielpr ogramme zu finden.
Literaturverzeichnis
1. Bovet D. P. & Cesat i M. (2003) Understanding th e LINUX KERNEL. O'Reilly2. Brey B. B. (1994) Assembly Language Programming, 8086-8088, 80286, 80386,
80486. Prent ice Hall3. Kernighan B. W., Ritchie D. M. (1990) Programmieren in C. Hanser4. Love R. (2004) Linux Kernel Development . Sams Publishing5. Mauerer W. (2004) Linux Kernelarchit ektur. Hanser6. Silberschatz, A. et . al. (2002) Operating Syst em Concepts . John Wiley & Sons
Inc.7. Tanenbaum A. S. (2002) Moderne Bet riebssysteme. Pearson Studium8. Wirth N. (2000) Algorithmen und Dat enstrukturen, Pas cal-Version . Teubner
Sachverzeichnis
jetcjfstab, 80j etcj init .d, 244j etcjinittab, 243j procj interru pts, 108j proc j sys, 79j procj sysjvm, 79j sbin j init , 242__blockdev.direct.K) , 174__do.softirq, 119, 120__generic.file.aio.read , 173, 175, 176__generic.file.aio.write.nolock, 77__grab.cache.page, 77_...init , 241_.nJ.akeJequest, 174_-skb_dequeue, 234__tasklet...schedule, 124__wait.queue, 129__wait.queue.head , 130...syscall , 17.syscall-Wrapper , 18
accept, 223, 228Access
-Bit, 59, 79-Liste, 143, 149
ack, 113, 231ACL, siehe Access-List eact ive Array, 45, 49add.to.page.cache.Iru, 77, 180add.wait.queue, 130address...space, 76address.space.operations , 77Adresse, 12, 56, 72
Block, 195Internet , 222IP , siehe IP-Adresselogisch , 55, 56, 59, 68physisch , 56, 68St art, 3, 56Umsetzung, 12, 56, 57, 68, 69
Adressraum, 12, 17, 24-28, 30, 33, 35,55, 57, 58, 63, 64, 66, 68, 77, 78,83, 151, 179, 203
Kern el, 70, 73linear , 57, 68logisch , 56, 57, 62, 63Op eration , 77
alarm, 99Altern, 42, 144, 181Anwendungsschicht , siehe Application
layerAppleTalk , 216Application layer , 219asmlinkage, 167, 241asynchron, 94atomar, 103atomic ...inc, 91atomic. inc.and. te st, 91atomic-set , 91Ausschluss, 90
background.writeout , 79Barriere, 181Basisregister, 56Batch, 4, 39bd ev.get .queue, 174Befehlsz ahler, 5
282 Sachverzeichnis
benannte Pipe, siehe P ipeBH, sieh e Bottom HalfBig Kernel Lock, 94, 105, 242bind, 222-225, 228BIOS, 238Bittibertragungsschicht, siehe Physical
layerBKL , siehe Big Kernel Lockblk.partition.remap, 174Block, 10, 66, 135, 137-140, 143, 166,
167,174, 181, 182, 184, 191, 195,197
-gru ppe, 183- 186, 191-193, 197-lange, 76, 147, 152, 189, 191-nummer , 134, 195
Boot , 180Bootmanager, 239Bootstrapping, 237Bottom Half, 117Buddy System Algorithmus, 75Bus, 7Busy Wait, 10, 105
Cache, 5, 7, 8, 43, 53, 61, 62, 64, 70, 75,77, 78, 82, 151, 155, 173, 177, 179,180, 184, 194
call, 11cancel.delayed.work, 128change.bit, 91chdir, 165check.media.change, 151chmod,165chown , 165circular wait , 91clear-bit, 91clone, 34-36CLONE_FILES, 34CLONE_FS,34CLONE-SIGHAND, 34CLONE-THREAD , 35CLONE_VM, 35, 64close, 164, 224Compiler, 3cond.resched , 125, 177connect, 223, 227context-switch, 47contiguous , 138Controller , 7, 9, 61Copy-on-write, 72
copy .process, 52CPU, 1, 5, 7, 10, 12, 13, 20, 56, 61, 73,
107, 120, 126, 127, 237, 238, 240,242
entziehen, 13, 14, 40, 41Op erationen , 87Register, 19, 20Unterbrechung, 112, 116zugeordnet , 53, 80, 111
cpu.idle, 242cpu.workqueue.struct, 127cpu.wq, 127creat, 164create, 136, 148create.workqueue, 127Critical Region, 87, 89, 93current
directory, 34, 142, 147, 157, 158, 165file position, 136, 138, 168Makro, 115, 169
Darstellungsschicht , siehe Presentationlayer
Data link layer , 216, 227Datagram, 221, 222Datei, 30, 34, 133, 138, 142, 144, 147,
154, 161, 165, 168, 170, 172, 174,183, 185, 192, 194
-baum, 140, 142, 148-block , 135, 185, 189anlegen, 136, 139, 158, 192geoffnet , 19, 24, 26, 28, 30, 151, 158,
167, 171loschen, 136, 148, 189, 193, 194Mapping, 68, 72, 160Op erationen, 136, 149operationen , 172Rechte, 133, 135sequentiell, 134, 177, 185Typ, 133, 134vererbte, 29, 36zurticksetzen, 136
Datenkompression, 219Datenpaket , 231Datenrahmen, 216Datensegment, 19Datenstrom
bidirektional, 223Deadlock, 90, 91, 105, 217
DECLARKTASKLET, 123delete, 136delete.inode, 152dentry, 78, 148, 155-157, 170, 215dentry.operations, 156dio.bio.submit , 174Dir ect Memory Access, sieh e DMAdirect.Io,worker , 174Directory, 134-137, 140-142, 147, 151,
161, 162, 192, 193loschen, 193
dirty, 147dirty.background.ratio, 79dirty.inode, 152disable, 111disable.irq, 116disable.irq.nosync, 116DMA , 10, 61, 70, 73, 75do.follow.Iink, 158do.generic.file.read, 176do.generic.mapping.read , 77, 176, 177do.ioctl, 231doJookup, 158do.page.cache.readahcad, 177do.softirq, 119, 125do.sync.read, 171DOS , 3, 11, 56, 140, 142down , 92down.interruptible, 92, 93down.trylock, 92dup , 164, 199, 202Duplextibertragung, 217Durchsatz , 39
Echtzeit, siehe Realtimeeffective.prio, 51elektronische Signatur , 219Elevator, 181elvtune , 183enable, 111enabl e.irq, 116Entzug,90environ, 30Ereignis, 4, 44, 94, 107, 129Ethernet , 216Exception, 107exec, 27, 66, 159, 199exit, 27, 28, 30, 31, 41expired Array, 47, 49, 53
Sachverzeichnis 283
ext2, 171, 183ext z.alloc.branch, 197extz.block.to.path, 195ext 2_diL ent ry_2, 194ext 2_direcU O, 174, 194ext z.empty.dir, 193ext z. find .goal, 195extz.get.block , 195, 196ext z.get . blocks, 195cxtz.get.branch, 195ext z.get .g roup.desc, 191cxtz.group.desc, 191cxt z. Inode , 190extz.new. inode, 192extz.read.inode, 191extzrmdir, 193ext z.sp lice. branch, 197oxtz.super.block, 188ext z.unlink, 193ext3, 183
fastcall , 124, 168fat, 183fcheck, 169, 170fcntl , 166, 205FDDI,216Feedback, 42, 51, 54Festhalten und Warten , 90fgeUight , 169FIFO, 48, 50, 54, 180, 200, 205, 211fifo.open , 205file , 160, 215
Handle, 199Hole, 191
file.operations, 150file.read.actor, 179file.s ystem.typ e, 161Filedeskriptor, 158, 168filemap.copy .from.user, 78files.struct , 159Filesystem, 2, 20, 75, 76, 133, 156, 171,
207virtuell , 143
find.get.page, 77, 178-180find.group.dir , 192find.group.orlov , 192find.group.other , 193flush.scheduled.work, 128Flussregulierung, 218
284 Sachverzeichnis
followJink , 149follow.rnount, 158fork, 25, 26, 28, 31, 33, 64, 72, 200, 203Fragmentierung, 56, 62, 82, 135, 139,
185Frame, 57- 59, 67, 70-73, 75, 82
bereit st ellen , 62verdrangen , 59
free, 66, 67free. area , 73, 75free.irq, 113free.pages, 73, 83Freelist , 59fs.struct , 159, 165fsck.ext2 , 187fsync, 151
generic.file.read, 171, 173generic.make.request , 174Geratetreiber , 180getxattr, 149glibc , 15, 167Grenzregister , 56Gruppend eskriptor, 184, 186
handle.Ilifg.event , 114handle.ra.miss, 180Handler , 34, 36, 96, 109, 111-113,
115-117, 119, 120, 231hard.stat .xmit, 231Hardware-Interrupt, 119Hashing , 24, 61, 137, 145, 156, 157Header , 220, 225, 227, 231
IP , 221, 227MAC, 227TCP, 222, 227UDP, 220, 227
Heap , 19hold and wait , 90HOME,142hook , 167HPFS, 183hw. inte rrupt.type , 111
in-interrupt , 116Index, 184indexed, 139Indirektion, 185, 186, 191inet.addr, 227
init , 33, 242, 244init.sync.kiocb, 172INIT_WORK,126Initi al Ramdisk, 239, 245inline, 169Inode, 77, 78, 145, 148, 151, 152, 156,
166, 170, 171, 176, 184-186, 189,191-194, 19~ 200, 215
Nummer ,65Struktur, 146, 147
inode.in.use, 147inod e.operations, 149inode.unused , 147insmod, 245Inter Process Communication, 95, 200,
215Schlussel, 207, 209Zugriffsrecht e, 207
Interrupt , 10, 12, 14, 41, 48, 87, 107,231
abschalten , 110Bearbeitung, 107, 130Kontext, 115, 116, 119, 125, 132Registrierung, 109synchron, siehe Exceptionunterbrechen , 109unt erdriicken , 87, 130
Interrupt Handler , siehe HandlerInterrupt-Handler , 114
Bot tom half, 109Struktur, 114Top half, 109
Interrupt-Vektor , 113IO-Scheduler , 180
as , 181, 182cfq, 181deadl ine, 181, 182noop , 181Prioritat, 181
ioctl , 150IP , 216, 221, 227
Adresse, 218, 219, 221, 223, 224Head er , 221, 231Layer , 231
ip.queue.xmit, 231IP C, siehe Inter Process Communicati
onipcjd,207ipc.ids, 207
IPC_NOWAIT, 210IPC_UNDO, 104, 105IPX, 216IRQ , l11irq.desc, 110irq .desc,t , 110irqaction , 112, 113ISDN ,216ISO ,216
kern.ipc.perrn , 208Kernel Mode, 11, 15, 16, 109Kernel-Semaphore, 93kill ,97-99kritischer Abs chnitt, 115Kryptographie, 219ksoftirq, 125
Thread,125
loschen, 193least recently used , 79Library, 15Link , 148, 156, 165link, 148, 165link. path.walk, 157linked, 139listen, 223, 228llseek, 151Load Balancing, 53, 54load.balance, 53local.irq.disable, 115Iocal. irq.enable , 115Iocal. irq. restore, 116local.irq.save, 116local.soft lrq.pending, 119Lock, 88, 89, 93, 115, 120
Contention, 89Granulierbarkeit , 89Reader /Writer , 93Reihenfolge , 89RW, 93Scalability, 89
lock, 151lock.kernel, 94locked, 70locks.verify.area , 170login, 25lokale Variablen , 66Longterm, 40
Sachverzeichnis 285
lookup, 148lseek, 163Ismod ,245
MAC , siehe Media access controlmagic byt e, 134malloc , 66, 67, 84Mapping, 75mapping, 177mark.page.accessed , 179Maschineninstruktionen, 5MBR,239Media access control, 216, 227Mehrprozessor, 52
-Architektur, 61-system, 54, 73, 82, 87
Memory Deskriptor, 63, 64An legen ,64
Message Queue, 200, 206, 208mkdir , 148, 165mke2fs, 189mknod, 200, 205mlock, 72, 84mlockall, 71mm.struct, 63mm .users , 64mmap, 67, 68, 84, 151mmlist,64modprobe, 245Module
owner, 150mount, 151, 166mpage.readpage, 177, 195msg .c,209MSG_EXCEPT, 211msg.rnsg, 209msg.queue, 208msgctl, 210, 211msgget , 209, 210msghdr, 230msgrcv, 210, 211msgsnd,210Multitasking, 12, 19, 25Multiuser , 4, 42, 133, 140, 142, 243munlock , 72, 84munmap, 67, 68, 84mutual exclusion, 90mV,148
286 Sachverzeichnis
Nack,231named pipe, siehe Pipenameidata, 157Nameserver, 218net.dev, 231net-device, 232-234net.rx.action, 234NetBios, 216netif.receive.skb, 234netiLrx, 231netif.rx.schedule, 119, 234Network Layer, 217, 227Netzwerk, 118nice, 51, 52, 54NTFS, 183NUMA , 73, 75
open, 16, 151, 162, 205, 231open.softirq, 117, 118Operation
atomar, 87, 91, 105Orlov-Allocation, 192
packet-type, 235Page, 33, 57, 59-62, 67, 70, 72, 73,
77-79,81, 177, 179,200,209-table, 7, 33, 47, 57-60, 68, 70, 72, 73,
81, 83, 240, 241Adresse, 57, 59aktualisieren, 179Alterungsprozess, 79ausgelagert, 81Cache, 61, 70, 75-77, 179, 180dirty, 60, 62, 70, 77, 78GroBe, 72, 76, 201Index- , 195lock,71Locking, 71, 72logisch,72Offset, 57Size Extension, 72Slot , 81zuriickschreiben, 78
page, 71page.cache.alloc.cold, 77, 180page.cache.get, 77page.cache.readahead, 177Pagefault, 12, 59, 60, 71, 72, 83, 107Pages
ausgelagert, 80PageUptodate, 179Paging, 57, 61
on demand, 59, 70, 72Partition, 2, 3, 80, 151, 152, 166, 171,
174,183, 187, 191-193, 195,239,245
path.Iookup, 157pause, 99PCB, siehe Process Control BlockPCI-Bridge, 7pdflush, 62, 77pdflush.operation, 79Personality, 24, 158pg.data.t, 75Physical Layer, 216PID, 24-26, 31, 32Pipe, 199, 200, 215
Benutzung, 202, 203Lesen, 204Named, 200, 205, 206nicht-blockierend, 205schlieBen, 205
pipe, 199, 200pipe.inode.info, 201pipe.read.release, 205pipe.release, 205pipe.write.release, 205Platte, 183point-to-point, 218Port, 221-224POST,238preemption, 42, 44, 87, 90Presentation layer , 218prio.array, 46Prioritat, 14, 19, 39, 40, 42, 48, 50, 51,
53, 177dynamisch, 43, 46, 51
Prioritatsarray, 44, 54active, 45
Prioritatstufe, 47proc, 154, 183Process Control Block , 19, 20, 24, 25,
28, 32, 33, 51, 62, 64, 158, 169,212, 213
process.backlog, 234Program Counter, 5Programmcode, 19Protected Mode, 238, 240
Prozess, 13, 14, 19, 24, 35, 40, 44, 46,47, 49, 52, 55, 59, 62, 64, 72, 115,129, 130, 163, 168, 199-201 , 214,242
-gruppe, 25, 50-verwalt ung, 2-weehsel, 47Adressraum, 56, 63, 64, 66, 68, 78,
83, 151beenden, 28, 30bloekiert, 212erzeugen , 25ID , siehe PIDKontext , 115, 116, 125, 132Lebenszyklu s, 40leiehtgewiehtig, 33Programm laden , 27Startadresse, 56
PSE,72pthread,37ptraee, 17put..inode, 152
q.perrnvZl lqueue.delayed.work, 128queue.work, 127Quittungsmeldung, 216
Riickgabewert , 31Race Condition, 86, 105, 119, 123, 130,
201,207Radix Tree, 178raise, 97raise.irq, 119randJnitializeJrq, 112RCF,219read, 77, 136, 137, 151, 162, 167, 171,
200, 203, 205, 224sequential , 185
readJnode, 152read.pages, 177Readahead, 176, 177readdir, 151readpage, 77readv, 151Reaktionszeit , 39Real Mode , 238Realtime, 4, 39, 44, 48, 49, 51, 182
Saehverzcichnis 287
Reehtc, 3, 12-15, 19,49,52,63,68, 71,99, 133, 135, 142, 147, 158, 160,165, 170, 187, 189, 200, 207, 208,244
IPC, 207recvfrom, 222, 224, 225Red-Blaek-Tree, 64Register , 6, 48reiserfs , 183release, 151relokabel, 56remove.wait.queue, 130rename, 148Request for Comments, sieh e RCFRequest-Queue , 180requesUrq, 112, 113reset , 136Ressouree, 13, 14, 39, 90
vererbte, 28rmdir , 148, 165, 193rmmod,245root directory, 140Round Robin, 42, 47-50, 54, 80RR, siehe Round Robinrun_workqueue , 128, 129Runqueue, 44, 53, 54runqueue, 45
SA_INTERRUPT,112SA_SAMPLKRANDOM,112SA_SHIRQ , 112, 113Scatter-Gather , 151sched.exit , 52SCHED_FIFO,49sched.getpararn, 50sched.getscheduler, 50SCHED_RR,49sehed...setaffinity, 53, 54sehed ...setparam, 49sehed...setscheduler, 49, 50, 54sched .yield , 49, 51, 52, 54schedule, 47, 48, 53, 125, 128, 177Scheduler , 42, 46-48, 180Scheduling, 13, 14, 20, 39, 53
Longterm, 53Mediumterm , 53prioritatsgesteuert , 44, 53Round Robin, 54SCHED_FIFO, 49
288 Sachverzeichnis
Shortterm, 53Schichtenmodell, 216SCSI,118security.file.permission, 170Segmentierung, 57sem , 212sern.array, 212sem.queue, 213sem.undo, 213sem.undo.Iist, 214sema.init, 93Semaphore, 93, 95, 100, 105, 106, 200,
201, 206, 212initialisieren, 105IPC-Erweiterung, 100Kernel ,92Pseudocode, 101undo, 104, 213
semaphore, 93sembuf, 104, 214semctl, 101-103, 105semget, 101, 102, 104, 105semop, 103, 104semun, 102sendto, 222, 224, 225seLaffinity, 111seLbit,91set.page.dirty, 77setup, 239setxattr, 149Shared Memory, 68, 200, 206, 214Shell, 3, 25shmat, 68, 69, 84shmctl , 68, 69shmdt , 68, 69shmget, 68, 69, 84, 101shmid.kernel, 215Shortterm, 40show.options, 154Sicherungsschicht, siehe Data link layersigaction, 96, 97SIGALRM, 95, 99SIGBUS,95SIGCHLD,95SIGCONT,95SIGFPE,95SIGHUP,95SIGILL,95SIGINT, 95, 96
SIGIO, 95, 205SIGKILL,95Signal, 31, 40, 41, 94, 95, 106
blockieren, 96signal, 96, 100, 103Signal Handler , siehe HandlerSignatur, 219SIGPIPE,95SIGSEGV,95SIGSTOP,95SIGSYS ,95SIGTERM,95SIGUSR1, 95, 97SIGUSR2,95sk.buff, 229, 230sk.buff.head , 228skb.push, 227Slab
Allocator, 62, 84Cache , 62, 64, 82Layer , 82
SMP-Lock, 82sock.readv.writev , 230sock..sendmsg, 230sock.writev, 230sockaddr.In, 222Socket, 200socket , 222, 224, 225, 227, 228Soft-IRQ, 117, 121, 124, 125, 131, 234
Einschrankungen , 120Handler , 120, 121
softirq.action, 118softirq.init, 121softirq.vec, 117, 118softnet.data, 234Speicher , 9
Hierarchie, 9inhomogen , 73logisch, 67Zonen, 75
Speicherbereich, 63, 65, 66anfordern, 66
Speicherbus, 61Speicherengpass, 62Speicherschutz, 56Speichersegment, 19Speicherverwaltung, 2
virtuell, 57Sperre, siehe Lock
spi n. lock, 115spin.Iock.irqsave, 92, 115Spinlock , 91, 93, 105, 115, 130, 214Stack, 19, 35, 48start.kernel, 241start.o f.setup , 239start.up , 240Startadresse, 56startup, IIIstartup.Bz, 240startup.Jrq, 112starvation , siehe Verhungernstatfs, 152status, 31stop, 231submit.bio, 174, 177super-block, 153, 186super-operations, 154Superblock, 145, 147, 184, 186Swap, 71, 73,80,179
Auswahl,80swap.info.struct , 80, 81swapoff, 80swapon, 80swappiness, 80Swapping, 40symlink , 149sync, 166sync. fs, 152Synchronisation, 61, 62, 85, 91, 94, 105,
199,201synchronize.irq , 116sys, 183sys.ipc, 215sys.read , 167, 168sys...semtimedop, 214sys...socketcall, 225System Call, 11, 14, 16, 17, 48, 96, 225
Fehler , 96system.call, 16, 17
TASK_INTERRUPTIBLE, 128, 129TASK_RUNNING, 128tas k...struct, 20task.timeslice, 52TASK _UNINTERRUPTIBLE, 129Tasklet , 117, 118, 121, 123, 125, 131
Einschrankungen, 123tasklet..action, 121, 122
Sachverzeichnis 289
tasklet.disable, 124tasklet.enable, 124tasklet .hi.schedule, 123tasklet.init , 123tasklet.schedule, 123TASKLET_STATE-RUN,122tasklet...struct , 121tasklet . t rylock, 122tasklet.unlock, 123tasklet.vec, 123TCP, 216, 219, 222, 223, 227, 231
Header , 221TCP-Client , 227TCP-Server, 228tcp.alloc.pskb, 230tcp.copy.to.page, 230tcp.push.one, 230tcp.reset.xmit.timer , 231tcp.sendmsg, 230tcp.snd.test, 231tcp.transmit.skb , 231test .and.clear .bit , 91test..and.set , 87Thrashing, 60Thread, 20, 33, 35, 64, 85, 89, 125THREAD_NEED_RESCHED,48time slice, siehe ZeitscheibeT imer , 118, 129Timesharing, 4, 39, 44, 51, 52, 54Timing Error, 99, 100Token-Ring, 216Trail er , 227Transaktions-orientiert , 4Transmission control protocol, siehe
TCPTransport Layer , 218, 227Transportschicht , siehe Transport Layertry.atomi c.semop, 214
UDP , 216, 219-221 , 223, 227Client , 225Header , 221Server, 224, 225
udp...sendmsg, 230umask, 158, 165Umgebung
vererbte, 30umount , 166unlink , 148, 193
290 Sachverzeichnis
unlock.kernel, 94Unterbrechun gen unterdrucken , 115up , 92, 93User datagram protocol, siehe UDPUser Mode , 11, 12user.struct , 24
Valid-Bit , 59Verbindung, 223verdrangen , 44Verdrangung, 42Vererbung
Dat ei,29pip e, 199Ressource, 28Umgeb ung, 30
Verhungern, 42, 47, 94, 124, 144, 181Verkl emmung, 90Verkniipfung, siehe LinkVermittlungsschicht , siehe Network
layerVFAT ,183vfork , 33, 34VFS , 183, 199, 205vfs.read , 171vfsmount , 152Virtual File Syst em , siehe VFSVirtual Mode, 238vm.area.struct , 64, 65VM_EXEC,66VM_READ , 66VM_SHARED ,66VM_WRITE,66VMA ,65
wait , 31, 32, 100, 103waitpid , 32, 35wake.up, 130Warten im Kreis, 91Warteschlange, 40, 48, 51, 129, 130,
132, 231wb.kupdat e, 79Windows, 1, 3, 12, 143wipe, 194Work Queue, 117, 125, 126, 128, 132work-queue, 126work.struct , 126Worker Thread, 128workqueue.struct , 127write, 136, 137, 151, 163, 200, 203, 205,
224,230sequential , 195
write.super , 152writepage, 77writev, 151Wurzelverzeichnis, 140, 158
Zeitscheibe, 42, 43, 45-48, 51Zombie, 33Zone, 70zone , 74ZONE-DMA,73ZONE-HIGHMEM,73ZONE-NORMAL,73Zugriff
direkt , 138sequent iell, 138
zur Vererbung, 28