Lesson 2 Prozesse und Threads Flashcards

1
Q

Was ist ein Prozess?

A

Ein Prozess ist eine in Ausführung befindliche Instanz eines Programms mit eigenem Adressraum.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was ist ein Thread?

A

Ein Thread ist ein eigenständiger Ausführungspfad innerhalb eines Prozesses, der den gleichen Adressraum wie andere Threads desselben Prozesses teilt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was ist der Unterschied zwischen einem Prozess und einem Thread?

A

Ein Prozess hat einen eigenen Adressraum, während Threads innerhalb desselben Prozesses sich einen Adressraum teilen, aber eigene Stacks haben.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was gehört zum Ausführungszustand eines Threads?

A

Der Ausführungszustand eines Threads umfasst den Programmzähler, Registerwerte und einen Stack.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was gehört zum Ausführungszustand eines Prozesses?

A

Der Ausführungszustand eines Prozesses umfasst Programmsegmente, Datensegmente, den Heap, den Ausführungszustand der Threads und andere Betriebsmittel wie geöffnete Dateien.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Was ist das Programmabbild (Program Image)?

A

Das Programmabbild enthält das Programmsegment, das den ausführbaren Code eines Programms enthält, sowie das Datensegment und Metainformationen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wie wird der Dateityp eines Programms bestimmt?

A

In Unix-Systemen wird der Dateityp anhand der Execute-Berechtigung und der ersten Bytes (Magic Number) der Datei bestimmt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Was macht der Loader beim Start eines Programms?

A

Der Loader lädt das Programmabbild in den Speicher, initialisiert Speichersegmente wie Stack und Heap und startet das Programm an der definierten Startadresse.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was ist ein Kontextwechsel (Context Switch)?

A

Ein Kontextwechsel bezeichnet das Unterbrechen eines laufenden Prozesses und den Wechsel zu einem anderen Prozess durch das Betriebssystem.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Was ist Quasiparallelität?

A

Quasiparallelität bedeutet, dass in Multitasking-Systemen mehrere Prozesse scheinbar gleichzeitig ausgeführt werden, indem die CPU schnell zwischen den Prozessen wechselt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Was ist ein Scheduling-Verfahren?

A

Ein Scheduling-Verfahren bestimmt, welcher Prozess von der CPU ausgeführt wird, z.B. das Round-Robin-Verfahren oder Prioritäten-gesteuertes Scheduling.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Was ist ein Zombie-Prozess?

A

Ein Zombie-Prozess ist ein Prozess, der beendet wurde, aber noch in der Prozesstabelle existiert, bis der Elternprozess dessen Beendigungsstatus abfragt. wait() oder waitpid()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Wie wird ein neuer Prozess in Linux erzeugt?

A

Ein neuer Prozess wird in Linux mit der Funktion fork() erzeugt, die einen Klon des Elternprozesses erstellt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Wie wird ein neuer Thread in Linux erzeugt?

A

Ein neuer Thread wird mit der Funktion pthread_create() erstellt, die eine Funktion als ‘main’ des Threads ausführt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Wie wird ein Thread beendet?

A

Ein Thread kann entweder mit pthread_cancel() beendet werden oder seine Funktion läuft regulär aus.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Was ist der Unterschied zwischen freiwilliger und unfreiwilliger Prozessbeendigung?

A

Freiwillige Beendigung erfolgt durch die Rückgabe aus main() oder den Aufruf von exit(), während unfreiwillige Beendigung durch schwerwiegende Fehler oder externe Befehle erfolgt.

17
Q

Was sind die möglichen Zustände (Status) eines Programms bzw. Prozesses und wie erfolgt der Wechsel zwischen ihnen?

A

Ein Prozess kann sich in folgenden Zuständen befinden, mit typischen Übergängen:

  • New: Der Prozess wird erstellt, aber noch nicht ausgeführt.
    Übergang zu → Ready (wenn der Prozess für die Ausführung vorbereitet ist).
  • Ready: Der Prozess ist bereit zur Ausführung, wartet aber auf die Zuweisung der CPU.
    Übergang zu → Running (wenn die CPU dem Prozess zugewiesen wird).
  • Running: Der Prozess wird von der CPU ausgeführt.
    Übergänge zu:
  1. Waiting (wenn der Prozess auf ein Ereignis, wie I/O, wartet).
  2. Ready (wenn die CPU entzogen wird, z.B. durch Preemption).
  3. Exited/Terminated (wenn der Prozess beendet wird).
  • Waiting: Der Prozess wartet auf ein Ereignis, z.B. I/O-Operationen.
    Übergang zu → Ready (wenn das Ereignis eintritt und der Prozess wieder ausgeführt werden kann).
  • Exited/Terminated: Der Prozess hat seine Ausführung abgeschlossen oder wurde beendet.
    Kein Übergang (Prozess wird aus der Prozesstabelle entfernt).
