Direct Memory Access (DMA) is een methode waarmee computers gegevens efficiënter kunnen overdragen. In plaats van dat de CPU elke overdracht afhandelt, verzendt een DMA-controller gegevens rechtstreeks tussen het geheugen en de apparaten. Dit bespaart tijd, vermindert het stroomverbruik en stelt de CPU in staat zich op andere taken te concentreren.

Overzicht van directe geheugentoegang
Direct Memory Access, of DMA, is een methode die computers gebruiken om gegevens efficiënter te verplaatsen. De CPU houdt toezicht op het verzenden van informatie van de ene plaats naar de andere in de computer. Dit kost tijd en houdt de CPU bezig met kleine taken.
Bij DMA neemt een speciaal onderdeel van het systeem, een DMA-controller genaamd, deze taak over. Hiermee kunnen apparaten gegevens rechtstreeks uit het geheugen van de computer verzenden of ontvangen zonder dat de CPU elke stap hoeft te verwerken. Terwijl de overdracht plaatsvindt, is de CPU vrij om aan andere taken te blijven werken.
Deze opstelling zorgt ervoor dat het systeem soepeler werkt omdat de CPU niet wordt vertraagd door constante gegevensverplaatsing. Het helpt ook energie te besparen en verbetert de algehele prestaties van de computer.
Functies voor directe geheugentoegang
Snelle gegevensoverdracht
DMA maakt een snelle overdracht van grote gegevensblokken mogelijk zonder tussenkomst van de CPU, waardoor de doorvoer wordt verbeterd.
CPU-offloading
De CPU is bevrijd van repetitieve taken voor het verplaatsen van gegevens, waardoor deze beschikbaar blijft voor berekeningen.
Verminderde interrupt-overhead
DMA minimaliseert het aantal interrupts in vergelijking met geprogrammeerde I/O, waardoor de systeemoverhead wordt verlaagd.
Direct geheugen
Randapparatuur kan rechtstreeks uit het geheugen lezen of naar het geheugen schrijven, waardoor extra CPU-gemedieerde kopieën worden vermeden.
Ondersteuning via meerdere kanalen
Moderne DMA-controllers ondersteunen meerdere onafhankelijke kanalen, waardoor gelijktijdige overdrachten mogelijk zijn.
Burst-overdrachtsmogelijkheid
DMA ondersteunt de burst-modus, waarbij gegevensblokken in één continue stroom worden overgedragen voor efficiëntie.
Voorrang en arbitrage
DMA-controllers gebruiken prioriteitsniveaus om te beslissen welk kanaal toegang krijgt tot de geheugenbus.
Overdracht modi
Ondersteunt verschillende modi, zoals enkelvoudige, blok-, burst- en vraaggebaseerde overdrachten, afhankelijk van de systeembehoeften.
Compatibiliteit met meerdere bussen
Werkt met verschillende systeembussen voor flexibele integratie.
Foutdetectie en -afhandeling
Veel DMA-systemen bevatten pariteitscontroles of foutcorrectie om de integriteit van de gegevens te waarborgen.
Overdracht van geheugen naar geheugen
Sommige DMA-controllers maken het mogelijk om gegevens rechtstreeks van de ene geheugenlocatie naar de andere te kopiëren zonder tussenkomst van de CPU.
Stap-voor-stap DMA-bediening
| Stap | Wat gebeurt er? | Signaal / Actie |
|---|---|---|
| 1 | Het apparaat vraagt om DMA-service. | DRQ-lijn (DMA-verzoek) geactiveerd |
| 2 | De DMA-controller vraagt om besturing van de systeembus. | BR (bus aanvraag) |
| 3 | De CPU geeft de bus tijdelijk vrij aan de DMA-controller. | BG (Bus Grant) |
| 4 | De DMA-controller stelt het geheugenadres en het aantal woorden (data-eenheden) in dat moet worden overgedragen. | Adres & Telling Registers |
| 5 | Gegevens worden rechtstreeks overgedragen tussen het I/O-apparaat en het RAM-geheugen, waarbij de CPU wordt omzeild. | Directe overdracht |
| 6 | Na voltooiing informeert de DMA-controller de CPU. | INTR (onderbreken) |
DMA-controller en zijn aansluitingen

