1. open und sqrt sind Bibliotheksfunktionen. Die eine verzweigt mit einem Systemaufruf ins Betriebssystem die andere nicht. Welche? Warum? A: sqrt muß nicht verzweigen weil diese Funktion nur 'rumrechnet'. Open muß verzweigen um eine Datei zu öffnen und sie zuzuordnen so das sie gelesen und beschrieben werden kann. 2. Was versteht man unter einem nebenläufigen Programm ? A: Wenn ein Programm aus mehreren Threads besteht. 3. Kann ein Programm mit mehreren Threads auf einer Maschine mit nur einer CPU ausgeführt werden? Wenn nein: warum nicht, wenn ja: macht das Sinn? Wenn ja welchen? A: Ja es ist möglich es dient dem Zweck der optimalen CPU ausnutzung bsp.wenn ein Prozess warten muß oder momentan eben nicht ausgeführt werden kann. 4. Erläutern Sie welchen Vorteil eine Implementierung von Threads auf Sprachebene bringt. Erläutern Sie dazu, wie ein Thread als Sprach-Konstrukt (z.B. von C++) aussehen könnte und vergleichen Sie dessen Nutzung mit der PThread-Bibliothek. A: Dies ist bereits in Java und C++ implementiert 5. Pipes verbinden verwandte Prozesse. Wieso ist das ein Indiz dafür, dass sie zur Realisation nebenläufiger Programme gedacht waren? A: Eltern/Kind Prozesse mit bzw. Prozesse mit gleichem Vaterprozess. Deskriptoren übernommen bei lese/schreibdeskriptor. Keine Möglichkeit prozessübergreifend zu identifizieren. Kein Transfer zwischen Prozessen sonst möglich. 6. Wie könnte man experimentell herausfinden, wie gross der Pufferbereich ist, der zu einer Pipe gehört? Führen Sie ein entsprechendes Experiment durch! A: Man verbindet 2 Prozesse durch eine Pipe und erhöht den Datenfluß. Der Puffer läuft voll, wenn er voll ist dann kann Prozess 1 nicht weiter schreiben und wird blockiert. Man zählt die Bytes mit die reingeschrieben werden und addiert am nde 1 weil das letzte nicht mehr mitgezählt wird.->Ringpuffer synchr. 7. Was passiert mit einem Prozess, der aus einer Pipe lesen will, die keine Daten enthält? A: Er wird blockiert 8. Was passiert mit einem Prozess, der aus einer Pipe lesen will, die auf der anderen Seite vom Schreiber-Prozess geschlossen wurde? A: Dies wird broken Pipe genannt und ergibt einen Lesefehler. 9. Wie sieht eine Pipe-Implementierung aus: Ist es ein Prozess, eine Datenstruktur, eine Funktion, eine Klasse, ein Objekt, ...? A: Pipes sind Datenstrukturen des BS-Kerns. 10. Geben Sie ein Beispiel an für eine durch Konkurrenz und Kooperation notwendige Prozessysnchronisation. A: Bedingungssynchronisation, wenn leer nicht lesen, wenn voll nicht schreiben, gegenseitiger Ausschluß konkurrierender Preozesse, keine Unterbrechung bei konkurrierenden Abschnitten. 11. Was ist ein kritischer Abschnitt? Geben Sie ein Beispiel an! A: Wenn zwei Prozesse eine gemeinsame Variable nutzen leser/schreiber Problem. 12. Was ist eine atomare Aktion? Erläutern Sie, warum kritische Abschnitte als Definition von Atomarität zu verstehen sind. A: Dies sind aktionen die nicht unterbrochen werden dürfen. Diese Aktionen müßen geschützt werden. 13. Erläutern Sie, warum die durch kritische Abschnitte definierte Atomarität nicht `absolut' sondern `relativ' ist. A: Weil keine Unterbrechung aller Prozesse notwendig ist. es ist nur notwendig die Prozesse zu unterbrechen die sich gegenseitig stören würden. Mutex schützt Abschnitt es kann nicht nicht in Programmstück wechseln das mit gleichem Mutex geschützt ist aber sonst kann ein Prozesswechsel stattfiden. 14. Zwei nebenläufige Prozesse einer Anwendung müssen in ihren Aktionen synchronisiert werden. Der eine darf beispielsweise nicht auf eine Datenstruktur zugreifen, während sie von dem anderen manipuliert wird. Wo befindet sich der Code, der diese Synchronisation erzwingt? In einem in beiden Prozesse, in beiden Prozessen, an anderer Stelle im Anwendungscode, im Code des Betriebssystems, ...? Welcher Prozess führt den entsprechenden Code aus? Einer der beiden Anwendungsprozesse, beide Anwendungsprozesse, ein Synchronisationsprozess im Betriebssystem? Erläutern Sie! A: Auf eine gemeinsame Variable darf nicht gemeinsam zugegriffen werden. Man kann eine Monitorklasse schreiben. diese schützt die gemeinsame variable. Diese Monitorklasse enthält auch den Synchronisationscode der von Prozessen ausgeführt wird. Es gibt keinen Code der nicht als Prozess ausgeführt wird. Methoden des Synchronisationscodes werden von beiden Prozessen ausgeführt. 15. Zwei als Prozesse aktive Anwendungen wollen gleichzeitig eine Hardware-Ressource nutzen, beispielsweise die Festplatte. Wo befindet sich der Code, der die notwendige Synchronisation erzwingt? Welcher Prozess führt den entsprechenden Code aus? Erläutern Sie! A: Dieser Code kann z.B. im Treiber stehen oder aber auch in einer ISR vom BS-Code. der Synchronisationscode muß nicht zwangsläufig von einem Prozess ausgeführt werden. 16. Was versteht man unter Bedingungssynchronisatiom? Geben sie ein Beispiel an. A: Bedingungssynchronisation regelt die Kooperation der Prozesse untereinander. Sie wird dann notwendig wenn Prozesse ein gemeinsames Ziel verfolgen. Allgemein muß es möglich sein das einer auf das eintreten einer bestimmten Bedingung wartet und ein anderer ihm deren eintreten mitteilt. Dazu stehen den Prozessen Mechanismen der Bedingungsynchronisation zur Verfügung (signal, broadcast, wait) 17. Was passiert, wenn zwei Prozesse gleichzeitig auf eine Speicherstelle zugreifen? Kann das überhaupt passieren? A: Die Speicherhardware sorgt für eine serialisierung auch wenn Anfragen gleichzeitig eintreffen. Sind Aufträge z.B. beim schreiben über eine bestimmte größe gemacht worden (1 Byte) kann es sein das Speichermüll entsteht weil da die Möglichkkeit besteht das die 2. Anforderung falsche Werte abließt (eine halbe falsche Variable). 18. Was versteht man unter Verschränkung? Warum und in wie weit kann man Parallelität als Verschränkung verstehen? A. Eine Reihenfolge wie die Atomaren Aktionen ausgeführt werden. Parallel -> beliebiger Art verschränkt. 19. Warum heisst der Mutex `Mutex'? Wo könnte der Name herkommen? A: Mtual Exclusion - gegenseitiger Ausschluß 20. Kritische Abschnitte werden in Java dadurch ausgedrückt, das man eine Funktion oder Methode als synchronized deklariert. Erläutern Sie wie dieses synchronized mit Mutexen realisiert werden kann. A: Über den Compiler für alle JAVA Objekte eins anlegen. 21. Ist es denkbar, dass ein Prozess sich zu einem Zeitpunkt in zwei kritischen Bereichen aufhält? Geben Sie eventuell ein Beispiel an. A. Ja ist möglich BSP: Mutex m1,m2 m1.lock();m2.lock(); 22. Warum enthält die POSIX-Thread-Bibliothek kein Monitorkonstrukt? A: Weil das Monitorkonzept an die Klasse/Objekt gebunden ist. POSIX ist funktionsorientiert und ist daher ungeeignet. 23. Erläutern Sie das Prinzip der aktiven und der passiven Objekte. Warum ist es aus Gründen der Softwaretechnik sinnvoll, dass passive Objekte Synchronisationsmechanismen enthalten und nicht die aktiven Objekte? A: aktiv sind Threads passiv der Rest. Daten werden durch die SWT in bestimmte Softwareteschnische Einheiten gepackt. 24. Mutexe sind ein Mittel, um gegenseitigen Ausschluss zu realisieren. Sie benötigen aber selbst zu ihrer Implementierung gegenseitigen Ausschluss. Wie wird dieser Zirkel durchbrochen? A: Durch ein synchronisationskostrukt auf BS Ebende oder ein Hardwarekonstrukt.