generated from PlexSheep/baserepo
135 lines
5.8 KiB
Markdown
135 lines
5.8 KiB
Markdown
# Fragen zum 1. Kapitel
|
|
|
|
**1. Was sind die Komponenten der von-Neumann-Architektur?**
|
|
|
|
Die von-Neumann-Architektur besteht aus einer CPU mit Steuer- und Rechenwerk,
|
|
einem einzelnen Speicher für Programmcode und Daten, und verschiedenen IO
|
|
Geräten wie Massenspeicher und Peripheriegeräte. Die Systeme werden mit einem
|
|
Bus-System verbunden.
|
|
|
|
**2. Was unterscheidet die von-Neumann-Architektur von der Harvard-Architektur?**
|
|
|
|
Die Harvard-Architektur hat im Gegensatz zur von-Neumann-Architektur getrennten
|
|
Speicher für Programmcode und Daten.
|
|
|
|
**3. Wieso ist es gerechtfertigt, komplexe moderne Speicherstrukturen als einen Speicher zu behandeln?**
|
|
|
|
Streng genommen gibt es in der von-Neumann-Architektur nur einen Speicher, aber
|
|
moderne Rechner haben mehrere Levels von Caches. Dadurch entsteht ein
|
|
Einheitliches Zugriffsmuster und die Komplexität des Computersystems wird
|
|
reduziert.
|
|
|
|
-> Die Speicher haben nur verschiedene Zugriffszeiten, logisch betrachtet ist es
|
|
also egal in welchem Speicher die Daten sind.
|
|
|
|
**4. Inwiefern unterscheidet sich unser Rechnermodell von der von-Neumann-Architektur?**
|
|
|
|
Moderne Rechner haben einen Memory Controller und Caches. Die CPU hat außerdem
|
|
Register, Program Counter, und vieles mehr.
|
|
|
|
**5. Welche Schritte werden durchlaufen, damit ein Java-Programm ausgeführt werden kann?**
|
|
|
|
Das Java-Programm vorkompiliert. Das Betriebssystem führt eine JVM Instanz aus,
|
|
welche dann das vorkompilierte Java Programm ausführt. Die JVM Instanz generiert
|
|
dabei anhand des Java Programms die Instruktionen für die CPU daraus generiert
|
|
und diese dann ausführen lässt.
|
|
|
|
Das eigentliche Programm ist die JVM die den Java Bytecode interpretiert.
|
|
|
|
**6. Welche Schritte werden durchlaufen, um einen einzelnen Maschinenbefehl auszuführen?**
|
|
|
|
* Fetch -- die Instruktion wird aus dem Speicher geladen.
|
|
* Inkrementiere den IP/PC -- damit die nächste Instruktion geladen werden kann.
|
|
* Decode -- Interpretiere die Instruktion und Argumente
|
|
* Execute -- Führe die Instruktion aus
|
|
* Memory Access -- Falls notwendig greife auf den Speicher zu
|
|
* Write Back -- Schreibe ggf. das Ergebnis in ein Register
|
|
|
|
**7. Wie viele Takte dauert die Ausführung eines einzelnen Maschinenbefehls?**
|
|
|
|
In der Regel dauert die Ausführung von einer Instruktion fünf (5) Takte lang. Komplexere
|
|
Instruktionen können länger dauern.
|
|
|
|
(Die Pipeline sorgt dafür, dass Instruktionen schneller ausgeführt werden)
|
|
|
|
-> Wie kann die Pipeline Instruktionen die 5 Takte braucht dazu bringen, dass
|
|
eine Instruktion pro Takt ausgeführt wird?
|
|
|
|
**8. Suchen Sie 3 Befehle der x86-Architektur heraus**
|
|
|
|
* `mov` -- Daten zu oder aus Registern verschieben
|
|
* `add` -- Daten addieren
|
|
* `sub` -- Daten subtrahieren
|
|
|
|
**9. Führen Sie folgendes Programm mit dem Adventskalender-Beispiel aus der Vorlesung durch:**
|
|
|
|
```pseudocode
|
|
01 LOAD <<17>> → [R1] ; lade Tür 17 zu Register 1
|
|
02 LOAD <13> → [R2] ; lade Tür 13 zu Register 2
|
|
03 ADD [R1], [R2] → [O1] ; addiere Register 1 und 2 und schreibe zu O1
|
|
04 WRITE [O1] → I/O ; schreibe O1 in irgendein IO Gerät
|
|
05 MUL [R1], [R2] → [O1] ; multipliziere Register 1 und 2 und schreibe zu O1
|
|
06 WRITE [O1] → I/O ; schreibe O1 in irgendein IO Gerät
|
|
```
|
|
(siehe Kommentare, das ist Pseudocode und damit nicht ausführbar)
|
|
|
|
**10. Welche Probleme kann es geben, wenn auf einem System mehrere Programme gleichzeitig laufen sollen?**
|
|
|
|
* Programme "streiten" sich um Ressourcen.
|
|
* Programme greifen auf den Speicher eines anderen Programmes zu und verändern dort Daten.
|
|
* Programme müssen aufeinander warten, weil eine Ressource nur begrenzt verfügbar ist.
|
|
* Programme müssen zu lange auf Ressourcen warten, der Programmkontext ist dann veraltet.
|
|
* …
|
|
|
|
-> Race Condition
|
|
|
|
**11. Was ist die Aufgabe von Betriebssystemen?**
|
|
|
|
Das Betriebssystem hat die Aufgabe, die Ressourcen (seien diese Software oder
|
|
Hardware Ressourcen) des Systems zu verwalten und an die unprivilegierten
|
|
Prozesse zu verteilen. Moderne Betriebssysteme haben oft noch deutlich mehr
|
|
Aufgaben.
|
|
|
|
**12. Was besagt das Highlander-Prinzip?**
|
|
|
|
"There can only be one."
|
|
|
|
**13. Warum muss für Betriebssysteme das Highlander-Prinzip gelten?**
|
|
|
|
Es kann pro System nur ein Betriebssystem geben.
|
|
|
|
**14. Geben Sie drei Beispiele für Software-Betriebsmittel**
|
|
|
|
Dateien, Netzwerkssockets und Threads
|
|
|
|
**15. Warum ist die CPU ein entziehbares und exklusives Betriebsmittel?**
|
|
|
|
Prozesse schreiten genau dann voran, wenn die CPU ihre Instruktionen
|
|
bearbeitet. Wenn nicht, wartet das Programm darauf, dass es wieder CPU Zeit
|
|
bekommt.
|
|
|
|
**16. Warum muss das Betriebssystem vor Anwendungssoftware abgeschottet werden?**
|
|
|
|
Das Betriebssystem hat besondere Rechte die Hardware zu manipulieren, z.B. das
|
|
Gerät auszuschalten. Außerdem kann das Betriebssystem jede Datei, jeden Prozess
|
|
auf dem Gerät einsehen. Anwendersoftware sollte diese Möglichkeit nicht haben,
|
|
damit keine unnötigen Risiken eingegangen werden.
|
|
|
|
**17. Warum müssen Anwendungen untereinander abgeschottet werden?**
|
|
|
|
Ansonsten könnten Programme versehentlich auf den Speicher anderer Programme
|
|
zugreifen und so undefiniertes Verhalten erzeugen.
|
|
|
|
**18. Warum werden die Befehle aus Frage 8 im User- bzw. Kernelmodus ausgeführt?**
|
|
|
|
* `mov` -- Daten zu oder aus Registern verschieben -- jedes Programm braucht Daten im Register, um Aktionen ausführen zu können
|
|
* `add` -- Daten addieren -- Addition ist eine grundlegende Rechenoperation
|
|
* `sub` -- Daten subtrahieren -- Subtraktion ist eine grundlegende Rechenoperation
|
|
|
|
**19. Warum ist eine Trennung zwischen User- und Kernelmodus ohne Hilfe der Hardware nicht möglich?**
|
|
|
|
Jedes Programm kann Instruktionen an die CPU geben, welche dort ausgeführt
|
|
werden. Instruktionen an sich haben keine Daten darüber, ob sie privilegiert
|
|
sind oder nicht, daher muss die Hardware zur unterscheidung der Rechte irgendwo
|
|
speichern, ob Instruktionen privilegiert ausgeführt werden, oder nicht.
|