De belangrijkste onderdelen zijn de CPU, het geheugen, de DMA-controller en de input/output (I/O)-apparaten. De DMA-controller houdt toezicht op het verplaatsen van gegevens tussen geheugen en I/O-apparaten zonder dat de CPU al het werk hoeft te doen.
Wanneer een I/O-apparaat gegevens moet verzenden of ontvangen, stuurt het een verzoek naar de DMA-controller. De controller vraagt vervolgens de CPU om toestemming om de systeembus te gebruiken, die het belangrijkste pad is voor gegevens in de computer. Zodra de CPU het toelaat, neemt de DMA-controller de controle over en draagt de gegevens rechtstreeks over tussen het geheugen en het I/O-apparaat. Nadat de overdracht is voltooid, wordt de CPU gewaarschuwd dat de taak is voltooid.
Het diagram toont ook de verschillende lijnen die informatie bevatten. Adresregels (grijs) bepalen waar de gegevens naartoe moeten, gegevensregels (groen) bevatten de daadwerkelijke informatie en controleregels (oranje) beheren het proces. De DMA-bus verbindt meerdere I/O-apparaten met de controller. Deze instelling helpt het systeem om gegevens soepeler te verwerken en houdt de CPU vrij voor andere taken.
DMA-overdrachtsmodi en hun verschillen
| Wijze | Hoe het werkt | Snelheid | CPU-impact |
|---|---|---|---|
| Burst-modus | Overdracht van het volledige gegevensblok in één continue reeks | Zeer hoog | CPU gestopt totdat de overdracht eindigt |
| Cyclus stelen | Overdracht van één woord per buscyclus, afgewisseld met CPU-cycli | Gemiddeld | CPU vertraagde iets, maar stopte niet |
| Transparante modus | Overdrachten alleen wanneer de CPU inactief is of de bus niet gebruikt | Lager | CPU draait zonder onderbreking |
DMA Belangrijkste Stijlen
Bus mastering (DMA van de eerste partij)
Bij busmastering neemt het apparaat zelf tijdelijk de rol van systeembuscontroller over. Dit betekent dat het direct uit het geheugen kan lezen of naar het geheugen kan schrijven zonder constant CPU-toezicht. Omdat het apparaat zijn eigen overdrachten beheert, is het proces zeer snel en efficiënt. Moderne high-performance componenten zoals PCIe GPU's, NVMe-schijven en netwerkkaarten maken vaak gebruik van deze methode. De CPU is grotendeels vrij tijdens deze overdrachten, wat de algehele systeemprestaties verbetert.
DMA van derden (op basis van controllers)
In dit model neemt een centrale DMA-controller de gegevensoverdracht namens verschillende apparaten op zich. Elk apparaat stuurt zijn verzoek naar de controller, die vervolgens de controle over de bus overneemt om gegevens te verplaatsen. Deze aanpak was standaard in eerdere computersystemen en is nog steeds gebruikelijk in embedded microcontrollers waar hardware eenvoudig en kosteneffectief moet blijven. Het is langzamer dan busmastering omdat alle apparaten dezelfde controller delen, wat wachttijd en overhead met zich meebrengt.
DMA verspreiden en verzamelen
In veel gevallen worden gegevens in het geheugen niet in één rechte lijn opgeslagen. Het kan worden opgesplitst in verschillende plaatsen. Scatter-Gather DMA maakt het mogelijk om al deze gegevens in één keer te verplaatsen, zelfs als ze verspreid zijn.
De DMA-controller houdt een lijst bij van waar elk stukje data zich bevindt. Vervolgens volgt die lijst om de stukken te verzamelen en ze als een enkel blok over te brengen.
Voordelen van Scatter-Gather DMA
• Verplaatst verspreide gegevens zonder extra stappen.
• Heeft minder signalen naar de CPU nodig.
• Maakt gegevensoverdracht sneller en soepeler.
• Bespaart geheugenruimte door extra kopieën te vermijden.
DMA- en cachesynchronisatie
DMA verplaatst data direct tussen een apparaat en geheugen, terwijl de CPU vaak met een eigen cache werkt. Hierdoor kunnen de CPU en DMA soms verschillende versies van dezelfde gegevens zien. Het is een probleem, want als de CPU-cache nog oude gegevens bevat, kunnen wijzigingen die door het apparaat zijn aangebracht, worden genegeerd. Als de CPU alleen nieuwe gegevens in de cache heeft, kan het apparaat verouderde waarden uit het geheugen lezen. Het wordt opgelost door:
• De CPU kan de cache leegmaken voordat het apparaat leest, zodat het geheugen de nieuwste gegevens heeft.
• De CPU kan de cache ongeldig maken nadat het apparaat heeft geschreven, zodat de bijgewerkte gegevens uit het geheugen worden geladen.
• Moderne processoren maken gebruik van cache-coherente DMA, die dit automatisch afhandelt.
Rol van IOMMU in DMA-veiligheid
| Functie | Functie | Voordeel |
|---|---|---|
| Adres in kaart brengen | Vertaalt DMA-verzoeken van apparaten in geldige geheugenadressen | Voorkomt onbedoelde of schadelijke gegevensbeschadiging |
| Isolatie | Beperkt elk apparaat tot de toegewezen geheugenzones | Beschermt het systeem tegen defecte of schadelijke apparaten |
| 64-bits ondersteuning | Breidt adressering uit tot voorbij de 32-bits limieten | Ondersteunt moderne apparaten met grote geheugenvereisten |
Beveiligingsproblemen: DMA-aanvallen en -beveiligingen
Beveiligingsrisico's
• Gegevensdiefstal door ongeoorloofde DMA-toegang.
• Malware-injectie in het systeemgeheugen.
• Thunderbolt evil maid valt laptops aan.
2 Beveiligingen
• IOMMU / VT-d / AMD-Vi inschakelen.
• Gebruik Kernel DMA-bescherming (Windows).
• Schakel ongebruikte externe poorten uit.
• Gebruik beveiligde pc's en BIOS/UEFI-beperkingen.
Verschillende toepassingen van DMA
Overdracht van schijven en opslag
Met DMA kunnen harde schijven, SSD's en optische stations grote gegevensblokken rechtstreeks naar het geheugen verplaatsen zonder de CPU te belasten.
Netwerkinterfaces
Netwerkkaarten gebruiken DMA om inkomende en uitgaande pakketten snel over te dragen, waardoor snelle communicatie mogelijk is zonder de processor te vertragen.
Audio- en videoverwerking
Geluidskaarten, grafische processors en apparaten voor het vastleggen van video's vertrouwen op DMA om continue gegevensstromen met minimale latentie te verwerken.
Ingebedde systemen
Microcontrollers gebruiken DMA om repetitieve gegevensverplaatsingen (zoals ADC-metingen of UART-buffers) te ontlasten, waardoor CPU-cycli worden vrijgemaakt voor besturingstaken.
Grafische weergave
GPU's passen DMA toe voor het laden van texturen en updates van framebuffers, waardoor vloeiende rendering in games en visuele toepassingen wordt ondersteund.
Conclusie
Direct Memory Access (DMA) verbetert de efficiëntie van de computer door gegevens rechtstreeks tussen geheugen en apparaten te verplaatsen zonder afhankelijk te zijn van de CPU. Dit vermindert vertragingen, verlaagt het stroomverbruik en zorgt voor een soepelere werking bij taken zoals opslag, netwerken en grafische weergave. Met ingebouwde foutafhandeling en beveiligingsfuncties blijft DMA een betrouwbare methode voor snelle en efficiënte gegevensoverdracht.
Veelgestelde vragen [FAQ]
Wat is het verschil tussen DMA en geprogrammeerde I/O?
DMA draagt gegevens over met behulp van een controller, terwijl geprogrammeerde I/O voor elke overdracht afhankelijk is van de CPU.
Hoe bespaart DMA energie?
Het bevrijdt de CPU van constante overdrachten, waardoor deze vaker in een energiebesparende toestand kan komen.
Tot welk geheugen heeft DMA toegang?
DMA heeft toegang tot systeem-RAM, videogeheugen, buffergeheugen en soms gegevens kopiëren tussen geheugenregio's.
Kan DMA overweg met meerdere apparaten tegelijk?
Ja, DMA-controllers gebruiken prioriteit en arbitrage om te beslissen welk apparaat als eerste wordt overgedragen.
Wat zijn de belangrijkste limieten van DMA?
Het is inefficiënt voor kleine overdrachten en kan inconsistenties in de cache veroorzaken zonder de juiste synchronisatie.
Waarom is DMA belangrijk in bestaande systemen?
Het biedt snelle gegevensoverdracht met lage latentie, zodat de CPU zich kan concentreren op tijdkritische taken.