GTI


Kartei Details

Karten 46
Sprache Deutsch
Kategorie Informatik
Stufe Berufslehre
Erstellt / Aktualisiert 11.01.2025 / 11.01.2025
Weblink
https://card2brain.ch/box/20250111_prozesse_und_threads
Einbinden
<iframe src="https://card2brain.ch/box/20250111_prozesse_und_threads/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

1. Was ist in der Prozessverwaltung ein PCB, wozu dient er und welche Inhalte hat er? Nennen Sie dabei drei wichtige Informationen, die im PCB verwaltet werden!

Ein Eintrag in der Prozesstabelle heißt Process Control Block (PCB). Je nach Betriebssystem gibt es deutliche Unterschiede im Aufbau. Einige Informationen sind aber prinzipiell sehr ähnlich. Hierzu gehört u. a die Information zur Identifikation des Prozesses, die Information zum aktuellen Prozesszustand sowie Informationen zu sonstigen Ressourcen, die dem Prozess zugeordnet sind (Dateien, offene Netzwerkverbindungen). Weitere Informationen, die für einen Prozess im PCB verwaltet werden, sind der Programmzähler, der Prozesszustand, die Priorität und die Prozessnummer sowie die aktuellen Registerinhalte.

2. Threads werden heute von den meisten Betriebssystemen unterstützt. Was versteht man unter einem Thread?

Ein Thread stellt eine nebenläufige Ausführungseinheit innerhalb eines Prozesses dar. Threads werden im Gegensatz zu den traditionellen (schwergewichtigen, heavy-weight) Prozessen als leichtgewichtige (light-weight) Prozesse oder kurz LWP bezeichnet.

3. Wie verhalten sich Threads zu Prozessen im Hinblick auf die Nutzung des Prozessadressraums?

Threads erhalten den vollen Zugriff auf den zugehörigen Prozessadressraum.

4. Beschreiben Sie den groben Ablauf eines Prozess-Kontextwechsels und erläutern Sie, warum ein Thread-Kontextwechsel schneller sein kann, als ein Prozess-Kontextwechsel!

Bei einem Prozess-Kontextwechsel wird ein aktiver Prozess unterbrochen. Die gesamte Information des unterbrochenen Prozesses, also der Prozesskontext, wird gesichert und der Prozesskontext des neu aktivierten Prozesses in die Ablaufumgebung (CPU-Register, MMU-Register, …) geladen. Ein Thread-Kontextwechsel innerhalb des laufenden Prozesses kann schneller sein als ein Prozess-Kontextwechsel, weil meist Speicherbereiche des gleichen Prozesses verwendet werden. Ein Austausch von Speicherbereichen ist daher oft nicht erforderlich, was den Betriebssystem-Overhead reduziert.

5. Was versteht man unter User-Level-Threads im Vergleich zu Kernel-Level-Threads und welche Beziehungen zwischen beiden sind möglich?

User-Level-Threads laufen auf der Benutzerebene (Benutzermodus), Kernel-Level-Threads dagegen auf der Kernelebene (Kernelmodus, Systemmodus) ab.

6. Was bedeutet eine 1:n-Beziehung zwischen den Betriebsmitteln Prozess und Thread?

Ein Prozess kann mehrere Threads beherbergen. 1:n-Beziehungen, bei denen ein Prozess nahezu beliebig viele Threads enthalten kann, sind heute in Betriebssystemen üblich.

7. Erläutern Sie die beiden Möglichkeiten in Java, eigene Threads zu definieren und zu nutzen?

Es besteht die Möglichkeit, eine eigene Threadklasse zu implementieren, indem man diese von der Basisklasse Thread ableitet. Die Methode run muss überschrieben werden, da dies die Methode ist, die beim Starten eines Threads aufgerufen wird. Die andere Variante, einen Thread zu erzeugen, ist die Definition einer Klasse, die das Interface Runnable implementiert. In der Klasse wird ebenfalls die Methode run implementiert. Als Runnable-Objekt wird die Klasse angegeben, welche das Interface Runnable implementiert. Beide Varianten sind semantisch vollkommen identisch.

8. In welcher Methode wird die eigentliche Arbeit eines Java-Threads ausgeführt? 

In der Methode run, die über die Methode start aufgerufen wird.

9. Was passiert beim Aufruf des Systemcalls fork unter Unix?

Mit dem Systemcall fork wird ein neuer Prozess als Kindprozess des erzeugenden Prozesses erzeugt.

10. Welche Aufgabe hat ein Thread unter Windows?

Threads stellen die eigentliche Scheduling-Einheit des Windows-Betriebssystems dar.

11. Kann es unter Windows sein, dass ein Thread mehreren Prozessen zugeordnet ist? Begründen Sie Ihre Entscheidung!

