• Keine Ergebnisse gefunden

Aufgabe1:RingpufferfürElementemitvariablerLänge Übungszettel3

N/A
N/A
Protected

Academic year: 2021

Aktie "Aufgabe1:RingpufferfürElementemitvariablerLänge Übungszettel3"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Übungen zur Vorlesung Betriebssysteme I Studiengang Informatik WS 08/09

AG Betriebssysteme FB3 Jan Peleska, Florian Lapschies Ausgabe: 04.12.2008

Abgabe: 18.12.2008

Übungszettel 3

Hinweise

Die Abgabe erfolgt als Ausdruck am Ende der Vorlesung und als E-Mail anflorian@tzi.de.Auf jeden Fallsollten alle C-Dateien auch in elektronischer Form (als E-Mail-Attachment) abgege- ben werden. Zur vollständigen Lösung der Aufgabe gehören Programm, Test und Dokumen- tation (in Latex). Der Betreff der E-Mail sollte folgendes Aussehen haben:

BS1 Abgabe x Gruppe y.

Bitte immer die Namen aller Gruppenmitglieder und die Gruppennummer angeben!

Aufgabe 1: Ringpuffer für Elemente mit variabler Länge

Programmiert eine C-Bibliothek, welche einen Ringpuffer für Telegramme variabler Länge be- reitstellt. Diese kann z.B. für die Punkt-zu-Punkt Kommunikation zwischen verschiedenen Threads eingesetzt werden. Testet die Bibliothek.

Berücksichtigt dabei auch, dass die Bibliothek auf verschiedenen Rechnerarchitekturen lau- fen soll. Auf SPARC-Architekturen können Integer-Werte (4 Bytes) nur an den entsprechenden Wort-Grenzen abgelegt werden.

Die Bibliothek soll folgende Funktionen enthalten:

Erzeugen eines FIFO Ringpuffers

Erzeugt einen FIFO Ringpuffer der GesamtgrößebuffersizeBytes, der für die Kommunikation von ThreadsourceThIdnach ThreadtargetThIdzu verwenden ist. Der Puffer wird dynamisch erzeugt. Die Verwaltungsinformationen (Zeiger auf den Pufferanfang und die Puffergröße, Quell- und Ziel-Thread Id, Lese- und Schreibindizes) werden in einer ebenfalls dynamisch zu allokierenden Strukturstruct Rb_handle_tregistriert und an den Aufrufer zurückgegeben.

struct Rb_handle_t *initRb(int targetThId, int sourceThId, size_t buffersize);

Element in den Puffer schreiben

Schreibt ein neues Elementitemder Längeitemsizein den Ringpuffer. Der Befehl schlägt fehl, wenn eine der folgenden Bedingungen erfüllt ist:

• targetThId/sourceThIdpassen nicht zumhandle

• es ist nicht mehr genügend Platz im Puffer, um den item der Länge itemsize Bytes im Ringpuffer unterzubringen

(2)

int writeRb(struct Rb_handle_t *handle, int targetThId,

int sourceThId, const void *item, size_t itemsize);

Element aus dem Puffer lesen

Das Lesen des ersten Elements aus dem Ringpuffer erfolgt analog. Beim Aufruf der Funktion trägt man initemsizedie Länge des vom Anwendungsprogramm zur Verfügung gestellten Puf- fers ein. Bei Rückkehr aus der Funktion ist dort die Länge der tatsächlich nachitemkopierten Daten enthalten.

Der Rückgabewert ist

• 1: falls erfolgreich und vollständig nachitemkopiert wurde

• 0: falls nichts im Puffer war

• -1: falls nicht das ganze Telegramm in item passte. In diesem Fall wird item komplett gefüllt und der Rest kann mit einem nachfolgenden Aufruf abgeholt werden. Er geht also nicht verloren.

• -2: bei Fehlern analog zuwriteRb()

int readRb(struct Rb_handle_t *handle, int targetThId,

int sourceThId, void *item,

size_t *itemsize);

Ringpuffer löschen

Deallokiert alle zum Ringpuffer gehörigen Puffer.

int freeRb(struct Rb_handle_t *handle);

Referenzen

ÄHNLICHE DOKUMENTE

In order to simply return to execution, we must make the process think that code at the address we obtained earlier (the current instruction from the thread context) was a piece

Objekte vom Typ Thread sind Prozesse, die parallel ablaufen k¨onnen wichtige Methoden:.. • run() , um den Prozess laufen

UML-Zustandsdiagramm: Java 6 Thread States and Life Cycle. Franz Kohnle Seite 1 von

• boolean tryAcquire(int permits, long timeout, TimeUnit unit) permits Freisignale nehmen (blockierend mit Timeout). •

Lehrstuhl für Connected Mobility Fakultät für Informatik Technische Universität München.. November 2020 Hinweis: Mit * gekennzeichnete Teilaufgaben sind ohne Lösung

 Communication between user level thread library and kernel in case of many-to-many library and kernel in case of many to many.

Using these assumptions and guarantees, our checker translates each thread into a sequential program that models the behavior of that thread precisely and uses the

Welche der folgenden Elemente (bzw. Ressourcen) geh¨oren bei einem Betriebssystem, das mehrere Threads pro Prozess unterst¨utzt, zum Prozeß (sind also allen Threads des