Betriebssystemtechnik

Ähnliche Dokumente
Routinenartige Komponente eines Programms

Gliederung. 1 Vorwort. 3 Programmfaden. 4 Zusammenfassung. 5 Anhang. c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # SS / 53

Betriebssystembau. 7. Übung. Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

Karlsruher Institut für Technologie

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

Betriebssysteme BS-V SS Hans-Georg Eßer. Foliensatz V: Ulix: Interrupts und Faults Ulix: System Calls. Dipl.-Math., Dipl.-Inform.

Hinweise 80x86-Architektur

Domänenanalyse Threadverwaltung/Scheduling

B1 Stapelspeicher (stack)

ARM Cortex-M Prozessoren. Referat von Peter Voser Embedded Development GmbH

2 Funktionen für die Verwaltung von Kontexten

Arten der Synchronisation. Koordination nebenläufiger Prozesse. Koordinierung. Reihenschaltung. Einseitige Synchronisation

Kapitel 2: Betriebssysteme

Prozessverwaltung. abfertigung (process dispatching) CPU-Stoß (CPU burst) vs. E/A-Stoß (I/O burst) Prozessinkarnation

Compiler: Vom Code zum Maschinen-Code. C Programmierung - Vorlesung 2 Hochschule Regensburg Universitätsstraße 31, Regensburg

Repetitorium Informatik (Java)

Architektur Verteilter Systeme Teil 2: Prozesse und Threads

Simple Scope. ecos-vertiefung. Florian Franzmann Tobias Klaus Peter Wägemann

Was machen wir heute? Betriebssysteme Tutorium 2. Organisatorisches. Frage 2.1.a. Theorieblätter Abgabe. Antwort. Probleme mit OS/161?

Begriff: Scheduling Planung, Schedule Plan. Verplanung der CPU-Zeit an die Threads (bzw. Prozesse)

Betriebssysteme Kap A: Grundlagen

Domänenmodell: Fadenkommunikation und -synchronisation

Programmierung mit C Zeiger

Deklarationen in C. Prof. Dr. Margarita Esponda

Betriebssystembau (BSB)

Objektorientiertes Programmieren für Ingenieure

Debuggen mit GDB (Gnu DeBugger) unter Eclipse

Operating System Kernels

Dämon-Prozesse ( deamon )

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / Vorlesung 9, Dienstag 18.

Einführung in die C-Programmierung

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Embedded-Linux-Seminare. Linux als Betriebssystem

Übung zu Grundlagen der Betriebssysteme. 10. Übung

Betriebssysteme. 4y Springer. Eine kompakte Einführung mit Linux. Albrecht Achilles. Mit 31 Abbildungen

Design and Implementation of a Soft-error Resilient OSEK Real-time Operating System

Die Ausführung geschieht über die sequentielle Abarbeitung der Instruktionen.

Inhaltsverzeichnis. 1 Einleitung 2

Architekturmodell: der Weg zur Klassen-Hierarchie

POSIX Echtzeit: Kernel 2.6 und Preempt-RT

Prozesse und Prozessmanagement des BS. 1 Unterschied Prozess, Threads. 1.1 Prozess. 1.2 Threads

Zwangsserialisierung von Programmfäden. Monopolisierung der CPU durch Programmfäden. Vermeidung eines Ausführungsmonopols CPU-Schutz

Objektbasierte Entwicklung

Prüfung VO Betriebssysteme SS2008 / 7. Juli 2008

Einführung in die technische Informatik

Betriebssysteme KU - Einführungstutorium

Die Mikroprogrammebene eines Rechners

VORSTELLUNG DER DIPLOMARBEIT

A Kompilieren des Kernels B Lineare Listen in Linux C Glossar Interessante WWW-Adressen Literaturverzeichnis...

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes

System Monitoring mit strace. Systemcall tracing

Linker: Adreßräume verknüpfen. Informationen über einen Prozeß. Prozeß-Erzeugung: Verwandtschaft

U6-1 Organisatories. U6-2 Motivation von Threads. U6-3 Vergleich von Thread-Konzepten. Organisatorisches

Welche der folgenden Aussagen gelten? a) Im allgemeinen gilt: ein Deadlock tritt auf gdw. der Resource-Allocation Graph einen Zykel

Von der Platte zur Anwendung (Platte, Treiber, Dateisystem)

Hardware Virtualisierungs Support für PikeOS

Übung zu Grundlagen der Betriebssysteme. 13. Übung

Vortrag zum Seminar Konzepte und Techniken virtueller Maschinen und Emulatoren. Bruno Kleinert 20. Juni 2007

Grundlagen verteilter Systeme