Nein, ein Thread wird innerhalb eines Prozesses erzeugt und ist diesem bis zur Terminierung zugeordnet.

12. Warum ist der Einsatz von Threads sinnvoll?

Threads sind leichtgewichtiger als Prozesse. Ein Thread-Kontextwechsel innerhalb des laufenden Prozesses kann schneller sein als ein Prozess-Kontextwechsel, weil meist Speicherbereiche des gleichen Prozesses verwendet werden. Ein Austausch von Speicherbereichen ist daher oft nicht erforderlich, was den Betriebssystem-Overhead reduziert.

13. Welche zwei grundsätzlichen Implementierungsmöglichkeiten für Threads gibt es und welche Vor- bzw. Nachteile haben diese jeweils?

Threads können auf der Benutzerebene implementiert werden. Vorteil dieser Implementierungsvariante ist die hohe Effizienz, da beim Thread-Kontextwechsel kein Umschalten in den Kernelmodus notwendig ist. Nachteilig ist, dass alle Threads eines Prozesses blockieren, wenn ein Systemaufruf innerhalb eines einzelnen Threads blockiert. Threads können auch auf der Kernelebene implementiert werden. Bei Kernel-Threads werden die Threads im Kernelmodus verwaltet. Die Implementierung von Threads auf Kernelebene hat Vorteile, aber auch Nachteile. Von Vorteil ist beispielsweise, dass das Betriebssystem in der Lage ist, die Zuteilung der Rechenzeit über die Threads zu gestalten und so einen Prozess nicht unnötig zu blockieren. Mit dieser Implementierungsvariante kann man auch Multiprozessorsysteme besser unterstützen, da das Betriebssystem ablaufbereite Threads selbstständig auf die verfügbaren CPUs verteilen kann. Ein weiterer Vorteil für Kernel-Threads ist, dass ein Prozess nicht blockiert ist, wenn ein Thread innerhalb des Prozesses blockiert ist. Ein anderer Thread des Prozesses kann weiterarbeiten. Nachteilig ist beispielsweise, dass im Kernel implementierte Threads nicht so effizient sind, da sie sich bei jedem Thread-Kontextwechsel an den Kernel wenden müssen (Software-Interrupt). Weiterhin ist die größere Systemabhängigkeit von Nachteil.

14. Beschreiben Sie einen einfachen Zustandsautomaten eines Prozesses!

Ein einfacher Zustandsautomat für einen Prozess hat vier Zustände. Im Zustand „bereit“ ist der Prozess zur Bearbeitung vorbereitet, im aktiven Zustand hat er eine CPU und im Zustand „blockiert“ wartet er auf Ressourcen, um weitermachen zu können. Im Zustand „beendet“ ist der Prozess dann schon nicht mehr im System vorhanden.

Die Zustandsüberg.nge lassen sich wie folgt beschreiben:
• bereit → aktiv: Das Betriebssystem wählt den Prozess aus (Aktivieren)

• aktiv → bereit: Das Betriebssystem wählt einen anderen Prozess aus (Deaktivieren, Preemption, Vorrangunterbrechung)

• aktiv → blockiert: Der Prozess wird blockiert (z. B. wegen Warten auf Input, Betriebsmittel wird angefordert)

• blockiert → bereit: Der Blockierungsgrund wird aufgehoben (Betriebsmittel verfügbar)

• aktiv → beendet: Prozessbeendigung oder schwerwiegender Fehler (Terminieren des Prozesses)

15. Erläutern Sie die Prozesshierarchie unter Unix!

Unix organisiert die Prozesse in einer baumartigen Prozessstruktur, wobei der sog. init-Prozess der Urvater aller zeitlich folgenden Prozesse ist. Der Prozess init hat die PID 1. Bei der Erzeugung eines Prozesses erbt der „Kindprozess“ vom „Elternprozess“ die gesamte Umgebung (inkl. Umgebungsvariablen), alle offenen Dateien und Netzwerkverbindungen sowie den Adressraum mit den Daten- und Codebereichen als Kopie. Er kann dann das gleiche Programm ausführen oder lädt sich bei Bedarf durch Aufruf des Systemcalls execve ein neues Programm und überl.dt somit das Programm des Elternprozesses.

16. Was ist ein „Zombie-Prozess“ unter Unix?

Ein Zombie ist ein Prozess in einem speziellen Zustand. In diesen Zustand gelangt ein Prozess, der terminieren will. Er verweilt solange in diesem Zustand, bis der Elternprozess eine Nachricht über das Ableben des Kindprozesses erhalten hat und terminiert erst dann.

17. Skizzieren Sie die möglichen Zustandsüberg.nge eines Windows-Threads in den Zustand Running!

