Friedrich-Alexander-Universität UnivisSuche FAU-Logo
Techn. Fakultšt Willkommen am Department Informatik FAU-Logo
Logo I4
Lehrstuhl für Informatik 4
Betriebssysteme
 
  Vorlesung
    - UnivIS-Infos
    - Inhalt
    - Folien
 
  Übungen
    - UnivIS-Infos
    - Inhalt
    - Ergänzendes Material
    - Terminübersicht
    - Aufgaben
       * Umgebung
       * Typische Fehler
       * A 1
       * A 2
       * A 3
       * A 4
       * A 5
       * A 6
       * A 7
 
  Evaluation
Department Informatik  >  Informatik 4  >  Lehre  >  WS 2007/08  >  Betriebssysteme  >  Übungen  >  Aufgaben  >  Aufgabe 4

Aufgabe 4: Prozessumschaltung für OOStuBS

Lernziele

  • Auffrischen der Assemblerkenntnisse (siehe auch Assembler-Crashkurs)
  • Verständnis der Abläufe beim Prozesswechsel
  • Unterscheidung von aktiven und passiven Objekten

Aufgabenbeschreibung

Es soll eine einfache Prozessverwaltung implementiert werden, bei der die Benutzerprozesse die Prozessorabgabe im Sinne des Koroutinenkonzepts selbst regeln.

Dazu müssen einige Funktionen zum Zugriff auf die Struktur toc, die Klassen Coroutine, Dispatcher, Entrant und Scheduler, sowie die Funktion kickoff () implementiert werden. Außerdem soll OOStuBS nun mit Application eine Anwendung erhalten.

Um die Prozessumschaltung überall in OOStuBS ansprechen zu können, soll in Aufgabenteil b eine globale Instanz des Dispatchers angelegt und in Teil c durch eine globale Instanz scheduler des Schedulers ersetzt werden.

Die Funktionsfähigkeit der genannten Klassen soll mit Hilfe eines aussagefähigen Testprogramms gezeigt werden. Dazu soll in main.cpp nun zusätzlich eine globale Instanz scheduler der Klasse Scheduler angelegt und ein erster Benutzerprozess application (ein Objekt der Klasse Application) erzeugt werden, der seinerseits weitere Benutzerprozesse erzeugt. Testet auch die Methoden Scheduler::exit () und Scheduler::kill (Entrant& item).

Implementierungshinweise

Zum Testen empfiehlt es sich, die Gesamtaufgabe in drei Teile zu teilen und mit Teil b und c erst zu beginnen, wenn Teil a (bzw. b) fertig implementiert und ausreichend getestet wurden.

Teil a

Hier wird der Koroutinenwechsel realisiert. Es müssen also zunächst nur die Zugriffsfunktionen auf die Struktur toc und die Klasse Coroutine implementiert werden. Zum Testen der Lösung sollten in Application (hier noch als Spezialisierung der Klasse Coroutine) mehrere Benutzerprozesse (die ebenfalls von Coroutine abgeleitet werden müssen) erzeugt werden, welche jeweils nach einigen Anweisungen den Prozessor an die nächste Koroutine abgeben.

Teil b

Als nächstes kann der Dispatcher implementiert werden. Im Testprogramm sollte der Koroutinenwechsel nun über den Dispatcher laufen können.

Teil c

Zum Schluss sollte der Scheduler hinzugefügt werden, der die Prozessabstraktion Entrant benötigt. Im Testprogramm müssen die Anwendung und Benutzerprozesse (nun als Spezialisierungen der Klasse Entrant) beim Scheduler angemeldet werden. Dafür brauchen sie sich nicht länger gegenseitig zu kennen, denn die Auswahl des nächsten Prozesses kann nun der Scheduler übernehmen.

Vorgaben

Die Implementierung der Klassen Chain und Queue haben wir bereits für euch erledigt und einen Teil von toc geben wir auch vor.

  Impressum Stand: 2008-01-07 09:17   OS, WH