#+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.