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.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
pruefungen:hauptstudium:ls4:cs-2021-04-09 [09.04.2021 16:01] – 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 [[https:// | + | * For selected terms of the lecture, I have consulted [[https:// |
+ | * 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 " |
+ | |||
+ | ==== Einführung | ||
* Was ist Nebenläufigkeit? | * Was ist Nebenläufigkeit? | ||
Zeile 35: | Zeile 41: | ||
> 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? | * Was ist blockierende Synchronisation? | ||
Zeile 42: | Zeile 48: | ||
> * Beispiel 1: Programm nutzt BS-Primitiven (z. B. Sperren) um zu blockieren. => Zur Ausführung gibt der kernel-level Prozess (d.h. Prozess auf BS-Ebene) die Kontrolle ab; kernel-level Prozesszustand wechselt zu " | > * Beispiel 1: Programm nutzt BS-Primitiven (z. B. Sperren) um zu blockieren. => Zur Ausführung gibt der kernel-level Prozess (d.h. Prozess auf BS-Ebene) die Kontrolle ab; kernel-level Prozesszustand wechselt zu " | ||
> * 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. | ||
+ | |||
+ | * 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, | ||
* Nachteile von blockierender Synchronisation? | * Nachteile von blockierender Synchronisation? | ||
Zeile 59: | Zeile 73: | ||
* Welche der 4 Bedingungen entkräftet Verklemmungsvermeidung? | * 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? | * Was ist der Unterschied zwischen Verklemmungsvorbeugung und Verklemmungsvermeidung? | ||
Zeile 67: | Zeile 81: | ||
* Was gibt es neben den beiden noch? | * 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? | * Wie genau funktioniert Verklemmungserkennung? | ||
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? | * Was ist der Unterschied zwischen einem Ticketlock und einem TAS-basierten Lock? | ||
Zeile 91: | Zeile 105: | ||
> Ja, angenommen 100 Prozesse konkurrieren im Eintrittsprotokoll, | > Ja, angenommen 100 Prozesse konkurrieren im Eintrittsprotokoll, | ||
- | * Wie habt ihr das Ticketlock in der Übung dann verbessert? | + | * 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, | + | * 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? | * Wie könnte mensch die Warteschlange also sonst implementieren? |