18
Q

Was ist das Round-Robin-Verfahren im Prozess-Scheduling?

A

Das Round-Robin-Verfahren ist ein Scheduling-Algorithmus, bei dem jeder Prozess der Ready-Warteschlange der CPU eine feste Zeiteinheit (Time Slice) zugewiesen bekommt. Wenn die Zeit abläuft, wird der Prozess in den Ready-Zustand zurückgesetzt, und der nächste Prozess erhält die CPU. Dies wiederholt sich zyklisch. Das Verfahren sorgt für eine faire Verteilung der CPU-Zeit und eignet sich gut für zeitgeteilte Systeme.

19
Q

Wie kann die Beendigung eines Prozesses erfolgen?

A

Freiwillig:

Der Prozess läuft durch das Auslaufen der main()-Funktion ab.
Der Prozess wird durch den Aufruf der exit()-Funktion beendet.

Unfreiwillig:

Der Prozess wird aufgrund eines schweren Fehlers beendet.
Der Prozess wird durch einen Benutzer oder ein anderes Programm beendet.

20
Q

Was passiert bei einem fork()-Aufruf und wie unterscheiden sich Elternprozess und Kindprozess?

A

Beim fork()-Aufruf wird ein neuer Prozess (Kindprozess) erstellt, der eine exakte Kopie des Elternprozesses ist. Beide Prozesse laufen unabhängig voneinander weiter.

Elternprozess: Der ursprüngliche Prozess, der fork() aufruft.
Kindprozess: Der neu erstellte Prozess, der eine Kopie des Elternprozesses ist.
Unterschiede:

Beide Prozesse haben eigene Programmzähler, Stacks und Register.
Datensegmente (Heap) werden kopiert, aber sind unabhängig.
Der Kindprozess erhält einen neuen Prozess-ID (PID).
Mit exec() kann der Kindprozess ein neues Programm laden, um ein anderes Programm auszuführen, ohne einen neuen Prozess zu erzeugen.

21
Q

Was passiert mit offenen Dateien bei der Erstellung von Threads oder beim exec()-Aufruf?

A

Wenn ein Thread erstellt wird, bleiben alle geöffneten Dateien für alle Threads desselben Prozesses gemeinsam zugänglich.
Beim exec()-Aufruf bleiben ebenfalls alle geöffneten Dateien des Prozesses geöffnet, außer das Close-On-Exec-Flag ist für eine Datei gesetzt. In diesem Fall wird die Datei beim Aufruf von exec() automatisch geschlossen.

22
Q

Welche Funktionen gibt es zur Prozessverwaltung und was bewirken sie?

A
  • getpid(): Gibt die PID (Prozess-ID) des aufrufenden Prozesses zurück.
  • getppid(): Gibt die PID des Elternprozesses zurück.
  • wait(): Wartet, bis irgendein Kindprozess beendet wird.
  • waitpid(): Wartet, bis der Kindprozess mit der angegebenen PID beendet wird.
  • exit(): Beendet den aufrufenden Prozess.
    Diese Funktionen ermöglichen die Verwaltung und Synchronisation von Prozessen in einem Betriebssystem.
23
Q

Wie wird ein Thread in C erstellt?

A

pthread_t thread: Definiert eine Thread-Variable.

pthread_create(&thread, NULL, thread_function, arg);
pthread_create(): Startet den neuen Thread.
Das erste Argument ist ein Zeiger auf die Thread-Variable.
Das zweite Argument sind Attribute (NULL für Standardattribute).
Das dritte Argument ist die Funktion, die der Thread ausführt.
Das vierte Argument sind die Argumente, die an die Funktion übergeben werden.

// Warte auf die Beendigung des Threads
pthread_join(thread, NULL);