#+title: VM WS23/24 Braindump #+author: Florian Guthmann #+email: florian.guthmann@fau.de #+options: num:nil \n:t html-style:nil html5-fancy:t html-postamble:nil #+html_doctype: xhtml5 #+html_head: #+html_head: #+html_mathjax: path:/~oc45ujef/mathjax/es5/tex-mml-chtml.js #+MACRO: abbr @@html:$1@@ * Was ist denn Emulation? Das Nachbilden eines Systems auf einem anderen System in Software. Ich brauche etwas, um noch /funktional/ dazuzusagen. * Was ist bei Emulation performancetechnisch denn das Problem? In der Hauptschleife werden Flags berechnet, auf Interrupts geprüft, Instruktionen dekodiert usw. Außerdem IO über Bus, MMU. * Wie funktioniert denn so ein Speicherzugriff? Ich erkläre den Zugriff über den Bus. * Wie macht man das denn performant? Man cached die Callbacks im Bus. * Was liegt denn noch so zwischen CPU und Bus? Er will hier auf die Segment/Alignment/Debug/...-Checks/MMU hinaus. * Wie macht man das mit der MMU denn so? siehe [[https://fsi.cs.fau.de/pruefungen/hauptstudium/ls4/vm-2022-02-17][Braindump 2022-02-17]], hier brauche ich viel Zeit. * Warum ist denn bei den Adressen noch Platz zwischen Bits 2-12? Bits 0-1 : Alignment Bits 12-31 : Pagenummer * Wozu kann ich diese Bits denn so benutzen? Segment-Checks, RW-Rechte, JIT-Blöcke * Wenn ich JIT-Blöcke so markiere, ist ja auch das Lesen langsam. Was kann ich machen? Hier komme ich nicht drauf. Die Lösung sind separate TLBs für Code/Daten/usw * Wenn ich einen Block jitte, was passiert da? Zerlegung in Mikroinstruktionen, zusammenschnipseln... * Warum einen Block? Rücksprünge/berechnete Sprünge problematisch, die Hauptschleife soll ja auch ab und zu laufen. * Was passiert dann bei Exceptions? Rückkehr in die Hauptschleife. Flags und IP müssen richtig sein. * Das zerstört mir ja meine Optimierung? siehe Lazy-Flag-Berechnung (mit einiger Hilfe) * Die Reihenfolge von Exceptions ist dann in der VM potentiell anders als in Hardware. Warum? Block mit Division-By-Zero und danach Page-Fault. ⇒ Page-Fault wird schon beim jitten ausgelöst. Lösung ist, den Page-Fault beim jitten zu ignorieren und dann in den Block reinzukompilieren. * Was passiert bei bibliotheksbasierter Virtualisierung? siehe Folien.