Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 4 » bst-2019-11-04   (Übersicht)

Pruefer: wosch Beisitzer: Andreas

4.11.19

Zwei sehr ähnliche Prüfungen zusammengefasst in einem Protokoll. War alles sehr entspannt.

BST Prüfungsprotokoll

  • Zuerst haben wir ja syscalls implementiert, warum? (Hinsichtlich Adressraumisolation)
    • Privilegienwechsel, nur der Kernel sollte bestimmte privilegierte Funktionen ausführen dürfen, z.B. Gerätezugriff usw.. Deshalb hat man diese Schutzringe eingeführt, wobei Ring 3 dem User entspricht und Ring 0 dem Kern.
  • Und wie schützt sich der Kern nun räumlich vor dem Benutzerprozess? Wie sähe so eine privilegierte Operation aus?
    • Z.B. das mappen von Speicherbereichen. Bei Paging,gibt es dann ein Supervisor-bit im Seitendeskriptor, das der MMU sagt, wer zugreifen darf.
  • Wie wird das mapping organisiert?
    • Ueber die Pagetable bzw. Das Verzeichnis.
  • Aber das ist ja auch einfach nur irgendwelche Datenstrukturen. Die stehen ja auch einfach iwo im Speicher, wie wird das denn dann geschützt. (Er wollte auf das setzen der CR register aus, die ja das Paging selbst steuern und ohne die das ganze nutzlos wäre.)
    • Das setzen von cr0, bzw. Cr3, wo die Adresse des Pagetable directories steht. Sonst könnte der Nutzer sich ja z.B. alles in seinen Adressraum einmappen bzw. Paging deaktivieren.
  • Genau, es gibt so geschützte Reister… (Anekdote….)
  • Und was ist eigentlich mit den restlichen Ringen, wieso nutzt man die nicht?
    • Weil Privilegienstufe wechseln Zeit kostet, hatte ja einen Grund warum man sysenter/-exit auch eingefuehrt hat.
  • Genau, (… Anekdote zu Schutzringen)
  • Ok, syscalls, wie lauft denn das nun ab. *Malt read(fd, buf, len).*
    • Wir haben syscall ja z.B per Trap und Parameterübergabe per Register gemacht. Also: Parameter in regs, dann int, dann HW, HW legt User Kontext auf Kernel Kontext, dann Interrupt-Descriptor-Table, regs werden entpackt und auch mit auf den Stack gelegt. (Wosch hat live mitgezeichnet
  • Das ist aber sehr umständlich geht das auch anders?
    • Ja, ueber den Userstack. Prinzipiell kein Problem, wenn partiell privat, aber ermöglicht auch, das kaputt schießen des Userstacks. Und wenn voll privat, dann muss erstmal das ganze irgendwie eingeblendet werden. D.h. TLB muss geflusht werden, wodurch das nicht so performant ist.
  • Aber das BS ist doch korrekt, wieso sollte denn da was kaputtgehen koennen?
    • Naja, bei Linux z.B. gibt es ja ganz viele böse Treiber…
  • (Prüfung 1) Was gibt es denn sonst noch für Arten die Parameterübergabe zu machen?
    • Komplexbefehle, da werden die dann in den Befehlsstrom geschrieben. (Wosch hat dann wieder mitgemalt.)
  • (Prüfung 1) Und Vor-/Nachteile davon?
    • Weniger Kopieren, und die Register müssen nicht leer gemacht werden. Aber der Kern muss dann halt auch erstmal die Parameter von dort holen können usw.
  • (Pruefung 1) Und was ist bei sysenter/-exit besser?
    • Schneller ca. 2.5x, weil wengier Kontextsicherung und Interrupttabelle muss nicht durchsucht werden.
  • (Pruefung 2) Wie laueft sysenter genau ab?
    • Unterschiede zum Trap und MSR erwaehnen.
  • Partiell privat, wie sieht das denn aus fuer User und Kernel? (malt Adressraum)
    • Kernel ist immer mit eingeblendet, aber User kann nicht zugreifen. Adressraum wird verkleinert.
  • Welche Art von Adressraum?
    • Musste logischen und virtuellen Adressraum erklaeren, und ob man partiell privat auch “nur” mit nem logischen Adressraum machen kann. Was an sich funktioniert, die Adressraumlänge kann eben nur nicht grösser sein, als der physikalisch vorhandene, weil ja alle Adressen gültig sein müssen.
  • Dann ging es wieder zum read() und was man da sonst noch so machen muss.
    • Buf und Len checken, ob auch wirklich gültige User-adresse (MMU simulieren, bits checken)
  • Einadressraummodell, wie geht das?
    • Prinzipiell für immer gültige Adressen, Trennung von Adressraumschutz und -verwaltung, security by obscurity, sharing durch Adressweitergabe und extra Schutz durch capabilities.
  • Braucht man dann noch die MMU?
    • Ja, weil so viel physischen Speicher wie z.B. 2^64 Byte hat man normalerweise nicht.
  • (Pruefung 2) Vor- und Nachteil von Einadressraummodellen?