bereit (oder Zombie genannt). Normales Ende (exit) und synchrone und asynchrone Signal-Ereignisse, z.b.

Der Scheduler von Windows Konzepte und Strategien

Modulare Programmierung und Bibliotheken

6. Tutorium zu Softwaretechnik I

Zusammenfassung Modul 223

Tutorium Rechnerorganisation

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

Propädeutikum. Dipl.-Inf. Frank Güttler

x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013

Grundlagen der Informatik III Wintersemester 2010/2011

Projekt für Systemprogrammierung WS 06/07

Klausurvorbereitung VS1 (Prof. Brecht) (B0rg Edition)

Besprechung Aufgabe 5 (crawl) POSIX-Threads. Problem: UNIX-Prozesskonzept ist für viele heutige Anwendungen unzureichend

Übung zu Grundlagen der Betriebssysteme. 7. Übung

Early first draft Höllische Programmiersprachen Seminar im WS 2014/15 Speichermanagement

Vererbung & Schnittstellen in C#

Die Programmiersprache C Eine Einführung

6.Vorlesung Betriebssysteme Hochschule Mannheim

Inhaltsverzeichnis. 2.4 Thread-Systeme. 2.1 Was ist ein Prozess? 2.2 Scheduling. 2.3 Interprozesskommunikation

Moderne Betriebssysteme. Kapitel 8. Kapitel 8. Folie: 1. Multiprozessorsysteme. Autor: Andrew S. Tanenbaum

Universität Karlsruhe (TH)

Was machen wir heute? Betriebssysteme Tutorium 12. Organisatorisches. Frage 12.1.a. Programmieraufgaben Vorstellung. Antwort

1A05 64-bit Adressierung unter Alpha OpenVMS

Objektorientierte Programmierung

Datentechnik. => Das Rechenergebnis ist nur dann sinnvoll, wenn es rechtzeitig vorliegt. Die Zeit muß daher beim Programmdesign berücksichtigt werden.

Übung Betriebssysteme 11

Die Entwicklungsumgebung. Labor Technische Informatik. Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) A. Reber

Kap 4. 4 Die Mikroprogrammebene eines Rechners

Sicheres C Programmieren in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester

Einführung in die C++ Programmierung für Ingenieure

B.4. B.4 Betriebssysteme Prof. Dr. Rainer Manthey Informatik II 1

Einführung in (Intel) 80x86 Assembler. Einführung in (Intel) 80x86 Assembler Wintersemester 2008/09 1 / 26

Name: ES2 Klausur Thema: ARM Name: Punkte: Note:

OSEK / OSEKtime Ausgewählte Kapitel eingebetteter Systeme

J.5 Die Java Virtual Machine

Kap. 8: Dateisysteme (E3 EXT2 Dateisystem) 1

Memory Models. 17. September 2012

Betriebssysteme. Dipl.-Ing.(FH) Volker Schepper

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Systemsoftware (SYS)

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

Transkript:

Betriebssystemtechnik Fadenumschaltung: Prozesseinlastung (Dispatching) Wolfgang Schröder-Preikschat Lehrstuhl Informatik 4 12. Juni 2012 c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 1 / 35

V Prozesseinlastung Gliederung 1 Rekapitulation 1 Rekapitulation Prozessdeskriptor Prozesszeiger 2 Prozessumschalter Schnittstelle Prozessorbezug Elementaroperationen 3 Gesamtzusammenhang Wettlaufsituation Verdrängungssperre Zeigerverschmelzung 4 Zusammenfassung c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 2 / 35

V Prozesseinlastung 1 Rekapitulation 1.1 Prozessdeskriptor Prozesskontrollblock (engl. process control block, PCB) Datenstruktur zur Verwaltung von Prozessinkarnationen Kopf eines Datenstrukturgeflechts zur Beschreibung und Verwaltung einer Prozessinkarnation und Steuerung eines Prozesses oft auch als Prozessdeskriptor (PD) bezeichnet UNIX Jargon: proc structure (von struct proc ) ein abstrakter Datentyp (ADT) des Betriebssystem(kern)s Softwarebetriebsmittel zur Verwaltung von Programmausführungen jeder Faden wird durch ein Exemplar vom Typ PD repräsentiert Kernfaden Variable des Betriebssystems Benutzerfaden Variable des Anwendungsprogramms die Exemplaranzahl ist statisch (Systemkonstante) oder dynamisch Objekt, das mit einer Prozessidentifikation (PID) assoziiert ist eine für die gesamte Lebensdauer des Prozesses gültige Bindung c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 3 / 35

