Qu'est-ce que DMA (accès direct à la mémoire) ?
Mécanisme de transfert direct des données entre un périphérique et la mémoire sans passer par le CPU. Le CPU peut poursuivre d'autres traitements pendant les transferts volumineux.
Nom japonais: DMA(ダイレクトメモリアクセス)
« DMA (accès direct à la mémoire) » apparaît dans 10 questions d'entraînement réparties sur 6 thèmes, dont Système d'exploitation et matériel, CPU et architecture, Systèmes embarqués et firmware.
Domaine: CPU et architecture
Déroulement d'un transfert DMA
En E/S programmées, le CPU déplace lui-même chaque mot avec des instructions de chargement et de rangement. Avec l'accès direct à la mémoire (DMA), le CPU programme plutôt un contrôleur DMA, ou le moteur DMA propre au périphérique, avec une source, une destination, une longueur et un déclencheur, puis retourne à d'autres tâches. Le contrôleur prend le contrôle du bus, transfère les données et lève une interruption de fin de transfert. Dans un microcontrôleur, par exemple, un timer peut déclencher une conversion ADC à intervalles fixes et le DMA ranger chaque résultat dans un tableau, ne réveillant le CPU que lorsque le tampon est plein.
Questions fréquentes
Que signifie DMA ?
DMA signifie direct memory access (accès direct à la mémoire), un mécanisme qui permet aux périphériques de transférer des données vers et depuis la mémoire principale sans que le CPU copie chaque mot, de sorte que le CPU peut effectuer d'autres tâches pendant le transfert.
Quelle est la différence entre le DMA et les E/S programmées ?
En E/S programmées, le CPU lit ou écrit lui-même chaque mot de données vers le périphérique. Avec le DMA, le CPU se contente de configurer le transfert et il est averti lorsque celui-ci se termine, ce qui économise du temps CPU pour les transferts volumineux ou fréquents.
Pourquoi faut-il invalider le cache après un transfert DMA vers la mémoire ?
Sur les systèmes sans cohérence de cache matérielle, le cache du CPU peut encore contenir d'anciennes copies de cette plage mémoire. L'invalider oblige le CPU à lire les nouvelles données écrites par le périphérique.