Prozesse und Threads

💡
In dieser LVA nur singlecore CPUs - keine echte Parallelität.

An jedem Zeitpunkt kann nur eine einzige Instruction ausgeführt werden.

Begriffe

Programm statischer Code

Prozess Programm im Ausführungs-Kontext

= Programmcode, assoziierte Daten, Execution Context (PCB)

Kontext aktueller Prozess-Zustand, Verwaltungsdaten (Tabellen)

Dispatcher OS-Programm für Process-Switching bei Timeout Interrupt

Trace Ausführungs-Reihenfolge von Instruktionen - Können sich überlappen.

Aufgabe des OS

OS allokiert Speicher und baut Datenstrukturen auf für Prozess-Zustand und Speicherbereich.

OS kreiert, beendet und verwaltet Prozessse.

Prozess-Erzeugung

Login von user

OS Service Ausführung

Subroutine call (Process Spawning: Parent erzeugt Child)

Absetzen eines Jobs

Prozess-Beendigung

Logout von user

Service request an OS

Fehler Auftritt (Arithmetic error, IO failure, ...)

Halt- Instruction

Prozess-Verwaltung

Ressourcen-Vergabe

Im kernel mode ist OS zuständig für:

Prozess-Management Erstellen, Beenden, Switchen, Synchronisieren

Speicher-Management Speicherallokation, Swapping

IO-Management Buffer, Allokation von Peripherals und ihre Channels

Supportfunktionen Accounting, Monitoring

____________

Prozess-Zustände

Jede queue, wie ist als PCB-liste / Prozessliste implementiert.

Running\small \textsf{Running}

Instruction pointer eip bei Prozess.

NotRunning{ReadyBlocked/Waiting \small \textsf{Not Running} \begin{cases} \textsf{Ready}\\ \textsf{Blocked / Waiting} \end{cases} 

Ready ready to run

Blocked waiting for event (zB IO response)

New\small \textsf{New}

Erzeugung von Prozess durch OS:

  1. Erstellung von process ID
  1. Eintrag in Prozesstabelle

Prozesse bleiben hier nach Erzeugung wenn Systemlast zu hoch oder ready voll.

Exit\small \textsf{Exit}

Beendigung von Prozess durch OS:

  1. Terminierung von Programm
  1. Prozessinformationen aus Tabellen verwendet zB Accounting, Debugging
  1. Administrative Schritte zB logging
  1. Tabellen-Einträge löschen, Speicher freigeben

Ready,suspend\small \textsf{Ready, suspend}

Auslagerung in Sekundärspeicher

Blocked,suspend\small \textsf{Blocked, suspend}

Auslagerung in Sekundärspeicher

Ursachen für Suspend

Swapping : Arbeitsspeicher zu voll \rarr Auslagerung in Sekundärspeicher (IO Operation)

Hintergrundprozess

Problembehaftet

Timing: Periodischer, wiederaufkehrender Prozess

Parent request: Kann wegen Untersuchung, Modifikation, Koordination sein Child suspenden

Process Switch

Umschaltung zwischen Prozessen wenn OS wieder im Besitz der Kontrolle ist durch:

Call / Supervisor Call / System Call

Expliziter Aufruf eines Betriebssystem Services im Prozess zB IO-Operation

Trap

Fehler bei Ausführung von Instruction - Supervisor-Mode um Fehler zu behandeln.

Interrupt

Ursache außerhalb des Prozesses zB key-press (IO-Interrupt)

Interrupt-Behandlungsroutine von OS gewählt

Queuing Model : Eigene Queue für jedes Event auf dass ein Prozess durch Warte-Ereignis blockieren und warten kann.

Queuing Model

____________

Prozessverwaltung

Die Verwaltung von Prozessen und Ressourcen braucht eigene Datenstrukturen.

Diese Tabellen müssen nicht unbedingt einander referenzieren.

Memory Table Physischer Bereich im Arbeitsspeicher und Sekundärspeicher

IO Table Peripherals und ihre Zustände, Buffer

File Table Dateien und ihre Zustände, Buffer

Primary Process Table Globale Prozesstabelle - mit pointer zu process image

Process Image

Im Virtual Memory - muss nicht zusammenhängend sein.

OS braucht Teile davon für Prozessverwaltung.

Private User Address Space User Programm (nicht modifizierbar)

Shared Address Space User Data (modifizierbar) : Variablen, modifizierbare Programme

User Stack Für User Programme

Process Control Block PCB Execution Context

Process Control Block PCB

Teil von Process-Image.

Gesamter Kontext von Prozess - steht OS zur Verfügung.

Process ID(Identifizierung)

Index aus Primary Process Table

Benutzer ID (process owner)

Parent Process ID (parent process) - Damit zb Child-processes ohne parents geschlossen werden

Processor State Information(Steuerinformation)

Damit man nach einer Unterbrechung dort fortsetzen kann wo man war.

Registerinhalte

Kontroll-Register (Befehlszähler / instruction pointer)

Status-Register (Program status word PSW): Flags, Statepointer

Stack pointer

Process Control Information(Prozesskontrolle)

Informationen über Rechte, Priorität, Privilegien, Ressourcen die gebraucht werden für Scheduler:

Aktueller Zustand

Priorität

Ereignis auf das der Prozess wartet

Interprozesskommunikation IPC

Privileges

Memory management (pointer zu segment / page tabellen)

Ressourcen (elapsed CPU-Time und benutzte Ressourcen)

Pointer aud andere Prozesse

auf Parents

um Queues (PCB Listen) zu implementieren.

Execution Modes

Datenstrukturen (PCB Listen) müssen vor unerlaubten Zugriffen geschützt werden.

CPU unterstützt durch mindestens 2 Modi (als mode-bits gesetzt)

User mode Für Benutzerprogramme

Privileged mode Für OS um auf bestimmte Speicherbereiche zuzugreifen.

bzw system / kernel / supervisor / control mode

____________

OS Designs

Mode-Switch notwendig für OS Routinen aber nicht Process-Switch - Abhängig von OS design.

Mode Switch Änderung von Execution Mode

Process Switch Änderung von Process

  1. Process Switch (rot) - Kontrolle von user process (grün) wird an OS übergeben
  1. Mode switch - zu privileged mode
  1. Kontext wird abgespeichert (grau)
  1. Optionaler Process Switch (2 Wege - orange)
    1. OS Programm als Subroutine ausgeführt
    1. OS Programm als neuer Prozess ausgeführt
  1. Alter Zustand / Kontext aus user process wieder hergestellt (grau)

1) OS Ausführung in User Prozessen

