Skip to main content.

Navigation:

Prozessumschaltung

Lernziele

Aufgabe

Im Rahmen dieser Aufgabe soll eine einfach Prozessverwaltung, bei der die Benutzerprozesse die Prozessorabgabe im Sinne des Koroutinenkonzepts selber regeln, implementiert werden. Dazu müssen einige Funktionen zum Zugriff auf die Struktur toc, sowie die Klassen Coroutine, Dispatcher, Entrant und Scheduler und die Funktion kickoff implementiert werden. Außerdem soll oo-StuBS nun mit Application eine Anwendung erhalten. Die Struktur toc sowie die Klassen Chain und Queue, die zur Lösung der Aufgabe notwendig sind, werden als Vorgabe von uns zur Verfügung gestellt. Damit die Prozessumschaltung auch überall in oo-StuBS ansprechbar ist, soll im zweiten Schritt der Implementierung eine globale Instanz des Dispatchers angelegt werden. Diese wird dann im dritten Schritt durch eine globale Instanz scheduler des Schedulers ersetzt.

Die Funktionsfähigkeit der genannten Klassen soll mit Hilfe eines aussagefähigen Testprogramms gezeigt werden. Dazu soll in der main-Methode aus der ersten Aufgabe 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) aus.

Implementierung

Zum Testen empfiehlt es sich, die Gesamtaufgabe in drei Teile zu zerlegen und mit dem Testen der Teile B und C erst dann zu beginnen, wenn Teil A (bzw. B) fertig implementiert und ausreichend getestet wurde.

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, die jeweils nach einigen Anweisungen den Prozessor an die nächste Koroutine abgeben.

Teil B

Nach der Umsetzung des Koroutinenwechsels kann als nächstes der Dispatcher implementiert werden. Im Testprogramm sollte der Koroutinenwechsel nun ausschließlich über den Dispatcher laufen.

Teil C

Abschließend sollte der Scheduler (benötigt die Prozessabstraktion Entrant) hinzugefügt werden. Im Testprogramm müssen die Anwendung und die Benutzerprozesse (nun als Spezialisierungen der Klasse Entrant) beim Scheduler angemeldet werden. Dadurch ist es nicht länger nötig, dass sie sich gegenseitig kennen, denn die Auswahl des nächsten Prozesses wird durch den Scheduler übernommen.

Vorgaben

Die Implementierung der Klassen Chain und Queue haben wir bereits für Euch erledigt und einen Teil von toc geben wir auch vor (siehe vierte Vorgabe).

Hilfestellung