diff --git a/ss16.q b/ss16.q index 1f3e010f1fa669e043724432045912b3ca94f8b7..de0f92ddc3f71d93a274b899239971fbce2c6d70 100644 --- a/ss16.q +++ b/ss16.q @@ -61,7 +61,7 @@ 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 Modifikationen an Variablen ohne Sperren implementieren zu können. ++ Um auf einem Multiprozessorsystem einfache Modifikationen 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. @@ -76,6 +76,6 @@ 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 Seitenflattern 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. +- Beim Einsatz der Seitenersetzungsstrategie FIFO kann es nicht zu Seitenflattern 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 diff --git a/ss18.q b/ss18.q index 4dbe7c90607472741e48fe08e719990b398755eb..495bdfdfbafeeea79eaf1b3b4c4d1dd3d26be9d3 100644 --- a/ss18.q +++ b/ss18.q @@ -30,7 +30,7 @@ 0 Welche Aussage über das aktuelle Arbeitsverzeichnis (Current Working Directory) trifft zu? (Juli 2018) - Jedem UNIX-Benutzer ist zu jeder Zeit ein aktuelles Verzeichnis zugeordnet. Nein, weil ein aktuelles Verzeichnis wird einem Prozess zugeordnet. -+ Pfadnamen, die nicht mit dem Zeichen ’/’ beginnen, werden relativ zu dem aktuellen Arbeitsverzeichnis interpretiert. ++ Pfadnamen, die nicht mit dem Zeichen `/` beginnen, werden relativ zu dem aktuellen Arbeitsverzeichnis interpretiert. - Mit dem Systemaufruf `chdir()` kann das aktuelle Arbeitsverzeichnis eines Prozesses durch seinen Vaterprozess verändert werden. Nein, das ändert den CWD von dem aufrufendem Prozess. - Besitzt ein UNIX-Prozess kein Current Working Directory, so beendet sich der Prozess mit einem Segmentation Fault. diff --git a/ss19.q b/ss19.q index 38c07ff5fed77292a42f296f36b6b3b1a5160be8..bf77792253381a7d3c8bc8c3f89ec18cf7058bf7 100644 --- a/ss19.q +++ b/ss19.q @@ -44,7 +44,7 @@ - Der Einsatz von nicht-blockierenden Synchronisationsmechanismen kann zu Verklemmungen (deadlocks) führen. Nein, bei einer Verklemmung müssen mehere Fäden passiv aufeinander warten, was bei nicht-blockierendeer Syncrhonisation nicht passieren kann. -- Ein Anwendungsprozess muss bei der Verwendung von Semaphoren Interrupts sperren, um Probleme durch Nebenläufigkeit zu verhindern. +- Ein Anwendungsprozess muss bei der Verwendung von Semaphoren Interrupts sperren, um Probleme durch Nebenläufigkeit zu verhindern. Nein, wenn nur weil ein Anwendungsprozess keine Interrupts selbst sperren kann. + Gibt ein Faden einen Mutex frei, den er selbst zuvor nicht angefordert hatte, stellt dies einen Programmierfehler dar; eine Fehlerbehandlung sollte eingeleitet werden. diff --git a/ws21.q b/ws21.q index fa4730cf8afc86ee0c36413134b05168ca303eee..fdd239cd8568e134d99b0eb18e81eb996abc43d1 100644 --- a/ws21.q +++ b/ws21.q @@ -71,7 +71,7 @@ Nein, weil ein Interrupt nichts mit dem Programm zu tun hat, und daher dieses nicht (direkt) abbrechen sollte. -- Bei einem Trap wird der gerade in Bearbeitung befindliche Maschinenbefehl immer noch vollständig zu Ende bearbeitet, bevor mit der Trapbehandlung begonnen wird. +- Bei einem Trap wird der gerade in Bearbeitung befindliche Maschinenbefehl immer noch vollständig zu Ende bearbeitet, bevor mit der Trapbehandlung begonnen wird. Nein, bspw. wenn man versucht auf nicht lesbaren Speicher versucht zuzugreifen, muss es abgebrochen werden, bevor auf den Speicher