V Prozesseinlastung 1 Rekapitulation 1.1 Prozessdeskriptor Aspekte der Prozessauslegung Verwaltungseinheit einer Prozessinkarnation Dreh- und Angelpunkt, der prozessbezogene Betriebsmittel bündelt Speicher- und, ggf., Adressraumbelegung 1 Text-, Daten-, Stapelsegmente (code, data, stack) Dateideskriptoren und -köpfe (inode) 2 {Zwischenspeicher,Puffer}deskriptoren, Datenblöcke Datei, die das vom Prozess ausgeführte Programm repräsentiert 3 Datenstruktur, die Prozess- und Prozessorzustände beschreibt Laufzeitkontext des zugeordneten Programmfadens/Aktivitätsträgers gegenwärtiger Abfertigungszustand (Scheduling-Informationen) 4 anstehende Ereignisse bzw. erwartete Ereignisse 5 Benutzerzuordnung und -rechte 6 c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 4 / 35

V Prozesseinlastung 1 Rekapitulation 1.1 Prozessdeskriptor Aspekte der Prozessauslegung: Optionale Merkmale Auslegung des PD ist höchst abhängig von Betriebsart und -zweck: 1 Adressraumdeskriptoren sind nur notwendig in Anwendungsfällen, die eine Adressraumisolation erfordern 2 für ein Sensor-/Aktorsystem haben Dateideskriptoren/-köpfe wenig Bedeutung 3 in ROM-basierten Systemen durchlaufen die Prozesse oft immer nur ein und dasselbe Programm 4 bei statischer Prozesseinplanung ist die Buchführung von Abfertigungszuständen verzichtbar 5 Ereignisverwaltung fällt nur an bei ereignisgesteuerten und/oder verdrängend arbeitenden Systemen 6 in Einbenutzersystemen ist es wenig sinnvoll, prozessbezogene Benutzerrechte verwalten zu wollen Problemspezifische Datenstruktur Festlegung auf eine Ausprägung grenzt Einsatzgebiete unnötig aus c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 5 / 35

V Prozesseinlastung 1 Rekapitulation 1.1 Prozessdeskriptor Generische Datenstruktur Logische Sicht eines Geflechts abstrakter Datentypen PID Betriebssystem Prozessdeskriptoren PD Speicherköpfe Koroutinenköpfe Dateiköpfe Dateideskriptoren Pufferköpfe Medium Seiten/ Segmenttabelle Puffer Text Daten Halde Stapel Programm einfädiger Prozess 1 Koroutinenkopf mehrfädiger Prozess N > 1 Koroutinenköpfe c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 6 / 35

V Prozesseinlastung 1 Rekapitulation 1.2 Prozesszeiger Buchführung über den aktuell laufenden Prozess Zeiger auf den Kontrollblock des laufenden Prozesses: Prozesszeiger innerhalb des Betriebssystems ist darüber jederzeit bekannt, welcher Prozess, Faden, welche Koroutine die CPU besitzt wichtige Funktion der Einlastung von Prozessen ist es, den Zeiger im Zuge der Fadenumschaltung zu aktualisieren Beachte: Mehr-/Vielkernige Prozessoren, Multiprozessoren für jeden Prozessor(kern) ist solch ein Prozesszeiger bereitzustellen laufbereite Programmfäden Prozesszeigerfeld Kern 0 Kern 1 Kern n 1 c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 7 / 35

V Prozesseinlastung 1 Rekapitulation 1.2 Prozesszeiger Lokalisierung eines Prozesses Tripel aus Prozess-, Stapel- und Befehlszeiger Logische Sicht:...B803000000CD8050FC061E50... Maschinenprogramm Prozesszeiger Betriebssystem Tripel Befehlszeiger Stapelzeiger Zentraleinheit Physische Sicht: Prozesswechsel ein Zeigerpaar umsetzen (a) Prozesszeiger (b) Stapelzeiger kritischer Abschnitt!!! Prozesszeiger Stapelzeiger Prozess kontrollblock Befehlszeiger Koroutinen statusblock c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 8 / 35

V Prozesseinlastung Gliederung 2 Prozessumschalter 1 Rekapitulation Prozessdeskriptor Prozesszeiger 2 Prozessumschalter Schnittstelle Prozessorbezug Elementaroperationen 3 Gesamtzusammenhang Wettlaufsituation Verdrängungssperre Zeigerverschmelzung 4 Zusammenfassung c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 9 / 35

