Abgabe: 30.11.2006
Die MINIX-Prozeßverwaltung ist als Multi-Level-Queue realisiert, wobei die Benutzerprozesse die niedrigste Priorität haben. Untereinander sind diese aber alle gleichberechtigt. Fügt der MINIX-Prozeßverwaltung eine neue Stufe für Benutzerprozesse mit niedrigerer Priorität hinzu. Implementiert ferner einen neuen Systemaufrauf nice, eine entsprechende Bibliotheksfunktion nice() und ein Kommando, so daß Prozesse mit dieser niedrigeren Priorität gestartet werden können:
$ nice program arg1 arg2 ...Die Bibliotheksfunktion nice() soll dabei folgender Spezifikation folgen:
#include <unistd.h> int nice(int prio);Durch Aufruf von nice kann ein Prozeß seine Priorität ändern. Gültige Werte von prio sind 0 für normale Priorität und 1 für niedrige Priorität. Bei anderen Werten schlägt der Aufruf fehl, der Fehlercode ist EINVAL. Die Funktion liefert bei erfolgreichem Aufruf den Wert 0, bei Fehlschlag -1 und setzt errno entsprechend.
Als Lösung sind folgende Dinge abzugeben:
Einige der zu ändernden Dateien sind include/minix/callnr.h, src/kernel/const.h, src/kernel/proc.h, src/mm/table.c, src/fs/table.c. Bei genauerer Betrachtung fällt auf, dass die Behandlungstabellen bereits einen Eintrag für nice unter der Nummer 34 vorsehen, verwendet dies nach Möglichkeit. Weiterhin muß die Bibliothek lib/i386/libc.a erweitert werden. Zum Vergleich siehe src/lib/posix/* und src/lib/syscall/*. Das Übersetzen geänderter Teile des Betriebssystems kann in src/tools durch Aufruf von make erfolgen, siehe auch usage(8). Ändert grundlegende Header-Dateien zuerst um die Übersetzungszeiten kurz zu halten.