• Ready → Running: Direkte Zuordnung eines Threads zu einem Prozessor.

• Deferred Ready → Running: Zuordnung des ersten Threads zu einem bereits festgelegten Prozessor aus einer speziellen Warteschlange.

• Standby → Running: Dieser Zustandsübergang wird für einen Thread durchgeführt, der schon einem Prozessor zugeordnet ist.

• Waiting → Running: Dieser Zustandsübergang kommt vor, wenn ein Thread die CPU abgegeben hat, um auf ein Ereignis zu warten, z. B. weil ein Seitenfehler aufgetreten ist. Nach Eintreffen des Ereignisses kann der Thread sofort wieder auf Running gesetzt werden.

18. Erläutern Sie die beiden Running-Zustände eines Linux-Prozesses!

Der Zustand Running wird aufgegliedert in einen Running-Zustand für Prozesse, die im User- und solche, die im Kernelmodus ablaufen.

Was ist ein Programm?

Ein Programm ist die (statische) Verfahrensvorschrift für die Verarbeitung auf einem Rechnersystem.

Was ist ein Prozess?

Ein Prozess (in manchen Betriebssystemen auch Task genannt) stellt auf einem Rechnersystem die Ablaufumgebung für ein Programm bereit und ist eine dynamische Folge von Aktionen mit entsprechenden Zustandsänderungen, oder anders ausgedrückt, die Instanziierung eines Programms.

Was also ist der Zusammenhang zwischen Prozess und Programm?
Was sind die Unterschiede?

Ein Programm wird zum Prozess, sobald es von einem Betriebssystem gestartet wird. Das Betriebssystem lädt das Programm in den Arbeitsspeicher und weist dem Prozess dann Ressourcen wie CPU-Zeit und Speicher zu.

 

Ein Programm ist statisch, also eine unveränderte Folge von Anweisungen.

Ein Prozess ist dynamisch und repräsentiert die laufende Ausführung eines Programms.

Was ist der PCB?

Ein Process Control Block (PCB) ist ein Datensatz in der Prozesstabelle, der alle notwendigen Informationen über einen Prozess enthält, die das Betriebssystem zur Verwaltung des Prozesses benötigt.

Welche Bedeutung kommt diesem zu bei der Prozessverwaltung?

Der PCB enthält die gesamte Information für die Prozessverwaltung. 

Wo, von wem und in welcher Form wird der PCB verwaltet?

Das Betriebssystem führt eine Tabelle oder Liste mit allen aktuellen Prozessen in einer speziellen Datenstruktur. Diese kerneleigene Datenstruktur wird als Prozesstabelle bezeichnet, und ein Eintrag in dieser Tabelle ist der PCB.

Welche Informationen/Informationskategorien werden im PCB gespeichert?

Im PCB werden Informationen zur Identifikation des Prozesses, zum aktuellen Prozesszustand und zu den Ressourcen, die dem Prozess zugeordnet sind (z. B. Dateien, offene Netzwerkverbindungen), gespeichert.

Was sind die Aufgaben des Schedulers?

Die Zuteilung der CPU-Zeit an verschiedene Prozesse oder Threads.

Nach welchen Algorithmen/Strategien erfolgt das Scheduling?

  • First Come First Serve (FCFS)
  • Shortest Job First (SJF), auch als Shortest Process First (SPF) bzw. Shortest Process Next (SPN) bezeichnet
  • Shortest Remaining Time Next (SRTN)
  • Round Robin (RR)
  • Priority Scheduling (PS)
  • Garantiertes Scheduling und Fair-Share-Scheduling
  • Lottery Scheduling
  • Earliest Deadline First (EDF) oder auch Minimal Deadline First genannt
  • Polled Loop
  • Interrupt-gesteuert

Welche Scheduling-Strategie ist die optimale, beste?
Warum wird diese in der Praxis nicht eingesetzt?

SJF (Shortest Job First) ist die beste aller Strategien, was die Verweilzeit betrifft. Ein grosser Nachteil ist jedoch, dass sie zum Verhungern von Prozessen führen kann. Es kann passieren, dass Prozesse nie die CPU zugeteilt bekommen, wenn ständig neue Prozesse ins System kommen, die nur eine kurze Ausführungszeit haben. Länger dauernde Prozesse werden dann nie ausgeführt.

Was ist ein Thread?

Ein Thread stellt eine nebenläufige Ausführungseinheit innerhalb eines Prozesses dar. Threads werden im Gegensatz zu den traditionellen (schwergewichtigen, heavy-weight) Prozessen als leichtgewichtige (light-weight) Prozesse oder kurz LWP bezeichnet.

Was ist der Unterschied zwischen einem Thread und einem Prozess?

