Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 4 » Verlauf   (Übersicht)

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
pruefungen:hauptstudium:ls4:vm-2018-03-22-2 [22.03.2018 12:13] ku91pigypruefungen:hauptstudium:ls4:vm-2018-03-22-2 [22.03.2018 15:52] (aktuell) ku91pigy
Zeile 1: Zeile 1:
 +**Prüfer:** V. Sieh\\
 +**Beisitzer:** Bernhard\\
 +**ECTS:** 7,5
 +
 +Die Atmosphäre war entspannt und locker. Die Reaktionen auf die Erklärungen waren schwer deutbar. Ich hatte oft den Eindruck, die Antwort wäre nicht ganz richtig gewesen. Allerdings wurde ich anschließend nicht korrigiert und auch am Ende für keine Antwort kritisiert. Trotz ein paar Hängern bei unerwarteten Fragen, gab es noch eine 1,0. 
 +
 +====== Verlauf ======
 **P: Was gibt es für verschiedene Virtualisierungsarten und wie verwendet man sie?**\\ **P: Was gibt es für verschiedene Virtualisierungsarten und wie verwendet man sie?**\\
 S:  S: 
Zeile 8: Zeile 15:
   * Biblitheksbasiert: Man will nur ein Programm auf einem anderen OS laufen lassen. Dafür baur man die ABI nach.   * Biblitheksbasiert: Man will nur ein Programm auf einem anderen OS laufen lassen. Dafür baur man die ABI nach.
  
-**P: Wie funktioniert OS-basierte Virtualisierung?\\**+**P: Wie funktioniert OS-basierte Virtualisierung?**\\
 S: Man verändert die Verwaltungsbefehle für Prozesse und User. Die Instanznummer wird als Präfix davor geschrieben. S: Man verändert die Verwaltungsbefehle für Prozesse und User. Die Instanznummer wird als Präfix davor geschrieben.
  
-**P: Was macht man neben den Prozessen noch, was muss man schützen?\\**+**P: Was macht man neben den Prozessen noch, was muss man schützen?**\\
 S: Man schützt auch noch die Dateien, in dem man für jede Instanz Kopien der Dateien erstellt, die sie verändert. S: Man schützt auch noch die Dateien, in dem man für jede Instanz Kopien der Dateien erstellt, die sie verändert.
  
-**P: Wie ist das bei fork()?\\**+**P: Wie ist das bei fork()?**\\
 S: Eine Instanz darf nicht zu viele Prozesse starten, das muss in fork überwacht werden.\\ S: Eine Instanz darf nicht zu viele Prozesse starten, das muss in fork überwacht werden.\\
 Das gleiche muss beim RAM und Festplatte passieren. Zuerst kann man den anderen Instanzen ungenutzten Speicher wegnehmen, aber irgendwann muss Schluss sein. Das gleiche muss beim RAM und Festplatte passieren. Zuerst kann man den anderen Instanzen ungenutzten Speicher wegnehmen, aber irgendwann muss Schluss sein.
  
-**P: In der Übung haben wir einen Interpreter programmiert, warum verwendet man sowas nicht immer?\\**+**P: In der Übung haben wir einen Interpreter programmiert, warum verwendet man sowas nicht immer?**\\
 S: Weil er 100-1000 mal langsamer ist als das Originalsystem.\\ S: Weil er 100-1000 mal langsamer ist als das Originalsystem.\\
  
-**P: Warum ist der so viel langsamer? Wenn ein Add emuliert werden soll, gibt es bei x86 doch einen entsprechenden Befehl. Warum nimmt man den nicht einfach?\\**+**P: Warum ist der so viel langsamer? Wenn ein Add emuliert werden soll, gibt es bei x86 doch einen entsprechenden Befehl. Warum nimmt man den nicht einfach?**\\
 S: Die Register vom Host passen normalerweise nicht zu denen von Gast.\\ S: Die Register vom Host passen normalerweise nicht zu denen von Gast.\\
 Zuerst müssen die Operanden in Register vom Gast geladen werden.\\ Zuerst müssen die Operanden in Register vom Gast geladen werden.\\
