💾
Betriebssysteme
  • Kursinformationen
    • Termine
  • Einheit 1: Git
    • Einheit 1: Hausaufgabe
  • Einheit 2: C Programmierung
    • Einheit 2: Hausaufgabe
  • Virtualization
    • Exercise: Process Creation
  • Speicher
    • Exercise: Memory
    • Lab 01: Stack
  • Scheduler
    • Exercise: Scheduler
  • Fortgeschrittene Scheduler
  • Fortgeschrittene Speicherverwaltung
    • Exkurs: Free List
    • Lab 02: Free List
  • Threads
    • Exkurs: Bugs durch Nebenläufigkeit
    • Exercise: Deadlock
  • Einheit 9: Semaphore
  • Einheit 10: Input / Ouput
  • Einheit 11: Harddisks & Dateisysteme
  • Einheit 12: Virtualisierung & Container Technologien
  • Einheit 13:
  • Lab 03: Semaphore
  • Lab 04: Canonical Treiber Implementierung
  • Page 1
Powered by GitBook
On this page
  • Voraussetzungen
  • Aufgabenstellung
  • Abgabe
  • Bewertung
  • Hinweise
Edit on GitHub
  1. Speicher

Lab 01: Stack

PreviousExercise: MemoryNextScheduler

Last updated 1 year ago

Voraussetzungen

Nutzen Sie hierfür .

Sie können gcc unter Linux und/oder macOS direkt verwenden. Unter Linux installieren Sie gcc über Ihren Paket-Manager, unter macOX über .

Nutzen Sie Windows 10 können Sie entweder eine Linux in einer virtuellen Maschine (z.B. in ) nutzen, oder direkt das nutzen. Alternativ ist es möglich Windows Subsystem for Linux über den Windows App Store zu installieren.

In der Wahl der Linux Distribution sind sie frei, alle Beispiele in der Vorlesung werden jedoch unter Ubuntu (letzter stabiler Release) bewertet und eventuell vorgestellt.

Aufgabenstellung

  1. Implementieren Sie einen Stack auf Basis folgender Header-Datei (stack.h):

void push(int val);
int pop();
int peek();
  1. Ihr Stack verfügt über eine maximale Größe von 100 Elementen.

  2. Ihr Code sollte zu einem gewissen Maße robust sein, stellen Sie daher sicher dass folgende Bedingungen eingehalten werden:

    a. Beim überschreiten der maximal zulässigen Anzahl von Einträgen durch den Aufruf von push() liefert Ihr Code folgende Fehlermeldung:

    ERROR: Size 100 of stack exceeded when adding value X

    Wobei X der Wert der Variable ist, welcher versucht wurde auf den Stack zu legen.

    b. Beim Versuch einen Wert mittels pop() vom Stack zu nehmen, ohne dass ein Wert auf dem Stack liegt erfolgt folgende Fehlermeldung:

    ERROR: Stack is empty, NULL return instead

    In diesem Fall liefert die Funktion pop() keinen Integer-Wert, sonden den Wert NULL zurück.

    c. Beim Versuch einen Wert mittels peek()vom Stack zu lesen wenn der Stack keine Einträge enthält erfolgt folgender Hinweis:

    ERROR: Stack is empty, NULL return instead

    In diesem Fall liefert die Funktion peek()keinen Integer-Wert, sondern den Wert NULLzurück.

    d. Alle drei Fehlermeldungen werden auf ausgegeben.

    Hinweis: Achten Sie darauf, dass bei der Ausgabe der Fehlermeldung diese immer mit einem Zeilenumbruch (\n) endet.

  3. Hinweis: Ihre Datei(en) dürfen keine main()-Methode enthalten. Sollten Sie dennoch eine main()-Methode erstellen wollen, tun Sie dies bitte nur in einer Datei main.c

Abgabe

Die Bewertung Ihrer Abgabe findet automatisch statt. Stellen Sie hierzu folgende Punkte sicher:

  • Ihre Lösung befindet sich im Ordner aufgabe1.

  • Ihre Implementierung befindet sich in einer Datei mit dem Namen stack.c.

  • Sie nutzen eine Header-Datei in der der obige Header hinterlegt ist.

  • Ihre Lösung checken Sie in Ihrem Repository ein.

Bewertung

  • Die Bewertung Ihrer Aufgabe findet anhand einer Reihe von automatisierten Tests statt.

  • Hierzu ist es erforderlich, dass die obigen Schritte exakt eingehalten werden.

  • Ihr Implementierung wird einer Reihe von automatisierten Tests unterzogen, die Ihre Implementierung auf Korrektheit überprüfen.

  • Abgaben, die nicht vollständig sind oder die Abgabekriterien nicht erfüllen werden nicht bewertet.

  • Abgaben, die nicht fristgerecht eingereicht werden, werden nicht bewertet.

  • Nutzen Sie zur Abgabe ausschließlich das beschriebene Verfahren. Abgaben, die per E-Mail oder anderen Wegen eingereicht werden, werden nicht bewertet.

  • Abgaben, die aufgrund eines Fehlers nicht durch die Tests laufen, werden entsprechend mit weniger Punkten bewertet.

Hinweise

In der Aufgabestellung wird die Rückgabe des Wertes Null gefordert. gcc sollte beim Kompilieren eine Warnung der Form

warning: returning ’void *’ from a function with return type ‘int’ makes integer from pointer without a cast [-Wint-conversion]

Zur Abgabe erhalten Sie einen Zugang zum hochschulinternen .

liefern. Starten Sie gcc mit der Option -Wno-int-conversion um diese Warnung zu deaktivieren. Weitere Informationen zu den gcc Warnungen erhalten Sie auf den GCC Seiten unter .

gcc
Homebrew
VirtualBox
Windows Subsystem for Linux (WSL 2.0)
stderr
GitLab
Options to Request or Suppress Warnings