Kein Process-Switch

OS als Ansammlung an Subroutinen die vom User aufgerufen werden.

Fast alle OS-Routinen laufen im Kontext der Benutzerprozesse ausgeführt.

Erweiterung vom Process Image

Private User Address Space User-Programm (unveränderlich)

Shared Address Space User Data (modifizierbar): Variables, Callstack + OS-Code und Daten

User Stack Stack für User Programme

System / Kernel Stack Stack für privileged mode (nicht von Prozess manipuliert)

Process Control Block PCB Execution Context

2) Nonprocess Kernel

Process-Switch

Gesamter OS strikt getrennte im Kernel mit höheren Privilegien, eigenem Speicherbereich + Stack.

Nur Benutzerprogramm Prozess genannt.

3) Prozessbasiertes OS

Process-Switch

OS als Ansammlung von getrennten Systemprozessen mit höhrer Priorität.

Kernel (≠ Prozess) genützt für Basis-Services:

Process Switching

Basic memory management

Interprocess Communication IPC (Nachtichtenaustausch und Kontrolle)

Interrupts und IO

Beispiel: Mikrokernel Architektur

Kernel minimalistisch - nur aller nötigsten Services - Restlichen OS features als optionale libraries.

Hat Basis-Services (siehe Prozessbasiertes OS)

Eigenschaften:

Einheitliches Interface

Einfach anzupassen, flexibel, erweiterbar

Portabel

Klein und Übersichtlich

Kernel Architekturen

Monolithic OS (eher alt - no Compartmentalization)

großer Block - Menge von Routinen die sich gegenseitig aufrufen

Layered OS (modern - has Compartmentalization)

Modularisiert, klare Grenzen zwischen Funktionalitäten

Hierarchische Struktur, das meiste im Kernel mode ausgeführt

____________

Threads

Prozesse = Ressourcen-Verwaltung + Ausführungszustände + Dispatching

Single-Threaded

Entkopplung / Seperation of concerns mit Threads:

  1. Process / Task (Ressourcen-Verwaltung)

    Virtueller Addressraum (mit Process Image)

    Speicherschutz

    Files, IO

  1. Thread / Lightweight process (Dispatching, Ausführungszustände)

    schnelleres Erzeugen und Umschalten als bei Prozessen.

    Ausführungszustand

    Running, Ready, Blocked - je nach Implementierung.

    Aber suspend nicht für einzelne Threads möglich, sondern nur für Prozess.

    Kontext wenn nicht gerade laufend

    User Stack, Kernel Stack

    thread-lokale statische und lokale Variable

    Zugriff auf Prozessspeicher und Ressourcen

Multi-Threading

PCB von Process angepasst: Tabelle mit pointern zu allen threads.

Alle Threads haben greifen auf selben user address space zu.

Wenn Prozess terminiert - terminieren alle Threads.

Multi-Threaded

Vorteile von Threads

Bessere performance als Prozesse

Kein Mode-Switch für Erzeugung, Termination und Switching.

Alle Threads haben die gleichen Ressourcen:

Inter-Thread-Kommunikation ohne Kernel möglich - aber: benötigt Synchronisation

Anwendungen von Threads

Applikationen bei denen sonst mehrere Prozesse auf dieselbe Ressource zugreifen würden wie zB:

File Server in LAN

Ein Thread für jeden Request

Spreedsheet Programm wie Excel

Für jede UI Komponente ein Thread

User-Level Threads (ULT)

Prozess ruft thread-library auf.

Threads für den Kernel unsichrbar.

Thread library code implementiert alles

  • implementiert
    • Erzeugung und Terminierung
    • Daten-, Nachrichtenaustausch zwischen Threads
    • Thread Scheduling
    • Sichern und Herstellen von Thread Kontexten

Thread-Switching im User-mode.

Vorteil gegenüber KLT

Scheduler kann an Applikation angepasst werden

Nachteil gegenüber KLT

Threads können nicht auf mehrere Prozessoren aufgeteilt werden

Kernel-Level Thread (KLT)

Kernel Thread API, keine library.

Thread scheduling / management durch Kernel.

Auch für OS services eingesetzt.

Vorteil gegenüber ULT

Einzelne Threads können blockiert werden.

Gleichzeitiges Schedulen mehrerer Threads eines einzelnen Prozesses mit Multicore möglich.

Nachteil gegenüber ULT

Mehr Overhead: Thread switching innerhalb eines Prozesses über den Kernel bedeutet 2 Mode switches (kernel → user → kernel)

💡
Es ist möglich einen hybriden ULT/KLT Ansatz zu wählen.