Zeile 28: Zeile 35:
 Dann muss das Ergebnis wieder in Gast Register oder Speicher geschrieben werden. Hier sind auch wieder Checks nötig. Dann muss das Ergebnis wieder in Gast Register oder Speicher geschrieben werden. Hier sind auch wieder Checks nötig.
  
-**P: Was gibt es denn alles für Checks bei Speicherzugriff\\**+**P: Was gibt es denn alles für Checks bei Speicherzugriff**\\
 S: Zuerst die Segmentierung. Es wird überprüft, ob das Wort die Grenzen des Segemnts einhält.\\ S: Zuerst die Segmentierung. Es wird überprüft, ob das Wort die Grenzen des Segemnts einhält.\\
 Außerdem werden Lese/Schreibe/Ausführungsrechte geprüft.\\ Außerdem werden Lese/Schreibe/Ausführungsrechte geprüft.\\
Zeile 35: Zeile 42:
 Dann müssen die Lese/Schreib-Rechte der Page geprüft werden. Dann müssen die Lese/Schreib-Rechte der Page geprüft werden.
  
-**P: Wie kann man das im Emulator beschleunigen?\\**+**P: Wie kann man das im Emulator beschleunigen?**\\
 S: Man baut sich selber einen TLB. Dann kann man direkt den Host pointer für eine gast Page laden.\\ S: Man baut sich selber einen TLB. Dann kann man direkt den Host pointer für eine gast Page laden.\\
 Außerdem kann man mit dem TLB auch Alignment und Rechte überprüfen.\\ Außerdem kann man mit dem TLB auch Alignment und Rechte überprüfen.\\
Zeile 50: Zeile 57:
 In dem Fall stehen die Kernelpages sowieso nicht in diesem TLB, weil sie noch nie im User-Mode ausgeführt wurden. In dem Fall stehen die Kernelpages sowieso nicht in diesem TLB, weil sie noch nie im User-Mode ausgeführt wurden.
  
-**P: Was kann man neben dem Speicher TLB noch machen?\\**+**P: Was kann man neben dem Speicher TLB noch machen?**\\
 S: Man kann auch Alignment und Debug Checks mit dem JIT in die Code Blöcke kompilieren. S: Man kann auch Alignment und Debug Checks mit dem JIT in die Code Blöcke kompilieren.
  
-**P: Ich meine eher I/O Geräte.\\**+**P: Ich meine eher I/O Geräte.**\\
 S: Dann speichert man statt Pointern Callbacks im TLB. S: Dann speichert man statt Pointern Callbacks im TLB.
  
-**P: Was machen die Callbacks genau?\\**+**P: Was machen die Callbacks genau?**\\
 S: Wenn man z.B. in einen Port schreibt, um ein Pixel anzuzeigen, wird der entsprechende Callback aufgerufen. Der emuliert das Geräteverhalten und aktualisiert den Zustand. S: Wenn man z.B. in einen Port schreibt, um ein Pixel anzuzeigen, wird der entsprechende Callback aufgerufen. Der emuliert das Geräteverhalten und aktualisiert den Zustand.
  
-**P: Und woher kommen die Callbacks?\\**+**P: Und woher kommen die Callbacks?**\\
 S: Die werden beim Start des Systems registriert. Dann weiß man welche Geräte tatsächlich angeschlossen sind.\\ S: Die werden beim Start des Systems registriert. Dann weiß man welche Geräte tatsächlich angeschlossen sind.\\
 Man hat für jeden Komponenten ein Objekt, das registriert seine Callbacks am Bus. Man hat für jeden Komponenten ein Objekt, das registriert seine Callbacks am Bus.
  
-P: Aber wenn sich jetzt ein Gerät am ISA-Bus registriert, woher weiß der CPU das?\\+**P: Aber wenn sich jetzt ein Gerät am ISA-Bus registriert, woher weiß der CPU das?**\\
 S: Was? S: Was?
  
-**P: *malt Bus-Hierarchie mit CPU-Bus, PCI-Bus etc. auf*\\**+**P: //malt Bus-Hierarchie mit CPU-Bus, PCI-Bus etc. auf//**\\
 S: Der CPU gibt dem Bus den Port, der CPU-Bus schaut, zu welchem Unterbus/Gerät der gehört.\\ S: Der CPU gibt dem Bus den Port, der CPU-Bus schaut, zu welchem Unterbus/Gerät der gehört.\\
 Dann gibt der Unterbus das passende Callback an den CPU-Bus, der gibt es an den CPU und der führt es aus. Dann gibt der Unterbus das passende Callback an den CPU-Bus, der gibt es an den CPU und der führt es aus.
  
