|
|
Lab 3: HAL PipeAssignment 9(Unnamed) Pipes werden benutzt, um zwischen Prozessen Informationen auszutauschen. Im einfachsten Fall kann dies über die HAL-Shell erfolgen: $ foo | bar Hierbei wird der Stdout-Kanal (OUT 1) der linken Seite (foo) mit dem Stdin-Kanal (IN 1) der rechten Seite (bar) verbunden. Beide Programme lesen und schreiben in gewohnter Weise und laufen gleichzeitig ab. Beachten Sie, dass beliebig viele Pipes verwendet werden können (z.B. foo | bar | x | ...). Einen guten Einstieg in diese Thematik wird unter Linux System Programming Tutorial im Abschnitt Pipes gegeben. Assignment 10Beschäftigte sich die Aufgabe 7 mit dem Round-Robin Scheduling, so ist in dieser eine andere Scheduling-Policy zu implementieren - das Priority Scheduling mit dynamischen Prioritäten. Hierzu ist eine minimale Anpassung an der HAL-Shell vorzunehmen: z.B. übergibt der Befehl: $ foo:3 bar:1 die HAL-Programm „foo“ und „bar“ mit den statischen Prioritäten 3 bzw. 1 an die PEE, welche sie dann nebenläufig ausführt. Des Weiteren kann die Scheduling-Policy über die HAL-Shell gesetzt werden: z.B. wird über den Befehl: $ export SCHEDULING_POLICY=P das Scheduling auf Priority Scheduling umgestellt (analog RR). Beim Priority Scheduling besteht die Gefahr des Verhungerns, in dem Prozessen mit niedrigeren Prioritäten nicht die Gelegenheit zur Ausführung gegeben wird. Um diesen ungewollten Effekt zu vermeiden, wird während der Ausführung eines Prozesses dessen Priorität stufenweise verringert. Schließlich ist die Priorität des laufenden Prozesses nicht mehr die höchste, und der folgende Prozess kann ausgeführt werden. Diese Methode wird Altern (aging) genannt. Wie könnte ein Priority Scheduling mit dynamischen Prioritäten im Falle von HAL aussehen. Implementieren dieses. Assignment 11Testen Sie Ihr Programm ausgiebig (Unittest). |
|