Skip to content
Snippets Groups Projects
Commit 4b692d13 authored by Philip Kaluđerčić's avatar Philip Kaluđerčić :u7121:
Browse files

Add more questions from ss16

parent 900956f2
No related branches found
No related tags found
No related merge requests found
# https://sys.cs.fau.de/extern/lehre/ws23/sp2/pruefung/klausuren/2016s-SP-Klausur-www.pdf
0 Welche Aussage zum Thema Speicherzuteilung ist richtig? (Juli 2016)
- Beim Halbierungsverfahren (buddy-Verfahren) kann keine interne Fragmentierung auftreten.
Doch, weil der Speicher intern in Zweier-Potenzen aufgeteilt wird, und wenn man weniger braucht, hat man Speicher-Verschließ.
......@@ -9,3 +11,71 @@
Nein, das versucht nur den Verschnitt zu minimieren, und opfert dafür Laufzeit, weshalb es nicht "in jedem Fall" das beste sein kann.
.
0 Welche Aussage zum Thema Adressräume ist richtig? (Juli 2016)
- Im realen Adressraum sind alle theoretisch möglichen Adressen auch gültig.
Nein, weil der reale Addressraum lücken haben kann, bedingt durch den Speicher.
+ Der Zugriff auf eine virtuelle Adresse, die zum Zeitpunkt des Zugriffs nicht im Hauptspeicher abgebildet ist, führt zu einem Trap.
Ja, das Betriebsystem kann dann versuchen die Seite einzulagern, oder einen Speicherfehler an den Prozess weiterzuleiten.
- Die Größe eines virtuellen Adressraums darf die Größe des vorhandenen Hauptspeichers nicht überschreiten.
Nein, der virtuelle Adressraum abstrahiert über dem realem Addressraum, und kann vortäuschen (/virtualisieren/) die gesammte Wortbreite addressierbar zu machen.
- Bei Seitennummerierung besitzt jede Seite eine unterschiedliche Größe.
Nein, alle Seiten haben die gleiche Größe (ausnahme Huge-Pages, welche ein Vielfaches größer sind), damit diese leichter ein- und ausgelagert werden können.
.
0 Ein laufender Prozess wird in den Zustand blockiert überführt. Welche Aussage passt zu diesem Vorgang? (Juli 2016)
- Der Prozess terminiert.
Nein, weil ein blokierter Prozess kann später weiter laufen, sobald die Ursache, d.h. eine fehlende Ressource, behoben wurde.
- Es ist kein direkter Übergang von laufend nach blockiert möglich.
Nein, ein laufender Prozess kann direkt blockiert werden (ohne bspw. über "bereit" zu gehen), wenn ein blokierender Systemaufruf (`read(2)`, `accept(2)`, `wait(2)`, ...) getätigt wird.
+ Der Prozess wartet auf Daten von der Standardeingabe.
Ja, weil das den Prozess so lange blokiert, bis diese Daten verfügbar sind.
- Der bisher laufende Prozess wurde vom Betriebssystem verdrängt und ein anderer Prozess auf der CPU eingelastet.
Nein, der Prozess muss nicht (sofort) auf einer anderen CPU eingelastet werden.
.
0 Welche Aussage zum Aufbau einer Kommunikationsverbindung zwischen einem Client und Server über eine Socket-Schnittstelle ist richtig? (Juli 2016)
- Der Server signalisiert durch einen Aufruf von `connect()`, dass er zur Annahme von Verbindungen bereit ist; ein Client kann dies durch `accept()` annehmen.
Nein, dazu benutzt der Server den Systemaufruf `listen()`,
`connect()` wird auf der Client-Seite benutzt um sich mit einem
Server zu verbinden.
- Der Server erzeugt einen Socket und ruft anschließend `bind()` auf -- der Client muss durch einen Aufruf von `listen()` warten, bis der Server bereit zur Annahme von Verbindungen ist.
Nein, wenn der *Server* den Socket nicht für Verbindungen
vorbereitet hat mittels `listen()`, wird der *Client* mit
`connect()` einen Fehler erfahren. Es ist nicht in diesem Sinne mit
`listen()` für den Client möglich auf zukünftige Dienstleistungen zu
warten.
- Nach der Erzeugung eines Sockets mittels `socket()` kann ohne weitere System- oder Funktionsaufrufe sofort eine Verbindung von einem Client durch einen Aufruf von `connect()` angenommen werden. (Juli 2016)
Falsch, man kann mit `connect()` keine Verbindung *annehmen*, dazu
benutzt man `accept()`. In dem Fall muss aber zuvor `bind()` und
`listen()` verwenden.
+ Der Server richtet an einem Socket mittels `listen()` eine Warteschlange für ankommende Verbindungen ein und kann danach mit `accept()` eine konkrete Verbindung annehmen. `accept()` blockiert so lange die Warteschlange leer ist.
.
0 Wozu dient der Maschinenbefehl _cas_ (compare-and-swap)? (Juli 2016)
- Um bei Monoprozessorsystemen Interrupts zu sperren.
Nein, das wäre auf x86 ein Befehl wie `cli`.
+ Um auf einem Multiprozessorsystem einfache Modikationen an Variablen ohne Sperren implementieren zu können.
Ja, es ersetzt einen Wert atomar und transaktional, wenn der Wert sich nicht verändert hat.
- Um bei der Implementierung von Schlossvariablen (Locks) aktives Warten zu vermeiden
Nein, passives Warten braucht einen Scheduler, was man nicht direkt mit cas bekommt.
- Um in einem System mit Seitennummerierung (Paging) Speicherseiten in die Auslagerungspartition (swap area) schreiben zu können.
Nein, das wird nicht mit einem Maschinenbefehl umgesetzt, sondern braucht eine MMU.
.
0 Welche Aussage zu Seitenersetzungsstrategien ist richtig? (Juli 2016)
- Bei der Seitenersetzungsstrategie FIFO wird immer die zuletzt eingelagerte Seite ersetzt.
Nein, _First In, First Out_ wird die älteste Seite ausgelagert.
- Beim Auslagern einer Speicherseite muss der zugehörige Seitendeskriptor angepasst werden, beim Einlagern einer Seite ist das jedoch nicht nötig.
Nein, der Deskriptor muss dahingehend angepasst werden, um anzudeuten dass die Seite wieder präsent ist.
+ Bei der Seitenersetzungsstrategie LRU wird die Seite ersetzt, welche am längsten nicht mehr referenziert wurde.
Ja, _Least Recently Used_ wird die älteste unbenutzte Seite ausgelagert.
- Beim Einsatz der Seitenersetzungsstrategie FIFO kann es nicht zu Seitenattern kommen.
Doch, wenn die neuste Seite (_First In_) immer ausgelagert wird (_First Out_), dann werden bei hoher Last immer die gleichen Seiten ein- und ausgelagert, was man unter "Seitenflattern" versteht.
.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment