next up previous contents
Nächste Seite: Prozeßebene Aufwärts: Linux 2.4 Kernumgebung Vorherige Seite: Linux 2.4 Kernumgebung   Inhalt

Ablaufsteuerung

Das Threading Modell des Linuxkerns beruht auf dem blockierenden Schema, und Aktivitäten im Kern sind nicht verdrängbar. Natürlich können eintretende Hardware-Ereignisse -- Interrupts -- eine sofortige Preemption zur Folge haben, sofern diese nicht deaktiviert wurden2.3.

Um den Kern attraktiver bzw. leistungsfähiger im Serverbereich zu gestalten, wurde großer Wert auf maximale Parallelität in Multiprozessor-Systemen gelegt und somit die in Abschnitt 2.2 erwähnten intelligenten Sperren weitreichend eingesetzt.

Die Synchronisation im Linuxkern stützt sich auf grundlegende Mechanismen und erweiterte Funktionen. Die grundlegenden sind:

Semaphore
Die Semaphore in Linux entsprechen der klassischen Definition, d.h. ist der Semaphore nicht frei, wird die Aktivität bei Anforderung in eine Warteschlange eingekettet und gibt den Prozessor frei. Wird die Ressource wieder freigegeben, kann auch die Aktivität fortgesetzt werden. Semaphore dienen der Synchronisation von Aktivitäten auf der Prozeßebene.

Sperren von Interrupts
Hiermit ist es möglich Aktivitäten auf einem Prozessor zu serialisieren, denn wenn keine Unterbrechungen erlaubt sind, müssen diese nicht asynchron bearbeitet werden. Auf diesem Wege synchronisiert man Prozeß- und Interruptebene auf einem Prozessor.

Spin Locks
Diese Art der Synchronisation ist nur in Systemen mit Symmetric Multi Processing (SMP), also mehreren parallel arbeitenden Prozessoren und ,,echter`` Parallelität von Aktivitäten, interessant. Die Anforderung einer Sperre hat zur Folge, daß der Thread solange aktiv wartet -- busy waiting -- bis die Sperre frei ist und diese dann belegt.

Hier zeigt sich auch der Sinn der Einschränkung auf Multiprozessor-Systeme, denn Busy-Waiting auf den Abschluß einer parallelen Aktion auf einem Prozessor ist ein eindeutiger Deadlock in nicht preemptiven Umgebungen wie Linux.

Semaphore und Spinlocks in Linux sind nicht rekursiv, ein nochmaliges Anfordern der gleichen Ressource führt also zu einem Deadlock.


Verwendet man diese Funktionalitäten sinnvoll und intelligent, läßt sich ein hohes Maß an Parallelität erreichen. Davon profitiert z.B. der überarbeitete Netzwerkprotokoll-Stack unter SMP.


Außer diesen grundlegenden Mechanismen existieren weitergehende Funktionalitäten, die den Ablauf im Kern beeinflussen. Hierbei werden verschiedene mögliche Szenarien sehr gut auf abstrakte Datentypen und Funktionen abgebildet. Zu beachten ist aber, auf welcher Ebene man sich gerade befindet:



Unterabschnitte
next up previous contents
Nächste Seite: Prozeßebene Aufwärts: Linux 2.4 Kernumgebung Vorherige Seite: Linux 2.4 Kernumgebung   Inhalt
Christian Helmuth 2001-12-11