close

Direkter Speicherzugriff

Zur Navigation springen Zur Suche springen
Image
Betrieb eines Systems mit DMAC

In der Informatik ist der DMA ( Direct Memory Access , „ direkter Speicherzugriff “) eines Computers der Mechanismus, der es anderen Subsystemen, wie Peripheriegeräten , ermöglicht, direkt auf den internen Speicher zuzugreifen, um Daten auszutauschen , beim Lesen und/oder Schreiben, ohne Einbeziehen der Steuereinheit (CPU) für jedes Byte , das durch den üblichen Interrupt -Mechanismus und die nachfolgende Anforderung für die gewünschte Operation übertragen wird, aber durch Erzeugen eines einzigen Interrupts pro übertragenem Block. [1] [2]

Beschreibung

Der DMA hat daher über den Direct Access Controller (DMAC) die Aufgabe, die über den BUS laufenden Daten zu verwalten, damit Peripheriegeräte, die mit unterschiedlichen Geschwindigkeiten arbeiten, kommunizieren können, ohne die CPU einer enormen Interrupt -Last auszusetzen, die die jeweilige Verarbeitung ständig unterbrechen würde Zyklus .

DMA wird von vielen Hardwaresystemen wie Laufwerkscontrollern , Grafikkarten , Netzwerkkarten und Soundkarten verwendet .

Im Wesentlichen wird bei einer DMA-Übertragung ein Speicherblock von einem Gerät auf ein anderes kopiert. Die Abkopplung des Datenbusses vom Prozessor zur Zuweisung an die Steuerung des DMA, den dieser zur Datenübertragung zwischen den beiden Peripheriegeräten nutzt, erfolgt auf Anforderung des DMAC über Busswitches . Die CPU leitet einfach die Übertragung ein, indem sie den Datenbus freigibt, während die eigentliche Übertragung vom DMA-Controller (DMAC) durchgeführt wird. Ein typischer Fall ist das Verschieben eines Speicherblocks von einem externen Speicherlaufwerk in den Hauptspeicher . Wenn diese Operation, wie es dank DMA geschieht, den Prozessor nicht blockiert, kann er mit anderen Operationen fortfahren.

Der DMA verwaltet die Übertragungen zwischen CPU und Peripherie durch die Verwendung verschiedener Leitungen (Acknowledge, Request, Control) und der beiden Register DC (Data Counter) und IOAR (Input/Output Address Register) . Wenn die CPU im Speicher vorhandene Daten benötigt, lädt sie die Adresse, von der aus die Operation gestartet werden soll, in IOAR und die Anzahl der aufeinanderfolgenden zu verarbeitenden Daten in DC und informiert den DMA über ein weiteres Bit, wenn es sich um eine Lese- oder Schreiboperation handelt. An diesem Punkt sendet der DMA die Anforderung an das Peripheriegerät, und wenn er das Bestätigungssignal empfängt, beginnt er mit der Übertragung. Bei jedem Schritt wird IOAR erhöht und DC verringert, bis DC gleich 0 ist.

Die Übertragung zwischen DMA und I/O kann auf mehreren Wegen erfolgen:

  • Burst-Übertragung : Sobald die Übertragung begonnen hat, behält der DMA die Kontrolle über den BUS auf Kosten der CPU bei, bis er beendet wird: Der Zugriff auf den Bus durch die CPU bleibt während der gesamten Übertragung verweigert. Dies setzt voraus, dass das Gerät und der Speicher eine so schnelle und dauerhafte Übertragung ermöglichen, wie der DMA-Controller benötigt;
  • Zyklusdiebstahl : Der DMA führt die Wortübertragung jeweils nur einen vollständigen Zyklus durch (dh für jeden Zyklus bildet er eine Schnittstelle mit dem Peripheriegerät und führt die Übertragung nur durch, wenn er bereit ist, mit anderen Worten, indem er einen Quittungsaustausch durchführt). Dadurch ist die Zeit, während der der CPU der Zugriff auf den Datenbus verweigert wird, stärker fragmentiert;
  • Transparent / Hidden : Der DMA belegt den BUS nur dann, wenn die CPU ihn nicht benötigt. Um dies zu erreichen, überwacht der DMA die CPU und startet einen Buszyklus nur dann, wenn der in der CPU ausgeführte Befehl lang genug ist, um dies zuzulassen, und wenn dieser Befehl keine Übertragungen auf dem BUS betrifft.

