Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 4 » Betriebssystemtechnik 7,5 ECTS Pruefung 2022-08-10

Betriebssystemtechnik 7,5 ECTS Pruefung 2022-08-10

Meta Information

  • Betriebssystemtechnik 7,5 ECTS, SS 22
  • 22-08-10
  • Muendliche Klausur
  • Pruefer: Wosch, Beisitzer: Bernhard
  • Note: 1,0
  • Vorbereitung
    • Alte Pruefungsprotokolle rauf unter runter gemacht, und Vorlesungs- und Uebungsfolien
  • mit dem Uebungspartner durchdiskutiert. Das gemeinsame Diskutieren/Verstehen hilft enorm!
  • Evaluation
    • Super entspannte Atmosphaere, war eher wie gemeinsames Kaffeetrinken mit Wosch und Bernhard
    • Wosch hat fast immer geredet/Anekdoten erzaehlt, mein Redeanteil war ca. 30-40%, der Rest Wosch
    • Paar Transferfragen kamen ueberraschend (z.B. zum TLB), aber notfalls hilft Wosch hier auch weiter
    • Generell gingen die Themen sehr fliessend ineinander ueber
    • Generell wurde auch sehr oft ueber Intel gerantet

Exam

  • System Calls, warum macht man die?
Anwendungen sollen in Ring 3 laufen, um z.B. keine Interrupts sperren zu koennen.
Man will aber trotzdem bestimmte (eingeschraenkte) Operationen in Ring 0 zulassen, dafuer Systemaufrufe.
  • Wie habt ihr das denn so umgesetzt?
Zwei Arten, ueber Softwareinterrupt oder mit Spezialbefehl User ruft Stub auf, Stub sichert nicht-fluechtige Register, int 0x80 Interrupt springt in Handlerfunktion, der schaut sich den Systemaufrufvektor an, ruft dann das passende Skeleton auf, das macht die eigentliche Arbeit.
  • Wie macht man hier die Parameteruebergabe?
Bei uns (Uebung) ueber 6 fluechtige Register, ab dem 7. dann ueber den Stack.
  • Was muss denn betriebssystemseitig bei dieser Registeruebergabe geschehen?
War hier erst etwas verwirrt, Wosch wollte aber nur drauf raus, dass die Register, in die der User reinstopft, diesselben sein muessen, aus denen das BS rausliest. Standardisierung also.
  • Wie koennte man das denn auch anders machen, also ohne Register?
Z.B. indem die Syscalls als Komplexbefehl implementiert werden, dann wird direkt aus dem Befehlsstrom des Users rausgelesen.
  • Ja, auch, aber welche Varianten kennen z.B. Compiler zur Parameteruebergabe?
Man kann die Parameter auch auf dem Stack uebergeben. Dazu muss der halt fuers Betriebssystem sichtbar sein.
  • Okay, welches Adressraummodell habt ihr denn in StuBS implementiert?
partiell privates Mehradressraummodell: Kernel- und Userspace in einem Adressraum (AR)
Vorteil: Kein Adressraumwechsel bei Syscalls
Nachteil: BS sieht eigentlich zu viel, Fehler im BS koennen leicht den Userspace kaputtmachen
  • Was koennte man stattdessen nutzen, um solche Fehler abzufedern?
total privates Adressraummodell: BS und Userprozesse haben eigene AR
Vorteil: Fuer boesartige Fehler muesste das BS jetzt 1) Falsch reinmappen, dann 2) Falsche Adresse berechnen und kaputtschreiben
Nachteil: Bei jedem Syscall gibts Adressraumwechsel
  • Der TLB beschleunigt ja die Adressuebersetzung. Was passiert denn hier beim Adressraumwechsel?
Schreiben auf CR3 flusht den TLB komplett.
  • Okay, und koennte man da bezogen auf diese Syscalls da was optimieren?
Ja, man koennte einen getaggten TLB verwenden, dann muss nicht komplett geflusht werden.
  • Genau. Intel hat ja durch das Wegwerfen der Segmentierung Transistorflaeche freigemacht. Wenn ich jetzt die Hardware anpassen koennte, wie koennte man noch den TLB optimieren?
Doppelter TLB in Hardware, einer fuers BS, einer fuer den aktuellen Userprozess. Dann muesste beim Syscall gar nichts mehr geflusht werden.
  • Ihr habt ja bei StuBS Paging auf 64bit Adressen implementiert. Was ist da denn erstmal ein Problem?
bei 64bit Adressen braucht man mehrstufiges Paging, weil ansonsten die Seitentabellen viel zu gross werden, obwohl die meistens nur spaerlich besetzt sind
  • Genau, kann man dieses Problem auch anders loesen, ohne mehrstufiges Paging?
Man koennte eine Segmentierungs-Paging Mischform verwenden: Als erstes hat man eine Segmenttabelle, die als Segmente dann Seitentabellen verwalten. Dadurch sind die Seitentabellen einstufig dann immer genau so gross, wie benoetigt
  • Okay, und noch eine andere Moeglichkeit?
Hab hier etwas gebraucht, Wosch hat dann aber mit dem Tipp „In welche Richtung geht denn beim normalen Paging die Adressuebersetzung?“ geholfen. Invertierte Seitentabellen machens andersherum, da hat man dann immer nur so viele Eintraege wie gueltigen physischen Speicher.
  • Ihr habt ja noch ein weiteres AR-Modell kennengelernt, welches war das?
Einadressraummodell. Kann man beim jetzigen StuBS auch implementieren, da (virtuelle) Adressen 64bit breit sind. Zur Isolation nutzt man dann den riesigen Adressraum + Randomisiertes Verteilen der Prozesse im AR
Vorteil: Sowohl Syscalls als auch IPC benoetigen keinen Adressraumwechsel mehr