Qu'est-ce qu'un contrôleur DMA ? Accès direct mémoire expliqué
Définition
Un **contrôleur DMA (DMAC)** est une unité matérielle qui permet aux périphériques E/S de transférer des données directement vers/depuis la mémoire système **sans intervention du CPU** — libérant le processeur pour d'autres tâches.
Fonctionnement
- Périphérique demande transfert DMA (assert DRQ).
- DMAC prend contrôle bus (via HOLD/HLDA ou arbitre bus).
- DMAC génère adresses mémoire, signaux lecture/écriture.
- Données bougent : Périphérique ↔ Mémoire (contournant registres CPU).
- DMAC signale fin (interruption ou drapeau statut).
- CPU reprend.
Avantages clés
- Décharge CPU : Pas de cycles instructions pour déplacement données.
- Débit supérieur : Transferts en rafale à vitesse bus.
- Concurrence : CPU calcule pendant que E/S se déroule.
- Latence déterministe : Critique pour audio, vidéo, réseau.
Usages courants
- E/S disque (contrôleurs SATA/NVMe ont DMA intégré)
- Paquets réseau (NIC → RAM)
- Streaming audio/vidéo (carte son, GPU)
- Mémoire-à-mémoire (accélération memcpy)
- Microcontrôleurs : UART/SPI/I2C/ADC → tampons RAM
Types
- Mono-canal / Multi-canaux (ex. 8237 : 4 canaux ; SoC modernes : 16–64+)
- Modes vol cycle / rafale / bloc / demande / cascade
- Scatter-gather — chaînes descripteurs pour tampons non contigus.
Contexte moderne
Dans x86, DMA géré par chipset/complexe racine PCIe. Dans ARM/MCU, DMAC intégré (PL330, DMA2D, etc.). Pilotes programment descripteurs ; matériel exécute. Essentiel pour performance.