V Prozesseinlastung 2 Prozessumschalter 2.1 Schnittstelle Funktionale/Prozedurale Abstraktion Modulschnittstelle: action.h minimale Koroutinenerweiterung #include "luxe/coaction.h" typedef struct action {. coaction_t act; /* associated coroutine action */ } action_t; extern action_t *act_being(); /* return action pointer */ extern void act_apply(action_t *); /* define action pointer */ extern void act_board(action_t *); /* switch to specified action */ being apply board den Prozesszeiger zum laufenden Progammfaden liefern den Prozesszeiger des gegenwärtigen Prozessor(kern)s setzen einen Programmfaden einschiffen den Prozessor(kern) zwischen Programmfäden umschalten c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 10 / 35

V Prozesseinlastung 2 Prozessumschalter 2.2 Prozessorbezug Operationen auf dem Prozesszeiger Prozesszeiger liefern INLINE action_t *act_being() { return act_index[cpu_index()]; } Prozesszeiger definieren INLINE void act_apply(action_t *next) { act_index[cpu_index()] = next; } wobei das Prozesszeigerfeld wie folgt ausgelegt und vorgegeben ist: Deklaration Definition: act index.c #include "luxe/action.h" #include "luxe/machine/cpu.h" #include "luxe/action.h" extern action_t *act_index[]; action_t *act_index[ncore]; Beachte: Prozessor(kern)abhängigkeit cpu index() NCORE liefert die Nummer des ausführenden Prozessor(kern)s im Bereich [0, NCORE 1] spezifiziert die Anzahl der Prozessor(kern)e c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 11 / 35

V Prozesseinlastung 2 Prozessumschalter 2.2 Prozessorbezug Identifikation des ausführenden Prozessor(kern)s Schnittstelle #define NCORE 1 /* uni-processor */ extern int cpu_index(); Implementierung INLINE int cpu_index() { return 0; } Optionen zur Identifikation eines Prozessor(kern)s für NCORE > 1: i Geräte- oder Prozessorregister mit festem, hardwaredefiniertem Inhalt ii Spezialregister mit variablem, betriebssystemdefiniertem Inhalt: a) ggf. noch zu normierende Nummer des Prozessor(kern)s b) Zeiger auf einen Prozessor(kern)deskriptor im Hauptspeicher der u.a. die noch zu normierende Nummer des Prozessor(kern)s enthält iii vom Kompilierer freigehaltenes Arbeitsregister als Spezialregister Beachte: Spezialregister Zugriff darauf ist eine sensitive Operation: Virtualisierung schreibender Zugriff darauf ist eine privilegierte Operation: Schutz c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 12 / 35

V Prozesseinlastung 2 Prozessumschalter 2.3 Elementaroperationen Reihenanordnung: board Wechsel durch regain INLINE void act_board(action_t *next) { action_t *self = act_being(); act_apply(next); } coa_regain(next->act, &self->act); Wechsel durch resume INLINE void act_board(action_t *next) { coaction_t last = coa_resume(next->act); } act_being()->act = last; act_apply(next); der abgebende Faden: sichert seinen Stapelzeiger selbst setzt den Prozesszeiger auf seinen Nachfolger der annehmende Faden: sichert den Stapelzeiger seines Vorgängers setzt den Prozesszeiger auf sich selbst Beachte: Arten der Auslegung von regain/resume (Kap. IV-2, S. 22) Reihenanordnung unabhängige Fäden, variabler Kontextyp Unterprogrammanordnung abhängige Fäden, fester Kontexttyp c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 13 / 35

V Prozesseinlastung 2 Prozessumschalter 2.3 Elementaroperationen Reihenanordnung: board, eingebettet (gcc -O6 -S) board regain movl next, %eax movl act_index, %edx movl %eax, act_index movl (%eax), %eax pushl %ebx pushl %ebp pushl %esi pushl %edi pushl $1f movl %esp, (%edx) movl %eax, %esp ret # thread switch 1: popl %edi popl %esi popl %ebp popl %ebx a gcc 4.4.5 (Debian) b gcc 4.0.1 (Apple) a board resume movl next, %edx movl (%edx), %ecx pushl %ebx pushl %ebp pushl %esi pushl %edi pushl $1f movl %esp, %eax movl %ecx, %esp ret # thread switch 1: popl %edi popl %esi popl %ebp popl %ebx movl act_index, %ecx movl %edx, act_index movl %eax, (%ecx) a board resume movl _next, %ecx movl (%ecx), %edx pushl %ebx pushl %ebp pushl %esi pushl %edi pushl $1f movl %esp, %eax movl %edx, %esp ret # thread switch 1: movl %eax, %edx popl %edi popl %esi popl %ebp popl %ebx movl _act_index, %eax movl %edx, (%eax) movl %ecx, _act_index b c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 14 / 35