-**P: Geht das noch besser?\\** +**P: Geht das noch besser?**\\ 
-S: Man könnte das Endgerät-Callback im CPU Bus cachen. (nicht sicher, ob das die gewollte ANtwort war)+S: Man könnte das Endgerät-Callback im CPU Bus cachen. //(nicht sicher, ob das die gewollte Antwort war)//
  
-**P: Intern hat ein Komponent ja auch Busse.\\**+**P: Intern hat ein Komponent ja auch Busse.**\\
 S: Ja, allerdings sind die fest und es ist zur Compilezeit schon bekannt was wo angeschlossen ist.\\ S: Ja, allerdings sind die fest und es ist zur Compilezeit schon bekannt was wo angeschlossen ist.\\
 Deswegen braucht man keine Callbacks und kann Funktionen direkt aufrufen. Im Idealfall werden sie dann ge-inlined, sodass keine Calls mehr nötig sind. Deswegen braucht man keine Callbacks und kann Funktionen direkt aufrufen. Im Idealfall werden sie dann ge-inlined, sodass keine Calls mehr nötig sind.
  
-**P: Wie funktioniert denn die JVM?\\**+**P: Wie funktioniert denn die JVM?**\\
 S: Die JVM im speziellen oder eine JIT-optimierte Sprache? S: Die JVM im speziellen oder eine JIT-optimierte Sprache?
  
-**P: JIT-optimierte Sprache am Beispiel der JVM.\\**+**P: JIT-optimierte Sprache am Beispiel der JVM.**\\
 S: Die Anwendung arbeitet nur auf dem Stack und es werden sichere Pointer verwendet.\\ S: Die Anwendung arbeitet nur auf dem Stack und es werden sichere Pointer verwendet.\\
 Sie bekommt nur Pointer von der JVM und kann sie nicht verändern.\\ Sie bekommt nur Pointer von der JVM und kann sie nicht verändern.\\
Zeile 91: Zeile 98:
 Man kann man z.B. einen Counter in einen Block kompilieren. Wenn man merkt, dass der Block häufig ausgeführt wird, kann man ihn noch einmal kompilieren und besser optimieren. Man kann man z.B. einen Counter in einen Block kompilieren. Wenn man merkt, dass der Block häufig ausgeführt wird, kann man ihn noch einmal kompilieren und besser optimieren.
  
-**P: Wie genau funktionieren die sicheren Pointer?\\**+**P: Wie genau funktionieren die sicheren Pointer?**\\
 S: Das bedeutet, es gibt keine Pointerarithmetik, sodass man keine Rechteprüfungen machen muss.\\ S: Das bedeutet, es gibt keine Pointerarithmetik, sodass man keine Rechteprüfungen machen muss.\\
 Die Anwendung bekommt einen korrekten Pointer von der VM und weil sie daran nichts ändern kann, müssen keine Überprüfungen durchgeführt werden.\\ Die Anwendung bekommt einen korrekten Pointer von der VM und weil sie daran nichts ändern kann, müssen keine Überprüfungen durchgeführt werden.\\
 Weil die Pointer typisiert sind, ist auch die Größe bekannt und man braucht auch keine Bounds- und Alignment-Checks mehr. Weil die Pointer typisiert sind, ist auch die Größe bekannt und man braucht auch keine Bounds- und Alignment-Checks mehr.
  
-**P: Wie funktionieren Exceptions in der JVM?\\**+**P: Wie funktionieren Exceptions in der JVM?**\\
 S: Es gibt try/catch Blöcke. Tritte eine Exception auf, wird sofort in den catch-Block gesprungen. Man muss also keine Instruktion wiederholen oder Zustand wiederherstellen.\\ S: Es gibt try/catch Blöcke. Tritte eine Exception auf, wird sofort in den catch-Block gesprungen. Man muss also keine Instruktion wiederholen oder Zustand wiederherstellen.\\
 Es reicht, wenn man zum Verabreitungs-Abschnitt im Block springt und dann PC, Flags etc. setzt. Das ist dann nicht wesentlich aufwendiger als ein normales return. Es reicht, wenn man zum Verabreitungs-Abschnitt im Block springt und dann PC, Flags etc. setzt. Das ist dann nicht wesentlich aufwendiger als ein normales return.
  
