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

Merge branch 'main' into 'main'

Mehr Fragen #3

See merge request oj14ozun/sp-quiz!5
parents 3ed79ef2 c12424b7
No related branches found
No related tags found
No related merge requests found
ws19.q 0 → 100644
# https://sys.cs.fau.de/extern/lehre/ws23/sp2/pruefung/klausuren/2019w-SP-Klausur_www.pdf
0 Wozu dient die CAS (Compare-And-Swap) Instruktion? (Februar 2020)
- Zur Realisierung einer effizienten Verdrängungssteuerung bei einseitiger Synchronisation.
Nein. Dies wird je nach Art der einseitigen Synchronisation (z. B. Blockieren der Signalbehandlung) unterschiedlich, jedoch nicht mit CAS, gelöst.
- Um in einem System mit Seitennummerierung (Paging) Speicherseiten in die Auslagerungspartition (swap area) schreiben zu können.
Nein, für die Implementation dessen ist das Betriebssystem zuständig.
+ Um auf einem Multiprozessorsystem einfache Modifikationen an Variablen ohne Sperren implementieren zu können.
Ja, die CAS-Instruktion erlaubt, eine Variable transaktional nur dann auf einen neuen Wert zu setzen,
wenn sie nicht anderweitig modifiziert wurde.
Mittels einer CAS-Schleife kann somit der Wert einer Variable atomar ohne gegenseitigen Ausschluss geändert werden.
- Um bei der Implementierung von Schlossvariablen (Locks) aktives Warten zu vermeiden.
Nein, allein mit einer atomaren Variable *locks* zu implementieren, setzt aktives Warten auf die Änderung des Wertes voraus.
Stattdessen müsste für passives Warten der wartende Prozess in den Zustand blockiert übergehen, bis er von einem anderen Prozess "geweckt" wird. Hierfür ist Betriebssystemunterstützung in Form eines Schedulers nötig.
.
0 Was versteht man unter RAID 0? (Februar 2020)
- Ein auf Flash-Speicher basierendes, extrem schnelles Speicherverfahren.
Nein, RAID 0 und andere RAID *level* bezeichnen, wie Daten auf mehrere Speichermedien (ein *redundant array of independent disks*) aufgeteilt werden
und nicht, wie der Speicher auf der physikalischen Ebene implementiert ist.
- Auf Platte 0 wird Parity-Information der Datenblöcke der Platten 1 - 4 gespeichert.
Nein, RAID 0 sorgt nicht für Redundanz, sondern dient nur zur Beschleunigung von Speicherzugriffen. Es werden keine Paritätsdaten angelegt.
+ Datenblöcke eines Dateisystems werden über mehrere Platten verteilt gespeichert.
Ja, ein Begriff hierfür lautet *striping*
- Datenblöcke werden über mehrere Platten verteilt und repliziert gespeichert.
Nein, RAID 0 sorgt nicht für Redundanz, sondern dient nur zur Beschleunigung von Speicherzugriffen. Es werden keine Replikate von Datenblöcken angelegt.
.
0 Welche der folgenden Aussagen zum Thema Adressräume ist richtig? (Februar 2020)
- Virtuelle Adressräume sind Voraussetzung für die Realisierung logischer Adressräume.
Nein, andersherum. Ein logischer Adressraum ist ein zusammenhängender Adressbereich. Der virtuelle Adressbereich setzt auf diesen auf, indem Adressen, die nicht auf den Speicher abgebildet werden können, beim Zugriff einen Adressübersetzungsfehler auslösen. Die Zuordnung vom logischen zum realen Adressraum kann somit als totale Funktion betrachtet werden, im Gegensatz dazu kann die Zuordnung vom virtuellen zum realen Adressraum als partielle Funktion auf den logischen Adressen betrachtet werden (vgl. SP1 B Vl. 2 S. 12 ff., 27).
- Der virtuelle Adressraum kann nie größer sein als der im Rechner vorhandene Hauptspeicher.
Nein, durch Speichervirtualisierung können Seiten auf den Hintergrundspeicher ausgelagert werden (*swapping*).
- Die maximale Größe des virtuellen Adressraums kann unabhängig von der verwendeten Hardware frei gewählt werden.
Nein, z. B. ist diese auf einem 32-Bit-System in der Regel auf höchstens 2³² Datenwörter beschränkt (In der Praxis also nur 4 GiB).
+ Der physikalische Adressraum ist durch die gegebene Hardwarekonfiguration definiert.
Ja, jede physikalische Adresse korrespondiert zu einer tatsächlichen Stelle im Hauptspeicher, von dem eine bestimmte Menge in einem System verbaut ist.
.
0 Welche Aussage zu Zeigern in C-Programmen ist richtig? (Februar 2020)
+ Zeiger können verwendet werden, um in C eine call-by-reference Übergabesemantik nachzubilden.
Ja. C ist *call-by-value*, da Funktionsparameter als Kopie und nicht als Referenz weitergegeben werden.
Zeiger sind jedoch Referenzen auf Speicherstellen im Adressraum. Erhält eine Funktion also einen Zeiger als Wert,
so kann sie mit dem Ziel des Zeigers so verfahren, als hätte sie das Ziel selbst per Referenz erhalten.
- Zeiger vom Typ `void*` existieren in C nicht, da solche Zeiger auf "Nichts" keinen sinnvollen Einsatzzweck hätten.
Nein, *void pointer* zeigen auf Daten mit unspezifiziertem Typ. Ein `void*` muss jedoch zuerst zu einem Zeiger auf einen nicht-`void`-Wert gecastet werden,
bevor er dereferenziert werden kann, oder Pointerarithmetik durgeführt werden kann.
- Ein Zeiger kann zur Manipulation von Daten in schreibgeschützten Speicherbereichen verwendet werden.
Nein. Wird versucht, schreibend auf einen schreibgeschützten Bereich zuzugreifen, so verhindert dies die MMU,
unabhängig davon, mit welchem Programmierkonzept der Zugriff versucht wurde.
- Die Übergabesemantik für Zeiger als Funktionsparameter ist call-by-reference.
Nein, ein Zeiger wird immer noch als Wert an eine Funktion übergeben, d. h. es wird eine Kopie des Zeigers in das entsprechende Register
oder auf den Stack abgelegt. Das ein Zeiger eine Referenz auf eine Speicherstelle *ist*, spielt hierbei keine Rolle.
Beispiel: Würde die Aussage stimmen, so würde das folgende Programm "10" ausgeben. Es gibt jedoch "5" aus.
```c
#include <stdio.h>
static int b = 10;
static void pointers_are_values_too(int* arg) {
arg = &b; // arg zeigt hier auf b, ptr in main bleibt aber unverändert.
}
int main(void) {
int a = 5;
int* ptr = &a; // ptr zeigt auf a.
pointers_are_values_too(ptr);
printf("%d\n", *ptr); // ptr zeigt immer noch auf a.
}
```
.
0 Welche Aussage zu Programmbibliotheken ist richtig? (Februar 2020)
- Eine statische Bibliothek, die in ein Programm eingebunden wurde, muss zum Ladezeitpunkt dieses Programms im Dateisystem vorhanden sein.
Nein, das wäre bei einer dynamischen Bibliothek der Fall.
Bei statischen Binden wird bereits zur *link time* der Objektcode der Bibliothek in das Programm kopiert.
- Beim Binden mit einer statischen Bibliothek werden in einem Programm nur Verweise auf verwendete Symbole der Bibliothek angelegt.
Nein, das wäre bei einer dynamischen Bibliothek der Fall. Bei einer statischen Bibliothek wird zunächst die gesamte Bibliothek in die ausführbare Datei eingebunden.
+ Programm-Module, die von mehreren Anwendungen gemeinsam genutzt werden, können in Form einer dynamischen Bibliothek zentral installiert werden, um Speicherplatz zu sparen.
Ja, eine dynamische Bibliothek kann von mehreren Programmen referenziert werden. Somit ist nur eine Kopie dieser auf dem System nötig. So kann Speicherplatz gespart werden.
- Eine Änderung am Code einer statischen Bibliothek (z. B. Bugfixes) erfordert kein erneutes Binden der Programme, die diese Bibliothek benutzen.
Nein, bei statischen Bibliotheken wird der Objektcode zum Bindezeitpunkt in das Zielprogramm kopiert. Soll dieser geändert werden, so muss das Programm neu gebunden werden. Es reicht nicht aus,
nur die statische Bibliothek zu ändern, da das Programm immer noch den ursprünglichen Objektcode enthält.
.
0 Welche der folgenden Aussagen über Einplanungsverfahren ist richtig? (Februar 2020)
- Beim Einsatz präemptiver Einplanungsverfahren kann laufenden Prozessen die CPU nicht entzogen werden.
Nein, das wäre kooperative Einplanung. Bei präemptiver Einplanung kann einem Prozess durch einen Timer-Interrupt die CPU entzogen werden (Präemption).
- Probabilistische Einplanungsverfahren müssen die exakten CPU-Stoßlängen aller im System vorhandenen Prozesse kennen.
Nein, diese betrachten nur die ungefähren Stoßlängen.
+ Bei kooperativer Einplanung kann es zur Monopolisierung der CPU kommen.
Ja, bei kooperativer Einplanung kann der laufende Prozess erst gewechselt werden, wenn das Programm kooperativ ist und die CPU abgibt.
Ein unkooperatives Programm kann dies unterlassen, und die CPU für eine unbegrenzte Zeit in Anspruch nehmen.
- Asymmetrische Einplanungsverfahren können ausschließlich auf asymmetrischen Multiprozessor-Systemen zum Einsatz kommen.
Nein, asymmetrische Planung (eine Bereitliste pro Prozessor) muss zwar auf asymmetrischen Multiprozessorsystemen (z. B. CPU und GPU) eingesetzt werden, kann jedoch auch auf symmetrischen Multiprozessorsystemen, bei welchen jeder Prozessor gleichermaßen dieselben Programme ausführen kann, eingesetzt werden. (vgl. SP1 C IX.2 S. 11 ff.)
.
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