Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels...

42
A Kompilieren des Kernels Aueh wenn heute die Notwendigkeit in der Regel nicht mehr hoch ist , seinen eigenen Kernel zu erzeugen, da viele Hardwar etreiber dyn ami sch in das lau- f ende System eingebunden werden konnen (vgl. 10.5), gibt es doch ein paar Criinde, die zu einem eigenen Kernel fuhren konnen: Sicherheitserwagungen: Loadabl e Modules konnen im Zweifelsfall missbraucht werd en. Wenn al- les, was der Kernel fur eine bestimmt e sehr sichere Produktionsumge- bung ben6tigt, bereits fest eingebunden ist, konnen an dieser Stelle keine Schwachstellen mehr auftreten. Dies bedeutet jedoch, dass alle Patches - alle sicherheitsrelevanten Ande- rungen am Kernel und den ein gebundenen Modules - manuell nachgehal- ten werden miissen und zu einer erne ute n Kompilati on des Kernels fiihr en . Mitarb eit an der Linux- Entwicklung: Ohne Testen des jeweils modifizierten Kernels ist eine Mit arb eit nieht moglich. Int eresse: Urn einige Aspekte besser zu verst ehen sowie aus Neugier kann man ver- su chsweise Kernel kompilieren. Spezielle Hardware usw.: In manchen Situ ationen, in denen Treiber fiir neue Hardware noch nicht zum "Repe rtoire" von Linux gehoren, wohl aber schon als Testversionen bzw. als Eigenentwicklung vorliegen, muss man den Kernel mit den Trei- b ern kompilieren. Was ist zu beachten, d amit man sich mit der Erzeugung eines neuen Kernels keine Probleme einhandelt? Es muss da rauf geachtet werd en, dass alle Entwicklungswerkzeuge in der benotigten Version vorliegen. Dies betrifft zunachst den C-Compiler gee. Als weit eres un abdin gbares Werkzeug wird make eingesetz t . make greift auf eine Datei Makefile zu, die Regeln fur die Erzeugung des K ernel definiert .

Transcript of Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels...

Page 1: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 lau­fende 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 al­les, was der Kernel fur eine bestimmte sehr sichere Produktionsumge­bung ben6tigt , bereit s fest eingebunden ist , konnen an dieser Stelle keineSchwachstellen mehr auft reten.Dies bedeutet jedoch, dass alle Patches - alle sicherheits relevanten Ande­rungen am Kernel und den eingebundenen Modules - manuell nachgehal­ten 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 ver­suchsweise 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 Trei­bern 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 .

Page 2: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 Namens­gebung kann abgeleite t werden, dass es sich urn die Kernelversion 2, Pat­chlevel 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 wech­seln. Die Datei Makefile ist anzupasse n: die Variable Extraversion soll­te 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 geeig­nete 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 be­findet 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 vorgenom­men werden. Dafiir miissen aber die benotigten Module fest in denKernel einkompiliert werden.

- "Processor type": Hier lasst sich der verwendete Prozessor genauer fest­legen 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-Ausstat­tungen beschrieben und darnit die benotigten Cerate-Treiber zur Ker­nel-Konfiguration angefordert .

- "Executable file format" : Dieser Eintrag beschreibt, welche Dat eifor­mat e als ausfiihrbare Programme und Libraries unterstii tzt werden.

Page 3: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 kompilie­ren oder als Loadable Module erzeugen - sofern die Unterstiitzung dafiirvorgesehen ist .

• Nach der Erz eugung der Konfigur ation kann mit dem Kompilieren begon­nen 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:

Page 4: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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

Page 5: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

B

Lineare Listen in Linux

Neben der Verwendung von Strukturen gehoren verket tete Listen zum wich­t igen Handwerkszeug, das bei Betriebssystemen - und hier bei Linux - ein­gesetz 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 Wild­wuchs vorzub eugen , muss sich jeder Linux-Programmierer an das hierfiir he­reitgestellte 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 nachs­ten Eintrag zeigt, prey, der auf den vorangehenden verweist . Der next-Pointerdes "letzte n" Eintrags zeigt auf den ersten, der prey-Pointer des "ersten" Ein­t rags verweist auf den letzten. Folgt man den Zeigern immer in einer Rich­tung, 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 Da­tenteil weggelassen, urn eine allgemeine Form von Listen erzeugen zu k6nnen.

Page 6: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

252 B Lineare Listen in Linux

Deshalb muss die Struktur list...head in andere Strukturen eingebettet wer­den , 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 not­wendigen 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 doppelt­verketteten 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.

Page 7: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 In­formation die Funktion __List ..de'l O auf, die ihrerseits die eigentl ichen Poin­teroperationen 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

Page 8: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 Ak­tion mit ihnen durchzufiihren , muss eine for-Schleife geschrieben werden,

Page 9: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 ein­gebettet 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 Makro­Compiler, 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 Listen­kopf, 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 .

Page 10: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 die­se 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 Listen­kopf ist die durch offsetof 0 berechnete Anzahl von Bytes vom Beginn derinode-Struktur ent fernt.

Page 11: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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) umzuge­hen . Schedu ling, das auf Pri ori taten basiert , neigt dazu , gering priorisierteProzesse verhungern zu lassen . Altern erhoht die Priorit at nicht bearbei­teter 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 abzubil­den: im Basisregist er (Register) der CPU wird die physische Anfangsadres­se 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) ge­nannt , die ohne Benutzer-In teraktion erfolgt . Wichtiger als die Reaktio ns­zeit ist bei der Batch-Verarbeit ung in der Regel der Durchsatz, weshalb

Page 12: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

258 C Glossar

bei Batch-orientierten Betriebssystemen die Algorithmen des Schedulersanders gewahlt werden mussen als z.B. bei Timesharing-orientierten Be­triebssystemen. Doch auch bei Timesharing-orientierten Betriebssystemengibt es haufig die Moglichkeit , Prozesse als Bat ch im Hintergrund zu star­ten.

Benutzer ist ein Anwender (Person oder Programm, z.B. Datenbankmanage­mentsystem) , 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 ele­mentare Bootprogramm zum Starten eines Rechners. Das BIOS ist inseinen Fahigkeiten sehr beschrankt, es kann nicht viel mehr, als den ers­t en Block einer Platte einzulesen und das darin enthaltene Programm zust arten.

BKL (Big Kernel Lock) ist eine veraltete Sperrtechnik unter Linux, die in­zwischen 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 sequen­tiellen Zugriff auf eine in einer Blockgruppe gespeicherte Datei moglichstklein zu halten.

Bootblock ist der erste Block auf einer Platte oder Partition, der unter ande­rem Code zum Starten eines Betriebssystems enthalten kann .

Bootmanager dient zum Starten eines Betriebssystems. Dazu wird der je­weilige Kernel von einer vorgegehenen Plattenposition geladen und an­schlieBend die Kontrolle an den geladenen Kernel iibergeben. Bootmana­ger dienen in der Regel dazu , das Booten unterschiedlicher Betriebssyste­me 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 ablau­fen muss, keine Interrupts zugelassen sind , kann in der Bottom Half nor-

Page 13: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 durch­zufiihren.

Buddy System Algorithmus zielt dar auf ab, effizient zusammenhangende freieSpeicherblocke bereitstellen zu konnen . Dazu werden freigegebene Spei­cherblocke daraufhin untersucht , ob ihr "Buddy" - ihr Nachbar - ebenfallsfrei ist . In diesem Falle werden die freien Blocke zu einer groferen Ein­heit zusammengefasst . Das Verfah ren ist so konzipiert , dass die Anzahlzusammengefasste r Blocke jeweils eine 2er Po tenz bildet . Diese Zusam­menfassung kann tiber mehrere Stufen erfolgen.

Bus bezeichnet die physische Verbindung unterschiedlicher Bauteile, z.B.CPU und Speicher . Damit die Bau teile miteinander kommunizieren kon­nen , 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 Schlei­fe wird in dem Augenblick verlassen , in dem die Verfugb arkeit erkanntwird. Dieses Verfahren kann bei Betriebssystemen sinnvoll eingesetzt wer­den , 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. Bei­spiele 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 er­spart das unnotige Kopieren vieler Pages.

Page 14: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

260 C Glossar

Contiguous ist eine Dateiorganisation, bei der die Blocke einer Datei zusam­menhangend 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 in­terner Cache integriert.

