4 Ablaufsteuerung. Ablaufsteuerung (scheduling) = Zuteilung von Betriebsmitteln (resources) – wiederverwendbaren oder verbrauchbaren – an Prozesse, z.B.

Slides:



Advertisements
Ähnliche Präsentationen
Klassen - Verkettete Liste -
Advertisements

Strategie (Strategy / Policy) Ein objektbasiertes Verhaltensmuster Stephan Munkelt, Stefan Salzmann - 03IN.
Kapitel 11 Deadlocks RW-Systemarchitekur Kap. 11.
10.2 Wechselseitiger Ausschluss in Hardware
C Tutorium – Semaphoren –
Kritische Betrachtung
Nsp Semaphore sind einfache Synchronisationsobjekte, ähnlich wie Ereignisse, aber unabhängig von Monitoren: (das) Semaphor: altes Flügelsignal.
3 Prozessverwaltung  sieht einen Prozess als Objekt der Verwaltung,
4 Gerätetreiber Gerätetreiber (device driver)
Semaphore void Passieren (semaphore &s) { if (s > 0) { s--;
Kapitel 6.1 Nebenläufigkeit und wechselseitiger Ausschluss
Systeme 1 Kapitel 5.1 Unix Scheduling WS 2009/101.
Threads Richard Göbel.
FH-Hof Deadlocks Richard Göbel. FH-Hof Deadlock - Definition Menge von Prozessen ist an einem Deadlock beteiligt: wenn jeder Prozess in dieser Menge auf.
Java: Dynamische Datentypen
Listen Richard Göbel.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Einführung in die Programmierung Datensammlung
Informatikunterricht mit Java
Java Threads Sebastian Werler
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Entwicklung verteilter eingebetteter Systeme - Einführung
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Parallel Programming Condition Queues
Thread Synchronisation in JAVA
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
Scheduling- Algorithmen. Bedeutung nicht-verdängende Strategie Prozesse werden nacheinander ausgeführt Kein Prozess wird bevorzugt Hängt ein Prozess,
Parallelisierung für Multiprozessor-Maschinen Teil 2.
Parallelisierung für Multiprozessor-Maschinen
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Threads in Java Wiederholung der BS Grundlagen Alois Schütte AOSD1.
Muster nebenläufiger Programmierung concurrent Packet von Java Alois Schütte AOSD1.
Prof. Dr. Alois Schütte Advanced System Programming 1 Das concurrent Paket 1 Überblick 2 Lock 3 Condition 4 Queue 5 Executors.
2 Nebenläufige Prozesse. 2.1 Programmstruktur und Prozesse private Prozess = Anweisungen + Daten gemeinsame Aber:Wie verhält sich das Konstrukt „Prozess“
2.3 Implementierung von Prozessen
2 Datenabstraktion Geheimnisprinzip:
Dynamische Prioritäten Statische Prozess-Prioritäten sind sinnvoll, falls Prozesse in wenige Klassen einteilbar (3.3.3) Dynamische Prioritäten.
Nsp Bedingungssynchronisation Motivation: Wenn für eine Operation auf einem Objekt die Voraussetzung nicht erfüllt ist, ist es häufig angebracht,
3 Interaktion über Objekte. 3.1 Sperrsynchronisation dient der Vermeidung unkontrollierter nebenläufiger Zugriffe auf gemeinsame Datenobjekte und der.
1 3 Interaktion über Objekte Sperrsynchronisation dient der Vermeidung unkontrollierter nebenläufiger Zugriffe auf gemeinsame Datenobjekte und.
5 Implementierung von Prozessen und Synchronisationskonstrukten
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
3.2 Bedingungssynchronisation Motivation: Wenn für eine Operation auf einem Objekt die Voraussetzung nicht erfüllt ist, ist es häufig angebracht, auf deren.
Parallel Programming Semaphores / Reader - Writer - Lock
93 Das Monitorkonzept (nach Hoare/Brinch-Hansen 1974) Nur ein Prozess bzw. Thread kann zu einem bestimmten Zeitpunkt im Monitor aktiv sein => gegenseitiger.
C Tutorium – Shared Memory – Knut Stolze. 2 Shared Memory Ein Speicherbereich, auf den mehrere Prozesse Zugriff haben – Also kein privater Speicher –
1 Vorlesung 6 Peter B. Ladkin Single- und Multitasking Peter B. Ladkin
Abstrakte Klassen und das Interface-Konzept
1 VE 11 Kruskal-Realisierung Listen. 2 Auf dem Weg zur Kruskal-Realisierung Vorüberlegungen: Der Graph könnte dargestellt werden als Menge von Knoten,
Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Thread-Konzept in objektorientierten.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Exceptions in der Programmiersprache Java.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
1.Event Queue.
Der kritische Abschnitt
Felder in Java.
Allgemeine Befehle für die allgemeine Liste
Aufgaben Semaphore Übersicht (Dijkstra)
Implementieren von Klassen
 Präsentation transkript:

4 Ablaufsteuerung

Ablaufsteuerung (scheduling) = Zuteilung von Betriebsmitteln (resources) – wiederverwendbaren oder verbrauchbaren – an Prozesse, z.B. Prozessor (wiederverwendbar), Speicher (wiederverwendbar), Nachrichten (verbrauchbar), Ereignisse (verbrauchbar)

4.1 Prozeßprioritäten Def.:Priorität eines Prozesses = einem Prozeß (task, thread,...) zugeordnetes Attribut, üblicherweise eine natürliche Zahl, das zur Entscheidung über die Zuteilung von Betriebsmitteln herangezogen wird. Priorität wird einem Prozeß bei der Erzeugung (explizit oder implizit) zugeteilt und kann eventuell programmgesteuert verändert werden.

Java: Thread.MIN_PRIORITY = 1 Thread.NORM_PRIORITY = 5 Thread.MAX_PRIORITY = 10 Der Urprozeß (main thread) hat die Priorität 5. Ein Prozeß vererbt seine Priorität an seine Kinder. Abfragen der Priorität mit int getPriority() Ändern der Priorität mit void setPriority(int p)

Die JVM kann bei der Zuteilung von Prozessorkapazität an die Threads die Prioritäten berücksichtigen, muß aber nicht. Typische, sinnvolle Prioritätenvergabe: 2-3Rechnen 4-6Ein/Ausgabe 7-9schnelle Ein/Ausgabe (Interaktion, harte Realzeit-Anforderungen) (Nicht vergessen: im Mehrprozeßbetrieb erhält die JVM bereits vom Betriebssystem nur ein Teil der Prozessorkapazität!)

Achtung 1:Prioritätenvergabe ist kein Ersatz für Synchronisation ! Achtung 2:Gefahr der Prioritätsumkehr (priority inversion), z.B. bei Einprozessorsystem: 3 Prozesse A, B, C mit abfallenden Prioritäten a,b,c C betritt kritischen Abschnitt k, weckt B und wird von B verdrängt, d.h. belegt weiterhin k; B weckt A und wird von A verdrängt, A blockiert beim Eintrittsversuch in k; solange B nicht blockiert, hat A keine Chance! Lösungstechnik: spezielle Sperroperationen, die für temporäre Prioritätserhöhung sorgen.

4.2 Auswahlstrategien Problem:Wenn mehrere Prozesse auf Betriebsmittel- Zuteilung bzw. auf ein bestimmtes Ereignis warten (mit when, wait, P, join,...) und beim Eintreten des Ereignisses nicht alle aufgeweckt werden können/sollen, welche ?  Auswahlstrategie (scheduling policy)

Def.:Eine Auswahlstrategie heißt fair, wenn jedem wartenden Prozeß garantiert ist, daß ihm nicht permanent und systematisch andere Prozesse vorgezogen werden. Genauer: streng fair:wenn ein Prozeß blockiert, kann eine obere Schranke für die Anzahl der Prozesse angegeben werden, die ihm vorgezogen werden; schwach fair:sonst

Bei unfairer Auswahlstrategie droht den Prozessen unbestimmte Verzögerung (indefinite delay, starvation) Achtung:In Java gibt es keinerlei Fairness-Garantien !

Typische Auswahlstrategien und ihre Fairness:  zufälligschwach fair  der Reihe nach streng fair (first-come, first-served, FCFS, first-in, first-out, FIFO)  prioritätsgesteuertunfair  anwendungsspezifisch(je nachdem)

4.2.1 Anpassung der Auswahlstrategie Ausgangslage:Verfügbare Sprachkonstrukte verfolgen leider eine unpassende Strategie Beispiele:  strenge Fairness benötigt, aber in Java nicht garantiert  Semaphore mit FCFS verfügbar, aber Auswahl sollte eigentlich prioritätsgesteuert erfolgen  anwendungsspezifische Strategie benötigt

Konsequenz: im Eigenbau 1. entweder wiederverwendbare Varianten der Synchronisationskonstrukte bereitstellen  oder ad-hoc-Strategie programmieren 

Prioritätsgesteuerte Semaphore interface Semaphore { // scheduling unspecified void P(); void V(); } class Sema implements Semaphore { // FCFS... } class PrioSema implements Semaphore { public PrioSema(int init) { count = init; } private int count; private final Sema mutex = new Sema(1); private final PrioSet prios = new PrioSet();

class PrioSet { // set of pairs (int, Sema)..... public void add(int prio, Sema sema) {...} // adds pair (prio,sema) public Sema rem() {...} // delivers semaphore with highest prio // and removes entry }

public void P() { // this is the modified P mutex.P(); count--; if(count>=0) mutex.V(); else Sema ready = new Sema(0); prios.add(Thread.currentThread(). getPriority(), ready); mutex.V(); ready.P(); }

public void V() { // this is the modified V mutex.P(); count++; if(count<=0) { Sema ready = prios.rem(); ready.V(); } mutex.V(); } Beachte: 1.Die Semaphore ready sind private Semaphore, d.h. bei ihnen blockiert jeweils höchstens ein Thread. 2. Die kritischen Abschnitte ( mutex ) sind kurz genug, daß sie keinen Engpaß darstellen.  Daher ist es irrelevant, welche Auswahlstrategie von Sema praktiziert wird.

Wahl einer Sperroperation:  langfristiges Sperren realer Betriebsmittel: Auswahlstrategie wählen, ggfls. selbst implementieren  kurzfristiges Sperren kritischer Abschnitte: Auswahlstrategie irrelevant – sofern kein Engpaß bei der Benutzung der Ressource bzw. des kritischen Abschnitts vorliegt ! sonst: Entwurf revidieren – lange Prozeßwarteschlangen sind in jedem Fall unsinnig, wie auch immer die Auswahl praktiziert wird.

Anforderungsbezogene Auswahl bei jeder Art von Anforderung mehrerer Ressourcen z.B. – verallgemeinerte P/V-Operationen (3.3.1)3.3.1 – request(n), release(n) – und ähnliche Häufig ist Effizienz wichtiger als Fairness, z.B.  gute Ressourcen-Ausnutzung  kurze Reaktionszeiten

Beispiele für effizienzorientierte Auswahlstrategien bei request(n) / release(n) : SRF (smallest request first): die kleinsten Anforderungen sollen vorrangig bedient werden LRF (largest request first): die größten Anforderungen sollen vorrangig bedient werden (Jedenfalls nicht die, welche am längsten warten. – Weitere Alternativen sind möglich.)

LRF mit Verwendung von PrioSet ( ) mit Operationen public int top(int limit) liefert den höchsten prio-Wert im PrioSet, der limit nicht übersteigt (0, falls kein solcher vorhanden) public Sema rem() (modifiziert) liefert das zugehörige Semaphor und löscht den Eintrag

class Resources {// LRF – largest request first public Resources(int init) { avail = init; } private int avail; private final PrioSet claims = new PrioSet(); public void request(int claim) { Sema ready; synchronized(this) { if(claim<=avail) { avail -= claim; return; } else{ready = new Sema(0); claims.add(claim,ready); } } ready.P(); }

public synchronized void release(int free) { avail += free; do {int claim = claims.top(avail); if(claim == 0) return; else {avail -= claim; claims.rem().V(); } } while(true); } Beachte:– Das Blockieren in request muß außerhalb des kritischen Abschnitts erfolgen – In release werden i.a. gezielt mehrere Threads aufgeweckt – Durch Modifikation der Klasse PrioSet können verschiedene Strategien realisiert werden

4.2.2 Fairness durch Alterungsmechanismen Gegensätzliche Ziele bei Auswahlstrategien: Ziel: Effizienz Gleichbehandlung Fairness: unfair streng fair Beispiel: SRF FIFO Kriterium: Anforderungen Wartezeit Spektrum von Kriterien: Anforderungen Wartezeit anforderungsorientiert + Alterungsmechanismus (ageing)

Beispiel: Alterungsmechanismus für SRF: Auswahl nach Rangordnung 1,2,3,... (hoher Rang = kleine Rangzahl) Rang = Anforderung + Malus Malus = Zeitpunkt des request, gemessen in Anzahl der begonnenen request s Einem release wird genau dann stattgegeben, wenn die Anforderung erfüllt werden kann und den höchsten Rang hat. (Bei Gleichrangigkeit zweier erfüllbarer Anforderungen...)

Buchführung über Anforderungen und Ränge mittels class Ranking { // set of triples //(int rank, int claim, Event e)..... public void add(int rank, int claim, Event e){...} // adds triple (rank,claim,e) public Event rem() {...} // delivers Event with highest rank // and removes entry (if any, else null) public int firstRank() {...} // delivers highest rank (if any, else MAX) public int firstClaim() {...} // delivers corresponding claim (or MAX) }

p 1 1p 4 q 4 2q 0 r 4 3(7,4,R) 0 s 1 4(5,1,S) 0 t 1 5(6,1,T) 0 p1s 0 q3t 2 u 2 6(8,2,U) ! 2 q 1 3 s1r 0 Beispiel-Szenario: Thread request release counter added grantee available 0 5

monitor Resources { // SRF, with ageing // Monitor and Events! public Resources(int n) {available = n;} protected int available; protected int counter; protected final Ranking ranking = new Ranking(); public void release(int n) { available += n; tryWakeup(); } protected void tryWakeup() { if(ranking.firstClaim() <= available){ available -= ranking.firstClaim()); ranking.rem().signal(); } } // any version of signal does the job

public void request(int claim) { counter++; int rank = claim + counter; if(rank <= ranking.firstRank() && claim <= available) { available -= claim; return; } else {Event ready = new Event(); ranking.add(rank,claim,ready); ready.wait(); tryWakeup(); } } } // end monitor

Flexible Positionierung im Spektrum der Strategien: anstelle von rank = claim + counter rank = claim + k*counter verwenden ! k  [0, m]( m = maximal mögliche Anforderung) ermöglicht Tuning k = 0 :SRF k = m:FIFO – denn rank i < rank i+1 für zwei aufeinanderfolgende request s