Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 4 » Concurrent Systems Exam 2021-04-09 (Übersicht)
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
pruefungen:hauptstudium:ls4:cs-2021-04-09 [09.04.2021 15:58] – angelegt Marcel[Inf] | pruefungen:hauptstudium:ls4:cs-2021-04-09 [09.04.2021 20:13] (aktuell) – Marcel[Inf] | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Concurrent Systems | + | ====== Concurrent Systems |
{{indexmenu>: | {{indexmenu>: | ||
+ | |||
+ | <note tip>My own summary that I have created for exam preparation is available at https:// | ||
===== Meta Information ===== | ===== Meta Information ===== | ||
Zeile 12: | Zeile 14: | ||
* during the semester: attending every lecture, active collaboration in exercise briefings | * during the semester: attending every lecture, active collaboration in exercise briefings | ||
* three (non full-time) weeks of preparation before the exam | * three (non full-time) weeks of preparation before the exam | ||
- | * I have gone through the slides non-linearly, | + | |
- | * I have created a summary of every slide deck. E.g. for the slide deck on locks, I had a collection of code snippets for all the variants of locks together with comments of their (dis)advantages. | + | * I have created a summary of every slide deck. E.g. for the slide deck on locks, I had a collection of code snippets for all the variants of locks together with comments of their (dis)advantages. |
- | * For selected terms of the lecture, I have consulted | + | * For selected terms of the lecture, I have consulted |
+ | * After all, except for the MCS lock, the content of the exercises wasn't super exam-relevant. I have only read through the notes that I have created during the exercise debriefings (which e.g. said " | ||
+ | * I think the exercises teaches you _a lot_ of things, but once you've done them during the semester, there' | ||
* Evaluation | * Evaluation | ||
* The exam is fair! You can achieve 1.0 even with errors. | * The exam is fair! You can achieve 1.0 even with errors. | ||
Zeile 21: | Zeile 25: | ||
===== Prüfung ===== | ===== Prüfung ===== | ||
- | === Einführung === | + | Das untenstehende Protokoll sollte relativ vollständig sein. Ich habe es " |
- | * Was ist Nebenläufigkeit? | + | ==== Einführung ==== |
+ | |||
+ | | ||
> Zwei Ereignisse nebenläufig, | > Zwei Ereignisse nebenläufig, | ||
Zeile 30: | Zeile 36: | ||
> Vergleichbare Elemente müssen zur Laufzeit zwingend sequentialisiert werden; dafür gibt es verschiedene Methoden. | > Vergleichbare Elemente müssen zur Laufzeit zwingend sequentialisiert werden; dafür gibt es verschiedene Methoden. | ||
- | * Kann es denn zwei Ereignisse geben, die zwar nebenläufig sind, aber trotzdem auf unterer Ebene sequentialisiert werden müssen? | + | |
> Ja, beim Übersetzen nach tieferen Ebenen können vorher nebenläufige Ereignisse nun gekoppelt in Erscheinung treten. | > Ja, beim Übersetzen nach tieferen Ebenen können vorher nebenläufige Ereignisse nun gekoppelt in Erscheinung treten. | ||
> Als Beispiel betrachte zwei Programme, deren Prozesse zur Laufzeit beide auf den Speicher zugreifen. Diese Zugriffe können dann durch den Bus sequentialisiert werden. | > Als Beispiel betrachte zwei Programme, deren Prozesse zur Laufzeit beide auf den Speicher zugreifen. Diese Zugriffe können dann durch den Bus sequentialisiert werden. | ||
- | === Blockierende Synchronisation, | + | ==== Blockierende Synchronisation, |
- | * Was ist blockierende Synchronisation? | + | |
> Prozesse geben Kontrolle über Geschehen ab; wechseln in Zustand " | > Prozesse geben Kontrolle über Geschehen ab; wechseln in Zustand " | ||
Zeile 43: | Zeile 49: | ||
> * Beispiel 2: Programm nutzt in Anwendungssoftware kodierte Umlaufsperren um zu blockieren. => Zur Ausführung gibt der Anwendungsprozess die Kontrolle ab, der kernel-level Prozess aber nicht. | > * Beispiel 2: Programm nutzt in Anwendungssoftware kodierte Umlaufsperren um zu blockieren. => Zur Ausführung gibt der Anwendungsprozess die Kontrolle ab, der kernel-level Prozess aber nicht. | ||
- | * Nachteile von blockierender Synchronisation? | + | * Was für Techniken gibt es für blockierende Synchronisation? |
+ | |||
+ | > Sperren, Semaphore, Mutexe | ||
+ | |||
+ | * Was ist der Unterschied zwischen Mutexe und Semaphore? | ||
+ | |||
+ | > Mutexe sind Methoden zur Sicherstellung wechselseitigen Ausschlusses [siehe Anhang des Foliensatzes zu Mutexe zum Thema Mutexe vs. Mutexentitäten]. Mutexentitäten sind Objekte mit einer `acquire` und einer `release`, wobei `release` überprüft, | ||
+ | |||
+ | | ||
> * Verklemmungen möglich | > * Verklemmungen möglich | ||
> * je nach Sofware sind Ein- und Austrittsprotokolle von Sperren unverhältnismäßig teuer im Vergleich zu dem kritischen Abschnitt, den sie schützen sollen | > * je nach Sofware sind Ein- und Austrittsprotokolle von Sperren unverhältnismäßig teuer im Vergleich zu dem kritischen Abschnitt, den sie schützen sollen | ||
- | * Was sind die klassischen 4 Bedingungen für Verklemmungen? | + | |
> (i) Anforderung von Ressourcen mit wechselseitigem Ausschluss, (ii) iterative Anforderung dieser, (iii) keine Präemption dieser, (iv) zirkuläres Warten | > (i) Anforderung von Ressourcen mit wechselseitigem Ausschluss, (ii) iterative Anforderung dieser, (iii) keine Präemption dieser, (iv) zirkuläres Warten | ||
- | * Was ist Verklemmungsvermeidung? | + | |
> Zur Laufzeit überprüfen wir bei jeder Ressourcenanforderung, | > Zur Laufzeit überprüfen wir bei jeder Ressourcenanforderung, | ||
> Solche Anforderungen lehnen wir ab oder führen den anfordernden Prozess dem long-term-scheduling zu. | > Solche Anforderungen lehnen wir ab oder führen den anfordernden Prozess dem long-term-scheduling zu. | ||
- | * Welche der 4 Bedingungen entkräftet Verklemmungsvermeidung? | + | |
- | Nur (iv) zirkuläres Warten. | + | > Nur (iv) zirkuläres Warten. |
- | * Was ist der Unterschied zwischen Verklemmungsvorbeugung und Verklemmungsvermeidung? | + | |
> Vorbeugung ist ein konstruktiver Ansatz, um eine der Bedingungen zu entkräften; | > Vorbeugung ist ein konstruktiver Ansatz, um eine der Bedingungen zu entkräften; | ||
- | * Was gibt es neben den beiden noch? | + | |
- | Wir können die Flinte ins Korn werfen und Verklemmungserkennung betreiben -- d.h. reagieren wenn es eigentlich schon zu spät ist. | + | > Wir können die Flinte ins Korn werfen und Verklemmungserkennung betreiben -- d.h. reagieren wenn es eigentlich schon zu spät ist. |
- | * Wie genau funktioniert Verklemmungserkennung? | + | |
> Jede Ressourcenanforderung und -freigabe mitprotokollieren in einem Graphen. Dann regelmäßig (z. B. wenn Systemdurchsatz weniger wird oder soagr exzessiv bei jeder Ressourcenanforderung) überprüfen, | > Jede Ressourcenanforderung und -freigabe mitprotokollieren in einem Graphen. Dann regelmäßig (z. B. wenn Systemdurchsatz weniger wird oder soagr exzessiv bei jeder Ressourcenanforderung) überprüfen, | ||
Zeile 76: | Zeile 90: | ||
> Bei general-purpose BS können wir eigentlich nur Prozesse terminieren (unschön). | > Bei general-purpose BS können wir eigentlich nur Prozesse terminieren (unschön). | ||
- | === Umlaufsperren === | + | ==== Umlaufsperren |
- | * Was ist der Unterschied zwischen einem Ticketlock und einem TAS-basierten Lock? | + | |
> Ticketlock ist fair/ | > Ticketlock ist fair/ | ||
> Außerdem weniger Bussperren. | > Außerdem weniger Bussperren. | ||
- | * Wie viele Bussperren haben denn beide Sperrvarianten genau? | + | |
> Ticketlock hat im `lock()` genau eine (fetch-and-add zum Ziehen einer Wartemarke); | > Ticketlock hat im `lock()` genau eine (fetch-and-add zum Ziehen einer Wartemarke); | ||
- | * Im Ticketlock spinnen wir nur auf einer Variable, quasi spin-on-read, | + | |
> Ja, angenommen 100 Prozesse konkurrieren im Eintrittsprotokoll, | > Ja, angenommen 100 Prozesse konkurrieren im Eintrittsprotokoll, | ||
- | * Wie habt ihr das Ticketlock in der Übung dann verbessert? | + | |
> Wir haben den Zähler verallgemeinert zur einer Warteschlange. Jeder Prozess korrespondiert zu einem Eintrag in dieser Warteschlange und jeder Eintrag besitzt zwei Felder: einen next-Zeiger und eine boolsche Variable zum Spinnen. | > Wir haben den Zähler verallgemeinert zur einer Warteschlange. Jeder Prozess korrespondiert zu einem Eintrag in dieser Warteschlange und jeder Eintrag besitzt zwei Felder: einen next-Zeiger und eine boolsche Variable zum Spinnen. | ||
Zeile 97: | Zeile 111: | ||
> Und wenn ein Prozess `unlock()` ausführt (also Kopf der Warteschlange war), so invalidiert dieser nur die boolsche Variable desjenigen Prozesses, der nach ihm folgt (also nächster innerhalb der Warteschlang war). | > Und wenn ein Prozess `unlock()` ausführt (also Kopf der Warteschlange war), so invalidiert dieser nur die boolsche Variable desjenigen Prozesses, der nach ihm folgt (also nächster innerhalb der Warteschlang war). | ||
- | * Wie kann mensch dann diese Warteschlange, | + | |
- | * Warum ist es keine gute Idee, ein Ticketlock zu implementieren, | + | |
> Das Ticketlock ja u.a. deswegen schick ist, weil es zu keinen Buslock Bursts führt, so wie bei TAS/ | > Das Ticketlock ja u.a. deswegen schick ist, weil es zu keinen Buslock Bursts führt, so wie bei TAS/ | ||
Zeile 105: | Zeile 118: | ||
> (Hier wollte wosch das recht genau wissen, obige Antwort ist die Zusammenstellung dessen, was er und ich dann in der Prüfung " | > (Hier wollte wosch das recht genau wissen, obige Antwort ist die Zusammenstellung dessen, was er und ich dann in der Prüfung " | ||
- | === Nichtblockierende Synchronisation === | + | ==== Nichtblockierende Synchronisation |
- | * Wie könnte mensch die Warteschlange also sonst implementieren? | + | |
> nichtblockierend, | > nichtblockierend, | ||
- | * Habt ihr da CAS benutzt? Gab es deswegen ein ABA-Problem? | + | |
> Ich glaube wir haben nur im `unlock()` ein CAS benutzt. Nichtdestrotrotz war unsere Implementierung nicht ABA-kritisch -- gegeben durch das spezielle Zugriffsmuster, | > Ich glaube wir haben nur im `unlock()` ein CAS benutzt. Nichtdestrotrotz war unsere Implementierung nicht ABA-kritisch -- gegeben durch das spezielle Zugriffsmuster, | ||
> (Nicht sicher, ob das tatsächlich stimmt -- aber wosch wollte nur darauf hinaus, dass Nutzung von CAS manchmal ABA-kritisch sein kann und manchmal es nicht ist.) | > (Nicht sicher, ob das tatsächlich stimmt -- aber wosch wollte nur darauf hinaus, dass Nutzung von CAS manchmal ABA-kritisch sein kann und manchmal es nicht ist.) | ||
- | * Wie kann mensch das ABA-Problem lösen? | + | |
> Getaggte Zeiger (aber unschön) oder -- wenn die CPU das unterstützt -- LoadLinked/ | > Getaggte Zeiger (aber unschön) oder -- wenn die CPU das unterstützt -- LoadLinked/ | ||
- | + | > | |
- | (Wir waren schon am Ende der Prüfung, daher hat diese kurze Antwort gereicht.) | + | > (Wir waren schon am Ende der Prüfung, daher hat diese kurze Antwort gereicht.) |