Critical Section (kritischer Abschnitt) bezeichnet bei kooperierenden Prozes­sen 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 je­weils 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 Benut­zers. 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 tiber­tragen.

Daemon ist ein im Hintergrund laufender Prozess, der Dienste anbietet. Esgibt keine direkte Benutzer-Interaktion, vielmehr wartet ein Daemon dar­auf, 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 verlustbe­haftete 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 Block­nummer 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

Page 15: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

C Glossar 261

wird die CPU nur noch zum Initialisieren des entsprechenden Baustei­nes 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 Betriebs­system 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 , Umgebungsvaria­bien und deren Werte einem Prozess zu iibergeben. Das Environment wirdbeim Duplizieren eines Prozesses mittels forkO-Aufruf und einer nachfol­genden 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 Filesys­tern.

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 Pro­zess 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 Periphe­riegerat 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) .

Page 16: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 zulas­sen, grofere zusammenhangende Bereiche zu belegen. Durch Defragmen­tierung 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 Basisre­gister auf den Beginn des zum Prozess gehorigen Speicherbereiches zeigt,enthalt das Grenzregister die obere Grenze fur die logische Adresse. Uber­schreitet die logische Adresse diese Grenze, so wird ein Illegal Address In­terrupt ausgelost. Wahrend das Basisregister auch bei heutigen Rechner­Architekturen noch recht deutlich zu sehen ist, ist die Funktion des Grenz­registers 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 Ha­shings 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 notwen­digen 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 .

Page 17: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 hinzu­zufiigen 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 Allo­cation frei gewahlt werden.

Indirektion tritt auf, wenn der Zugriff auf einen Block tiber ein- oder mehr­stufige 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 Bootvor­ganges in den Speicher geladen wird . Die Organisationform der Datei ent­spricht dem Abbild einer Diskette, die gelesen werden kann , bevor weiter­gehende 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 Quell­text 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 da­durch entstehen, dass der einer Dat ei bzw. einem Prozess zugeordnetePlatz nicht vollstandi g ausgefullt wird .

Interrupt ist eine synchrone oder asynchrone Unterbrechung der gerade bear­beiteten Instruktions-Folge. Eine synchrone Unterbrechung, auch Signalgenannt , liegt vor , wenn der Prozessor Ausnahmen im Rahmen seinerVerarbeitung erkennt , z.B. Division durch Null . Wahrend bei Kernel­Routinen diese Situationen intern verarbeitet und in Form eines Fehler­Codes 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-

Page 18: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 so­fort ausgefiihrt werden soll. Dem Interrupt liegt das Eintreten eines Er­eignisses 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 Inter­rup 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 ent­spricht dem Data link layer des ISOIOSI-Modells. IP ist das Protokoll derVermittlungsschicht , TCP und UDP sind die Protokolle der Transp ort­schicht .

IP C (Inter Process Communication ) ist eine Implementierung von Kommu­nikationsmechanismen 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 Controller­Karten benutzt wird.

ISAM (Indexed Sequential Access Method) bezeichnet eine Zugriffsmethodefiir Dat eien, die sowohl sequent iellen als auch index-basiert en Zugriff un­terst 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.

Page 19: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

C Glossar 265

Kernel Mode ist ein Zustand der CPU. Die CP U wechselt aus dem User Mo­de 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 Verfah­ren , dabei wird zwischen symmetrischen und asymmetrischen Verfahrenunterschieden . Zu den symmetrischen gehoren z.B. DES, Twofish; asym­metrische Verfahren werden auch als Public Key Verfahren bezeichnet .

Leichtgewichtiger Prozess bezeichnet in der Regel einen Thread , der alle Res­sourcen 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 tei­len. 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 In­formation 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 Stel­le 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 Be­tri ebssyst emen sehr intensiv genutzt wird . Bei einer einfach verkettetenListe ent halt jeder Listeneint rag einen Zeiger auf den nachfolgenden Ein­trag. 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

