IT-Academy Logo
Sign Up Login Help
Home - Betriebssysteme - Allgemein - Ein- und Ausgabeverarbeitung durch das Betriebssystem



Ein- und Ausgabeverarbeitung durch das Betriebssystem

Dieser Artikel beschreibt die drei wichtigsten Ein- und Ausgabeverarbeitungsverfahren die von modernen Betriebssystemen eingesetzt werden.


Autor: Tobias Surmann (incsoft)
Datum: 03-02-2004, 21:57:01
Referenzen: Betriebssysteme und Rechnerstrukturen I
Schwierigkeit: Fortgeschrittene
Ansichten: 4453x
Rating: 8.6 (5x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einleitung

Dieser Artikel ist Auftakt zur einer Reihe von Artikeln, die die Funktionsweise eines Betriebssystems genauer unter die Lupe nehmen. In diesem Artikel geht es zunächst um die interne Ein- und Ausgabeverarbeitung (im folgenden auch kurz E/A genannt). Im Wesentlichen gibt es drei verschiedene Ansätze zur E/A-Verarbeitung: programmierte E/A, Interrupts und DMA. Auf alle drei Typen werde ich im Folgenden genauer eingehen und versuchen die grundsätzliche Funktionsweise der Verfahren so einfach und anschaulich wie möglich zu erklären.

Programmierte E/A

Die programmierte E/A ist ein sehr ineffizientes Verfahren, da der Prozessor dabei sehr stark belastet wird. Daher wird es heutzutage so gut wie nicht mehr verwendet; allerdings sollte man trotzdem wissen, wie es theoretisch funktioniert.
Der Prozessor sendet zunächst einen Lese- oder Schreibbefehl an den Controller des E/A-Geräts auf die die Lese- oder Schreiboperation angewendet werden soll. Der Controller kümmert sich nun darum die gewünschten Informationen für den Prozessor zu besorgen. Der Controller selbst besitzt einige Register in denen er die gelesenen Daten und den aktuellen Status (Flag-Register) ablegen kann. In jedem Befehlszyklus prüft nun der Prozessor den Status - dies ist der Teil, der das ganze Verfahren sehr ineffizient macht. Zeigt der Controller an, dass er seine Arbeiten abgeschlossen hat, so werden die Daten über den Systembus in den Hauptspeicher oder in den Cache des Prozessors geladen, wo die weitere Verarbeitung der Daten statt findet.

Interrupts

Interrupts sind schon sehr viel effizienter als die programmierte E/A. Der Prozessor sendet zunächst einen E/A-Befehl an den Controller des angesprochenen E/A-Geräts. Von nun an kümmert er sich erst mal nicht mehr um die weitere E/A die mit dem zuvor gesendeten Befehl verbunden ist. Er lädt nun den nächsten Befehl aus dem Arbeitsspeicher und fährt mit der normalen Programmausführung fort. Parallel dazu versucht der E/A-Controller den von der CPU gesendeten Befehl umzusetzen. Sind die erforderlichen Daten in die Register des Controllers geladen, so schickt er einen Interrupt an die CPU mit der Bitte diesen zu verarbeiten. Daraufhin bricht der Prozessor die Verarbeitung des aktuellen Befehls ab, speichert alle benötigten Informationen zur Wiederaufnahme der normalen Programmausführung für die nach der Interruptverarbeitung fortgesetzte Programmausführung auf dem Systemstack (d. h. er kann nach der Interruptverarbeitung wieder auf den vorherigen Programmstatus zurückgreifen) und springt zum Interrupt-Handler. Dieser regelt wie auf den Interrupt reagiert werden soll (ein Block von Maschinenbefehlen).

Während ein Interrupt-Handler abgearbeitet wird, werden keine anderen Interrupts zur Ausführung akzeptiert. Der Prozessor blockt also weitere Interrupts zunächst. Ist die Behandlung abgeschlossen, so lädt der Prozessor den vor dem Interrupt bearbeiteten Befehl aus dem Hauptspeicher, holt sich die Statusinformationen vom Systemstack und setzt dann die Programmausführung wieder fort. Falls gerade ein Interrupt verarbeitet wird, wird ein von einem anderen Gerät ankommender Interrupt ignoriert. Damit dieser Interrupt nicht verloren geht, schickt der E/A-Controller solange den Interrupt an die CPU, bis diese den Interrupt verarbeitet. Deshalb schickt der Prozessor vor der Bearbeitung des Interrupts auch eine Bestätigung an den E/A-Controller, damit dieser weiß, dass sein Interrupt nun verarbeitet wird und diesen Interrupt nicht wiederholt sendet.

Alternativ gibt es auch die Möglichkeit, dass die Interrupts der E/A-Geräte nach Prioritäten abgearbeitet werden können. Nehmen wir einmal an, dass ein System drei verschiedene E/A-Geräte zur Verfügung stellt: E/A1, E/A2 und E/A3. E/A1 soll die höchste Priorität haben, E/A3 die niedrigste. Nun schickt zunächst E/A3 einen Interrupt an die CPU, welche nun den Interrupt-Handler ausführt. Während der Ausführung des Interrupt Handlers von E/A3 schickt E/A1 einen Interrupt an die CPU. An dieser Stelle wird nun der Status des Interrupt Handlers von E/A3 auf dem Systemstack gespeichert (so wie vorher mit den Programmbefehlen geschehen) und die CPU verzweigt in die Ausführung des Interrupt-Handlers von E/A1. Zeitgleich schickt aber E/A2 einen Interrupt an den Prozessor. Da aber E/A1 eine höhere Priorität als E/A2 hat, wird zunächst der Interrupt-Handler von E/A1 vollständig abgearbeitet. Erst danach wird der Interrupt-Handler von E/A2 aufgerufen. Nach dessen Abarbeitung geht es dann mit dem Interrupt der niedrigsten Priorität E/A3 weiter. Bei dieser alternativen Interruptverarbeitung können also mehrere Interrupt-Handler nach Priorität ausgeführt werden. Bei der obigen Variante mit dem Blockieren weiterer Interrupts im Interruptverarbeitungsmodus der CPU ist dies nicht möglich.

DMA

DMA steht für Direct Memory Access, was soviel wie direkter Speicherzugriff bedeutet. Jede moderne Festplatte unterstützt den so genannten DMA-Modus, der es erlaubt E/A-Zugriffe auf das Gerät unabhängig von der CPU - also direkt - auszuführen. Sehen wir uns das Verfahren mal genauer an. Wie bei jeder E/A-Verarbeitungsart schickt die CPU zunächst einen E/A-Befehl an den für das bestimmte Gerät zuständigen Controller.

Ist das Gerät DMA-fähig so hat es noch eine Art vorgelagerten Controller, den DMA-Controller. Dieser stellt eine Verbindung zwischen Arbeitsspeicher und E/A-Controller dar, der selbstständig dafür sorgt, dass der vom Prozessor abgesetzte E/A-Befehl ausgeführt wird. Man kann den DMA-Controller somit als eine Art eigenen Prozessor speziell für die E/A eines einzelnen Geräts bezeichnen. Dies bedeutet eine immense Leistungssteigerung, da sich der Prozessor nun vollständig auf die Ausführung des Programms konzentrieren kann und sich nicht mehr mit der E/A auseinander setzen muss. Sobald der E/A-Controller des Geräts die gewünschten Informationen bereitstellt, schickt der DMA-Controller die Daten über den Systembus in den Arbeitsspeicher (oder in einen Cache) von wo nun wesentlich schneller vom Prozessor auf die Daten zugegriffen werden kann.


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06245
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1150
Comments: 0