Zwei sehr ähnliche Prüfungen zusammengefasst in einem Protokoll. War alles sehr entspannt.
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?
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.)
Genau, es gibt so geschützte Reister… (Anekdote….)
Und was ist eigentlich mit den restlichen Ringen, wieso nutzt man die nicht?
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?
(Prüfung 1) Was gibt es denn sonst noch für Arten die Parameterübergabe zu machen?
(Prüfung 1) Und Vor-/Nachteile davon?
(Pruefung 1) Und was ist bei sysenter/-exit besser?
(Pruefung 2) Wie laueft sysenter genau ab?
Partiell privat, wie sieht das denn aus fuer User und Kernel? (malt Adressraum)
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.
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?
(Pruefung 2) Vor- und Nachteil von Einadressraummodellen?