V Prozesseinlastung 2 Prozessumschalter 2.3 Elementaroperationen Unterprorgammanordnung: board Wechsel durch switch void act_board(action_t *next) { action_t *self = act_being(); act_apply(next); } self->act = coa_switch(next->act); Beachte: Rücksprungadresse ist die Fortsetzungsadresse der Koroutine/des Fadens innerhalb von board den Faden umschalten, ist überflüssig INLINE coaction_t coa_switch(coaction_t next) { codomain_t codo; abi_push(); codo = cod_switch((codomain_t)next); abi_pull(); Minimale Erweiterung: 1 Kontext stapeln 2 Stapel umschalten 3 Kontext entstapeln } return (coaction_t)codo; Abstraktion auflösen Beachte: Art der Auslegung von board Implementierungsentscheidung: abhängige Fäden, fester Kontexttyp c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 15 / 35

V Prozesseinlastung 2 Prozessumschalter 2.3 Elementaroperationen Unterprorgammanordnung: board switch gcc -O6 -S act board.c act_board: movl 4(%esp), %eax # grab pointer to action descriptor of next thread movl act_index, %edx # grab pointer to action descriptor of this thread movl (%eax), %ecx # grab stack pointer of next thread movl %eax, act_index # book action of next thread to be switched to #APP = begin of inlined switch pushl %ebx # save context of this thread pushl %ebp #... pushl %esi #... pushl %edi #... movl %esp, %eax # keep context pointer of this thread movl %ecx, %esp # stack switch: change over to next stack popl %edi # restore context of next thread popl %esi #... popl %ebp #... popl %ebx #... #NO_APP = end of inlined switch movl %eax, (%edx) # save context pointer of this thread ret # thread switch: actually run next thread c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 16 / 35

V Prozesseinlastung 2 Prozessumschalter 2.3 Elementaroperationen Zwischenzusammenfassung Argumente für die Entwurfs- und Implementierungsentscheidung zur Auslegungsart der Umschaltprozedur (board): Reihenanordnung mehrere Umschaltstellen im Planer Einsparung von Laufzeit Entscheidungsaufschub über die Fadenart Förderung koexstierender Planerdomänen Unterprogrammanordnung eine zentrale Umschaltstelle im Planer Einsparung von Speicherplatz Austausch des Umschalters im Betrieb maßgeblich sind Aufbau, Struktur und Funktionsweise des Planers Beachte: Abhängigkeit zum Operationsprinzip des Planers verdrängend arbeitender Planer führt zur Wettlaufsituation in board Problem: umsetzen von Prozess- und Stapelzeiger ist nicht atomar! c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 17 / 35