Die Scatter-Gather-DMA-Technik ermöglicht die Übertragung von Daten zu mehreren Speicherbereichen während einer einzigen DMA-Transaktion. Das Ergebnis ist äquivalent zu einer Kette normaler DMA-Anforderungen, aber dies entlastet die CPU weiter von Interrupts und Datenkopieroperationen.

Das Akronym DMREQ steht für DMA REQUEST . DMACK steht für DMA-Bestätigung .

Betrieb

Der DMA-Chip hat mindestens vier Register, auf die die in der CPU laufende Software zugreifen kann:

  1. Der erste enthält die Startspeicheradresse zum Lesen oder Schreiben
  2. Der zweite zählt die Anzahl der zu übertragenden Bytes (oder Worte).
  3. Der dritte gibt die Gerätenummer oder den zu verwendenden E/A-Adressraum an, der das gewünschte E/A-Gerät bestimmt
  4. Der vierte legt fest, ob die Daten vom E/A-Gerät gelesen oder darauf geschrieben werden sollen

Um also einen Block von 32 Bytes von der Speicheradresse 100 zum Terminal (das ist Gerät 4) zu übertragen, schreibt die CPU die Nummern 100, 32 und 4 in die ersten drei DMA-Register, plus den Code zum Schreiben (in diesem Fall wir Angenommen, 1) im vierten Register. An diesem Punkt macht der DMA eine Busanforderung, um Byte 100 aus dem Speicher zu lesen, ähnlich wie es die CPU tun würde. Sobald das Byte erhalten ist, würde der DMA-Controller eine E/A-Anforderung an Gerät 4 stellen, die darauf abzielt, das Byte zu schreiben. Nach Abschluss dieser Operationen inkrementiert der DMA-Controller sein Adressregister um 1 und dekrementiert sein Zählerregister um 1. Wenn das Zählerregister immer noch positiv ist, wird mit dem Speicherlesen eines weiteren Bytes und dessen Schreiben in das Gerät fortgefahren.

Wenn der Zähler schließlich gelöscht wird, stoppt der DMA-Controller die Übertragung von Daten und sendet einen Impuls auf die mit dem CPU-Chip verbundene Unterbrechungsleitung. Bei Vorhandensein von DMA muss die CPU nur wenige Register initialisieren, wonach sie frei ist, andere Aufgaben auszuführen, bis die Übertragung abgeschlossen ist, was durch einen Interrupt vom DMA-Controller signalisiert wird. Einige DMA-Controller haben zwei, drei oder mehr Registersätze, um gleichzeitige Übertragungen zu steuern.

Während DMA die CPU von der hohen I/O-Last entlastet, ist der Prozess nicht ganz kostenlos. Wenn ein Hochgeschwindigkeitsgerät, wie z. B. eine Platte, per DMA übertragen wird, dauert es viele Buszyklen, um auf den Speicher und das Gerät zuzugreifen. Während dieser Zyklen muss die CPU warten (DMA hat immer eine höhere Buspriorität als die CPU, da E/A-Geräte Verzögerungen kaum tolerieren). Das Phänomen, das auftritt, wenn der DMA-Controller Buszyklen von der CPU stiehlt, wird Cycle Stealing genannt . Nicht einmal der Gewinn, keinen Interrupt pro Byte (oder pro Wort) handhaben zu müssen, gleicht den durch die Aneignung von Schleifen verursachten Schaden weitgehend aus.

Notizen

  1. ^ Tanenbaum , S. 374-375 .
  2. ^ Bucci 137-143

Bibliographie

Verwandte Artikel

Andere Projekte

Externe Links