Threads sind eindeutig einem Prozess zugeordnet und stellen die eigentliche Scheduling-Einheit des Betriebssystems dar. Jeder Prozess startet zunächst mit einem Start-Thread.

Prozesse können wiederum gemeinsam in Gruppen verwaltet werden, indem sie zu einem Job zusammengefasst werden.

Was haben sie gemeinsam?

Alle Threads eines Prozesses teilen sich den gemeinsamen Adressraum dieses Prozesses und können damit gleichermassen auf Prozessdaten zugreifen und Programmcodes nutzen.

Warum gibt es das Konstrukt "Thread"?

Prozesse sind Betriebsmittel, deren Verwaltung relativ aufwändig ist. Ein ergänzendes, Ressourcen-schonenderes Konzept hierzu sind die sog. Threads (deutsch: Fäden), die heute in allen modernen Betriebssystemen in unterschiedlicher Weise unterstützt werden.

Wo werden Threads eingesetzt und warum?

Threads werden in Programmen verwendet, die eine Parallelverarbeitung ermöglichen, wie z.B. in dialogorientierten Anwendungen.

Rahmenwerke in JAVA nutzen Threads zur Realisierung von grafischen Oberflächen

Auch ein Web-Browser oder auch ein Textverarbeitungsprogramm wie Microsoft Word sind beispielsweise Programme, die Threads intensiv einsetzen.

+ Ein wesentlicher Vorteil von Threads gegenüber Prozessen liegt im wesentlich schnelleren Kontextwechsel

+ Threads sind leichter als Prozesse, da sie Ressourcen wie Speicher, offene Dateien und Netzwerkverbindungen eines Prozesses gemeinsam nutzen. Dies macht Threads ressourcenschonender und effizienter für Aufgaben, die parallel ausgeführt werden können.

Welche Arten von Threads werden unterscheiden und warum?

User-Level-Threads: Diese Threads werden im Benutzermodus verwaltet

Kernel-Level-Threads: Diese Threads werden direkt vom Betriebssystem verwaltet

Die Unterscheidung zwischen User-Level-Threads und Kernel-Level-Threads erfolgt aufgrund ihrer Verwaltung und Effizienz

Wichtig dabei: Wer/was ist jeweils die Scheduling-Instanz?

Auf Benutzerebene übernimmt die Threadbibliothek das Scheduling und Umschalten zwischen den Threads Das Betriebssystem weiss davon nichts. Die Scheduling-Einheit ist der Prozess

Was ist eine Race Condition?

Eine Race Condition tritt auf, wenn mehrere Prozesse unkontrolliert auf gemeinsam genutzte Ressourcen zugreifen. Je mehr Prozesse oder Threads um diese Ressourcen konkurrieren, desto grösser wird das Problem

Was ist ein "Kritischer Abschnitt"?

Programmteile, die nicht unterbrochen werden dürfen, werden auch als kritische Abschnitte bezeichnet

 

Was ist/sind das/die ursächliche/n Problem/e, dass es zu Race Conditions etc. kommen kann?

Synchronisationsprobleme

Parallele Ausführung (verzahnte oder verkette Ausführung) 

Was sind die 3 grundsätzlichen Möglichkeiten, diese Probleme auf "low-level" zu lösen?Wie funktionieren diese? Was sind deren jeweilige Vorteile und Nachteile?

Interrupts Sperren: Bei dieser Methode werden alle Interrupts während eines kritischen Abschnitts deaktiviert, sodass der laufende Prozess nicht durch einen Kontextwechsel unterbrochen werden kann. 

Peterson und Dekker-Lösung: Reine Softwarelösung

TSL, TAS (Test and Set Lock): Ein atomarer Maschinenbefehl wird verwendet, um den Zugriff auf eine Sperrvariable zu steuern. Dieser Befehl testet und setzt eine Sperre in einem einzigen ununterbrechbaren Schritt. 

Man unterscheidet zwischen LowLevel Primitiven (s.o. bspw. TSL, TAS, Peterson Algorithmus etc.)
und High Level Primitiven (bspw. Semaphore, Monitore, Message Passing).

Low-Level Primitiven wie TSL (Test and Set Lock) oder Spinlocks arbeiten direkt mit der Hardware und bieten eine sehr feine Kontrolle über den Zugriff auf kritische Abschnitte, erfordern jedoch mehr manuelle Verwaltung durch den Programmierer. Sie sind schneller, aber komplizierter zu handhaben.

High-Level Primitiven wie Semaphore und Monitore bieten eine einfachere Möglichkeit, Synchronisationsprobleme zu lösen. Sie verstecken die Komplexität der Low-Level Primitiven und bieten benutzerfreundliche Mechanismen, um sicherzustellen, dass nur ein Prozess gleichzeitig auf kritische Abschnitte zugreifen kann.