Page 20: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 (ver­alte 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 De­mand , 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 meh­rere Byt es, die an bestimmter Stelle eines Obj ekts gespeichert werden. Ausdem dort gespeicherten Inhalt kann das Betri ebssystem gewisse Inform a­tionen 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 entspre­chenden Quelltext umgesetzt werden. Dies erfolgt auf Grund der Macro­Definition 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 hinge­gen ist lesbar , kann aber yom Proz essor nicht direkt verarbeitet werden,sondern muss erst durch einen Compiler in eine geeignete Folge von Ma­schineninstruktionen umgewandelt werden.

MBR (Master Boot Record) ist der erste Sektor einer Plat te, der die Parti­tionstabelle 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 Pro­zessen 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 .

Page 21: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 zu­geordnet , die CPUs konnen nicht direkt auf den Speicher einer anderenCPU zugreifen, die Kopplung erfolgt tiber einen Kommunikationsbus. Li­nux 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 i­ge" - 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 schein­bar gleichzeit ig bearbeitet werden . Damit einher geht die Notwendigkeit ,Speicherschutz zu implementieren, damit ein Prozess nicht auf den Spei­cherplatz eines anderen Prozesses zugreifen kann .

Multiuser heiBt , das Betriebssystem unterstiitzt mehrere Benutzer. Damitmuss zugleich ein Rechte-System bereitgestellt werden, damit Dat eien ge­gen 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 gespei­chert ; 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 verwen­detes Filesystem.

NUMA (Non Uniform Memory Access) bezeichnet (Mehrprozessor-) Archi­tekturen, 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 Re­chena 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

Page 22: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 glei­cher GroBe (Pages) unterteilt, die GroBe stimmt mit der Frame-Grofeiiberein. Diese Blocke werden mit Hilfe der Pagetable auf Frames im Spei­cher 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 Zuhilfenah­me 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 Betriebs­systems - bzw. allgemein eines Software-Systems -, urn einen Fehler zubeheben.

PATH heiBt in Unix-Betriebssystemen eine Umgebungsvariable, die die Su­che nach ausfiihrbaren Programmen errnoglicht. Wird ein Name so be­nutzt, dass er als ausfiihrbare Datei interpretiert wird, so wird nach einerausfiihrbaren Datei gleichen Namens in den in dieser Variablen aufgefiihr­ten 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 einge­setzt: North- und South-Bridge.

PCI-Bus ist ein paralleler Bus , urn Rechner-intern Interface-Karten zu inte­grieren.

Physische Adresse bezeichnet diejenige Adresse im Speicher, an der eineF'unktion oder Datenstruktur gespeichert ist . Wahrend im Programm 10­gische 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 .

Page 23: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 hochs­tens 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 durch­gefiihrt. Dabei werden die vorhandenen Cerate ermittelt und iiberpriiftund anschlieBend eine Zuordn ung der Interrupts und I/O-Ports vorge­nommen.

Pracompiler ist eine insbesondere in der C-Programmierung verwendete Tech­nik , iibersichtlichere Prog ramme zu erste llen. Der Pracompiler lauft vorder eigentlichen Ubersetz ungphase des C-Compilers. Er wertet die Makr o­Anweisungen #include- , #def ine- und #if aus und ersetzt sie im Quell­text 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 Source­Code 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 Ma­schineninst rukt ion. Hand elt es sich jedoch bei der bearb eiteten Maschi­neninstruktion um eine Verzweigung, einen Prozeduraufruf oder entspre­chendes, so wird stattdessen diejenige Adresse im Program Counte r ein­getragen, bei der die Vera rbeit ung fortgesetzt werden soll.

Page 24: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

270 C Glossar

Prozess ist ein Programm in Ausfuhrung. Genauer: PCB, Speicher , der denausfuhrbaren Programm-Code und die Daten enthalt, und weitere zuge­ordnete Ressourcen bilden einen Prozess, der beim Scheduling berucksich­tigt werden kann .

Prozess-Kontext ist der Zustand , in dem ein Prozess mit dem Kernel ge­koppelt 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 Ausfuhrungsrei­henfolge 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 iel­len Lesen einer Dat ei: bei der Anforderung eines Blockes werden die fol­genden 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 ver­geht . 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 Program­me vom Betri ebssystem kontrolliert werden kann .

Red-Black-Tree (auch RB-Tree) bezeichnet eine besondere binare Baumstruk­tur 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 Prozes­sen gleichzeit ig benutzt werden kann. Viele Programme sind in Unix­Betriebssystemen so ausgelegt . Dadurch wird bei einem System, das meh­rere 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

Page 25: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 e­sondere fur die Verwaltung sehr vieler kleiner Dat eien geeignet .

Relokabel (verschiebbar) ist ausfuhrbarer Code, wenn er an andere Speicher­ort 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 In­teger ist. (Fast) aIle System Calls haben einen Returncode, der anzeigt ,ob die Verarbeitung erfolgreich war oder nicht . In der Regel bedeutet Re­turncode = 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 Bootpro­zess 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 , in­nerhalb 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 die­ses 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 rechen­bereiten Prozess auswahlt, urn ihm die CPU zuzute ilen. Auch fiir 1/0­Auftrage 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 be­nutzt .

SCSI ist ein paralleler Bus zur Datenubert ragung zwischen Rechner undCeraten .

Segmenti erung ist eine Einteilung des Adressraum s nach "inhalt lichen Kri­terien". Wahrend Paging den Adressraum formal in gleich groBe Blocksunterteilt , ist Segmentierung auf den Software-Entwicklungsprozess ausge­richtet : 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 Secti­ons zu regeln und dadurch Race Conditions zu vermeiden. Bei der Sema­phore handelt es sich urn einen abstrakten Datentyp , der zwei Zustandeeinnehmen kann und die beiden Operationen wait 0 und signal 0 anbie­tet. wait () pruft , ob bereit s ein Prozess seine Critical Section betreten hat

Page 26: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 vor­gegebenen maximalen GroBe annehmen,- es konnen mehrere Semaphoren-Werte in einer Semaphore zusammen­gefasst werden,- in einer atomaren Operation kann auf mehrere Semaphoren-Werte einerSemaphore zugegriffen werden.

Sequentieller Zugriff bezeichnet das aufeinander folgende Lesen bzw. Schrei­ben 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 zuge­teilt wird. Der Algorithmus muss eine sehr kurze Laufzeit besitzen, da erext rem haufig aufgerufen wird.

Signal ist eine synchrone Unterbrechung des Instruktionsflusses, siehe Inter­rupt .

Slab dient als Cache fur Datenstrukturen, die vom Kernel benotigt werden.Durch die Zusammenfassung gleicher Objekte konnen frei gewordene Spei­cherpliitze 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 Ausfuh­rung 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.

Page 27: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

C Glossar 273

Speicheradresse zeigt auf einen Platz ("Zelle") im Speicher , auf den zugegrif­fen 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 Ver­arbeitung 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 Plattenpartiti­on.

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 wesent­lich 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. Bi­bliotheken 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-IRQ­Mechanismus, 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 Proto­koll 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.

Page 28: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

274 C Glossar

Timesharing nennt man System, das dafiir ausgerichtet ist , mehrere interak­tive Benutzer gleichzeitig zu bedienen. Dazu muss insbesondere ein geeig­neter 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 ent­weder 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 Zu­stand 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 kon­krete Filesysteme wie ext 2, reiserfs oder nfs zuzugreifen.

Virtuelle Speicherverwaltung dient dazu, den Speicher dynamisch zu verwal­ten. 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 ei­ne zum Adressraum des Prozesses gehorige Page, die nicht im Speicher

Page 29: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 Betriebs­systeme auf einem Rechner gleichzeit ig laufen zu lassen , wobei jedes Sys­tem 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 Dia­log-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 Funk­tion 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-Behand­lung 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 wer­den. Ein wesentlicher Unterschied zu anderen Bot tom Half-Methoden liegtdarin, dass die Bearbeitung im Prozess-Kontext und nicht im Interrupt­Kont 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-

Page 30: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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.

Page 31: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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 Linux­Kernel.

• 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 port­und 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.

Page 32: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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

Page 33: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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

Page 34: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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

Page 35: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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

Page 36: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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

Page 37: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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

Page 38: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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

Page 39: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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

Page 40: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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

Page 41: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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

Page 42: Kompilieren des Kernels - link.springer.com978-3-540-29376-7/1.pdf · 248 A Kompilieren des Kernels • Die Kernel-Quellen miissen an der richtigen Stelle im Verzeichnisbaum, namlich

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