Autonomer Kontrollfluss eines Programms Kontrollfaden (engl. thread of control, TOC) Überblick

Ä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

Domänenanalyse Threadverwaltung/Scheduling

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

Repetitorium Informatik (Java)

B1 Stapelspeicher (stack)

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

Der Scheduler von Windows Konzepte und Strategien

2 Funktionen für die Verwaltung von Kontexten

Java Einführung Methoden. Kapitel 6

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

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

Architektur Verteilter Systeme Teil 2: Prozesse und Threads

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

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

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

J.5 Die Java Virtual Machine

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

6. Tutorium zu Softwaretechnik I

Deklarationen in C. Prof. Dr. Margarita Esponda

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

Programmierung mit C Zeiger

Die Programmiersprache C99: Zusammenfassung

Karlsruher Institut für Technologie

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

Überschreiben von Methoden

Vorlesung Rechnerarchitektur. Einführung

Dämon-Prozesse ( deamon )

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

Handbuch für die Erweiterbarkeit

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

Programmierung in C. Grundlagen. Stefan Kallerhoff

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

OSEK-OS. Oliver Botschkowski. PG AutoLab Seminarwochenende Oktober AutoLab

5.4 Klassen und Objekte

Smartphone Entwicklung mit Android und Java

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

Eine Einführung in C-Funktionen

OpenCL Implementierung von OpenCV Funktionen

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

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

5. Threads, Serverprozesse und Benachrichtigungen

Tutorium Rechnerorganisation

Programmierkurs Java

Distributed Computing Group

Theorie zu Übung 8 Implementierung in Java

Fachhochschule Wiesbaden - Fachbereich DCSM. Skriptsprachen. Moderne, objekt-orientierte Skriptsprachen mit Betonung auf Ruby

Rechnerarchitektur und Betriebssysteme (CS201): Semaphor, Monitor, Deadlocks, Re-Entrance

1. Übung zu "Numerik partieller Differentialgleichungen"

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Javakurs für Anfänger

Themen. Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren

Systemsoftware (SYS)

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

Betriebssysteme: Konzepte, Dienste, Schnittstellen (Betriebssysteme und betriebssystemnahe Programmierung)

Betriebssysteme KU - Einführungstutorium

Modulare Programmierung und Bibliotheken

1 Polymorphie (Vielgestaltigkeit)

Funktionale Programmierung mit Haskell

Unterprogramme, Pointer und die Übergabe von Arrays

6.Vorlesung Betriebssysteme Hochschule Mannheim

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Die Programmiersprache C Eine Einführung

Grundlagen von Python

Klassenbeziehungen & Vererbung

Objektbasierte Entwicklung

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

Probeklausur: Programmierung WS04/05

System Monitoring mit strace. Systemcall tracing

Interpreter - Gliederung

Java Virtual Machine (JVM) Bytecode

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Betriebssysteme. FU Berlin WS 2006/07 Klaus-Peter Löhr. bs-1.1 1

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

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Objektorientiertes Programmieren für Ingenieure

Kapitel 12: Übersetzung objektorienter Konzepte

Übung zu Grundlagen der Betriebssysteme. 7. Übung

Es gibt zwei verschiedene Arten, wie Programme auf dem Rechner ausgeführt werden:

Ausarbeitung des Interpreter Referats

Abschnitt 9: Schnittstellen: Interfaces

Embedded-Linux-Seminare. Linux als Betriebssystem

Neue Features in C# 2.0

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung

Kapitel 2: Betriebssysteme

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Programmentwicklung ohne BlueJ

Die Linux Kernel Virtual Machine - Wo steht der Linux Hypervisor? 2. März 2008

Klausurvorbereitung VS1 (Prof. Brecht) (B0rg Edition)

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Rechnernutzung in der Physik. Betriebssysteme

Betriebssysteme (BTS)

C. Betriebssystem-Strukturen C.1 Monolithische Betriebssysteme

Trap oder Interrupt? Synchrone Programmunterbrechung. Trap oder Interrupt? (Forts.) Asynchrone Programmunterbrechung

Einführung in die C-Programmierung

Aufbau eines historischen UNIX-Betriebssystems

Struktur am Beispiel einer Liste

Algorithmen und Datenstrukturen

Transkript:

