Sie befinden sich hier: Termine » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 4 » Mpstubs   (Übersicht)

Mpstubs

Prüfung war eine Fernprüfung via BBB. Zum Schreiben stand ein Textfeld zur Verfügung (quasi wie das StuvePad) sowie ein Whiteboard (welches ich allerdings nicht genutzt habe). Note war am Ende sehr gut.

Implementiere mir doch mal bei einer Semaphore p() und v() Habe die Semaphore in Pseudocode ähnlich zu MpStubs hingeschrieben, mit scheduler.block() sowie scheduler.resume(). Semaphore ist Warteraum und speichert in der Queue quasi alle wartenden Threads.

Wenn wir nicht schon in der Epilogebene sind, was müssen wir dann tun? z. B. Epilogebene betreten mit enter() vor den Funktionen und leave() danach. Musste dann nochmal genau erklären, warum ein scheduler.block() vor dem leave() kein Problem ist.

Erklär doch mal, wie so ein Kontextwechsel funktioniert context_switch (wohl ehemals toc_switch?) erklärt, welche Register ich warum sichere, was der Compiler generiert. Wie das mit der Rücksprungadresse auf dem Stack funktioniert. Wo speichere ich den Stackpointer.

Wo kann denn ein Thread unterbrochen werden durch Kontextwechsel? Auch nach scheduler.block()? Überall natürlich, und nach einigen Minuten Blockade hab ichs dann auch mit block() und leave() verstanden.

Wie funktioniert das denn mit diesem präemptiven Scheduling? Quasi Überleitung zu (Timer)Interrupts.

Und wenn der Timer jetzt tickt, was passiert dann? Weg vom LAPIC zu Interruptbehandlung in Software erklärt, und dass der dann ein scheduler.resume() ausführt.

Erklär doch mal Prolog/Epilog und warum macht man Epilogebene Sollte ja bekannt sein :) Interrupts sollen so kurz wie möglich blockiert werden

Warum holt man im Prolog das Zeichen von der Tastatur und nicht im Epilog? (Daten könnten verloren gehen) und Interrupt muss abgearbeitet werden, damit er deaktiviert wird. Grund für Interrupt muss weg sein, also z. B. Zeichen von der Tastatur ausgelesen.

Angenommen wir haben NUR Interrupts von einer Netzwerkkarte für einen Webserver. Macht Prolog/Epilog Sinn? Da war ich mir nicht so sicher, hab gesagt „es kommt drauf an“. Müsste man bewerten, hat beides Vor-/Nachteile

Wie ging das denn bei MpStubs mit der Readylist und was gibts da noch für Möglichkeiten? Eine globale ReadyList. Alternativ kann man jedem Kern eine eigene Liste geben oder sogar jeder Prioritätsstufe eine Liste.

Wie ist das da bei manchen BS mit interaktiven Prozessen und der höheren Priorität? z. B. Boosts bei Windows

Woher weiß ein BS, dass ein Prozess interaktiv ist? Nimmt Tastaturinterrupts entgegen z. B.

Welcher Teil eines BS nimmt z. B. Tastatureingaben entgegen? Treiber

Wie geht das mit den Treibern? open/close/read/write, ioctrl

Wie kommuniziert man denn z. B. mit einer Grafikkarte? Da stand ich bisschen aufm Schlauch. DMA.

Welche 2 Arten der IPC gibt es? Gemeinsamer Speicher und Nachrichten.

Was davon ist besser? Dualität, ist gleich. Das eine kann mit dem jeweils anderen nachgebaut werden.

Wie implementiert man denn das Eine mit dem Anderen? Virtueller gemeinsamer Speicher erklärt mit Traps, Pages werden mit send/receive hin und her gesendet. Mailbox mit Semaphore erklärt.

Kannst du das send() mal implementieren (mit maximaler Queue Länge)? Habe send mit 3 Semaphoren hingeschrieben (Verfügbar, Maximal, Mutex)