4. Ein- und Ausgabe • Überblick 4.1 4.2 4.3 4.4 4.5 4.6 4.7 Klassifikation und Grundaufgaben Schlüsselkonzepte von E/A-Software Gerätetreiber Geräteunabhängige E/A-Software Beispiel für blockorientierte Geräte: Festplatten Strategien für Plattentreiber Effizienzbetrachtungen O. Kao Betriebssysteme 4-1 4.1 Klassifikation von E/A-Geräten • Eine der Kernaufgaben von Betriebssystemen ist der Betrieb von Ein- und Ausgabegeräten (E/A-Geräte) Zeichenorientierte Geräte (character devices) Erzeugen und akzeptieren Zeichenströme ohne Anforderungen an eine Blockstruktur zu stellen Nicht adressierbar, keine Suchoperationen Beispiele: Tastatur, Zeigergeräte, Zeilendrucker, Netzwerkkarten Blockorientierte Geräte (block devices) Informationen in Blöcken fester Länger mit bekannter Startadresse Ein Block kann unabhängig von anderen Blöcken gelesen oder geschrieben werden Beispiele: Festplatten, CD-ROMS, … Eine Reihe von Geräten passt nicht in dieses Schema: Uhren, Bildschirme, … O. Kao Betriebssysteme 4-2 Abstrakte Geräte • Aus Anwendungssicht soll jedes physische Gerät durch ein abstraktes Gerät in der Systemsoftware repräsentiert werden • Abstrakte Geräte besitzen Datenstruktur DCB (Device Control Block): Anschluss- und Zustandsinformationen, z.B. Interruptnummer, Portadresse, … Mindestmenge von Funktionen DeviceId = OpenDevice (Gerätename, Betriebsparameter) CloseDevice (DeviceId) Read/Write (DeviceId, Von, Bis | Länge) Gerätetreiber realisiert definierte Operationen, Routinen zur Behandlung von geräteabhängigen Unterbrechungen … Anwendungen … Abstrakte Geräte … Physische Geräte O. Kao 4-3 Betriebssysteme Grundaufgaben beim Betrieb von Geräten • Betrieb von E/A-Geräten umfasst zwei Grundaufgaben 1. Steuern des Geräts wie z.B. bewegliche Teile positionieren, Betriebsparameter einstellen, … Beispiele: Schreib/Lesekopf positionieren, Baudrate einstellen, Band zurückspülen/auf Schreibmarke positionieren, … 2. Transportieren: Daten von der zentralen Instanz (CPU, Speicher) zum Gerät und umgekehrt kopieren Transportauftrag erteilen (Auslösung), Datentransport Deklaration der zu übertragenden Daten: Direkt mit dem Auftrag (Gib Zeichen X aus) oder durch Spezifikation von Anfangs- und Endadresse (Gib Zeichen zwischen Adressen d_anf bis d_end aus) Zentrale Instanz Auslösung Puffer Gerät Datentransport O. Kao Betriebssysteme 4-4 Interaktion zwischen zentraler Instanz und Gerät • Interaktion wird oft als Dienstleistungsbeziehung realisiert Gerät: Prozessor, der genau ein Prozess ausführen kann Kein Umschalten Aktives Warten am Auftragseingang Zentrale S Gerät Auftrag E S • Geräteinbindung in Prozessstrukturen E ignal Fertigs Auftraggebende Prozesse werden bis zum Auftragsende blockiert Sobald Auftrag ausgeführt, erzeugt das Gerät eine Unterbrechung Prozessor wird unterbrochen und führt die zugehörige Unterbrechungsroutine aus Dort wird eine entsprechende Nachricht erzeugt und an den Empfangskanal des auftraggebenden Prozesses gesendet O. Kao Betriebssysteme 4-5 Ablauf eines Transportauftrags 1. Portionierung der zu übertragenden Daten Bytes (zeichenserielle Schnittstelle), Block bestimmter Größe bei vorgegebener Gerätgeometrie wie Seitendrucker, Festplatte, … 2. Spezifikation der Parameter Richtung: Lesen oder Schreiben von Daten Quelle und Ziel der Daten Wie viele Daten werden übertragen (Länge) Ggf. Daten selbst 3. Rückmeldung: Auswertung der Gerätsignale bzgl. Fehler wie Falsche Parameter (Speicheradresse, Spur- oder Blocknummer unbekannt, …) Falscher Betriebszustand (Gerät unbekannt, keine Spannung, kein Datenträger, keine Formatierung, …) Übertragungsfehler: Paritäts- oder Synchronisationsfehler Aufzeichnungsfehler O. Kao Betriebssysteme 4-6 4.2 Schlüsselkonzepte von E/ASoftware • Geräteunabhängigkeit Systemaufrufe z.B. zum Lesen/Schreiben von Festplatte sollen so gestalten, dass keine Neuübersetzung für neuen Gerätetyp erforderlich • Einheitliches Benennungsschema: Name von Dateien/Geräten sind alphanumerische Zeichenfolgen, unabhängig von der Gerätart Beispiel UNIX: Einbindung von Disketten/CD-ROMS/… in die Dateisystemhierarchie ⇒ Geräte werden wie Dateien und Verzeichnisse durch einen Pfadnamen identifiziert • Fehlerbehandlung Möglichst nah an der HW, z.B. erneutes Lesen eines Blocks Erst bei schwerwiegenden Fehlern obere Schichten informieren • Weitere Konzepte Realisierung von synchronen/asynchronen Übertragungen Effizienz und Zuverlässigkeit durch Pufferung Gerätekoordination (gemeinsame/exklusive Nutzung) O. Kao Betriebssysteme 4-7 Schichtenaufbau von E/ASoftware • Aufbau von E/A-Software üblicherweise in 4 Schichten Untere Schichten kümmern sich um die HW-Details Obere Schichten bieten einfache, einheitliche Schnittstellen an E/A-Software in Anwendungen Geräteunabhängige E/A-Systemsoftware Gerätetreiber Unterbrechungsbehandlung (Interrupt handler) Hardware • Einzelne Schichten Unterbrechungsbehandlung Gerätetreiber: Direkte Ansteuerung der spezifischen Geräte Geräteunabhängige E/A-Systemsoftware Durchführung der für alle E/A-Geräte notwendigen Basisfunktionen Bereitstellung einer einheitlichen Schnittstelle für Anwendungen E/A-Software in Anwendungen: Systemaufrufe für die E/A O. Kao Betriebssysteme 4-8 Unterbrechungsbehandlung • Behandlung einer Unterbrechung erfordert folgende Schritte Sicherung aller Register Erzeugen des Kontextes für die Unterbrechungsroutine, Initialisierung von MMU, TLB, Speichertabellen,… und Anlegen neuer Speicherbereiche (Stapel, Heap, …) Interruptcontroller informieren und Behandlung weiterer Unterbrechungen veranlassen Kopieren der gesicherten Register in die Prozesstabelle Aufruf der Unterbrechungsroutine ⇒ Informationen aus den E/AGeräten auslesen und notwendige Operationen durchführen Auswahl des nächsten auszuführenden Prozesses Initialisierung / Wiederherstellung des Kontextes, Laden der Prozessregister Verarbeitung mit neuem Prozess fortsetzen • Unterbrechungsbehandlung: nicht-triviale und zeitintensive Aufgabe ⇒ Effiziente Implementierung und HW-Unterstützung notwendig O. Kao Betriebssysteme 4-9 4.3 Gerätetreiber (Driver) • Gerätetreiber fassen alle für ein Gerät spezifischen Steuersoftwareelemente in einer Komponente zusammen Gerätehersteller stellen Treiber für unterschiedliche BS zur Verfügung Jeder Treiber steuert einen Gerätetyp oder eine Klasse von Gerätetypen (z.B. SCSI-Platten und evtl. SCSI-CD-ROMs) • Treiber benötigen Zugriffsmöglichkeiten auf die Rechenhardware und Geräteregister 1. Möglichkeit (Standard): Treiber sind Bestandteil des BS-Kerns Treiberentwicklung von Außenstehenden ⇒ Detaillierte, genaue Spezifikation der Treiberarchitektur notwendig Dynamische Einbindung von Treibern ohne Neukompilierung des BSKerns wünschenswert 2. Möglichkeit: Treiber sind Benutzerprozesse Durch Trennung kann u.U. die Ausfallsicherheit erhöht werden (Abstürze infolge defekter Treiber vermeiden) O. Kao Betriebssysteme 4-10 Logische Positionierung der Gerätetreiber (1. Möglichkeit) Benutzeradressraum Kernadressraum Hardware Anwendung Rest des Betriebssystems Druckertreiber Webcamtreiber CD-ROM treiber DruckerController WebcamController CD-ROM Controller Geräte O. Kao 4-11 Betriebssysteme Geräteserver (2. Möglichkeit) • Abstrakte Geräte in eigenständigen Adressräumen im Benutzerraum BS erteilt dem Geräteserver Zugriffsrecht auf physische Geräteschnittstelle Spezielle Funktion zum Aufbau der Verbindung Server ↔ Schnittstelle, Überprüfung des Zugriffrechts, Eintragen der Unterbrechungen Einblendung der Kontroll- und Statusregister des Geräts im Speicher ⇒ nach Bekanntgabe der Adresse direkter Zugriff auf das Gerät Unterbrechungen werden vom Kern in Signale an Server umgewandelt … Anwendungen … Geräteserver Abstrakte Geräte Kern … O. Kao Betriebssysteme Physische Geräte 4-12 Memory-mapped Dateien • Dateien werden in den virtuellen Adressraum eingeblendet Ab einer bestimmten Adresse werden die Speicherworte der eingeblendeten Datei angeordnet Dateizugriffe werden durch Speicherzugriffe realisiert Bei Prozessende wird der Speicherbereich in Datei geschrieben • Konkrete Realisierung Eingeblendete Datei wird als Ein- und Auslagerungsdatei für den Speicherbereich gekennzeichnet Registrierung von Schreib/Lesezugriffen durch Überwachung des Speicherbusses und PCI-Bridges (Gerätesteuerung) Kontroller überprüft, ob die Adresse in dem zugeordneten Bereich liegt Falls ja ⇒ Verarbeiten des Befehls Falls nein ⇒ Befehl verwerfen Bridges leiten die Befehle – analog zum Controller – auf den anderen Bus Schreib/Lesezugriffe verursachen u.U. Seitenfehler und initiieren das Nachladen der entsprechenden Dateibereiche O. Kao Betriebssysteme 4-13 Memory-mapped I/O O. Kao Betriebssysteme 4-14 Typische Ausführungsreihenfolge bei Gerätetreibern 1. Überprüfung der Eingabeparameter 2. Bei gültigen Parametern ⇒ Umrechnung abstrakter Adressen (z.B. lineare Blockadresse bei Festplatten) zu realen Werten (Kopf-, Spur-, Sektor- und Zylindernummer) 3. Überprüfung des Belegungsstatus des Geräts Belegt ⇒ Auftrag in Warteschlange einreihen Frei ⇒ Ggf. Initialisierung durchführen, z.B. Gerät/Motor einschalten, Anfangszustand herstellen 4. Steuerung Dem Treiber übermittelte Befehlssequenz wird in die Steuerregister des Geräts hineingeschrieben Nach jedem Befehl ⇒ Überprüfung der Befehlannahme und Bestimmung des Zeitpunkts für den nächsten Befehl Alternativ können mehrere Befehle gleichzeitig abgesetzt werden ⇒ Keine weiteren Aktionen durch das BS notwendig O. Kao Betriebssysteme 4-15 Ausführungsreihenfolge bei Gerätetreibern (2) • Was passiert nach dem Absetzen der Kommandos? Aktion wird sofort erledigt, z.B. Verschieben des Bildinhalts um eine Zeile ⇒ Schreiben von wenigen Bytes notwendig Umfangreiche – evtl. auch mechanische – Aktionen sind notwendig ⇒ Treiber blockiert und wartet auf Beendigung der Arbeit durch den Controller (Unterbrechung) Anschließend Überprüfung der Ergebnisse und Übermittlung an geräteunabhängige Schicht Übermittlung von Statusinformationen an den Aufrufer Weitere Anfragen vorhanden Ja ⇒ Bearbeite nächste Anfrage Nein ⇒ Blockiere Treiber bis zum Eintritt der nächsten Anfrage • Vorgestellter Ablauf ist nur grobe Annäherung an reale Situationen ⇒ Komplexitätserhöhung durch Unterbrechungen und hot pluggable Geräte O. Kao Betriebssysteme 4-16 Unterbrechung von Treibern • E/A-Gerät beendet die Arbeit und unterbricht den laufenden Treiber, evtl. sogar den für die Steuerung des Geräts zuständigen Treiber • Beispiel: Netzwerktreiber bearbeitet ein Paket und ein neues Paket ist angekommen ⇒Forderung nach wiedereintrittsfähigem (reentrantem) Code • Definition reentranter/wiedereintrittsfähiger Code Der Code wird so konzipiert, dass er von mehreren Programmen zur gleichen Zeit gemeinsam verwendet werden kann Führt ein Programm reentranten Code aus, darf es von einem anderen Programm unterbrochen werden, das daraufhin denselben Code fortführen oder von Beginn ausführen kann Reentrante BS-Funktionen ⇒ eine Kopie im Speicher notwendig, um alle ausgeführten Programme bedienen zu können O. Kao Betriebssysteme 4-17 Treiber und Hot Plug-In • Bestimmte E/A-Geräte dürfen während der Laufzeit hinzugefügt bzw. entfernt werden (hot pluggable devices) • Zusätzliche Treiberanforderungen bei Entfernung von E/A-Geräten Während eines Auftrags wird das Gerät entfernt ⇒ Abbruch der Operation, aber das restliche System bleibt stabil, d.h. interne Datenstrukturen im Kern dürfen nicht beschädigt werden Entfernung aller wartenden Aufträge für das entkoppelte Gerät Ausgabe entsprechender Fehlermeldungen • Zusätzliche Anforderungen beim Hinzufügen von E/A-Geräten Dynamische Registrierung neu ankommender Geräte Umschichtung von Ressourcen, z.B. Unterbrechungsleitungen Einrichtung der notwendigen Datenstrukturen Aktualisierung der Ressourcenanzeigen, … • Plug-and-Play: automatische Gerätekonfiguration/-inbetribnahme O. Kao Betriebssysteme 4-18 4.4 Geräteunabhängige E/ASoftware • Hauptpunkte Bereitstellung der für alle E/A-Geräte notwendigen Basisfunktionen Bereitstellung möglichst einheitlicher Schnittstellen • Unterteilung in Schnittstellen für Gerätetreiber Pufferung Fehlerreport Anforderung und Freigabe von Geräten Abstraktion unterschiedlicher Blockgrößen • Grenzen zwischen geräteabhängiger und –unabhängiger Software sind nicht exakt definiert Abhängig vom aktuellen Gerät können bestimmte Basisfunktion gerätespezifisch und somit effizienter implementiert werden O. Kao 4-19 Betriebssysteme Spezifischer Schnittstellendesign zwischen BS und Gerätetreiber • Spezifische Schnittstellen Unterschiede von Treiber zu Treiber BS ruft treiberspezifische Funktionen auf Gerätetreiber benutzen spezifische Systemaufrufe ⇒ Effizient, aber großer Programmieraufwand • Beispiel Windows (ab Windows95) Betriebssystem Spezifische Treiberschnittstellen Nur minimale Programmierschnittstelle vorhanden ⇒ der größte Teil der API wird vom Hersteller entwickelt Leistungssteigerung im Bereich 3D-Berechnungen, Texturmapping, … Zwischenweg durch Entwicklung von DirectX-Schnittstellen (DirectDraw, DirectSound, Direct3D, DirectInput, …) Viele der in spezieller Hardware vorhandenen Funktionen sollen mit minimalen Leistungseinbüssen umgesetzt werden Beim Start: Erkennung von DirectX-Funktionen, die mit vorhandener Spezial-HW ausführbar sind. Der Rest wird von der CPU emuliert O. Kao Betriebssysteme 4-20 Einheitlicher Schnittstellendesign zwischen BS und Gerätetreiber • Standardschnittstelle für alle Treiber Schnittstellenspezifikation definiert aufzurufende Funktionen und legt fest, welche Treiberfunktionen für das BS bereitgestellt werden müssen Spezifische Funktionen durch standardisierte Schnittstellen registriert Betriebssystem Einheitliche Treiberschnittstellen • Beispiel: Universalgerätedefinition nach Cheriton Gerätspezifikation durch folgende Parameter Gerätetyp: Eingabe, Ausgabe oder Ein- und Ausgabe Blocklänge und Anzahl der Blöcke Zugriffsart: Random (wahlfreier Zugriff), Sequentiell, Stream (geräteinternes Fenster wird mit jeder E/A-Operation in einer Richtung bewegt) Operationen: open(), close(), read(), write(), position() Einschränkungen/Anpassungen durch die übergebenen Parameter Nachteile bei Spezialhardware, effizienter Gerätenutzung O. Kao Betriebssysteme 4-21 Einbettung der E/A in das Dateisystem • Abstrakte Geräte und generische Gerätearchitektur charakteristisch für BS im Umfeld UNIX Jedes physische und abstrakte Gerät wird durch einen Namen im Dateisystem repräsentiert ⇒ Zugriff über Funktionen des Dateisystems Gerätöffnung entspricht Öffnung einer Datei mit dem angegeben Namen Lese- oder Schreibzugriff, Zugriffsrechtüberprüfung wie bei Dateien Für die Zugriffsdauer ist der zugreifende Prozess Besitzer des Geräts Beispiel für eine /dev-Hierarchie /dev/ttya: physische serielle Schnittstelle /dev/tty01 … /dev/ttyXX: abstrakte serielle Schnittstellen /dev/fd0 … /dev/fdXX: Diskettenlaufwerke /dev/hdaX … /dev/hdXX oder /dev/sd0 … /dev/sdXX (SCSI) Festplatten /dev/net0 … /dev/netXX: Netzwerkkarten Gerätenutzung auf dieser Ebene verlangt Systemkenntnisse ⇒ Oft werden nur parallele/serielle Schnittstellen direkt genutzt, der Rest über dedizierte Geräteserver mit entsprechenden Treibern O. Kao Betriebssysteme 4-22 Spezialdateien /dev Verzeichnis: Zeichenorientiertes Gerät # ls –l /dev crw------- 1 root root 14,4 Dec 15 crw------- 1 root root 14,3 Dec 15 crw------- 1 root root 29,0 Aug 31 brw-rw---- 1 root floppy 2,0 Aug 31 brw-rw---- 1 root disk 3,0 Aug 31 brw-rw---- 1 root disk 3,1 Aug 31 brw-rw---- 1 root disk 3,64 Aug 31 brw-rw---- 1 root disk 3,65 Aug 31 crw------- 1 root root 45,0 Aug 31 crw-rw---- 1 root lp 6,0 Aug 31 crw-rw-rw- 1 root root 1,3 Aug 31 Blockorientiertes Gerät O. Kao Hauptgerätnummer 17:01 17:01 01:31 01:31 01:31 01:31 01:31 01:31 01:31 01:31 01:31 audio0 dsp0 fb0 fd0 hda hda1 hdb hdb1 isdn0 lp0 null Nebengerätnummer Betriebssysteme 4-23 Pufferung • Pufferungstechniken: großer Einfluss auf die Effizienz bei Ein- und Ausgabe von zeichen- und blockorientierten Geräten Keine Pufferung: Unterbrechung nach jedem einzulesenden/ auszugebenden Zeichen ⇒ großer Verwaltungsaufwand, ineffizient Pufferung im Benutzerraum: Anwendung reserviert Speicherplatz für n Zeichen, die auf einmal gelesen/geschrieben werden Sperrung gegen Auslagerung notwendig ⇒ Fragmentierung des Speichers bei vielen Puffern Sicherung der Puffer gegen Überlauf notwendig Pufferung im Kernraum: Kopieren in Benutzerraum, wenn Puffer voll ⇒ Sicherung und Benachtrichtung über Ende der Operation erforderlich Wechselpuffertechnik mit mind. zwei Puffern: Erster Puffer voll, so wird der zweite Puffer benutzt. Währenddessen wird der erste Puffer geleert • Beispiel: Pufferung bei Netzwerkkarten O. Kao Betriebssysteme 4-24 Weitere Funktionen der geräteunabhängigen Software • Fehlerbehandlung Programmstruktur zur Fehlerbehandlung ist geräteunabhängig Viele Fehler(codes) gerätespezifisch ⇒ Behandlung durch den entsprechenden Treiber Fehlerklassen Programmierfehler: Behandlung durch aufrufende Software Gerätefehlfunktion bzw. -fehlinitialisierung: Reaktion durch Treiber (Gerät einschalten, Neupositionierung) oder durch Systemsoftware Komplexe Fehler: Kernstrukturen unbrauchbar, z.B. Rootverzeichnis oder Liste freier Blöcke zerstört ⇒ Systemrestauration notwendig • Belegung und Freigabe von gezielt zugewiesenen Geräten wie Drucker oder CD-Brenner ⇒ Prozesskoordination • Abstraktion der Blockgröße: HW-bedingte Blockgrößen werden durch Zusammenfassung in logische Blöcke vereinheitlicht ⇒ Systementwurf wesentlich einfacher O. Kao Betriebssysteme 4-25 E/A-Software in Benutzerprozessen • E/A-Bibliotheken: fester Bestandteil von Entwicklungssystemen • Grundfunktionen Schnittstelle zu E/A-Systemaufrufen, Formatierung der E/A, Spooling Einfachste Form: unformatierte Zeichenein- und –ausgabe ⇒ i.W. Übermittlung von Parametern zum Systemaufruf Komplexere Funktionen erlauben spezifische Formatierung, erzeugen entsprechenden Datenstrom und geben/lesen diesen im Zusammenspiel mit Systemaufrufen aus/ein • Spooling Daten für exklusiv belegbare Geräte werden in Spezialdateien aufbereitet ⇒ Blockierung während Rechenzeit tritt nicht auf Datei wird in ein Spooling-Verzeichnis der übergeordneten Instanz zur Verwaltung des Betriebsmittels (Daemon) kopiert Sobald das Gerät verfügbar ist, übermittelt der Daemon die Datei Beispiele: Drucker, Mailserver, Newsserver, … O. Kao Betriebssysteme 4-26 4.5 Beispiel für blockorientierte Geräte: Festplatten • Plattenspeicher besteht aus Einer oder mehreren, schnell rotierenden, magnetischen Platten Beweglichem Schreib-/Lesekopf, der die gesamte Oberfläche erreichen kann und an einem Plattenarm befestigt ist Bei mehreren Einzelplatten hat der Plattenarm die Form eines Kamms • Eigenschaften der Platten Jede Oberfläche besteht aus konzentrischen Spuren (Tracks, 500-2000) mit Informationen Jede Spur wird aufgeteilt in Sektoren (50-200) Zylinder: Gesamtheit aller Spuren, die mit fester Armposition gelesen werden O. Kao 4-27 Betriebssysteme Kenngrößen bei Festplatten • Gegeben sei ein Auftrag op zum Lesen vom Sektor s auf Spur n • Bedienzeit tserv für den Auftrag op entspricht der Summe aus Armpositionierzeit tpos: Bewegungszeit des Arms aus der aktuellen in die gewünschte Position Latenzzeit tlat: Wartezeit, bis der gewünschte Sektor unter dem Lesekopf erscheint (Drehwartezeit) Schreib/Lesezeit tr/w: Tatsächliche Ausführungszeit Transferzeit ttrans: Übertragungszeit aus dem/in den Speicher • Wartezeit twait bis Auftrag ausgeführt werden kann • Antwortzeit tresp = twait+tserv tpos tlat twait tr/w tserv ttrans Zeit tresp O. Kao Betriebssysteme 4-28 Plattenformatierung • Low-Level-Formatierung Anlegen von Spuren, Sektoren und Lücken zwischen Sektoren Reservesektoren als Ersatz für evtl. zerstörte Sektoren Festplattensektoren bestehen aus Identifikationsmuster: Sektorbeginn, Zylinder- und Sektornummer, … Daten: Üblicherweise 512 Byte Fehlerkorrekturcode: Redundante Sicherungsinformationen • Partitionierung Aufteilung der gesamten Platte in virtuelle Festplatten Master-Boot-Record: Besonders ausgezeichneter Bereich im Sektor 0 mit Bootcode und Partitionstabelle mit Verweisen auf Startsektor und Größe jeder Partition Aktive Partition notwendig zum Booten • High-Level-Formatierung Zuordnung eines Bootblocks mit Liste freier Speicherbereiche, Wurzelverzeichnis und leeres Dateisystem zu jeder Partition Anschließend Aktualisierung der Partitionstabelle O. Kao 4-29 Betriebssysteme Plattenformatierung (2) • Optimierung der Zugriffsgeschwindigkeit Zylinderversatz zum schnelleren Übergang zwischen Spuren O. Kao Doppeltes Interleaving Einfaches Interleaving Sequentielle Anordnung Interleaving (einfach und doppelt) zur Unterstützung beim kontinuierlichem Lesen von hintereinander liegenden Sektoren Betriebssysteme 4-30 RAIDs • Redundante Anreihung billiger/unabhängiger Platten (Redundant Array of Inexepensive/Independent Disks) Ansammlung von Festplatten wird von einem Controller angesteuert ⇒ BS nimmt nur eine einzige Festplatte wahr Datenverteilung über die Platten ⇒ paralleler Zugriff und Datensicherung durch Redundanz möglich • Sieben unterschiedliche RAID-Schemata (RAID level 0..6) RAID-level 0: Die große, virtuelle Festplatte wird in Strips unterteilt Strips umfassen je k Sektoren (strip 0 = Sektoren 0,..,k-1;strip 1=Sektoren k,..,2k-1; …) Verteilung von strips über unabhängige Festplatten Parallelität beim Lesen/Schreiben eines sich über mehrere Strips erstreckenden Blocks RAID-0 gut geeignet für sehr große Anfragen Allerdings existiert keine Redundanz ⇒ Ausfall einer Platte im RAID führt zu Datenverlust O. Kao 4-31 Betriebssysteme Weitere RAID-Schemata • RAID level 1: Alle Platten doppelt vorhanden (Original + Backup) Schreibvorgang: alle Strips werden doppelt geschrieben Lesevorgang: Verteilung der Strips wie bei RAID 0. Durch doppelte Ausführung ist Lastenausgleich beim Zugriff auf häufig gebrauchten Strips möglich ⇒ Doppelte Geschwindigkeit möglich Redundanz: alle Daten doppelt vorhanden ⇒ beim Ausfall einfacher Umschaltvorgang zur Backup-Platte RAID level 0 RAID level 1 O. Kao Betriebssysteme 4-32 Weitere RAID-Schemata (2) • RAID level 2: Aufteilung von Wörtern oder sogar einzelnen Bytes Datenelemente werden durch Parity-Bits (Hamming Code) erweitert (im Beispiel 4 Bits Daten + 3 Bits Parity) Vollständig synchrone Platten erlauben, dass jedes Bit auf einer Platte geschrieben wird ⇒ Fehlererkennung und teilweise –korrektur möglich Mehraufwand vernachlässigbar, wenn sehr große Anzahl von Festplatten verfügbar ist • RAID level 3: Vereinfachung durch eigene Parity-Platte RAID level 2 RAID level 3 O. Kao 4-33 Betriebssysteme Weitere RAID-Schemata (3) • RAID level 4 RAID level 0 mit zusätzlicher Strip-zu-Strip-Parität Alle Strips der Länge k werden mit Exklusiv-Oder verknüpft Mit diesem Parity-Strip können Daten einer einzigen verlorenen Platte rekonstruiert werden Sicherheit auf Kosten von Geschwindigkeit (Aktualisierung des Parity-Strips nach Schreibzugriffen ⇒ Parity-Platte als Flaschenhals) RAID level 4 RAID level 5 • RAID level 5 Eliminierung des Flaschenhals von RAID level 4 durch Verteilung der Parity-Strips über alle Platten O. Kao Betriebssysteme 4-34 4.6 Strategien für Plattentreiber • Kenngröße Armpositionierzeit tpos übt entscheidenden Einfluss auf Bedienzeit ⇒ Strategien zur Minimierung dieser Zeit notwendig • Bekannte Strategien Zufallsstrategie (Random): Aufträge werden in zufälliger Reihenfolge ausgewählt FCFS (First Come First Serve): Abarbeitung der Aufträge in der Ankunftsreihenfolge Prioritätsstrategie: Die Reihenfolge wird entsprechenden der Priorität der Aufträge erstellt SSTF (Shortest Seek Time First): Auftrag mit kürzester Armpositionierung zuerst SCAN (Fahrstuhlstrategie): Der Plattenarm bewegt sich in eine Richtung, bis alle Anforderungen abgearbeitet sind. Erst anschließend ist Bewegung zurück oder in andere Richtung erlaubt SCAN-C: Zyklische SCAN-Strategie, da nach jedem Durchlauf Rücksprung auf Zylinder 0 O. Kao 4-35 Betriebssysteme FCFS-Strategie • Eigenschaften Faires Verfahren Effizient nur dann, wenn die Anfragen geclustert und benachbarte bzw. Sektoren mit geringem Abstand betreffen • Aufträge in der Warteschlange (Spurnummer) 98, 183, 37, 122, 14, 124, 65, 67 und aktuelle Kopfposition 53 0 14 … 53 65 67 X … X … X X 98 … X 122 124 … X X 183 … X Zeit … X 37 O. Kao Betriebssysteme 4-36 SSTF-Strategie • Eigenschaften Minimierung der Anzahl der Armbewegungen Bei stark belasteten Platten tendiert der Arm zu den mittleren Sektoren ⇒ Aufträge mit äußeren Sektoren können verhungern • Aufträge (Spurnummer) 98, 183, 37, 122, 14, 124, 65, 67 und aktuelle Kopfposition 53 0 14 … 53 65 67 X … X … X X 98 … X 122 124 … X X 183 … X Zeit … X 37 O. Kao 4-37 Betriebssysteme SCAN-Strategie (Aufzug- oder Fahrstuhlstrategie) • Eigenschaften Grundidee stammt von Bewegung von Fahrstühlen in Hochhäusern Ähnlich zu SSTF, verhindert aber Verhungern von Aufträgen Lokalität von Anfragen nicht ausreichend berücksichtigt • Aufträge (Spurnummer) 98, 183, 37, 122, 14, 124, 65, 67 und aktuelle Kopfposition 53, aktuelle Richtung abwärts 0 14 … 53 65 67 X … X … X X 98 … X 122 124 … X X 183 … X Zeit … X 37 O. Kao Betriebssysteme 4-38 SCAN-C-Strategie (Zyklische Fahrstuhlstrategie) • Nach dem Ende einer Bewegung Alternative 1: Zylinder 0 angesteuert Alternative 2: Auftrag mit niedrigster Zylindernummer angesteuert ⇒ Bewegung nur in einer Richtung erlaubt • Geringere Varianz der Antwortzeiten • Aufträge (Spurnummer) 98, 183, 37, 122, 14, 124, 65, 67 und aktuelle Kopfposition 53 0 14 … 53 65 67 X … X … X X 98 … X 122 124 … X X 183 … X Zeit … X 37 O. Kao 4-39 Betriebssysteme 4.7 Effizienzbetrachtungen • Zusammenfassung der Effizienzeigenschaften FCFS erfordert im Mittel ein Überfahren von 1/3 der Spuren SCAN, SCAN-C, SSTF haben besonders in Hochlastsituationen Vorteile, da im Grenzfall nur eine Spur weit gesprungen werden muss SCAN und SSTF benachteiligen die Randspuren SSTF weist im Mittel die beste Leistung auf, kann aber zum Verhungern von Aufträgen führen Mittlere Antwortzeit FCFS SSTF Auftragsrate O. Kao Betriebssysteme 4-40 Umsortierung der Aufträge für SCAN- und SSFT-Strategien • Auftragseinordnung in die Warteschlange für Nicht-FCFS-Strategien Aufbau einer speziellen Kanalvariante: Einsortierung während der Kommunikationsoperationen am Treibereingang Realisierung des Treibers als Fließband und Aufteilung der Funktionalität in Auftragsannahme und Auftragsbearbeitung Vom Benutzer E E lock Nächsten Auftrag auswählen unlock lock Auftrag einordnen gemäß Kriterium unlock S E S Zum Benutzer Gerät S O. Kao 4-41 Betriebssysteme Totzeiten bei Treibern • Vorgehensweise Treiber blockieren nach Auftrag / Deblockieren nach Unterbrechung „Fertig“ führt zu langen Zeiten zwischen zwei Aufträgen (Totzeit) Totzeit Gerät Auftrag i Auftrag i +1 Fertigsignal Treiber deblockieren Treiber rechnend Nächster E/A-Start Kopf • Forderung Bei sequentiellem Zugriff sollte die Totzeit nicht länger sein als die zum Überfahren der Sektor- oder Blocklücke benötigte Zeit Andernfalls wird der nächste Sektor erst nach voller Umdrehung gelesen O. Kao Betriebssysteme Se kt or i i or t k Se +1 Lücke 4-42 Totzeitreduzierung (Latency Hiding) • • • • • Überlappung der Aktivitäten Durchführung des aktuellen Auftrags Vorbereitung des nächsten Auftrags Zwei-Phasen-Treiber 1. Phase: Erzeugen eines Auftrags 2. Phase: Verlaufsanalyse Der Zugriff auf gerätespezifische Daten ist ein kritischer Abschnitt Erster Treiberprozess hat höhere Priorität ⇒ nach Ende des kritischen Abschnitts kann der neue Auftrag abgesetzt werden Bei mehreren Sätzen von E/ARegistern ist eine Mehrfachaktivierung des Treibers ohne Totzeiten möglich O. Kao Vom Benutzer Treiber Phase 1 E lock S Gerät E Zum Benutzer unlock S Treiber Phase 2 Betriebssysteme 4-43 Plattencache • • • • Realisierung als Puffer für ausgewählte Plattensektoren im Festplattencontroller Controllercache ist vollständig unabhängig vom BS-Cache Typische Cachegröße 2-16 MByte Ablauf analog zum Speichercache Beim Datenzugriff wird zuerst überprüft, ob die Daten bereits im Cache sind Falls ja, gibt es zwei Zugriffsmöglichkeiten 1. Daten werden innerhalb des Hauptspeichers in den Datenraum des aufrufenden Prozesses kopiert 2. Innerhalb des Prozesses wird ein Zeiger auf die entsprechende Stelle im Plattenache gesetzt Andernfalls wird der angeforderte (evtl. auch benachbarte) Sektor(en) geladen Seitenersetzungsstrategie: in der Regel Least Recently Used (LRU) O. Kao Betriebssysteme 4-44 Ein einfacher Modul 1 hello.c: #include <linux/kernel.h> #include <linux/module.h> #define MODVERSIONS #include <linux/modversions.h> int init_module(){ printk("\nHallo, Ich bin ein Modul.\n"); return 0; } void cleanup_module(){ printk("\nTschuess!\n"); } MODULE_LICENSE("GPL"); O. Kao Betriebssysteme 4-45 Ein einfacher Modul 2 # gcc –c hello.c –Wall –D__KERNEL__ -DMODULE –I/lib/modules/ -r/build/include # insmod hello.o //Modul einfügen Hallo, Ich bin ein Modul. # rmmod hello //Modul ausnehmen Tschuess! O. Kao Betriebssysteme 4-46 Ein einfacher Treiber 1 #define DRIVER_MAJOR 17 static int device_read(struct file *filp, char *buf, size_t count, loff_t *f_pos) { printk(KERN_DEBUG "closed device\n"); return 0; } static int device_close (struct inode* i,struct file* f){ printk(KERN_DEBUG "closed device\n"); return 0; } static int device_open (struct inode* i,struct file* f) { printk(KERN_DEBUG "opened device\n"); return 0; } O. Kao Betriebssysteme 4-47 Ein einfacher Treiber 2 struct file_operations device_fns = { read: &device_read, open: &device_open, release: &device_close }; int init_module(void){ register_chrdev(17,"device",&device_fns); return 0; } void cleanup_module(void){ unregister_chrdev(17,"device"); } O. Kao Betriebssysteme 4-48