-**P: Wie werden die switch-Befehle dann ohne berechneter Sprünge übersetzt?\\**+**P: Wie werden die switch-Befehle dann ohne berechneter Sprünge übersetzt?**\\
 S: Man kann keine Table-Switch verwenden. Stattdessen kann man eine if-Kaskade oder binäre Suche verwenden. S: Man kann keine Table-Switch verwenden. Stattdessen kann man eine if-Kaskade oder binäre Suche verwenden.
  
-**P: Ein "if" ist doch auch ein berechneter Sprung.\\**+**P: Ein "if" ist doch auch ein berechneter Sprung.**\\
 S: Ja, allerdings kennt man das Sprungziel ahead-of-time. Dadurch kennt man trotzdem noch alle Pfade durch den Code, die genommen werden können. S: Ja, allerdings kennt man das Sprungziel ahead-of-time. Dadurch kennt man trotzdem noch alle Pfade durch den Code, die genommen werden können.
  
-**P: Was wird jetzt noch zur Laufzeit gemacht?\\**+**P: Was wird jetzt noch zur Laufzeit gemacht?**\\
 S: Bei Java gibt es den Bytecode Checker. Der durchläuft das Programm auf allen möglichen Wegen.\\ S: Bei Java gibt es den Bytecode Checker. Der durchläuft das Programm auf allen möglichen Wegen.\\
 Es gibt zu jeder Intruktion Vor- und Nachbedingungen. Vor einer Addition müssen z.B. zwei Integer auf dem Stack liegen und danach liegt ein Integer auf dem Stack.\\ Es gibt zu jeder Intruktion Vor- und Nachbedingungen. Vor einer Addition müssen z.B. zwei Integer auf dem Stack liegen und danach liegt ein Integer auf dem Stack.\\
Zeile 112: Zeile 119:
 Während der Ausführung muss man nur noch Array Bounds und Downcasts überprüfen. Null-Pointer exceptions werden über Segmentation-Faults des Host-Systems erzeugt. Während der Ausführung muss man nur noch Array Bounds und Downcasts überprüfen. Null-Pointer exceptions werden über Segmentation-Faults des Host-Systems erzeugt.
  
-**P: Was kann man den bei einem return noch optimieren?\\**+**P: Was kann man den bei einem return noch optimieren?**\\
 S: Wenn man bei einem Sprung weiß, wo er hinführen wird, kann man direkt den nächsten Block anspringen, solange er schon kompiliert ist.\\ S: Wenn man bei einem Sprung weiß, wo er hinführen wird, kann man direkt den nächsten Block anspringen, solange er schon kompiliert ist.\\
-(nicht sicher, ob das die gewollte Antwort war)+//(nicht sicher, ob das die gewollte Antwort war)//
  
-**P: Was passiert bei loops in einem Block?\\**+**P: Was passiert bei loops in einem Block?**\\
 S: Man kann entweder einen Timer programmieren, sodass man bei einer Endlosschleife unterbrochen wird, oder eine Counter in die Schleife einfügen. S: Man kann entweder einen Timer programmieren, sodass man bei einer Endlosschleife unterbrochen wird, oder eine Counter in die Schleife einfügen.
  
-**P: Das sind allgemeine JIT Lösungen. Wie macht das die JVM?\\**+**P: Das sind allgemeine JIT Lösungen. Wie macht das die JVM?**\\
 S: Das weiß ich nicht. S: Das weiß ich nicht.
  
-**P: Weil die JVM nur eine Applikation simuliert, muss sie nicht zwangsweise wieder in die Hauptschleife zurückkehren. \\** +**P: Weil die JVM nur eine Applikation simuliert, muss sie nicht zwangsweise wieder in die Hauptschleife zurückkehren.\\ 
-Wenn die Applikation in einer Endlosschleife ist, dass hängt sie einfach fest.+Wenn die Applikation in einer Endlosschleife ist, dass hängt sie einfach fest.**