• Keine Ergebnisse gefunden

Aufgabe1:InterpretationdesVerfahrens(10%) IntegrationneuerSystemaufrufeindenLinux-Kernel Blatt1

N/A
N/A
Protected

Academic year: 2021

Aktie "Aufgabe1:InterpretationdesVerfahrens(10%) IntegrationneuerSystemaufrufeindenLinux-Kernel Blatt1"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ubungen zur Vorlesung¨ Betriebssysteme II Sommersemester 2012

AG BS Jan Peleska Florian Lapschies

Blatt 1

Integration neuer Systemaufrufe in den Linux-Kernel

In dieser ¨Ubungsserie wird die Entwicklung neuer Systemaufrufe, ihre Integration in den Linux-Kernel, sowie die zugeh¨orige Kernelgenerierung ge¨ubt.

Dabei handelt es sich um vier Funktionen zur optimistischen Transaktionsverwaltung, welche den konkurrierenden Zugriff auf gemeinsam benutzten Speicher unterst¨utzen. Die Auf- rufe lauten

int bs2_ta_init();

ssize_t bs2_ta_read(void *buf, size_t count);

ssize_t bs2_ta_write(void *buf, size_t count);

ssize_t bs2_ta_unconditional_write(void *buf, size_t count);

und haben folgende Bedeutung: Im Kernel wird ein Puffer (unsigned char array) fester Gr¨oße angelegt, in welchem die Nutzdaten der Transaktion gespeichert werden.

Mit dem Aufruf bs2_ta_init()wird dieser Bereich mit 0 initialisiert.

Mit bs2_ta_unconditional_write()werden die erstencountBytes des Puffers ¨uberschrie- ben. Ist der Puffer kleiner als count Bytes, wird nur bis zur Pufferl¨ange geschrieben. Die tats¨achlich geschriebene L¨ange wird im R¨uckgabeparameter gemeldet. Bei jedem Schreiben wird ein interner Transaktionsz¨ahler im Kernel erh¨oht.

Mit bs2_ta_read(void *buf, size_t count); werden die ersten count Bytes bzw. der gesamte Puffer gelesen. Die tats¨achlich gelesene L¨ange wird im R¨uckgabeparameter gemeldet.

Mitbs2_ta_write()werden die erstencountBytes bzw. der gesamte Puffers ¨uberschrieben, wenn nach dem letzten Read des Schreibers zwischenzeitlich kein Write durch einen anderen Prozess erfolgt – d. h. der Transaktionsz¨ahler nicht erh¨oht worden – ist. Andernfalls kehrt der Befehl mit EAGAIN zurueck, und der Schreiber muss die Daten zun¨achst neu lesen.

Aufgabe 1: Interpretation des Verfahrens (10%)

Begr¨unden Sie, warum dieses Verfahren

• eine Form der konsistenten Transaktionsverwaltung darstellt,

• als “optimistisch” bezeichnet werden kann.

(2)

Aufgabe 2: Entwicklung der Systemaufrufe (60%)

Erweitern sie den Linux-Kernel 3.3.2 um die o.g. Systemcalls analog zum Beispiel aus dem Tutorium. Implementieren Sie den Kernelcode f¨ur die Systemcalls in einer neuen Datei bs2 transactions.c im Verzeichnis linux-3.3.2/kernel.

Hinweise: Die PID des aufrufenden Prozesses kann ¨uber current ermittelt werden. current ist ein Pointer auf den Prozesstabelleneintrag (Typstruct task_struct) des aktuellen Pro- zesses. Die PID ist incurrent->pid gespeichert.

Sie d¨urfen voraussetzen, dass nicht mehr als 100 Prozesse an der Transaktionsverwaltung teilnehmen.

W¨ahlen Sie eine Puffergr¨oße von 256 Bytes.

Kommentieren Sie sorgf¨altig die kritischen Abschnitte der einzelnen Kernelfuntionen.

