4 Gerätetreiber Gerätetreiber (device driver)

Slides:



Advertisements
Ähnliche Präsentationen
Erstellen von Raumgrundrissen mit Vorlagen
Advertisements

Benutzerorientierte Designprinzipien für die Microsoft-Guidelines
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Objektorientierte Programmierung
10.2 Wechselseitiger Ausschluss in Hardware
Wiederholung Betriebssystem bietet eine Abstraktion der Hardware an:
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
On the Criteria to Be Used in Decomposing Systems into Modules
Attribute Protocol.
Zusammenfassung der Vorwoche
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
3 Prozessverwaltung  sieht einen Prozess als Objekt der Verwaltung,
E / IDE Enhanced / Integrated Device Elektronics
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
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 Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Zusammenfassung Vorwoche
Vorl. 6: Single- und Multitasking Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Vorlesung 2 Rechnerarchitektur Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Vorlesung 3: Verschiedenes Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Rechnerarchitektur Vorlesung 2 Peter B. Ladkin
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Einführung in die Programmierung Datensammlung
Heute: Scherenzange zeichnen
1 Vorlesung 3 Verschiedenes Peter B. Ladkin
Ralf KüstersDagstuhl 2008/11/30 2 Ralf KüstersDagstuhl 2008/11/30 3.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Stunde 6, 7 Klasse 4 Wo lernen wir.
© Gabriele Sowada © Gabriele Sowada 2 Manuell Beispiel 1 demonstriert die Vorgehensweise bei der manuellen Programm- Eingabe am.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Parallel Matrix Multiplication
Vorlesung Datenbanksysteme vom Physische Datenorganisation
Thread Synchronisation in JAVA
Objectives Verstehen was unterDelegate verstanden wird
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
Scheduling- Algorithmen. Bedeutung nicht-verdängende Strategie Prozesse werden nacheinander ausgeführt Kein Prozess wird bevorzugt Hängt ein Prozess,
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
5 Speicherverwaltung Pufferspeicher (cache)
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
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.
NE2000: Hardware und Design eines Treibers 1 AKBPII: Abschlusspräsentation NE2000: Hardware und Design eines prototypischen Treibers bearbeitet.
1 Vorlesung 6 Peter B. Ladkin Single- und Multitasking Peter B. Ladkin
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Graph_Algorithmen Gewichtete Graphen - Minimum Spanning Tree und shortest path aus Implementierungssicht Prof. Dr. Reiner Güttler.
 Präsentation transkript:

4 Gerätetreiber Gerätetreiber (device driver)  ermöglicht höheren BS-Schichten die komfortable Nutzung von E/A-Geräten einer bestimmten Klasse,  bietet zu diesem Zweck eine geeignete Schnittstelle zur Erteilung von E/A-Aufträgen,  besorgt die sekundäre Unterbrechungsbehandlung der E/A-Geräte.

Terminologie zur Hardware: Gerätesteuerung (device controller): Teil der Peripherie, zuständig für Ansteuerung einer Gruppe gleichartiger Ein/Ausgabegeräte Ein/Ausgabeoperation: Ein/Ausgabe eines Zeichens, einer Zeile, eines Blocks usw. (je nach Geräteart) Geräteregister (device registers): Steuerregister zum Konfigurieren, Starten etc., Statusregister zum Abfragen von Fehlern etc.