Überblick 10 Prozesseinlastung Autonomer Kontrollfluss eines s Kontrollfaden (engl. thread of control, TOC) Prozesseinlastung Koroutine faden Prozessdeskriptor Zusammenfassung konkretisieren Prozesse (implementieren Prozessinstanzen), sie repräsentieren die Aktivitätsträger von en 1. ihre Ausführung beginnt immer an der letzten Unterbrechungsstelle d.h., an der zuletzt die Kontrolle über den Prozessor abgegeben wurde die Kontrollabgabe geschieht dabei grundsätzlich kooperativ (freiwillig) 2. zw. aufeinanderfolgenden Ausführungen ist ihr Zustand invariant lokale Varbiablen (ggf. auch aktuelle Parameter) behalten ihre Werte bei Abgabe der Prozessorkontrolle terminiert die Koroutine nicht repräsentieren zustandsbehaftete Prozeduren, deren Aktivierungskontext während Phasen der Inaktivität erhalten bleibt Koroutine deaktivieren Kontext einfrieren (sichern) Koroutine aktivieren Kontext auftauen (wieder herstellen) c wosch SS 2006 SOS1 C 10-1 c wosch SS 2006 SOS1 C 10-3 Routinenartige Komponente eines s Gleichberechtigtes Unterprogramm iersprachliches Mittel zur Prozessorweitergabe Multiplexen des Prozessors zwischen Prozessinstanzen Ko{existierende, operierende-routine An autonomous program which communicates with adjacent modules as if they were input or output subroutines. [...] Coroutines are subroutines all at the same level, each acting as if it were the master program. [48] sind Prozeduren ähnlich, es fehlt jedoch die Aufrufhierarchie Beim Verlassen einer Koroutine geht anders als beim Verlassen einer Prozedur die Kontrolle nicht automatisch an die aufrufende Routine zurück. Stattdessen wird mit einer -Anweisung beim Verlassen einer Koroutine explizit bestimmt, welche andere Koroutine als nächste ausgeführt wird. [55, S. 49] wurden erstmalig um 1963 in der von Conway entwickelten Architektur eines Fließbandübersetzers (engl. pipeline compiler) eingesetzt. Darin wurden Parser konzeptionell als Datenflussfließbänder zwischen aufgefasst. Die repräsentierten first-class Prozessoren wie z.b. Lexer, Parser und Codegenerator. Routine kein Kontrollflusswechsel bei Aktivierung/Deaktivierung asymmetrische Aktivierung, ungleichberechtigte Rollen Koroutine Kontrollflusswechsel bei Aktivierung/Deaktivierung symmetrische Aktivierung, gleichberechtigte Rollen c wosch SS 2006 SOS1 C 10-2 c wosch SS 2006 SOS1 C 10-4

Routine vs. Koroutine Aufrufhierarchie vs. Nebenläufigkeit Buchführung über Fortsetzungspunkte Fortsetzung (engl. continuation) einer ausführung call call return Fortsetzungspunkt ist die Stelle in einem, an der die Wiederaufnahme (engl. resumption) der ausführung möglich ist eine Adresse im Textsegment, an der ein Kontrollfluss (freiwillig, erzwungenermaßen) unterbrochen wurde die Stelle, an der der CPU-Stoß der einen Koroutine endet und der CPU-Stoß einer anderen Koroutine beginnt return Routinen Aufrufhierarchie bestenfalls Aktivierungshierarchie Nebenläufigkeit inhärent im Konzept zu implementieren bedeutet, fortsetzungen zu verbuchen und Aktivierungskontexte zu wechseln: Fortsetzungsadressen sind dynamisch festzulegen und zu speichern z.b. wie im Falle der Rücksprungadresse einer Prozedur Laufzeitzustände sind zu sichern und wieder herzustellen z.b. die Inhalte der von einer Koroutine benutzten Arbeitsregister c wosch SS 2006 SOS1 C 10-5 c wosch SS 2006 SOS1 C 10-7 Routine vs. Koroutine (Forts.) Spezialfall eines generischen Konzeptes Routine spezifischer als Koroutine ein einziger Einstiegspunkt immer am Anfang ein einziger Ausstiegspunkt kehrt nur einmal zurück Lebensdauer nach LIFO last in, first out Koroutine generischer als Routine ggf. mehrere Einstiegspunkte dem letzten Ausstieg folgend ggf. mehrere Ausstiegspunkte kehrt ggf. mehrmals zurück Lebensdauer nach LIAO last in, any out Routinen können durch implementiert werden [60]: call der aufgerufenen Routine an ihrer Einsprungadresse Rücksprungkontext einfrieren, Aktivierungskontext erzeugen return der aufrufenden Routine an ihrer Rücksprungadresse Aktivierungskontext zerstören, Rücksprungkontext auftauen Kontrollflussverfolgung fortsetzung und Aktivierungskontext void *foo, *bar; void emuser (void *foo, void **bar) { *bar = foo; int main () { emuser(foo, &bar); Beispiel Stapelmaschine (x86, m68k): emuser: movl 8(%esp),%edx movl 4(%esp),%eax movl %eax,(%edx) ret main:... pushl $bar pushl foo call emuser... Rücksprungadresse und aktuelle Parameter liegen auf dem Laufzeitstapel (engl. runtime stack) des Prozessors Aktivierungskontexte im Stapel sichern bzw. daraus wieder herstellen c wosch SS 2006 SOS1 C 10-6 c wosch SS 2006 SOS1 C 10-8

Kontrollflussverfolgung (Forts.) fortsetzung verbuchen und Aktivierungskontext wechseln void *foo, *bar; extern void (void *, void **); int main () { (foo, &bar); : movl 8(%esp),%edx movl %esp,(%edx) movl 4(%esp),%esp ret Trick ist es, jeder Koroutine einen eigenen Laufzeitstapel bereitzustellen und als Prozedur zu implementieren: wechseln des Aktivierungskontextes (von ) bedeutet dann: aufrufen, um die Rücksprungadresse gesichert zu bekommen in : den aktuellen Wert des Stapelzeigers der CPU sichern und dem Stapelzeiger einen neuen Wert geben Stapel umschalten verlassen, um an einer anderen Rücksprungadresse fortzufahren ggf. muss den kompletten Prozessorstatus austauschen mechanisieren fäden Technisches Detail zum Multiplexen der CPU zwischen Prozessen Mehrprogrammbetrieb basiert auf des s für jedes auszuführende wird eine Koroutine bereitgestellt ggf. für jeden faden leichtgewichtiger Prozess ist eine Koroutine aktiv, so ist das ihr zugeordnete aktiv der durch die Koroutine implementierte faden ist aktiv um ein anderes auszuführen, ist die Koroutine zu wechseln sind (in dem Modell) die Aktivitätsträger des s ihr Aktivierungskontext ist globale Variable des s für jede Prozessinstanz gibt es eine solche variable ein ist Inbegriff für das nicht-sequentielle c wosch SS 2006 SOS1 C 10-9 c wosch SS 2006 SOS1 C 10-11 Instanzenbildung Erzeugung des initialen Aktivierungskontextes sindfirst-class Objekte, die im Regelfalldynamischzur Laufzeit angelegt werden Objektzustand ist der Aktivierungskontext einer Koroutine ihre Fortsetzungsadresse und ggf. ihr kompletter Prozessorzustand Startadresse ist die Adresse einer Routine (second-class Objekt) extern void replay (); char* enable (char *stkp, void (*funp)()) { void (**sp)() = (void (**)())stkp; *--sp = funp; *--sp = replay; return (char *)sp; replay: movl 0(%esp),%eax call *%eax jmp replay enable macht eine Routine zur Koroutine: legt (1) die Startadresse der Koroutine und (2) die Adresse der aufrufenden Routine auf den Stapel der Koroutine ab replay bildet die Aufrufumgebung einer Koroutine: liest (1) die Startadresse der Koroutine vom Stapel und ruft (2) die Koroutine initial als Routine auf Termination der Koroutine von selbst ist nicht möglich, da Wissen über die alternativ zu aktivierende Koroutine fehlt Fäden, Fadenverwaltung c wosch SS 2006 SOS1 C 10-10 Verarbeitung sequentieller e Koroutine als abstrakter Prozessor Bestandteil des s 1 2 3 c wosch SS 2006 SOS1 C 10-12

Verarbeitung nicht-sequentieller e Multiplexen eines abstrakten Prozessors Fäden der Benutzerebene Ergänzung oder Alternative zu Kernfäden 1 2 3?? user level kernel level Anwendungsprozesse sind durch Benutzerfäden (engl. user-level threads) implementiert virtuelle Prozessoren bewirken die Ausführung der (mehrfädigen) Anwendungsprogramme 1 Prozessor trägt ggf. N Benutzerfäden der Kern stellt ggf. Planeransteuerungen (engl. scheduler activations[61]) bereit zur Propagation von Einplanungsereignissen Fäden sind Prozessinstanzen der Ebene 3 implementiert durch Maschinenprogramme Einplanung und Einlastung der (federgewichtigen) Anwendungsprozesse sind keine Funktionen des (kern)s Erzeugung, Koordination, Zerstörung von Fäden als Unterprogramme c wosch SS 2006 SOS1 C 10-13 c wosch SS 2006 SOS1 C 10-15 Fäden der Kernebene Klassische Variante von Mehrprozessbetrieb user level kernel level Anwendungsprozesse sind durch Kernfäden (engl. kernel-level threads) implementiert egal, ob die Anwendungsprogramme ein- oder mehrfädig ausgelegt sind jeder Anwendungsfaden ist Kernfaden nicht jeder Kernfaden ist Anwendungsfaden Fäden sind keine Prozessinstanzen der Ebene 3 Maschinenprogramme verwenden Fäden, implementieren sie jedoch nicht selbst Ebene 2 -e implementieren die Fäden Einplanung und Einlastung der (leichtgewichtigen) Anwendungsprozesse sind Funktionen des (kern)s Erzeugung, Koordination, Zerstörung von Fäden sind Systemaufrufe Prozesskontrollblock (engl. process control block, PCB) Datenstruktur zur Verwaltung von Prozessinstanzen Kopf eines Datenstrukturgeflechts zur Beschreibung einer Prozessinstanz und Steuerung eines Prozesses oft auch als Prozessdeskriptor (PD) bezeichnet UNIX Jargon: proc structure (von struct proc ) ein abstrakter Datentyp (ADT) des (kern)s Softwarebetriebsmittel zur Verwaltung von ausführungen jeder Faden wird durch eine Instanz vom Typ PD repräsentiert Kernfaden Instanzenvariable des s Benutzerfaden Instanzenvariable des Anwendungsprogramms die Instanzenanzahl ist statisch (Systemkonstante) oder dynamisch Objekt, das mit einer Prozessidentifikation (PID) assoziiert und für die gesamte Lebensdauer des betreffenden Prozesses gültig ist auch dann, wenn der Adressraum des Prozesses ausgelagert wurde c wosch SS 2006 SOS1 C 10-14 c wosch SS 2006 SOS1 C 10-16

Aspekte der Prozessauslegung Verwaltungseinheit einer Prozessinstanz Generische Datenstruktur Logische Sicht eines Geflechts abstrakter Datentypen Dreh- und Angelpunkt, der alle prozessbezogenen Betriebsmittel bündelt Speicher- und, ggf., Adressraumbelegung Text-, Daten-, Stapelsegmente (code, data, stack) Dateideskriptoren und -köpfe (inode) {Zwischenspeicher,Pufferdeskriptoren, Datenblöcke Datei, die das vom Prozess ausgeführte repräsentiert PID Prozessdeskriptoren PD Speicherköpfe Seiten/ Segmenttabelle Text Daten Datenstruktur, die Prozess- und Prozessorzustände beschreibt Laufzeitkontext des zugeordneten fadens/aktivitätsträgers gegenwärtiger Abfertigungszustand (Scheduling-Informationen) anstehende Ereignisse bzw. erwartete Ereignisse Benutzerzuordnung und -rechte Dateideskriptoren Dateiköpfe Pufferköpfe Medium Puffer Halde Stapel c wosch SS 2006 SOS1 C 10-17 c wosch SS 2006 SOS1 C 10-19 Aspekte der Prozessauslegung (Forts.) Prozessinstanz vs. Betriebsart 10 Prozesseinlastung 10.4 Zusammenfassung Einlastung Umsetzung von Einplanungsentscheidungen wechsel = Fadenwechsel = Prozesswechsel 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 4. in Einbenutzersystemen ist es wenig sinnvoll, prozessbezogene Benutzerrechte verwalten zu wollen 5. bei statischer Prozesseinplanung ist die Buchführung von Abfertigungszuständen verzichtbar 6. Ereignisverwaltung fällt nur an bei ereignisgesteuerten und/oder verdrängend arbeitenden Systemen Festlegung auf eine Ausprägung grenzt Einsatzgebiete unnötig aus c wosch SS 2006 SOS1 C 10-18 konkretisieren Prozesse, implementieren Prozessinstanzen die Gewichtsklasse von Prozessen spielt eine untergeordnete Rolle feder-, leicht-, schwergewichtige Prozesse basieren auf ihr Aktivierungskontext überdauert Phasen der Inaktivität gesichert ( eingefroren ) im jeder Koroutine eigenen Stapelspeicher fäden (engl. threads) sind durch repräsentiert unterschieden werden zwei Fadenarten, je nach Ebene der Abstraktion: Kernfaden implementiert durch e der Befehlssatzebene Benutzerfaden implementiert durch e der Maschinenebene Einlastung eines Fadens führt einen wechsel nach sich 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 ausführung c wosch SS 2006 SOS1 C 10-20