Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 4 » Pruefung

Datum: 18.02.2025
Pruefer: Volckmar Sieh
Beisitzer: Max
Zeit: 11:15 - 11:45
Ergebnis: 1.0

Pruefung

Wie funktioniert Kooperatives Scheduling?

  • Faden gibt die CPU freiwillig her (Scheduler::resume()),

entweder direkt mit einem weiteren Thread oder Scheduler entscheiden lassen
(Noch erwähnt: Prämptiv wo die CPU weggenommen wird)

  • Kontextwechsel zu nächstem Thread (Register sichern, Stack Pointer umbiegen, Register wiederherstellen, zurückspringen)

Welche Kriterien kann denn der Scheduler verwenden, um den nächsten Thread auszuwählen?

  • Echtzeitkriterien
  • Run-To-Completion (→ Rechenzentrum)
  • „normaler“ Modus (Interaktive Fäden für Nutzerinteraktion, aber auch Hintergrundfäden)

Rechenzentrum: Wie intelligent Schedulen?

  • eigentlichen langfristige Tasks ohne große Timer-Interrupts
  • Timer ggf. auch ausschalten, um möglichst effizient zu arbeiten

Was ist jetzt aber, wenn sich ein Nutzer anmelden will?

  • Wenn Nutzer angemeldet ein/zwei special CPUs für Interaktives Scheduling

Welche Arten von Interrupts gibt es noch neben Timer-Interrupts?

  • Inter Process Interrupts
  • Device-Interrupts

Wie funktionieren diese?

  • Timer: innerhalb der CPU / der LAPIC
  • IPI: Zwischen CPU's / deren LAPIC
  • Device Interrupt: Von extern via IOAPIC

Welche Konfigurationsmöglichkeiten gibt es?

  • IOAPIC Register
    • Masked
    • Level / Edge Triggered
    • Interrupt Vector
    • Delivery Mode (Round Roubin, Single CPU)

Wofür braucht man denn den Delivery-Mode?

  • Single CPU: Cache Ausnutzen bei Häufigen Interrupts
  • Round Roubin: Lastverteilung

Wofür braucht man denn Level bzw. Edge Triggered Interrupts?

  • Level: z.B. Tastatur, Daten liegen im Buffer → solange Daten vorhanden sind
  • Edge: Kurzer Impuls, z.B. Timer (da dann unklar, wann nicht mehr benötigt)

Was für Debugging-Möglichkeiten gibt es denn?

  • Hardware-Emulation (kvm, qemu)
  • Hardware-Debugging via Serial Port
  • Hardware-Dings zwischen CPU und Socket
  • printf() (geht natürlich nur, wenn Ausgabe bereits funktioniert)

Wie kann man dabei Race-Conditions mitkriegen?

  • CPU anhalten → Dann Zustand anschauen (am besten kommen dann keine Timer-Interrupts)
  • Compiler Fragen (je nach Compiler hat dieser Support dafür, Thread-Sanitisier, Pfadausdrücke, Annotierungen für locks (siehe JITTY))

Normales Semaphor implementieren (Pseudo-Code)

Irgendwie auf Deadlocks gekommen

  • kurz erklärt, zwei Fäden die gegenseitig locken wollen

Welche Erweiterungen gibt es denn noch?

  • P(n), V(n), also um mehr als 1 Inkrementen oder Dekrementieren
  • P(a, b, c), V(a, b, c): Vektorsemaphore

Was müssten wir denn für die Semaphore mit +/- n ändern?

  • Siehe SP2 Altklausur WS 23/24
  • Einfach statt ++ ein += n und für – ein -= n

Was müssten wir denn für Vektorsemaphore ändern?

  • while wartet auf mehrere Variablen
  • mehr Threads wecken (entweder alle, oder bis wir einen finden, der passt)

Kombination aus beiden?

  • Einfach n für jeden Parameter

Welche Schnittstellen müssen denn Treiber anbieten?

  • read: z.B. Tastatur
  • write: z.B. Serial Interface
  • open/close: Resourcenverwaltung
  • ioctrl: Alles mögliche

Irgend eine Frage zu Stacked Treibern

  • Idee: Mehrere Treiber „aneinander anschließen“, um Treiber(teile) wiederzuverwenden (z.B. Dateisystem)
  • Beispiel: Dateisystem (Hardware ansprechen, Blockverwaltung, eigentliches Dateisystem)
  •       Grafikeinheit (statt einzelne Pixel z.B. OpenGL) \\

Was stellt denn das Betriebssystem so einem Treiber bereit?

  • IOPorts & Interrupt Verwaltung
  • Interfaceverwaltung „nach oben“
  • Speicherverwaltung (malloc)

Was müssen wir beim Kompilieren beachten?

  • Keine Unterstützung durch Libraries, keinen gescheiten Speicher, keine Ausgabe, etc.
  • müssen uns einiges selbst zusammen basteln (z.B. Ausgabe & Speicher)
  • Linker entsprechend anweisen

Fazit:

An sich eine enstspannte Atmosphäre.
Auch wenn ich auf ein paar Dinge nicht sofort kam (printf-debugging, malloc für Treiber, kurzer Denkfehler bei Semaphoren), immer noch eine sehr gute Note.