Wat is Direct Memory Access (DMA)?
Direct Memory Access (DMA) is een methode waarmee een input/output (I/O) apparaat rechtstreeks gegevens kan verzenden naar of ontvangen van het hoofdgeheugen, waarbij de CPU wordt omzeild om geheugenbewerkingen te versnellen.
Het proces wordt beheerd door een chip die bekend staat als een DMA-controller (DMAC).
Techopedia legt Direct Memory Access uit
Een specifiek deel van het geheugen wordt gebruikt om gegevens rechtstreeks van een randapparaat naar het moederbord te sturen zonder de microprocessor erbij te betrekken, zodat het proces de algemene werking van de computer niet be?nvloedt.
In oudere computers waren er vier DMA-kanalen, genummerd 0, 1, 2 en 3. Toen de 16-bit Industry Standard Architecture (ISA) uitbreiding werd ge?ntroduceerd, werden de kanalen 5, 6 en 7 toegevoegd.
ISA was een computerstandaard voor IBM-compatibele computers waarmee een apparaat met hogere snelheden transacties kon initi?ren (bus mastering). De ISA DMA-controller heeft 8 DMA-kanalen, elk met een 16-bits adres en telregisters.
ISA is sindsdien vervangen door Accelerated Graphics Port (AGP) en Peripheral Component Interconnect (PCI) uitbreidingskaarten, die veel sneller zijn. Elke DMA draagt ongeveer 2 MB gegevens per seconde over.
De systeembronnen van een computer worden gebruikt voor de communicatie tussen hardware en software. De vier soorten systeembronnen zijn:
- I/O-adressen.
- Geheugenadressen.
- Interrupt requests (IRQ).
- Directe geheugen toegang (DMA) kanalen.
DMA-kanalen worden gebruikt voor gegevensoverdracht tussen het randapparaat en het systeemgeheugen. Alle vier systeembronnen zijn afhankelijk van specifieke lijnen op een bus. Sommige lijnen op de bus worden gebruikt voor IRQ’s, sommige voor adressen (de I/O-adressen en het geheugenadres) en sommige voor DMA-kanalen.
Met een DMA-kanaal kan een apparaat gegevens overdragen zonder de CPU te overbelasten. Zonder de DMA-kanalen kopieert de CPU alle gegevens van het I/O-apparaat via een perifere bus. Door het gebruik van een perifere bus is de CPU bezig tijdens de lees/schrijfoperatie en kan hij geen ander werk verrichten totdat de operatie is voltooid.
Met DMA kan de CPU andere taken uitvoeren terwijl de gegevensoverdracht plaatsvindt. De overdracht van gegevens wordt eerst gestart door de CPU. Het gegevensblok kan op drie manieren door de DMAC van en naar het geheugen worden overgebracht.
In burst-modus wordt de systeembus niet vrijgegeven totdat de gegevensoverdracht is voltooid. In cycle stealing mode wordt de systeembus gedurende enkele klokcycli vrijgegeven tijdens de gegevensoverdracht tussen het DMA-kanaal en het I/O-apparaat, zodat de CPU andere taken kan uitvoeren. Wanneer de gegevensoverdracht is voltooid, ontvangt de CPU een interrupt-verzoek van de DMA-controller. In transparante modus kan de DMAC de systeembus alleen overnemen wanneer de processor deze niet nodig heeft.
Het gebruik van een DMA-controller kan echter leiden tot problemen met de cachecoherentie. De gegevens die zijn opgeslagen in RAM waartoe de DMA-controller toegang heeft, worden mogelijk niet bijgewerkt met de juiste cache-gegevens als de CPU gebruik maakt van extern geheugen.
Oplossingen zijn onder meer het doorspoelen van de cache-regels voordat uitgaande DMA-overdrachten worden gestart, of het ongeldig maken van de cache bij inkomende DMA-overdrachten wanneer externe schrijfopdrachten aan de cache-controller worden gemeld.