Grundlagen der Betriebssysteme: Prozesse, Threads und Speicher

Informatik3,03 KB

Parallelität und Synchronisation

Bei der Ausführung von Prozessen treten verschiedene Herausforderungen auf:

  • Mutual Exclusion (Wechselseitiger Ausschluss): Wenn ein Prozess seinen kritischen Abschnitt betritt, muss sichergestellt werden, dass kein anderer Prozess gleichzeitig auf die geteilte Ressource zugreifen kann.
  • Deadlock (Verklemmung): Tritt auf, wenn zwei Prozesse Ressourcen benötigen, die der jeweils andere hält, und beide auf die Freigabe warten.
  • Starvation (Verhungern): Wenn ein Prozess (z. B. P3) dauerhaft den Zugriff auf eine Ressource verweigert bekommt, weil andere Prozesse (P1, P2) abwechselnd bevorzugt werden.

Threads (POSIX-Threads)

  • pthread_t thread;: Identifiziert einen Thread.
  • pthread_create(&thread, NULL, Funktion, NULL);: Erstellt einen neuen Thread.
  • pthread_join(thread, NULL);: Wartet auf die Beendigung eines Threads.
  • pthread_exit(NULL);: Beendet den aktuellen Thread.

Virtueller Speicher und Puffer-Management

Eine Hauptaufgabe des Betriebssystems ist es, Programme von der Festplatte in den Arbeitsspeicher zu laden und der CPU Speicheradressen bereitzustellen.

  • Feste Partitionierung: Speicher wird in Partitionen gleicher Größe unterteilt; die Anzahl der Prozesse ist durch die Anzahl der Partitionen begrenzt.
  • Dynamische Partitionierung: Speicherplatz wird den Prozessen je nach Bedarf zugewiesen.

Interne Fragmentierung

Problem: Tritt bei der festen Partitionierung auf, wenn ein Prozess kleiner ist als die zugewiesene Partition. Der ungenutzte Speicherplatz innerhalb der Partition geht verloren.

Lösung: Paging (Seitennummerierung), bei der alle Seiten die gleiche Größe haben und keine Frames verschwendet werden.

Externe Fragmentierung

Problem: Tritt bei der dynamischen Partitionierung auf. Mit der Zeit wird der Speicher durch die Zuweisung und Freigabe von Prozessen stark fragmentiert, sodass viel freier Speicherplatz entsteht, der jedoch nicht zusammenhängend genug für neue Prozesse ist.

Lösung: Segmentierung, bei der Prozesse in Segmente unterteilt werden, die nicht zwingend die gleiche Länge haben müssen.

Sockets

Ein Socket ist ein Endpunkt für die Kommunikation zwischen Prozessen. Er ermöglicht es unabhängigen Prozessen, über einen Kommunikationskanal Daten auszutauschen.

Socket-Struktur: Client-Server-Kommunikation

Client-Ablauf

  1. Socket erstellen
  2. Verbindung öffnen (Connect)
  3. Schreiben (Request senden)
  4. Lesen (Response empfangen)
  5. Schließen

Server-Ablauf

  1. Socket erstellen
  2. Bind (Adresse zuweisen)
  3. Listen (Auf Verbindungen warten)
  4. Accept (Verbindung annehmen)
  5. Lesen
  6. Schreiben
  7. Schließen

Herunterladen

PDF Word HTML