Aus Abschnitt 5.1.4 Direkter Speicherzugriff in modernen Betriebssystemen von Andrew S. Tanenbaum, Herbert Bos, 2014 ,
Zur Vereinfachung der Erklärung wird angenommen, dass die CPU über einen einzigen Systembus, der die CPU, den Speicher und die E / A-Geräte verbindet, auf alle Geräte und den Speicher zugreift, wie in Abb. 5-4 dargestellt.
Lassen Sie uns zunächst erläutern, wie DMA funktioniert, wenn DMA nicht verwendet wird.
- Zuerst liest der Plattencontroller den Block (einen oder mehrere Sektoren) nacheinander aus dem Laufwerk, bis sich der gesamte Block im internen Puffer des Controllers befindet.
- Anschließend wird die Prüfsumme berechnet, um sicherzustellen, dass keine Lesefehler aufgetreten sind. Dann verursacht die Steuerung einen Interrupt. Wenn das Betriebssystem zu laufen beginnt, kann es den Plattenblock byteweise oder wortweise aus dem Puffer des Controllers lesen, indem es eine Schleife ausführt, wobei jede Iteration ein Byte oder Wort aus einem Controller- Geräteregister liest und es im Hauptspeicher speichert.
F: Im zweiten Schritt
Werden die Daten nicht " aus dem Puffer der Steuerung " in den Hauptspeicher übertragen? Warum heißt es sowohl " aus dem Puffer des Controllers " als auch " aus einem Controller-Geräteregister "?
Kann der Controller im zweiten Schritt Daten von seinem Puffer in den Hauptspeicher übertragen, ohne die CPU zu unterbrechen und ohne das Betriebssystem erneut einzubeziehen?
Bei Verwendung von DMA ist die Vorgehensweise anders.
- Zuerst programmiert die CPU den DMA-Controller, indem sie seine Register so einstellt, dass sie weiß, was wohin übertragen werden soll (Schritt 1 in Abb. 5-4).
Es gibt auch einen Befehl an den Plattencontroller aus, der ihn auffordert, Daten von der Platte in den internen Puffer zu lesen und die Prüfsumme zu überprüfen. - Wenn sich gültige Daten im Puffer des Plattencontrollers befinden, kann DMA beginnen. Der DMA-Controller initiiert die Übertragung, indem er eine Leseanforderung über den Bus an den Plattencontroller ausgibt (Schritt 2). Diese Leseanforderung sieht aus wie jede andere Leseanforderung, und der Plattencontroller weiß (oder kümmert sich nicht), ob sie von der CPU oder von einem DMA-Controller stammt. Normalerweise befindet sich die Speicheradresse, in die geschrieben werden soll, auf den Adressleitungen des Busses. Wenn der Plattencontroller das nächste Wort aus seinem internen Puffer abruft, weiß er, wo es geschrieben werden muss. Das Schreiben in den Speicher ist ein weiterer Standardbuszyklus (Schritt 3).
- Wenn der Schreibvorgang abgeschlossen ist, sendet der Plattencontroller ein Bestätigungssignal auch über den Bus an den DMA-Controller (Schritt 4). Der DMA-Controller erhöht dann die zu verwendende Speicheradresse und dekrementiert die Byteanzahl. Wenn die Byteanzahl immer noch größer als 0 ist, werden die Schritte 2 bis 4 wiederholt, bis die Anzahl 0 erreicht.
- Zu diesem Zeitpunkt unterbricht der DMA-Controller die CPU, um sie über den Abschluss der Übertragung zu informieren. Beim Start des Betriebssystems muss der Plattenblock nicht in den Speicher kopiert werden. es ist schon da
F: Im zweiten Schritt fordert der DMA-Controller den Plattencontroller auf, Daten aus dem Puffer des Plattencontrollers in den Hauptspeicher zu übertragen. Im ersten Schritt gibt die CPU einen Befehl an den Plattencontroller aus, der sie auffordert, Daten von der Platte in ihren internen Puffer zu lesen. Gleichzeitig kann die CPU den Plattencontroller auch anweisen, Daten aus dem Puffer des Plattencontrollers in den Hauptspeicher zu übertragen, wenn der Plattencontroller die Übertragung von Daten von der Platte in den Puffer des Plattencontrollers abgeschlossen hat, so dass das nicht erforderlich ist DMA-Controller, um den Plattencontroller anzuweisen, Daten aus dem Puffer des Plattencontrollers in den Hauptspeicher zu übertragen? (Ich kann nicht verstehen, warum wir einen DMA-Controller für die Datenübertragung zwischen der Festplatte und dem Hauptspeicher benötigen. Vermute also, dass ich etwas Wichtiges verpasse, um das Zitat zu verstehen.)
- Zuerst programmiert die CPU den DMA-Controller, indem sie seine Register so einstellt, dass sie weiß, was wohin übertragen werden soll (Schritt 1 in Abb. 5-4).
Ein Gerätecontroller eines Geräts steuert das Gerät und führt Vorgänge am Gerät aus. Welches Gerät steuert und bearbeitet ein DMA-Controller?
Vielen Dank!