dhbw-os/questions/01.md

135 lines
5.8 KiB
Markdown
Raw Permalink Normal View History

2024-04-04 20:00:11 +02:00
# 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.
2024-04-11 13:17:45 +02:00
-> Die Speicher haben nur verschiedene Zugriffszeiten, logisch betrachtet ist es
also egal in welchem Speicher die Daten sind.
2024-04-04 20:00:11 +02:00
**4. Inwiefern unterscheidet sich unser Rechnermodell von der von-Neumann-Architektur?**
2024-04-11 13:17:45 +02:00
Moderne Rechner haben einen Memory Controller und Caches. Die CPU hat außerdem
Register, Program Counter, und vieles mehr.
2024-04-04 20:00:11 +02:00
**5. Welche Schritte werden durchlaufen, damit ein Java-Programm ausgeführt werden kann?**
2024-04-11 13:17:45 +02:00
Das Java-Programm vorkompiliert. Das Betriebssystem führt eine JVM Instanz aus,
2024-04-04 20:00:11 +02:00
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.
2024-04-11 13:17:45 +02:00
Das eigentliche Programm ist die JVM die den Java Bytecode interpretiert.
2024-04-04 20:00:11 +02:00
**6. Welche Schritte werden durchlaufen, um einen einzelnen Maschinenbefehl auszuführen?**
2024-04-11 13:17:45 +02:00
* Fetch -- die Instruktion wird aus dem Speicher geladen.
* Inkrementiere den IP/PC -- damit die nächste Instruktion geladen werden kann.
2024-04-04 20:00:11 +02:00
* 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?**
2024-04-11 13:17:45 +02:00
In der Regel dauert die Ausführung von einer Instruktion fünf (5) Takte lang. Komplexere
2024-04-04 20:00:11 +02:00
Instruktionen können länger dauern.
2024-04-11 13:17:45 +02:00
(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?
2024-04-04 20:00:11 +02:00
**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?**
2024-04-11 13:17:45 +02:00
* 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.
2024-04-04 20:00:11 +02:00
*
2024-04-11 13:17:45 +02:00
-> Race Condition
2024-04-04 20:00:11 +02:00
**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?**
2024-04-11 13:17:45 +02:00
* `mov` -- Daten zu oder aus Registern verschieben -- jedes Programm braucht Daten im Register, um Aktionen ausführen zu können
2024-04-04 20:00:11 +02:00
* `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.