Wie funktioniert ein DMA-Controller?


14

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.

Bildbeschreibung hier eingeben

  1. 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?

  2. 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.)

  3. 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!


Anscheinend basiert Ihr Verständnis auf Bus Mastering, das meiner Meinung nach moderner ist als das in diesem Lehrbuch beschriebene DMA-Konzept. Das DMA-Konzept im Lehrbuch ist primitiver.
rwong

Ich habe ein Diagramm für ein vereinfachtes Modell hinzugefügt, das das Buch verwendet.
StackExchange for All

Der Pfeil 3 im Diagramm scheint nicht mit der Textbeschreibung übereinzustimmen ... herzlichen Glückwunsch. Um zu bestimmen, welches richtig ist, wird das Bus-Timing-Diagramm für Schritt 3 benötigt. Noch wichtiger ist, dass Sie in Schritt 3 herausfinden müssen, welches Gerät für das Halten des Datensignals verantwortlich ist. Sendet der Plattencontroller zuerst die Daten an den DMA-Controller und wiederholt dann der DMA-Controller die Daten (indem er seine eigene Spannung auf den Bus legt) ) zur Erinnerung?
rwong

Das "Ack" in Schritt 4 ist ebenfalls verdächtig. Kennt der DMA nicht bereits die Anzahl der zu kopierenden Bytes?
rwong

Ich weiß nicht, wie ich das klären soll. Welche Bücher über Betriebssysteme und Architektur haben Sie studiert oder halten Sie für die besten?
StackExchange for All

Antworten:


7

Q1

Im ersten Schritt verwenden wir NICHT DMA, daher wird der Inhalt des Plattencontrollers Stück für Stück vom Prozessor gelesen. Der Prozessor speichert die Daten natürlich im Speicher des Systems (vorausgesetzt, die Daten werden tatsächlich für etwas verwendet und nicht einfach weggeworfen).

Der Puffer ist in diesem Fall ein Stück Speicher auf der Festplatte (Controller) selbst, und das Controller-Gerät registriert ein Steuerregister der Festplatte (Controller) selbst.

Wenn Sie das Betriebssystem (oder eine andere Software) nicht einbeziehen, ist eine DMA-Operation erforderlich. In dem Textabschnitt, den Sie in diesem Teil Ihrer Frage behandeln, wird DMA NICHT verwendet. Also, nein, so wird es in diesem Fall nicht passieren.

Q2

Der springende Punkt eines DMA-Controllers besteht also darin, "die mühsame Aufgabe des Speicherns von Daten aus dem internen Puffer des Geräts im Hauptspeicher auszuführen". Die CPU arbeitet sowohl mit dem DMA-Controller als auch mit dem Plattengerät zusammen. Wenn die Festplatte dies selbst tun könnte, wäre kein DMA-Controller erforderlich.

Und in der Tat, in modernen Systemen wird die DMA - Fähigkeit typischerweise in die Festplattencontroller selbst gebaut, in dem Sinne , dass der Controller „Bus - Mastering“ Fähigkeiten, was bedeutet , dass der Controller selbst IS der DMA - Controller für das Gerät. Betrachtet man sie jedoch als zwei separate Geräte, ist das gesamte Konzept von DMA etwas weniger verständlich.

Q3 (Art von)

Wenn Sie sich die Festplatte als den Stapel Ziegel vorstellen, der gerade auf einer Baustelle angeliefert wurde, und der Prozessor der Maurer ist, der die Ziegel legt, um das Haus zu bauen. Der DMA-Controller ist der Arbeiter, der die Ziegel vom Ziegelstapel dorthin befördert, wo sie für den Maurer benötigt werden. Dies bedeutet, dass sich der Maurer auf die eigentliche Arbeit des Verlegens von Ziegeln konzentrieren kann selbst), und die einfache Arbeit des "Holens und Tragens" kann von einem weniger erfahrenen Arbeiter erledigt werden.

Anekdotenbeweis: Als ich ungefähr 1997 zum ersten Mal von der DMA-Übertragung von der Festplatte in den Speicher erfuhr, als IDE-Controller mit der Verwendung von DMA begannen und Sie einen Treiber für den "Motherboard IDE Controller" benötigen, damit die IDE DMA ausführen kann Das Lesen von der Festplatte würde etwa 6-10% der CPU-Zeit in Anspruch nehmen, während DMA im selben Setup etwa 1% der CPU-Zeit beanspruchen würde. Zuvor verwendeten nur ausgefallene Systeme mit SCSI-Festplattencontrollern DMA.


5

Dies ist keine Antwort; es ist eine Bitte um Klarstellung, die zu lang ist, um in die Kommentare zu passen.

