Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 4 » Mpstubs   (Übersicht)

Mpstubs

Scheduler

Beschreibe doch mal den Weg eines Schedulers. Hab den Weg vom Timer Interrupt über Scheduler-resume und Dispatcher-dispatch hin zum Kontextwechsel inkl. Thread erklärt.

Welche Register werden da auf dem Stack gesichert? Die nicht flüchtigen.

Wie wird denn dann der Program Counter z.B. gesichert und wiederhergestellt? (Also im Rahmen vom Kontextwechsel) Hab gesagt von Compiler/CPU, aber das war wohl nicht richtig. Da wusste ich nicht, was er hören will, hatte das eher im Zusammenhang mit Interrupts gewusst.

Wie kann man denn die Threads aufteilen wenn man mehrere Prozessoren hat? Festen CPUs zuordnen (Caching Vorteil) oder mit irgendeiner Strategie, z.B. Round Robin.

Wie war denn das bei Mpstubs? Hab gesagt, dass alle Threads in einer Readylist warten und der Reihe nach abgearbeitet wurden, aber keine Ahnung, ob er darauf hinauswollte.

Nach welchen Kriterien kann man denn so schedulen? Hab gesagt, dass das davon abhängt, was man denn so hat (Arbeitsplatzrechner, hochkomplexen Wissenschaftsrechner oder Echtzeitsystem) → interactive, batch oder real-time scheduling und als Kriterien z.B. Antwortzeit, Durchsatz oder Einhalten von Zeitgrenzen.

Wie läuft denn das scheduling im batch Betrieb ab? Eigentlich eher gar nicht, Prinzip erklärt, maximal mit langen Zeitscheiben.

Was kann man denn tun um die Antwortzeit bei interaktiven Systemen zu verkürzen? Hier war ich mir nicht sicher. Hab dann gesagt z.B. kürzere Zeitscheiben wählen.

Wie sieht denn das bei Windows aus? (irgendwas mit Scheduling und Windows) Da hatte ich nicht wirklcih eine Ahnung, da ich eher das Linuxzeug kannte. Hab gesagt dass man z.B. bestimmte, dem Nutzer wichtige Prozesse priorisieren kann.

Wie macht man das z.B. wenn man 4 Prozessoren hat und 4 Threads? Dann wäre es schlauer, den Prozessoren direkt einen THread zuzuweisen anstatt diese immer sinnlos zu unterbrechen und im Endeffekt wieder der gleichen, jetzt freien CPU zuzuordnen.

Und wenn man dann doch plötzlich mehr Threads hat? Dann könnte man z.B. einen IPI benutzen, um einer CPU den neuen Thread zuzuweisen oder wenn man merkt, es kommen plötzlich mehr, dann scheduling anfangen.

Und wie merkt man denn dass da noch Threads kommen? Hier war ich unsicher. Hab dann gesagt z.B. über signalisierende Semaphoren, aber ich weiß nicht ob das richtig war.

Interrupts

Was gibt es denn für Arten von Interrupts? Level (z.B. Keyboard), Edge (z.B. Timer)

Genau und was gibt es da noch drittes? IPIs, die sind dann Edge-triggered.

(da war noch ein bisschen was, aber nicht mehr so viel. Es war relativ viel Transfer gefragt, kein Prolog Epilog :-()

Treiber

Was sind Treiber, wofür braucht man die? Sozusagen Schnittstelle zwischen Gerät und Hardware.

Wie sieht denn so ne Schnittstelle aus? z.B. bei Linux read/write/open/close und ioctl für den Rest.

Kann ich da auch eine eigene Schnittstelle benutzen? Ja, aber ist nicht so toll, weil die extra ins BS eingebaut werden muss und das BS daher neu gebaut werden muss. Hoher Aufwand für viele Geräte.

Wofür braucht man denn Treiberklassen? Unsicher. Hab gesagt, dass die Schnittstelle ja generisch ist und das nicht zu jedem Gerätetyp so gut passt und man dann Geräte, die funktionell einigermaßen ähnlich sind, in gleiche Klassen packen kann und dafür jeweils teilweise verschiedene oder erweiterte Schnittstellen hat. Z.B. Festplatte/USB als Speichergeräte haben andere Bedürfnisse als ne Grafikkarte.

Du hast die Schnittstelle nach oben genannt, was braucht man denn z.B. nach unten? Ports auslesen oder Interrupts ermöglichen z.B.

IPC

Was ist denn Virtual Shared Memory? Teil von Interprozesskommunikation. Gibt grundsätzlich über Speicher oder Nachrichten, VGS ist die Abbildung auf gemeinsamen Speicher wenn man als Basis Nachrichten hat. Schaubild aus VL hingemalt. Ist langsam, weil ständig für kleine Werte ganze Pages kopiert werden.

Du hast ja die Problematik erwähnt. Was ist denn jetzt wenn beide Prozesse immer nur auf Variablen zugreifen, die schon auf ihrer Seite sind. Ist das dann noch ein Problem? Da stand ich echt unnötig auf dem Schlauch. Ist ein Problem, wenn die in der selben Page liegen.

Wie kann der Programmierer das umgehen? Sie nicht in die selbe Page schreiben.

Genau, darauf hat man ja mit C aber nicht so den Einfluss und müsste da Assembler nehmen. Weißt du was Raytracing ist? Grob.

Das reicht. Also wenn man ein Bild hat und jeder PC im CIP sich da ein Stückchen holt und das bearbeitet, dann haben wir ja wieder das Problem, dass man mit Pages Ping Pong spielt. Was kann man dagegen tun? Man könnte z.B. das Bild jedem komplett geben und dann nur einmal die Bruchteile zurückkopieren lassen. Dann hat man nur noch die Hälfte.

Oder? Oder man teilt das Bild vorher schon auf Pages auf. (Diese Fragen haben mich etwas verwirrt. Dann war die Zeit zum Glück um.)

Allgemein

Ich war sehr nervös und bin mündlich nicht so gut wie schriftlich, weil ich schlecht nachdenken kann, wenn mehrere Leute dabei zusehen. Trotzdem war die Stimmung angenehm und Volkmar war sehr nett. Es wurden auch meiner Meinung nach viele Antworten akzeptiert, wichtig war, dass man sich Gedanken machte. Bei mir war es sehr viel Transfer, kein Prolog-Epilogmodell und Code musste ich auch nicht aufschreiben. Also nicht zu sehr auf Altprotokolle verlassen, sondern lieber alles wirklich durchdenken, und wenn man das in Prüfungssituationen nicht so gut kann (wie ich), dann auf jeden Fall das lernbare Zeug gut sitzen haben, dass man da nicht mehr groß überlegen muss. Ich hatte mich nicht so gut eingeschätzt, aber die Note war am Ende sehr gut.