4.1 Aufgaben eines Treibers  Auftragspufferung  Auftragssteuerung (device scheduling)  Fehlerbehandlung  Benachrichtigung des Auftragggebers

 Auftragspufferung: Es macht Sinn, für die eintreffenden E/A-Aufträge beim Treiber eine Warteschlange zu führen: er kann damit bei Beendigung einer Ein/Ausgabeoperation als Teil der Unterbrechungsbehandlung sehr schnell die nächsten Operation starten – was für eine gute Ausnutzung des Gerätes sorgt. Bemerkung: Leistungsfähige Gerätesteuerungen übernehmen diese Auftragspufferung ganz oder teilweise selbst.

 Auftragssteuerung (device scheduling) Die Warteschlange muss nicht unbedingt FCFS abgearbeitet werden! Es kann geschickter sein, Aufträge in einer anderen Reihenfolge als der ihres Eintreffens an das Gerät weiterzugeben. (Beispiel: wenn für eine Spur – bzw. einen Zylinder – eines rotierenden Speichers mehrere Aufträge für das Lesen/Schreiben von Blöcken/Sektoren vorliegen, sollten sie in der Reihenfolge ihres Eintreffens unter dem Lese/Schreibkopf bearbeitet werden.) Bemerkung: Auch das wird häufig von Gerätesteuerungen übernommen.

 Fehlerbehandlung Nach Erledigung eines E/A-Operation wird typischer- weise das Statusregister befragt, ob die Operation erfolgreich ausgeführt wurde und – wenn nicht – welche Art Fehler vorliegt. Es kann dann eine geeignete Fehlerbeschreibung an den Auftraggeber zurückgeliefert werden. Bei manchen Geräten macht es Sinn, den E/A-Versuch zu wiederholen (z.B. bei Lesefehler auf Diskette) - eine typische Aufgabe des Treibers.

 Benachrichtigung des Auftraggebers In den meisten Fällen ist der Auftraggeber an einer Bestätigung der erfolgreichen E/A interessiert bzw. möchte im Fehlerfall entsprechend informiert werden. Er wartet auf die Erledigung des Auftrags.  Aufwecken des Auftraggebers und Übermittlung von Ergebnis-Information erforderlich. Bemerkung: Das schließt nicht aus, dass die Aufträge letztlich einer Quelle entstammen (z.B. einem Benutzerprozess), die eine asynchrone E/A-Schnittstelle benutzt (z.B. zu Dateisystem mit Ausgabe-Pufferung).

4.2 Einfaches Treiber-Modell Klient (Aufrufer bzw. Auftraggeber) Treiber Auftrags- annahme Unterbrechungs- behandlung Aufruf bzw. Aufwecken bzw. Benachrichtigen Daten Prozessverwaltung primäre Unterbrechungsbehandlung Unterbrechung Geräteregister lesen/schreiben Gerät

Einfachstmöglicher Treiber: nur für ein Gerät zuständig keine Auftragspufferung keine Auftragssteuerung keine Fehlerbehandlung „Pseudocode“ für Gerät und Treiber: interface DEVICE { void start(Param p); Status status(); }