Sch¨utzen Sie diese Sektionen durch den Aufruf der Funktion spin_lock(spinlock_t *)

Das Ende der Critical Section wird mit spin_unlock(spinlock_t *)

markiert. Der erste Aufruf bewirkt, dass die Verarbeitung des Systemaufrufs nicht nach ei- nem Re-Scheduling durch den gleichen oder einen in Konflikt stehenden Systemaufruf eines anderen Prozesses “¨uberholt” werden kann.

Aufgabe 3: Testprogramme (30%)

Um zu testen, dass Ihre Kernelerweiterung vern¨unftig funktioniert, sollen folgende Userspace- Programme geschrieben werden:

1. Schreiben Sie ein Initialisierungsprogramm, welches den Transaktionspuffer mit 0,. . . ,255 fortlaufend vorbelegt.

2. Schreiben Sie ein in mehrfacher Kopie ausf¨uhrbares Programm, welches folgendes Trans- aktionsverhalten implementiert:

• Der ganze Puffer wird gelesen.

• Im Puffer wird der erste Wert ungleich Null gesucht.

• Der Puffer wird im Userspace an dieser Stelle mit Null ¨uberschrieben und dann zur¨uck in den Kernel geschrieben.

• Wenn das Write gelingt, wird der “von der Applikation verbrauchte” Wert in eine Datei geschrieben. Wenn das Write nicht gelingt, erfolgt keine Ausgabe.

• Nach dem Write wird wieder mit dem Lesen des Puffers fortgefahren.

• Wenn alle Werte im Puffer Null sind, terminiert das Programm.

Wenn Ihre Implementierung korrekt ist, kann auch bei paralleler Ausf¨uhrung mehrerer Programmkopien jeder Wert genau einmal in der Ausgabedatei vorkommen.

Zur Generierung der Systemcalls-Wrapper zum Einsprung in den Kernel mit Interrupt 0x80 kann das Makro INLINE SYSCALL aus der beiliegenden Datei sysdep.h genutzt werden. Hierbei handelt es sich um eine vereinfachte Datei aus der GNU C Library 2.9.

(3)

Abgabe: Bis Montag, 07.05.2012, in der ¨Ubung.

Sowohl bei der schriftlichen L¨osung als auch im Source-Code die Namen aller Gruppenmitglieder nicht vergessen!

Referenzen

ÄHNLICHE DOKUMENTE

Wird Kompetenz als Handlungskompe- tenz definiert, muss immer auch die Moti- vation mit berücksichtigt werden, denn ein kompetentes Verhalten liegt nur dann vor, wenn beides –

ierzig Meter unter dem Meer in der Deutschen Bucht beträgt die Sicht nur wenige Zentimeter. Das Wasser ist gesättigt mit feinsten Schwebstoffen, die die großen Ströme wie Elbe

«Da tauchen jeweils ganz viele Fragen auf, und wir sind sehr froh um die pro fessionelle Unterstützung durch das Case Manage- ment», sagt Matthias Mosimann, Schulleiter an der

Trotzdem sage ich auch gerne: „Wir lachen alle in der gleichen Sprache.“ Wenn ein Unternehmen Firmenevents aus- richtet oder Mitarbeiter sich zum Fußballspielen tref- fen, kann

Um den ganzen Tag über gute Luft im Schul- zimmer zu haben, muss mehr gelüftet werden, als du wahrscheinlich denkst.. Richtig

Umfang des bisherigen geförderten Ausbaus in weißen Flecken Gering Realisierung bisheriger Förderung im Verbund (z.B. kreisweit) Nein Geförderter Ausbau im Betreiber- oder WL-Modell

Wasserstoff ist für eine klimaneutrale Energieversorgung von großer Bedeutung: In Wasserstoff und seinen Syntheseprodukten (zum Beispiel Ammoniak, Methanol, synthetischem Kerosin

Mein Kind ist wie meine Mutter/wie mein