Übungen zu Praktische Informatik 2 SS 2002 Übung 4 Name: Tutor: Matrikelnummer: Punkte: Gruppe: Abzugeben bis: Do/Fr, 17/18. 5. 2002 1 Prozessverwaltung (15 Punkte) Ein modernes Betriebssystem mit Multitasking (z.B. Windows, Linux, ...) verwaltet gleichzeitig mehrere gleichzeitig laufende Prozesse (Programme). Da es (meist) nur einen Prozessor gibt, der nur einen Prozess zu einer bestimmten Zeit ausführen kann, müssen die Prozesse abwechselnd dem Prozessor zugeteilt werden. Jeder Prozess hat einen Namen, eine Priorität (die einen Prozess bei der Prozessorzuteilung bevorzugt), eine eindeutige ID und es wird die bisher zugeteilte Prozessorzeit aufgezeichnet. public class ProcessObject { public static final int PRIO_HIGHEST = 1, PRIO_LOWEST = 10; public ProcessObject(String name, int prio, int executionTime) { … } // Initializes the process object with the specified id void initId(int id) { … } public String getName() { … } public int getId() { … } public int getPriority() { … } public void setPriority(int newPriority) { … } // Execute process for one time unit. Returns true if process exits. public boolean executeForOneTimeUnit() { … } public void printProcess() { … } } Der Scheduler, der die Prozessorzuteilung an die einzelnen Prozesse zuteilt, sieht folgendermaßen aus: public class Scheduler { public Scheduler() { … } // Insert a process object return the assigned process-ID public int addProcess(ProcessObject p) { … } // Remove process with specified id ("kill") public void removeProcess(int id) { … } // Find process with specified id public ProcessObject findProcess(int id) { … } // Run scheduler for the specified time units public void run(int timeUnits) { … } // The current simulation time public int getCurrentTime() { … } public void printAllProcesses() { … } } Der Ablauf ist folgender: Man erzeugt Prozess-Objekte und fügt sie der Prozessliste des Schedulers hinzu. Danach startet man den Scheduler für eine gewisse Zeit, der die einzelnen Prozesse jeweils eine Zeiteinheit ausführt. Danach kann man einige Prozessobjekte hinzufügen/entfernen, usw. Die Prozessorzuteilung erfolgt nach einem Punktesystem. Der Prozess mit der niedrigsten Punktezahl bekommt den Prozessor zugeteilt, wodurch die Punktezahl um die Priorität des Prozesses erhöht wird. Nach jeweils 1000*n Prozessorzuteilungen (n ... Anzahl der Prozesse) werden die Punkte aller Prozesse halbiert. Verwenden Sie als interne Datenstruktur für den Scheduler einen Heap, um den jeweils nächsten Prozess zu finden und auszuführen. Simulieren Sie die Ausführung mehrerer parallellaufender Prozesse (Ausgabe von Startwerten, Endwerten und Zwischenständen) mit unterschiedlichen Prioritäten. Wird ein Prozess beendet (removeProcess, oder wenn die executionTime abgelaufen ist), so sind folgende statistische Daten interessant: Zugeteilte Prozessorzeit, gesamte Prozesslaufzeit, Start/Endzeitpunkt des Prozesses, etc. Hinweise: Implementieren Sie den Heap keinesfalls als Baum (Das ist nicht Sinn der Sache)! Sie können dafür aber z.B. die Klasse java.util.Vector verwenden. Speichern Sie die Punkte, Startzeitpunkt, etc. pro Prozess außerhalb der Prozess-Objekte. 2 Graphen (9 Punkte) Gegeben seien folgende Datenstrukturen: a) Stücklistentext (wie in Übung 1 Aufgabe 2). b) Ein Heap (wie in Aufgabe 1). c) Modell des öffentlichen Verkehrs in Linz zur Simulation der Streckenauslastung. d) Modell des Kanalsystems in Linz. e) Modell des Eisenbahnnetzes für Überlandverbindungen in der EU (d.h. Bahnhöfe können jeweils als ein Knoten modelliert werden) f) Modell einer Platine für Radios (ein Bauteil als ein Knoten modelliert). Stellen diese Datenstrukturen (im Modell) Graphen dar? Wenn nein, warum nicht? Wenn ja, kategorisieren Sie diese Graphen nach gerichteter/ungerichteter, gewichteter/ungewichteter, vollständiger/nicht vollständiger, zyklischer/azyklischer und zusammenhängender/unzusammenhängender Graph. Begründen Sie jeweils Ihre Entscheidungen. Hinweis: Es ist nicht so wichtig, wie Sie die einzelnen Datenstrukturen kategorisieren (nicht immer eindeutig, manchmal von der Sichtweise und der Detailtreue des Modells abhängig). Viel wichtiger ist die genaue Begründung für Ihre Kategorisierung. Ohne Begründung gibt es daher auch keine Punkte.