6

GTI (Fach) / Threads (Lektion)

Threads

Diese Lektion wurde von linbu erstellt.

Lektion lernen

Diese Lektion ist leider nicht zum lernen freigegeben.

  • Mehrere Threads eines Prozesses teilen sich den Adressraum und die anderen Ressourcen (Dateien etc.) eines Prozesses. Welche Ressourcen bzw. Datenstrukturen teilt ein Thread nicht mit anderen Threads? Threads verfügen über einen eigenen Stapelzeiger und lokale Daten (lokaleVariablen in Funktionen, welche auf dem Stack gespeichert werden).
  • Wie würden Sie einen Server realisieren, der während der Bearbeitung von Aufträgen weiterhin auf Anfragen von Clients reagiert? Man benutzt das Thread-Modell.Beim Starten des Servers wird ein Thread ("Dispatcher-Thread") gestartet, dessen einzige Aufgabe darin besteht, Anfragen von Clients entgegenzunehmen. Für jeden Auftrag eines Clients startet der Dispatcher-Thread einen sogenannten "Popup-Thread", welcher den Auftrag bearbeitet. Dadurch bleibt der Server die ganze Zeit "ansprechbar".Sobald neue Daten vorhanden sind, wird der Dispatcher-Thread vomScheduler geweckt.Alternativ können solche "Worker-Threads" auch schon vorhanden sein und mit dem Auftrag betraut werden (der Worker-Thread blockiert z.B. an einem Synchronisations-Mechanismus und wird vom Dispatcher geweckt).
  • Welche Vorteile haben Threads gegenüber Prozessen? Da keine Ressourcen an Threads gebunden sind, können Threads schneller gestartet und beendet werden als Prozesse (Faktor 10). Durch den gemeinsam genutzten Speicher ist die Kommunikation zwischen Threads einfacher als die Kommunikation zwischen Prozessen. Kommunikation zwischen Prozessen erfordern einen aufwendigen Moduswechsel. Prozesse können auch über gemeinsamen Speicher verfügen, allerdings sind solche Konstruktionen oft nicht portierbar. User-Level-Threads brauchen beim Kontext-Wechsel keinen Moduswechsel. Programme mit parallelen Komponenten lassen sich einfacher implementieren. Der bekannte prozedurale Programmierstil kann beibehalten werden und mit paralleler Ausführung kombiniert werden.
  • In welchen Fällen ist es angeraten, ein Softwareprojekt durch mehrere Threads statt durch mehrere Prozesse zu realisieren? Wenn auf dieselben Speicher zugegriff en werden soll. Wenn Kommunikation zwischen den Threads erforderlich ist. Wenn viele Threads erzeugt und beendet werden müssen. Wenn prozedural programmiert werden soll.
  • Bei der Verwaltung von User-Level-Threads kann das gesamte Thread-System blockieren, wenn ein einzelner Thread in einem Systemruf blockiert. Wie lässt sich dies vermeiden? Es muss vorher überprüft werden, ob es sich um einen blockierenden Systemruf handelt und ggf. darf dieser dann erst gar nicht ausgeführt werden (Wrapping).
  • Es existieren zwei verschiedene Ansätze für die Verwaltung von Threads, die als "User-Level-Threads" und "Kernel-Level-Threads" bezeichnet werden. Erläutern Sie den wesentlichen Unterschied. User-Level-Thread Lassen sich auch in Betriebssysteme realisieren, die keine Threads unterstützen  Die Umschaltung zwischen Threads, Erzeugen und Beenden eines Threads erfordert keinen Systemruf, somit auch keinen Moduswechsel. Das Scheduling-Verfahren kann je nach Bedarf der jeweiligen Applikation angepasst werden die Verwaltung von Systemrufen und Threads liegt nicht in einer Hand. Es muss vorher überprüft werden, ob es sich um einen blockierenden Systemruf handelt (Wrapping) (aber es kann nicht alles durch Wrapping abgefangen werden). User-Level-Threads eines Prozesses laufen auf einem Prozessor. Sie nutzen also zumindestens auf dieser Ebene nicht die Parallelitat von SMP-Architekturen oder Hyperthreading in Prozessoren. Kernel-Level-Thread Lassen sich nicht in Betriebssysteme realisieren, die keine Threads unterstützen Die Umschaltung zwischen Threads erfordert einen Systemruf und damit einen Moduswechsel, genau wie das Erzeugen und Beenden eines Threads. (Aufwändig) Es wird meist praemptives Scheduling verwendet die Verwaltung von Systemrufen und Threads liegt in einer Hand: Bei blockierenden Systemrufen kann der Kernel auf einen anderen Thread umschalten. Der Kernel kann die Threads eines Prozesses verschiedenen Prozessoren zuordnen.
Anzeige