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

Betriebssysteme

7,5 ECTS, hab also die erweiterte (MPStuBS) Variante gemacht. Die Prüfung war dann auch 30min nur über BS.

Prüfer: Jürgen Kleinöder
Beisitzer: Benjamin Oechslein

Ergebnis: 1,0

Atmosphäre

Auch ich kann mich hier wieder nur meinen Vorschreibern anschließen. Die Atmosphäre war locker, auch war öfter ein zustimmendes Nicken erkennbar. Eigentlich kann ich hier den vorherigen Protkollen nichts hinzufügen

Inhalt

Nach kleiner Verspätung ging es los mit der Überraschungsfrage: „Hier haben wir einen Prozess, der ……… berechnet ……… Pi. Was passiert?“ (soll natürlich heißen, was kann passieren =)).

Ich habe dann angefangen einen Tastaturinterrupt zu erklären, also im Prinzip auch genau das, was in den vorherigen Protokollen stand. Ich habe angefangen mit dem IOAPIC, an dem der Interrupt anläuft, der Interrupt Redirection Table mit einigen beispielhaften Einträgen und natürlich dem Vektor, der Zustellung per Bus zum LAPIC der entsprechenden CPU(s) und der Plugbox. Habe hier auch kurz das „Anmelden“ eines Geräts an dieser erwähnt. Wahrscheinlich wäre das alles nicht verlangt gewesen, aber wie aus vorherigen Protokollen schon bekannt wird einem relativ viel Freiraum gelassen… Also nachdem wir die Referenz der Interruptbehandlung aus der Plugbox ausgelesen haben kann diese angesprungen werden. An dieser Stelle wurde nachgefragt, was jetzt genau bei diesem „Anspringen“ passiert. Gesucht war nach der Zustandssicherung: CPU sichert PC und SR (oder alle Register). Ich habe hier noch erwähnt, dass der Compiler die flüchtigen Register sichert. Das hätte ich aber lieber mal bleiben gelassen, weil da hat Hr Kleinöder dann nachgehakt und hat gefragt, was denn der Compiler hier an der Stelle mit der ganzen Sache zu tun hat. Hier war gesucht: Es ist ja ein Funktionsaufruf.

An dieser Stelle habe ich dann von mir aus angefangen, das Prolog-Epilog Modell zu erklären. Zuerst habe ich harte und weiche Synchronisation als Möglichkeiten aufgemalt, erklärt, und die Vor-, besonders aber die Nachteile aufgezählt, und habe dann das Prolog-Epilog Modell beschrieben. Hiermit haben wir uns dann sehr lange beschäftigt und im Detail kamen besonders Fragen über die Synchronisation.

z.B.: wenn in der Prologebene ein Epilog in die Epilog-Queue eingehängt wird, in der Epilog-Ebene aber rausgeholt, kann es dann nicht Probleme geben? (wichtig hier: Beim Zugriff auf die Queue auf Epilogebene müssen Interrupts gesperrt werden, da kommt man nicht drum rum).

Zwischendrin sind wir nochmal auf den Tastaturpuffer zurückgekommen und haben uns etwas über Semaphoren unterhalten. Als ich anfing mit „es gibt grundsätzlich 2 Operationen, p() und v()“, wurde ich mit „ja, kenne ich“ unterbrochen =), und hier ging es mehr um das scheduler.block() und scheduler.wakeup(). Dass also schlafende Prozesse nicht mit ge-scheduled werden.. Auch bei diesen Fragen sind wir immer wieder auf die Ebenen und Synchronisationsprobleme zurückgekommen.

Nachdem wir mit einigen solcher Detailfragen (nach dem wir den Monoprozessorfall soweit abgehandelt hatten insbesondere auch Multiprozessorsynchronisationsfragen), war die Zeit schon fast abgelaufen. Wir sind dann noch kurz auf den Prozesswechsel eingegangen. Dass also eine Koroutine ihren eigenen Stack hat, auf welcher Ebene der Prozesswechsel stattfindet (im Kern), warum usw. Hier gab es dann wohl noch eine kleine Bonusfrage: Und zwar wurde ich dann gefragt, wo denn die Stacks für die einzelnen Prozesse angelegt werden, was wir ja statisch in der main gemacht haben in der Übung. Die Frage war dann, wo man dies denn auch dynamisch machen könnte und welche Prozessverwaltungsstrukturen es gibt, wie also konkret die Prozesse verwaltet werden (Referezen auf unsere Coroutine-Klasse)? War wohl etwas Stoff aus Systemprgrammierung (SysProg oder wie auch immer). Gut darüber haben wir uns dann mehr zu dritt unterhalten, als dass ich die Frage wirklich direkt beantwortet hätte, aber das wurde mir wohl nicht allzu schlecht angerechnet.

Bemerkungen allgemein
  • Es wurde oft und viel gefragt „wo liegt denn das?“, „wer verwaltet das?“ etc. Also wissen, wo sich die Interrupt Redirection Table befindet, wenn ihr sie erwähnt, auf welcher Ebene sich die Epilog-Queue befindet, wer die Plugbox verwaltet und solche Fragen, gerade auch im Multiprozessorfall sind wichtig!
  • Was etwas wenig in früheren Protokollen erwähnt wurde: Synchronisation ist das A und O. Wann werden die Interrupts gesperrt, es gibt nur einen Kern im gesamtem BS, nicht pro Prozessor, scheduler-Queue gegen andere CPUs auch synchronosieren, Synchronisation der Semaphore etc…
  • Was ich nicht mehr genau wusste vielleicht noch eine Detail-Sache: In unserem Fall gibt es nur EINEN Timer-Interrupt, nicht einen je CPU (da bin ich etwas durcheinander gekommen). Es gibt also nur EINEN Prolog und nur EINEN Epilog, der dann das schedule() aufruft.
  • Erwähnt auch ab und zu die Übung und wie ihr Sachen implementiert habt. Ich war froh, dass Benjamin (Übungsleiter) der Beisitzer war, denn einige Male (siehe statisches Anlegen von Stacks), hat Hr Kleinöder dann gefragt „Habt ihr das so implementiert?“ Da hat es natürlich geholfen ihn an seiner Seite zu haben, der dann da auch mal geantwortet hat.
  • Ich hatte das Gefühl, dass auch manche Fragen einfach spontan gestellt wurden, auch ohne dass Hr Kleinöder selbst die Antwort parat hatte, einfach Sachen die ihm eingefallen sind. Auch hier ist manchmal ein Gespräch zu 3. entstanden. Also nicht verzweifeln, wenn man nicht sofort die „richtige“ Antwort weiß, vielleicht ist auch einfach gerade eine kleine „Diskussion“ erwünscht.
Tipps zur Vorbereitung

Es gibt keine bessere Vorbereitung als die Übung zu besuchen und aktiv zu programmieren. Denn diese ist hautnah am Stoff. Außerdem spielte wohl auch das Engagement in der Übung bei der Bewertung eine Rolle. Bei mir speziell hat man nichts auswendig lernen müssen (Architekturen, Bus, Treiber, IA-32 und was es ales schönes hätte geben können). Setzt euch am besten vorher mal zusammen und überlegt euch euren persönlichen roten Faden für das Gespräch (Eben genau einen detaillierten Verlauf eines Interrupts mit Prolog-Epilog Modell, Timer-Interrupt mit Prozesswechsel, Tastaturinterrupt mit Semaphoren), und mit ein paar Detailfragen werdet ihr diesen dann auch gehen dürfen.

Für alle Nachfolger viel Erfolg!