DMA versus programmed I/O: manieren van gegevensoverdracht vergeleken
Er zijn twee manieren om data tussen een device en het geheugen te verplaatsen. Bij programmed I/O (PIO) leest en schrijft de CPU zelf woord voor woord via registers. Bij direct memory access (DMA) verplaatst een DMA-controller de data zelf. De CPU stelt de overdracht alleen in en krijgt melding als die klaar is. DMA ontlast de CPU en is veel sneller bij grote overdrachten, maar vraagt meer instelwerk en zorg.
| Kenmerk | Programmed I/O (PIO) | DMA |
|---|---|---|
| Wie de data verplaatst | De CPU. Woord voor woord met load- en store-instructies | De DMA-controller of het device zelf. Rechtstreeks van en naar het geheugen |
| CPU-belasting | Hoog. De CPU is tijdens de hele overdracht bezig | Laag. De CPU stelt de overdracht in en doet ander werk |
| Doorvoer bij grote overdrachten | Beperkt door de snelheid van de CPU | Hoog |
| Instel-overhead | Geen | Adres, lengte en descriptors moeten worden ingesteld en de afhandeling van de voltooiing is nodig |
| Kleine overdrachten | Vaak sneller, omdat er niets hoeft te worden ingesteld | De instelkosten kunnen groter zijn dan het voordeel |
| Complexiteit | Eenvoudig | Complex. Descriptor-rings, uitlijning van buffers, cachecoherentie, IOMMU-instellingen |
| Gebruik van de geheugenbus | Loopt via de CPU | De DMA-engine concurreert met de CPU om geheugenbandbreedte |
| Belangrijkste toepassingen | Kleine besturingsregisters, eenvoudige sensoren, oude PIO-modi | SSD's en NVMe, netwerkkaarten, audiobuffers, continue overdracht van ADC-samples, overdracht naar de GPU |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.