V Prozesseinlastung Gliederung 3 Gesamtzusammenhang 1 Rekapitulation Prozessdeskriptor Prozesszeiger 2 Prozessumschalter Schnittstelle Prozessorbezug Elementaroperationen 3 Gesamtzusammenhang Wettlaufsituation Verdrängungssperre Zeigerverschmelzung 4 Zusammenfassung c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 18 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.1 Abhängigkeiten Planer und Umschalter im Verbund: Aufrufhierarchie Scheduler sleep rouse check block pause ready quest coast elect range merit shift board Dispatcher apply being c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 19 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.1 Abhängigkeiten Funktionen des Planers Ereignisbehandlung sleep rouse Fadensteuerung block pause ready check schlafen legen Schlafende aufwecken Laufenden blockieren Laufenden innehalten Laufbereiten einstellen ggf. Prozessor abtreten Laufenden prüfen Leerlaufsteuerung quest coast Fadeneinplanung elect range merit Prozessorzuteilung shift Beachte: Operationsprinzip Verdrängung synchron asynchron Laufbereiten suchen Prozessor leerlaufen Laufbereiten auswählen Laufbereiten einordnen auf Vorzug prüfen Faden umschalten durch ready, im Falle vorranggesteuerter Einplanung durch check, im Falle zeitscheibengesteuerter Umplanung durch rouse, im Falle gerätegesteuerter Ereigniszustellung c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 20 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.1 Abhängigkeiten Benutztbeziehung zwischen Planer und Umschalter [4] Benutzthierarchie [1, S. 151] funktionale Hierarchie [2] für zwei Programme A und B bedeutet A benutzt B,... wenn es Situationen gibt, in denen das korrekte Funktionieren von A abhängt vom Vorhandensein einer korrekten Implementierung von B benutzt bedeutet damit auch die zyklenfreie Schichtanordnung ohne Verdrängung mit Verdrängung der Planer benutzt den Umschalter korrektes Funktionieren des Planers bedingt die Durchsetzung seiner Entscheidung im Umschalter dito und: der Umschalter benutzt den Planer korrektes Funktionieren des Umschalters hängt ab vom Schutz kritischer Abschnitte im Planer der Zyklus ist entwurfstechnisch aufzulösen c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 21 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.2 Wettlaufsituation Laufgefahr: Verdrängend arbeitende Prozesseinplanung Einlastung meint zweierlei: Prozesszeiger- und Fadenumschaltung Verdrängung des dazwischen laufenden Fadens ist kritisch genauer: zwischen apply und {regain, resume, switch} (vgl. S. 13 16) der Programmabschnitt dazu ist ein typischer kritischer Abschnitt ungünstige Überlappung führt zur Fehlleitung der Zustandssicherung Schutz dieses kritischen Abschnitts muss nur pseudo-parallele Prozesse 1 geeignet koordinieren, wozu folgende Optionen in Frage kommen: (a) Verdrängung (d.h., Planeraktivierungen) zeitweise unterbinden Verdrängungssperre (b) Prozesszeiger aus dem Stapelzeiger berechnen Zeigerverschmelzung Stapelzeiger umschalten schaltet implizit den Prozesszeiger mit um 1 Gleichzeitige Prozesse bedingt durch Verfahren zum Prozessormultiplexen. c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 22 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.2 Wettlaufsituation Laufgefahr: Szenario mit drei Fäden F 1, F 2 und F 3 1 als Folge von pause, block oder ready tritt F 1 den Prozessor ab F 2 wurde vom Planer ausgewählt und dem Umschalter übergeben 2 F 1 wird im Umschalter unterbrochen, der Planer wird erneut aktiviert: a) nach apply aber noch vor regain oder switch F 1 läuft als F 2 b) nach resume aber noch vor apply F 2 läuft als F 1 3 als Folge von check oder rouse tritt F 1 bzw. F 2 den Prozessor ab F 3 wurde vom Planer ausgewählt und dem Umschalter übergeben der Prozessorstatus des laufenden Fadens wurde im Stapel abgelegt 4 der Stapelzeiger SP wird in den Prozessdeskriptor PD gesichert: zu a) being = F 2 SP F1 wird act in PD F2 zugewiesen die Adresse des gesicherten Zustands von F 2 wird überschrieben F 2 wird später mit dem Zustand von F 1 weiterlaufen zu b) being = F 1 SP F2 wird act in PD F1 zugewiesen die Adresse des gesicherten Zustands von F 2 wurde nicht aktualisiert F 2 wird später mit seinem vorletzten Zustand weiterlaufen c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 23 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.3 Verdrängungssperre Verdrängungsfreie kritische Abschnitte NPCS, Abk. für (engl.) non-preemptive critical section Ereignisse, die zur Verdrängung eines sich in einem kritischen Abschnitt befindlichen Prozesses führen könnten, werden unterbunden enter leave Flagge zeigen, dass Entzug des Prozessors nicht stattfinden darf die mögliche Verdrängung des laufenden Prozesses zurückstellen Flagge zeigen, dass Entzug des Prozessors stattfinden darf die ggf. zurückgestellte Verdrängungsanforderung weiterleiten Aussetzen der Verdrängung des laufenden Prozesses ist durch (einfache) Maßnahmen an zwei Stellen der Prozessverwaltung möglich: 1 Einplanung eines freigestellten Prozesses zurückstellen 2 Einlastung eines zuvor eingeplanten Prozesses zurückstellen Analogie zum Epilogkonzept [5, 3] wobei jedoch nur der Verdrängungsepilog kontrolliert werden muss c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 24 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.3 Verdrängungssperre Verdrängungsfreie Fadenumschaltung: board synchronisiert INLINE void act_board(action_t *next) { CS_ENTER(&npcs); coaction_t last = coa_resume(next->act); } act_being()->act = last; act_apply(next); CS_LEAVE(&npcs); INLINE void act_board(action_t *next) { action_t *self = act_being(); } CS_ENTER(&npcs); act_apply(next); coa_regain(next->act, &self->act); CS_LEAVE(&npcs); void act_board(action_t *next) { action_t *self = act_being(); } CS_ENTER(&npcs); act_apply(next); self->act = coa_switch(next->act); CS_LEAVE(&npcs); Fadenwechsel geschehen damit immer innerhalb eines kritischen Abschnitts der den Prozessor abgebende Faden setzt die Verdrängungssperre der den Prozessor annehmende hebt die Verdrängungssperre auf Beachte: Anlaufende Fäden ihnen wurde der Prozessor noch nie zuvor zugeteilt sie konnten board nicht ausführen, werden aber darüber aktiviert Verdrängungssperre aufheben bevor der Faden wirklich startet c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 25 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.3 Verdrängungssperre Implementierungsansatz für NPCS Schutzvorrichtung (engl. guard) von recht einfacher Funktion: i ein Bitschalter (engl. flag) zum Sperren von Verdrängungen durch enter gesetzt und leave zurückgesetzt ii eine Warteschlange zurückgestellter Verdrängungsanforderungen durch leave abgearbeitet Beachte: Schleuse für Planeraufrufe neben enter und leave gibt es noch eine weitere Operation: guide diese leitet die Verdrängungsanforderungen durch das System sie schleust ein von Treibern aufgerufenes check oder rouse durch: a) Aktivierung, wenn der Bitschalter nicht gesetzt ist b) Zurückstellung und Einreihung in die Warteschlange, sonst ihr Aufruf erfolgt im Nachspann einer Unterbrechungsbehandlung a alle Operationen lassen sich gut nichtblockierend implementieren a AST, vgl. Kap. II-2, S. 16ff. c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 26 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.4 Zeigerverschmelzung Konkrete Ausprägung der Laufgefahr Gegenstand des Konflikts ist letztlich die Tatsache, zwei Zeiger zugleich (d.h., atomar) umsetzen zu müssen, nämlich: i der Prozesszeiger auf den als nächster laufende Faden und ii der Stapelzeiger auf den Prozessorzustand dieses Fadens Problem dabei ist, dass beide Zeiger den jeweiligen Programmiermodellen eines abstrakten und realen Prozessors entstammen: abstrakt Prozesszeiger Betriebssystem real Stapelzeiger CPU (genauer: Kern einer CPU) Ansatz: Prozesszeiger auf Stapelzeiger abbilden bei Fadenumschaltung ist dann nur der Stapelzeiger umzusetzen schreiben ins Stapelzeigerregister der CPU verläuft atomar!!! der Prozesszeiger muss dann aber vom Stapelzeiger ableitbar sein being muss einen Wert berechnen, nicht nur lesen apply wird zur Nulloperation (engl. no-operation, NOP) c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 27 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.4 Zeigerverschmelzung Zweierpotenzen bündige Stapelspeicher Platzierung des Prozessdeskriptors eines Fadens auf den Boden des ihm zugehörigen 2 k tiefen und ebenso bündigen Laufzeitstapels wobei k < n, mit n für die Adressbreite des Stapelzeigers z.b. Luxe/x86: k = 12 (d.h., 4 KiB gr. Stapelspeicher), n = 32 Folge aus den 2 k -Byte bündigen Stapelspeichern ist, dass die Adresse des Stapelbodens SB leicht aus dem Stapelzeiger SP ableitbar ist: abwärts wachsender Stapel (x86) SB = SP or (2 k 1) PD = SB (sizeof (PD) 1), Adresse des Prozessdeskriptors aufwärts wachsender Stapel (8051) SB = SP and neg(2 k 1) PD = SB, Adresse des Prozessdeskriptors c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 28 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.4 Zeigerverschmelzung Berechnung der Prozessdeskriptoradresse Abwärts wachsender Stapel INLINE thread_t *act_parts(void *tos) { return (thread_t *)(((unsigned)tos ACT_STACKMASK) - (sizeof(thread_t) - 1)); } Aufwärts wachsender Stapel INLINE thread_t *act_parts(void *tos) { return (thread_t *)((unsigned)tos & ~ACT_STACKMASK); } Stapelparameter: 4 KiB #define ACT_STACKSIZE (1 << 12) #define ACT_STACKMASK (ACT_STACKSIZE - 1) nicht mehr als 4 KiB für µ-kerne 8 KiB für Systeme à la Linux Prozessdeskriptor: Muster typedef struct thread {... action_t act;... } thread_t; Stapelspeichergröße eines Betriebssystemkerns: system mode c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 29 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.4 Zeigerverschmelzung Verwendung zur Herleitung des Prozesszeigers Prozesszeiger liefern INLINE action_t *act_being() { return &act_parts(cpu_stack())->act; } Stackpointer liefern INLINE void *cpu_stack() { register uint32_t tos TOS; return (void *)tos; } #define TOS asm ("esp") Prozesszeiger definieren INLINE void act_apply(action_t *nop) { /* no-operation */ } Faden umschalten: wie gehabt void act_board(action_t *next) { action_t *self = act_being(); act_apply(next); } self->act = coa_switch(next->act); gcc -O6 -S act being.c act_being: movl %esp, %eax # read stack pointer orl $4095, %eax # make pointer to bottom of stack (rightmost 12 bits are on) subl $3, %eax # make pointer to thread descriptor (sample of 4 bytes size) ret c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 30 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.4 Zeigerverschmelzung Unterprorgammanordnung: board switch (vgl. S. 16) gcc -O6 -S act board.c act_board: movl 4(%esp), %edx # grab pointer to action descriptor of next thread movl %esp, %eax # read stack pointer of this (i.e., running) thread movl (%edx), %ecx # grab stack pointer of next thread #APP = begin of inlined switch pushl %ebx # save context of this thread pushl %ebp #... pushl %esi #... pushl %edi #... movl %esp, %edx # keep context pointer of this thread movl %ecx, %esp # stack switch: change over to next stack popl %edi # restore context of next thread popl %esi #... popl %ebp #... popl %ebx #... #NO_APP = end of inlined switch orl $4095, %eax # make pointer to bottom of stack of this thread movl %edx, -3(%eax) # save context pointer of this thread ret # thread switch: actually run next thread c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 31 / 35

