Ein-/Ausgabe-Systeme Teil 2 Prof. Dr. Margarita Esponda Freie Universität Berlin WS 2011/2012
Ein-/Ausgabe-Systeme Ein-/Ausgabe-Hardware Schnittstelle für Ein-/Ausgabegeräte Kernel-Subsystem für Ein-/Ausgabeoperationen Verwandlung von Ein-/Ausgabe-Anforderungen in Ein-/Ausgabe-Hardware-Operationen Ströme Leistungssteigerung 2
Ein-/Ausgabe-Schnittstelle Hier diskutieren wir Strukturierungs-Techniken und Schnittstellen-Definitionen mit dem Ziel: Einheitliche Zugriffsmechanismen zu definieren Kategorisierung von Geräte-Unterschieden, um eine minimale Anzahl von Ein-/Ausgabe-Funktionen zu definieren, die für eine große Anzahl unterschiedlicher Geräte gleich sind. um mächtige Ein-/Ausgabe-Operationen zu haben, die für möglichst unterschiedliche Gerätetypen anwendbar sind. 3
Ein-/Ausgabe-Schnittstelle Ziel - Geräte-Unabhängigkeit - Ein-/Ausgabe-Operationen, ohne das Gerät zu spezifizieren - einheitliches Benennungssystem - Fehlerbehandlung - Ein-/Ausgabe soll dem Benutzer als synchron erscheinen. - Pufferung - Verwaltung von gemeinsamen und exklusiven Geräten, um Deadlocks zu vermeiden. 4
Ein-/Ausgabe-Schnittstelle Benutzerprogramm-Ebene Generische Ein-/Ausgabeoperationen des Betriebssystems Systemaufrufe kapseln Geräteverhalten in generische Klassen Gerätetreiber Gerätetreiber kapseln die Unterschiede zwischen den verschiedenen Geräte- Controllern Unterbrechungsroutinen Hardware Jede Schicht soll eine wohldefinierte Schnittstelle definieren mit einer wohldefinierten Funktionalität 5
Struktur des Ein-/Ausgabe-Subsystems im Kernel Quelle: Silverschatz, Galvin und Gagne 6
Ein-/Ausgabe-Schnittstelle Geräte unterscheiden sich in viele Richtungen Datentransfer-Modus Zeichenströme oder Blöcke Zugriffs-Modus Sequentieller oder direkter Zugriff Exklusiv- oder Gemeinsame-Nutzung Geschwindigkeit Ein-/Ausgabe-Richtung read write, read only, oder write only 7
Eigenschaften von Ein-/Ausgabe-Geräten Quelle: Silverschatz, Galvin und Gagne 8
Klassifizierung von Ein-Ausgabe-Geräten Meist verwendete Klassifizierung ist: Block Ein-/Ausgabe Zeichenströme Zugriffe mittels Memory-Mapped Netz-Sockets Die meisten Betriebssysteme haben eine scape-funktion oder back door-funktion, die in der Lage ist, beliebige Kommandos zwischen einer Anwendung und einem Geräte-Treiber zu vermitteln. In UNIX wird dieses z.b. mit Hilfe des ioctl-systemaufrufs realisiert. 9
ioctl-funktion Input-Output-Control-Funktion #include <sys/ioctl.h> int ioctl( int channel, int command,... ); Die ioctl-funktion übermittelt ein Kommando (command) an den Kontroller eines Gerätes, der durch den channel (file descriptor) verbunden ist. Optional kann eine Liste von Argumenten eingegeben werden, die zu dem Kommando gehören. 10
Beispiel: #include <stdio.h> #include <unistd.h> #include <sys/ioctl.h> #include <fcntl.h> #include <linux/cdrom.h> ioctl-funktion Die open-funktion wird ausgeführt, auch wenn keine CD im Laufwerk liegt. int main() { int fd; if ((fd = open("/dev/cdrom", O_RDONLY O_NONBLOCK )) == -1 ) { perror("eject: Can't open /dev/cdrom"); return 1; } if ( ioctl ( fd, CDROMEJECT ) == -1 ){ perror("eject: ioctl() failed"); return 1; } close( fd ); return 0; } 11
Kategorisierung nach Datentransfer-Modus Blockorientiert Festplatten, USB-Sticks, CD-Roms, DVD, usw. Befehle read, write, seek raw-operationen Dateizugriff mit Memory-mapped Zeichenorientiert Tastatur, Zeigergeräte, serielle Ports, usw. Befehle get, put Bibliotheken auf einer höheren Ebene ermöglichen das Editieren von Zeichenzeilen 12
Netzwerk-Geräte Unterscheiden sich sehr stark von Datei-Ein-/Ausgabe-Geräten Die meisten Betriebssysteme bieten eine spezielle Schnittstelle für Netzwerk-Geräte Die populärste Schnittstelle ist die socket-schnittstelle abstrahiert vom Kommunikations-Protokoll select()-funktion Es gibt ein breites Angebot an Kommunikations-Mechanismen wie z.b. pipes, FIFOs, streams, queues, mailboxes usw. 13
Uhren und Timer Hardwareuhren Die meisten Rechner haben mehrere Hardwareuhren und Timer. Folgende Hauptfunktionalität wird angeboten: gibt die aktuelle Zeit gibt die verlaufende Zeit setzt eine Stoppuhr(Timer), um eine Operation X nach einer bestimmten Zeit T durchzuführen 14
Uhren und Timer Programmierbare Hardware-Uhren Quarzoszillator Zähler Halte-Register Modi: Einmalmodus Wiederholungsmodus Die aktuelle Zeit wird in einer batteriebetriebenen Sicherungsuhr gespeichert. Hardware-Uhren lösen nur Interrupts in vorgegebenen Intervallen. 15
Uhren und Timer Software-Uhren Aufgaben eines Uhrtreibers Verwaltung der Echtzeit Steuerung der Time-Slide eines Prozessors Prozessornutzung-Buchhaltung Behandlung des alarm-systemaufrufes durch Benutzerprozesse Bereitstellung von Uhren zur Überwachung von Betriebssystemaktivitäten Profiling. Monitoring und Führen von Statistiken 16
Software-Uhren Verwalten der Uhrzeit. Echtzeit (real time) Mit 32 Bits und 60 Hz haben wir in 2 Jahren einen Überlauf Lösungen: 64 Bits Das Inkrementieren des Zählers ist aufwändiger (kein Problem in modernen Rechnern) 32 Bits Uhrzeit in Sekunden + Hilfszähler 2 32 Sekunden sind mehr als 136 Jahre 32 Bits Zeitintervalle nur ab Systemstart 17
Software-Uhren 64 Bits Uhrzeit in Timer-Intervallen 32 Bits Anzahl der Timer- Intervalle in aktueller Sekunde. Zeit in Sekunden 32 Bits Zähler von Timer- Intervallen Zeit nach dem Systemstart in Sekunden 18
Software-Uhren Die meisten Rechner besitzen eine zweite programmierbare Uhr, die neben der Hauptsystem-Uhr existiert. Diese Soft-Uhren sind für Timer-Interrupts nach einer vom Programm gewünschten Zeit zuständig. Probleme - wenn sie in sehr kurzen Abständen verwendet wird. - Interrupts oder Polling sind meistens keine gute Lösung Lösung - immer wenn der Kern im Einsatz ist und kurz bevor er in den Benutzermodus zurückkehrt, kann geprüft werden, ob der Soft- Timer abgelaufen ist. - Keine aufwändige Kontextwechsel ist nötig - Die aktuelle Zeit wird in den Timer kopiert und das gewünschte Zeitintervall hinzuaddiert. 19
Soft Timer Soft-Timer werden mit der gleichen Häufigkeit aktualisiert, mit dem folgende Ereignisse zusammen auftreten. Systemaufrufe Seitenfehler TLB-Fehler Ein-/Ausgabe-Interrupts CPU ist im Leerlauf 20
Software-Uhren Aron und Druschel haben Messungen durchgeführt und festgestellt, dass Soft-Timer mit ca. 12 Mikrosekunden- Zeitintervallen damit möglich sind. In Zeiten, in denen es keine Systemaufrufe, Seitenfehler. usw. gibt, kann der Soft-Timer mit einem niedrigen getackten Hardware-Timer (1 Millisekunde) kombiniert werden und trotzdem eine bessere Lösung anbieten als was unter Verwendung von Interrupts oder Polling erreicht werden kann. 21
Blockierende oder nicht blockierende Ein-/Ausgabe- Operationen Synchron blockierend - ein Prozess wartet, bis die Ein-/Ausgabe-Operation beendet ist - meistens im Benutzerschnittstellen eingesetzt - einfach für den Benutzer zu verstehen - nicht für alle Fälle ausreichend gut nicht blockierend Der IO-Aufruf liefert sofort Information zurück über das, was übertragen werden konnte, ohne den Prozess zu blockieren. Multithreading + Buffering 22
Asynchron Blockierende oder nicht blockierende Ein-/Ausgabe-Operationen Der Prozess läuft weiter während die Ein-/Ausgabe- Operation ausgeführt wird. Das Ein-/Ausgabe-Subsystem meldet später an den Prozess das Ende der Ein-/Ausgabe-Operation. Beispiel: Signal Interrupt call-back routine select()-systemaufruf für Netz-Sockets 23
Zwei Ein-/Ausgabe-Methoden Synchron Asynchron Kernel Benutzer Benutzer Kernel Zeit Zeit Quelle: Silverschatz, Galvin und Gagne 24
Ein-/Ausgabe-Subsystem des Kernels Das Ein-/Ausgabe-Systems des Kernels muss eine Reihe von Diensten anbieten, um die Leistung von Ein-/Ausgabegeräte zu verbessern. I/O - Scheduling Pufferung Caching Spooling und Geräte-Reservierung Fehlerbehandlung I/O-Schutzmechanismen 25
I/O-Scheduling Optimiert die Reihenfolge der Abarbeitung von Ein-/Ausgabe- Anforderungen Ziel: Den Durchsatz zu erhöhen Die durchschnittliche Wartezeit zu reduzieren Warteschlangen pro Gerät werden verwendet, dessen Reihenfolge vom Scheduler geändert werden können. Eine Tabelle (device-status table) wird verwendet, in der sich ein Eintrag pro Gerät befindet. 26
device-status table Quelle: Silverschatz, Galvin und Gagne 27
Pufferung Ein Puffer wird verwendet, um Daten zu speichern, die zwischen Programm und Gerät gerade transferiert werden; Ziel: Geschwindigkeitsunterschiede der Datenströme zwischen Erzeuger und Verbraucher zu korrigieren verschiedene Datentransfer-Größen anzupassen Nebenläufigkeit zwischen Verbraucher und Erzeuger copy semantics: eine Kopie der Daten wird in einem Kernel- Puffer beim system call gemacht. Besser mit virtual memory mapping und copy-on-write Schutzmechanismus 28
Pufferung-Techniken Doppelt-Pufferung (double buffering) Benutzerprozess 2 Kernel-Adressraum 1 3 Anpassung zwischen verschiedenen Datentransfergrößen z.b. Puffer werden für Fragmentierung und Defragmentierung (reassembly) von Daten verwendet. 29
I/O Buffering-Schemas I/O Geräte in OS No Buffering I/O Geräte in OS Move Single Buffering I/O Geräte OS Move Double Buffering I/O Geräte OS. Move Circular Buffering 30
Sun Enterprise 6000 Geräte-Transfer-Raten (logarithmic) System Bus Hyper Transport (32-pair) PCI Express 2,0 (x32) Infiniband (QDR 12x) Serial ATA (SATA-300) Giagbit ethernet SCSI bus FireWire Festplatte Modem Mouse Tastatur 0,00001 0,001 0,1 10 1000 100000 10000000 31
Ein-/Ausgabe-Subsysteme des Kernels Caching Entscheidend für die Leistung Spooling Geräte-Ausgabe wird zwischengespeichert für Geräte, die Anfragen nur sequentiell abarbeiten können z.b. Drücker Geräte-Reservierung Exklusiver Zugriff muss oft garantiert werden Hier sollen Verklemmungen verhindert werden Systemaufrufe für die Reservierung und Freigabe von Geräten Einige Betriebssysteme bieten Funktionalität für die Kontrolle von exklusiven Zugriffen auf Benutzerebene. 32
Fehlerbehandlung Betriebssysteme mit geschütztem Speicher können besser gegen Hardware oder Programm-Fehler reagieren. Fehler sollen mit eindeutigen ID-Nummern identifiziert werden. Viele Fehler sind Hardware-abhängig und sollen vom Gerätetreiber behandelt werden. Andere Fehler sollen an das Ein-/Ausgabe-System weiter gereicht werden und dort behandelt werden. read() oder send()-operationen werden manchmal durch einfache Wiederholung behandelt. Ein-/Ausgabefehler sollen in Log-Dateien protokolliert werden. 33
Aufgaben: Gerätetreiber - Verbergen der Komplexität der Registerbelegungen des Controllers. - Jedes Gerät benötigt üblicherweise seinen eigenen Treiber. - Gerätetreiber sind praktisch immer Teil des Kernels. - API-für die darüber liegende Schicht: - read- und write-operationen 34
Ein-/Ausgabe-Schutz Ein-/Ausgabe-Operationen sind in enger Beziehung mit dem Problem des Informationsschutzes. Alle I/O-Operationen sind als privilegiert definiert und können nur unter Verwendung von Systemaufrufen durchgeführt werden. Memory-mapped-Speicherbereiche und I/O-Port- Speicheradressen müssen meistens vom Speicherschutz- System für den direkten Benutzerzugriff gesperrt werden. 35
Kernel-Datenstrukturen Im Kernel müssen ständig Tabellen mit Informationen über den Zustand aller Ein-/Ausgabe-Komponenten zwischen-aufbewahrt werden. - geöffnete Dateien - Netzverwindungen - Zustand von Zeichengeräten, usw. Andere Komplexere Datenstrukturen für - Puffern-Verwaltung - Speicher-Allokation - dirty-blocks, usw. Einige Betriebssysteme wie UNIX verwenden objektorientierte- Techniken, um eine einheitliche Struktur für die Verwaltung zu ermöglichen. Windows verwendet ein Nachrichten-System, das noch flexibler ist. 36
UNIX Ein-/Ausgabe Kernel-Struktur Quelle: Silverschatz, Galvin und Gagne 37
Kernel-Ein-/Ausgabe-Subsystem Zusammenfassung Verwaltung des Namensraums von Dateien und Geräten Zugriffskontrolle von Dateien und Geräten Kontrolle über die Operationen Dateisystem-Allokation Geräte-Allokation Pufferung, Caching und Spooling I/O- Scheduling Statuskontrolle von Geräten, Fehlerbehandlung und Fehlerkorrektur Gerätetreiber-Konfiguration und -Initialisierung 38
Lebenszyklus einer Ein-/Ausgabe- Anfrage Benutzer- Prozess Kernel-IO- Subsystem Kernel-IO- Subsystem Gerätetreiber Interrupt- Händler Gerätekontroller Zeit 39
Ströme (STREAM) Ein Stream ist eine zweidirektionale Kanalverbindung zwischen einem Benutzerprozess und einem Gerätetreiber A STREAM besteht aus: - stream head Schnittstelle zum Benutzerprozess - driver end Schnittstelle zum Gerät - eine oder mehrere stream modules zwischen stream head und driver end Jedes stream module hat eine read queue und eine write queue, die die Kommunikation mittels Nachrichten-Verkehr zwischen den Warteschlangen realisiert. Die Warteschlangen können flow control unterstützen. 40
Die STREAMS-Struktur 41
Leistungsfaktoren Ein-/Ausgabe-Operationen spielen eine große Rolle in der gesamten System-Leistung. Grundlegende Prinzipien für eine Leistungssteigerung sind: Reduziere die Anzahl von Kontextwechseln Reduziere die Anzahl der Kopieroperationen von Daten zwischen Geräten und Anwendung Reduziere die Anzahl von Interrupts mit - großen Transfermengen - intelligenten Gerätekontrollern - polling Steigere die Nebenläufigkeit mit DMA- oder Kanälen Eine balancierte Auslastung der wichtigsten Systeme (CPU, Speicher, Bus und Ein-/Ausgabe) 42
Wo soll die Funktionalität implementiert werden? 43
Gerätetreiber in Linux Treiberunterstützung ist für die Akzeptanz eines Betriebssystems sehr wichtig. Das Gerätetreiber-System dominiert in ihrer Größe. linux-2.6.27.19$ du -c -d 1 sort -n 56./usr 128./samples 152./virt 256./init 408./ipc 856./block 2080./lib 2128./security 2720./crypto 2856./scripts 2968./mm 3136./firmware 6072./kernel 24184./Documentation 29864./sound 30848./net 51288./fs 55048./include 157456./arch 275424./drivers 648552 total 44
Linux Ein-/Ausgabe-Subsystem Linux bietet einen einheitlichen Zugriff Geräte werden über Namen in dem Dateisystem ansprechbar. /dev/tty40 Die gleichen Systemaufrufe für Dateizugriffe können auch für andere Ein-/Ausgabe-Geräte verwendet werden. open, read, write, close Zugriffsrechte können auch über die Mechanismen des Dateisystems gesteuert werden. Aus Anwendersicht gibt es keinen Unterschied zwischen Dateien und anderen IO-Geräten. Nicht alle Geräte lassen sich in dieses Schema einordnen, z.b. Uhren und 3D Graphikkarten. 45
Linux Ein-/Ausgabe- Subsystem Quelle: www.linux-magazin.de 46
Zusammenfassung Das Ein-/Ausgabe-System bildet einen dominante Anteil des Betriebssystems. Grundlegende Hardwarekomponenten sind: Buse, Ports, Geräteadapter und die Geräte selber. Datentransfer kann direkt mit programmierten Ein-/Ausgabe- Operationen oder durch den DMA-Kontroller erfolgen. Eine geeignete Klassifizierung der Geräte ist zentral, um eine Hardware-unabhängige Schnittstelle zu definieren. Dynamische Bindung von Geräten ist wichtig. Gerätetreiber laufen im Kernelmodus, werden aber von fremden Herstellern programmiert. Gerätetreiber können Sicherheitslücken einfügen. 47
Kommunikation zwischen Rechnern