class DeviceDriver { DEVICE device; // controller hardware: // device registers Status status; // IO result Process client; // current IO client Sema mutex = new Sema(1); // one client at a time public DeviceDriver(...) { ..... // initialize controller }

public Result IO(Param p){ // client interface mutex.P(); client = Process.current; DISABLE_INTERRUPTS(); device.start(p); // incl. assembly code client.block(); ENABLE_INTERRUPTS(); Status s = status; mutex.V(); return s; }

Beachte: Unterbrechungsunterdrückung garantiert, dass 1. block unteilbar ausgeführt wird (3.2.2), 2. zwischen start und block kein Prozess- wechsel erfolgt – denn dann könnte das Aufwecken (s.u.) vor dem Blockieren eintreten und damit wirkungslos bleiben! Beachte ferner: Die Parameterbehandlung und die Fehlerbehandlung ist i.a. erheblich komplizierter als es hier aussieht. (Übermittlung der Adressen von Pufferbereichen für die Ein/Ausgabe, Kopieren zwischen Adressräumen etc.)

public void IOcomplete(){ // interrupt handler // entered with interrupts disabled! status = device.status(); client.wake(); } } // end of class DeviceDriver Beachte: Diese Operation IOcomplete ist lediglich der Kernbestandteil der sekundären Unter- brechungsbehandlung. Wir abstrahieren hier von der Art der Aktivierung (3.5)

4.3 Auftragspufferung  Berücksichtigung der Geräte/Prozessorpriorität: GET_PRIORITY(); liest Prozessorpriorität SET_PRIORITY(priority); setzt Prozessorpriorität  Auftragsliste ist nicht unbedingt Warteschlange :

Auftragsliste: (Dringlichkeit gemäß implementierter Auftragssteuerung) class Commands { ..... public add(Param par, Process proc) {...} // (par,proc) is added as new entry public Process remove() {...} // removes most urgent entry // and delivers its proc component (!) public Process second() {...} // delivers par component (!) // of second most urgent entry public void putfirst(Status s) {...} // places s in par component (!) // of most urgent entry } // end of class Commands

class Driver { ..... DEVICE device; int priority; // device priority Commands commmands = new Commands();

public void IO(Param par) { Process me = Process.current; int processorPrio = GET_PRIORITY(); SET_PRIORITY(priority); commands.add(par,me); if(commands.length() == 1) device.start(par); DISABLE_INTERRUPTS(); me.block(); ENABLE_INTERRUPTS(); SET_PRIORITY(processorPrio); }

public void IOcomplete(){ // interrupt handler // entered with // processor priority = priority ! Status s = device.status(); // ! start new operation as soon as possible: if(commands.length() > 1) device.start(commands.second()); commands.putfirst(s); Process client = commands.remove(); DISABLE_INTERRUPTS(); (3.5.3) client.wake(); ENABLE_INTERRUPTS(); } } // end of class Driver

4.4 Fehlerbehandlung durch wiederholte Lese/Schreibversuche (wo sinnvoll) Erweiterter Treiber: class Driver { ..... int maxretries = 3; int retries = 0; public void IO(Param par) {.....}

public void IOcomplete(){ // interrupt handler // entered with // processor priority = priority ! Status s = device.status(); if(error(s) && retries < maxretries){ device.start(commands.first()); retries++; } else{retries = 0; if(commands.length() > 1) device.start(commands.second()); commands.putfirst(s); ......} (siehe 4.3) } } // end of class Driver Achtung: Rotationslatenz -> Operation nicht sofort wiederholen, sondern einreihen!

4.5 Strategien zur Auftragssteuerung sind interessant bei rotierenden Speichern: Latenzzeit (latency time) = Zeit, die zwischen Start der E/A-Operation und dem tatsächlichen Beginn der Datenübertragung verstreicht Übertragungszeit (transfer time) = Zeit vom Beginn bis zum Ende der Datenübertragung

Ausführungszeit einer E/A-Operation Rotation: Rotationslatenz (rotational latency) (max. 10-200 ms) + Übertragungszeit Armbewegung: Positionierungslatenz (seek time) (max. 20-200 ms) + Rotationslatenz

4.5.1 Berücksichtigung der Rotation SLF (shortest latency first) bedient die anstehenden Aufträge in derjenigen Reihenfolge, in der die entsprechenden Sektoren/Blöcke am Lese/Schreibkopf vorbeikommen – bei gleichem Sektor entscheidet die Wartezeit. Beachte: Diese Strategie ist zwar nicht FCFS, aber trotzdem „hinreichend“ fair: ein Auftrag für den Sektor s wird spätestens nach so vielen Umdrehungen bedient wie ältere Aufträge für s vorliegen.

Auftragsliste ist organisiert als Folge von Sektorschlangen, die reihum bedient werden: 1 2 3 4 5 6 7 Ankunftszeiten Lese/Schreibkopf 7 0 6 1 5 2 4 3 2 3 4 1 5 6 7

4.5.2 Berücksichtigung der Armbewegung (disk head scheduling) Verschiedene Strategien möglich: SSTF (shortest seek time first): bedient wird derjenige Auftrag, dessen Zylinder/Spur der augenblicklichen Armposition am nächsten liegt  effizient, aber nicht fair!

SCAN, auch Fahrstuhl-Algorithmus (elevator algorithm): der Arm wird abwechselnd hin- und herbewegt, und dabei werden die auf dem Weg liegenden Aufträge erledigt.  effizient und fair – aber nicht gleichmäßig fair: relativ große Streuung der Wartezeiten (vgl. „Schneeschieber“) CSCAN (circular SCAN) oder C-LOOK: „der Fahrstuhl läuft grundsätzlich nur aufwärts“, entspricht einem „aufgeschnittenen SLF“ (4.5.1)  gute Eigenschaften!

Pragmatische Aspekte:  Kombination von SLF und CSCAN kaum sinnvoll: gut ausgelegtes System hat kurze Auftragslisten  mehr als ein Auftrag für einen Zylinder sehr unwahrscheinlich  CSCAN genügt.  MINIX praktiziert sogar nur FIFO; allerdings kann „Auftragspaket“ mehrere Sektoren betreffen – die dann in der passenden Reihenfolge bedient werden.  Leistungsfähige Gerätesteuerungen machen alles selbst!