GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est la différence entre DMA et les E/S mappées en mémoire ?

Les E/S mappées en mémoire signifient que les registres du périphérique sont mappés dans l'espace mémoire de la machine - lorsque ces régions de mémoire sont lues ou écrites par le processeur, il lit ou écrit sur le périphérique, plutôt que sur la mémoire réelle. Pour transférer des données de l'appareil vers une mémoire tampon réelle, le processeur doit lire les données des registres de l'appareil mappés en mémoire et les écrire dans la mémoire tampon (et l'inverse pour transférer des données vers l'appareil).

Avec un transfert DMA, l'appareil est capable de transférer directement des données vers ou depuis un tampon de mémoire réel lui-même. Le processeur indique à l'appareil l'emplacement du tampon, puis peut effectuer d'autres tâches pendant que l'appareil accède directement à la mémoire.


Puisque d'autres ont déjà répondu à la question, je vais juste ajouter un peu d'histoire.

Autrefois, sur le matériel x86 (PC), il n'y avait que de l'espace d'E/S et de l'espace mémoire. Il s'agissait de deux espaces d'adressage différents, accessibles avec un protocole de bus différent et des instructions CPU différentes, mais capables de communiquer via le même emplacement de carte enfichable.

La plupart des périphériques utilisaient l'espace d'E/S pour l'interface de contrôle et l'interface de transfert de données en bloc. Le moyen le plus simple d'accéder aux données consistait à exécuter de nombreuses instructions CPU pour transférer les données un mot à la fois d'une adresse d'E/S vers une adresse mémoire (parfois appelée "bit-banging")

Afin de déplacer les données des périphériques vers la mémoire hôte de manière autonome, le protocole de bus ISA ne prenait pas en charge les périphériques pour initier les transferts. Une solution de compromis a été inventée :le contrôleur DMA. Il s'agissait d'un élément matériel qui s'installait près du processeur et lançait des transferts pour déplacer les données de l'adresse d'E/S d'un périphérique vers la mémoire, ou vice versa. Parce que l'adresse d'E/S est la même, le contrôleur DMA effectue exactement les mêmes opérations qu'un CPU, mais un peu plus efficacement et laissant une certaine liberté pour continuer à fonctionner en arrière-plan (mais peut-être pas aussi longtemps qu'il ne peut pas parler à la mémoire).

Avance rapide jusqu'à l'époque du PCI, et les protocoles de bus sont devenus beaucoup plus intelligents :n'importe quel appareil peut initier un transfert. Il est donc possible, par exemple, qu'une carte contrôleur RAID déplace toutes les données qu'elle souhaite vers ou depuis l'hôte à tout moment. C'est ce qu'on appelle le mode "maître de bus", mais sans raison particulière, les gens continuent d'appeler ce mode "DMA" même si l'ancien contrôleur DMA a disparu depuis longtemps. Contrairement aux anciens transferts DMA, il n'y a souvent aucune adresse d'E/S correspondante, et le mode maître du bus est souvent la seule interface présente sur l'appareil, sans aucun mode CPU "bit-banging".


Les E/S mappées en mémoire permettent au processeur de contrôler le matériel en lisant et en écrivant des adresses mémoire spécifiques. Habituellement, cela serait utilisé pour les opérations à faible bande passante telles que la modification des bits de contrôle.

Le DMA permet au matériel de lire et d'écrire directement dans la mémoire sans impliquant le CPU. Habituellement, cela serait utilisé pour les opérations à bande passante élevée telles que les E/S de disque ou l'entrée vidéo de la caméra.

Voici un article qui présente une comparaison approfondie entre MMIO et DMA.

Directives de conception pour les systèmes RDMA hautes performances


L'accès direct à la mémoire (DMA) est une technique permettant de transférer les données des E/S vers la mémoire et de la mémoire vers les E/S sans l'intervention du CPU. À cette fin, une puce spéciale, nommée contrôleur DMA, est utilisée pour contrôler toutes les activités et la synchronisation des données. Par conséquent, comparé aux autres techniques de transfert de données, le DMA est beaucoup plus rapide.

D'autre part, la mémoire virtuelle agit comme un cache entre la mémoire principale et la mémoire secondaire. Les données sont extraites à l'avance de la mémoire secondaire (disque dur) dans la mémoire principale afin que les données soient déjà disponibles dans la mémoire principale en cas de besoin. Cela nous permet d'exécuter plus d'applications sur le système que nous n'avons assez de mémoire physique pour en prendre en charge.


Linux
  1. Quelle est la différence entre la mémoire tampon et la mémoire cache sous Linux ?

  2. Quelle est la différence entre fsck et e2fsck ?

  3. Quelle est la différence entre adduser et useradd ?

  4. Quelle est la différence entre ls et l ?

  5. Quelle est la différence entre les noyaux PAE 32 bits et 64 bits ?

Quelle est la différence entre Linux et Unix ?

Quelle est la différence entre la connexion et le shell sans connexion

Quelle est la différence entre la commande apt et apt-get ?

Qu'est-ce qu'un Hyperviseur ? Quelle est la différence entre les types 1 et 2 ?

Quelle est la différence entre curl et Wget ?

Quelle est la différence entre `su -` et `su --login` ?