Bevor jemand diese Frage beantworten kann, muss er die diskutierte Computersystemarchitektur klar erläutern. Nämlich:

  • Um welche Bussysteme handelt es sich in dieser Beschreibung?

    • Die meisten Computersysteme haben einen Speicherbus.
    • Die meisten Computer haben auch andere Bussysteme.
  • Geht das Platten-IO auch über den Speicherbus?

    • Mit anderen Worten, verwendet die Platte die Adressbusleitungen für Adressen und die Datenbusleitungen für Daten?
  • Sieht der Festplattencontroller den Speicherbus als ...

    • Ein Speicherbus? Es denkt, es spricht mit einem Speicherchip; dh RAS (Zeilenzugriffsimpuls), CAS (Spaltenzugriffsimpuls), ...
    • Sehr unwahrscheinlich - für die Kommunikation mit einem Speicherchip muss die Befehlsausgabe gemäß DRAM-Timing (Latenzen) äußerst präzise sein - einige Taktzyklen zu früh oder zu spät, da sonst Daten verloren gehen.
  • Also ... was denkt der Disk-Controller, dass der Bus "tatsächlich ist"?

  • In den meisten Computersystemen gibt es eine Art von E / A, die als "Port-E / A" bezeichnet wird.

    • Die Port-E / A können entweder auf den Speicherbus gepackt werden oder über einen anderen dedizierten Bus verfügen.
    • Die Besonderheit von Port I / O ist, dass man die Dinge in einem einzigen (oder einer vordefinierten konstanten Anzahl von) Buszyklus erledigen kann - ohne sich um die Gefahren von DRAM-Timings sorgen zu müssen.
  • In fortschrittlicheren Systemen (seit nunmehr zwei Jahrzehnten) gibt es neuere Arten von Bussystemen. Zum Beispiel ISA, PCI, AGP, PCMCIA ... SCSI, ATA, SAS, SATA, FC-AL ...


Jetzt, wo so viele Unsicherheiten in Bezug auf "das diskutierte Computersystem" auftauchen, können Sie verstehen, warum Sie auf Ihre Frage keine eindeutige Antwort erhalten.

Ja, ich weiß, dass es aus einem Lehrbuch stammt. Du hast eine Kopie. Ich nicht. (Nicht zu Hause - es gibt jedoch eine im Büro.) Wenn Sie eine Antwort benötigen, müssen Sie einige Diagramme anzeigen und erläutern, wie das Bussystem Ihres Computers aussieht.


Im Endeffekt jedoch:

  • Ein DMA ist ein programmierbares Gerät. Das heißt, die CPU ist letztendlich dafür verantwortlich , dem DMA mitzuteilen, was zu tun ist. Während des Zeitfensters, in dem der DMA das System übernimmt, wird die CPU natürlich zusammenarbeiten, indem sie den DMA die Show laufen lässt.

  • Unter der Steuerung der CPU (und des Betriebssystems, auf dem sie ausgeführt wird) kann ein DMA die Steuerung für einen oder mehrere Busse (mehrere) übernehmen, um die Übertragung von Daten vom Plattencontroller zum Hauptspeicher zu erleichtern.

  • Während des Zeitraums, in dem der DMA den Bus übernimmt (Plural), gibt der DMA Befehle über diesen Bus aus - dh anstelle seines üblichen Controllers, dh der DMA gibt vor, die Arbeit der CPU zu erledigen.

  • Wenn die Datenübertragung zwei verschiedene Busse umfasst, muss der DMA dies möglicherweise auf einen anderen Bus ausführen.

  • Um eine Anzahl von Bytes (Wörter usw.) verschieben zu können, enthält der DMA einen Schleifenzähler, um die verbleibende zu kopierende Datenmenge zu verfolgen.

  • Um in den Hauptspeicher schreiben zu können, enthält der DMA ein Speicheradressregister, das von der CPU programmiert werden kann, so dass die CPU dem DMA mitteilen kann, wohin die Daten geschrieben werden sollen.

  • Abhängig vom Busdesign des Systems muss sich der DMA möglicherweise mit den grausamen Details der DRAM-Taktzyklen befassen oder nicht.

  • Es war einmal, einige Zeit nach der Erfindung von DMA, als einige Peripheriegeräte begannen, DMA auf ihre Controller zu packen - dies wird als Bus-Mastering bezeichnet . Unabhängig davon, ob sich der DMA auf dem CPU-Paket, der Hauptplatine oder der E / A-Karte befindet, muss er letztendlich von der CPU gesteuert (programmiert) werden, da diese den Zugriff auf den Systembus (Plural) aushandeln muss der Hauptspeicher.

  • Moderne Computersysteme haben ein spezielles Subsystem, das als DRAM-Controller bezeichnet wird. Wenn es eine gibt, ist es fast sicher, dass dieser DRAM-Controller auch die Funktionalität von DMA erfüllt, das heißt, es sieht aus wie eine programmierbare "Byte-Kopierschleife", und die gesamte oben genannte Komplexität ist im Silizium des DRAM verborgen Regler.


Wenn Sie es sehr verwirrend finden - ich finde es auch verwirrend -, benötigen Sie Diagramme. Viele Diagramme. Systemdiagramme. Busdiagramme. Zeitdiagramme. Zustandsübergangsdiagramme. etc.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.