V Prozesseinlastung 3 Gesamtzusammenhang 3.4 Zeigerverschmelzung Zwischenzusammenfassung Stapelspeicher, die auf Zweierpotenzgrößen bündig ausgerichtet sind, lassen den Fadenwechsel inhärent frei von Wettlaufgefahr der Prozesszeiger berechnet sich dann einfach aus dem Stapelzeiger um den am Stapelboden liegenden Prozessdeskriptor zu adressieren Schutz des kritischen Abschnitts geschah durch geschickte Wahl und Auslegung von Datenstrukturen eines Betriebssystemkerns die Berechnung des Prozesszeigers erzeugt keinen Mehraufwand: board # Befehle # Bytes unsynchronisiert (S. 15) 16 32 Verdrängungssperre (S. 25) 26 51 bündige Stapelspeicher (S. 30) 16 28 Beachte: Konzept für Stapelspeicher garantiert maximaler Größe nur bedingt geeignet für Benutzerfäden (engl. user-level threads) c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 32 / 35

V Prozesseinlastung Gliederung 4 Zusammenfassung 1 Rekapitulation Prozessdeskriptor Prozesszeiger 2 Prozessumschalter Schnittstelle Prozessorbezug Elementaroperationen 3 Gesamtzusammenhang Wettlaufsituation Verdrängungssperre Zeigerverschmelzung 4 Zusammenfassung c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 33 / 35

V Prozesseinlastung Resümee 4 Zusammenfassung der Prozessdeskriptor ist Objekt der Buchführung über Prozesse Datenstruktur zur Verwaltung von Prozess- und Prozessorzuständen insbesondere des Aktivierungskontextes der Koroutine eines Prozesses Softwarebetriebsmittel zur Beschreibung einer Programmausführung jeder Prozessor(kern) verfügt über einen eigenen Prozesszeiger logisch in einem Prozesszeigerfeld [0, NCORE 1] gespeichert mit einer Prozessor(kern)kennung als Index in dieses Feld: Geräte-/Prozessorregister, Spezialregister, freigehaltenes Arbeitsregister Zugriff darauf ausgelegt als sensitive bzw. privilegierte Operation Verdrängung macht die Einlastung zum kritischen Abschnitt (a) Verdrängung zeitweise unterbinden: Verdrängungssperre verdrängungsfreie kritische Abschnitte schaffen, Epiloganalogie (b) Prozesszeiger aus dem Stapelzeiger berechnen Stapelspeicher auf Zweierpotenzgrößen bündig auslegen Prozessdeskriptor auf Stapelboden platzieren Stapelbodenadresse durch Maskierung des Stapelzeigerwerts bestimmen c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 34 / 35

V Prozesseinlastung 4 Zusammenfassung 4.1 Bibliographie Literaturverzeichnis [1] Garlan, D. ; Habermann, J. F. ; Notkin, D. : Nico Habermann s Research: A Brief Retrospective. In: Proceedings of the 16th International Conference on Software Engineering (ICSE 94). New York, NY, USA : ACM Press, 1994, S. 149 153 [2] Habermann, A. N. ; Flon, L. ; Cooprider, L. W.: Modularization and Hierarchy in a Family of Operating Systems. In: Communications of the ACM 19 (1976), Mai, Nr. 5, S. 266 272 [3] Lohmann, D. ; Kleinöder, J. : Betriebssysteme. http://www4.informatik.uni-erlangen.de/lehre/ws07/v_bs, 2007 [4] Parnas, D. L.: Some Hypothesis About the Uses Hierarchy for Operating Systems / TH Darmstadt, Fachbereich Informatik. 1976 (BSI 76/1). Forschungsbericht [5] Schröder-Preikschat, W. : The Logical Design of Parallel Operating Systems. Upper Saddle River, NJ, USA : Prentice Hall International, 1994. ISBN 0 13 183369 3 c wosch (Lehrstuhl Informatik 4) Betriebssystemtechnik SS 2012 35 / 35