Comment fonctionne un contrôleur DMA?

14

Extrait de la section 5.1.4 Accès direct à la mémoire dans les systèmes d'exploitation modernes par Andrew S. Tanenbaum, Herbert Bos, 2014 ,

Pour simplifier l'explication, nous supposons que la CPU accède à tous les périphériques et à la mémoire via un bus système unique qui connecte la CPU, la mémoire et les périphériques d'E / S, comme illustré à la Fig. 5-4.

entrez la description de l'image ici

  1. Pour expliquer le fonctionnement de DMA, examinons d'abord comment les lectures de disque se produisent lorsque le DMA n'est pas utilisé.

    • Le contrôleur de disque lit d'abord le bloc (un ou plusieurs secteurs) du lecteur en série, bit par bit, jusqu'à ce que le bloc entier se trouve dans le tampon interne du contrôleur.
    • Ensuite, il calcule la somme de contrôle pour vérifier qu'aucune erreur de lecture ne s'est produite. Ensuite, le contrôleur provoque une interruption. Lorsque le système d'exploitation commence à fonctionner, il peut lire le bloc de disque du tampon du contrôleur un octet ou un mot à la fois en exécutant une boucle, chaque itération lisant un octet ou un mot d'un registre de périphérique de contrôleur et le stockant dans la mémoire principale.

    Q: dans la deuxième étape,

    • les données ne sont-elles pas transférées " du tampon du contrôleur " vers la mémoire principale? Pourquoi est-il indiqué à la fois "à partir du tampon du contrôleur " et "à partir d'un registre de périphérique de contrôleur "?

    • dans la deuxième étape, le contrôleur peut-il transférer des données de son tampon vers la mémoire principale, sans interrompre le processeur, et sans impliquer à nouveau le système d'exploitation?

  2. Lorsque DMA est utilisé, la procédure est différente.

    • D'abord, la CPU programme le contrôleur DMA en définissant ses registres afin qu'il sache quoi transférer où (étape 1 de la figure 5-4).
      Il envoie également une commande au contrôleur de disque lui disant de lire les données du disque dans son tampon interne et de vérifier la somme de contrôle.
    • Lorsque des données valides se trouvent dans la mémoire tampon du contrôleur de disque, DMA peut commencer. Le contrôleur DMA initie le transfert en émettant une demande de lecture sur le bus vers le contrôleur de disque (étape 2). Cette demande de lecture ressemble à toute autre demande de lecture, et le contrôleur de disque ne sait pas (ou ne se soucie pas) si elle provient du CPU ou d'un contrôleur DMA. En règle générale, l'adresse mémoire sur laquelle écrire est sur les lignes d'adresse du bus. Ainsi, lorsque le contrôleur de disque récupère le mot suivant dans sa mémoire tampon interne, il sait où l'écrire. L'écriture en mémoire est un autre cycle de bus standard (étape 3).
    • Une fois l'écriture terminée, le contrôleur de disque envoie un signal d'accusé de réception au contrôleur DMA, également via le bus (étape 4). Le contrôleur DMA incrémente ensuite l'adresse mémoire à utiliser et décrémente le nombre d'octets. Si le nombre d'octets est toujours supérieur à 0, les étapes 2 à 4 sont répétées jusqu'à ce que le nombre atteigne 0.
    • À ce moment, le contrôleur DMA interrompt le CPU pour lui faire savoir que le transfert est maintenant terminé. Lorsque le système d'exploitation démarre, il n'a pas besoin de copier le bloc de disque dans la mémoire; il est déjà là.

    Q: dans la deuxième étape, le contrôleur DMA demande au contrôleur de disque de transférer les données du tampon du contrôleur de disque vers la mémoire principale. Dans la première étape, le CPU envoie une commande au contrôleur de disque lui disant de lire les données du disque dans sa mémoire tampon interne. Dans le même temps, le processeur peut-il également dire au contrôleur de disque de transférer les données du tampon du contrôleur de disque vers la mémoire principale, lorsque le contrôleur de disque a fini de transférer les données du disque vers le tampon du contrôleur de disque, de sorte qu'il n'est pas nécessaire Contrôleur DMA pour dire au contrôleur de disque de transférer les données du tampon du contrôleur de disque vers la mémoire principale? (Je ne comprends pas pourquoi nous avons besoin d'un contrôleur DMA pour le transfert de données entre le disque et la mémoire principale, alors devinez que je manque quelque chose d'important pour comprendre la citation).

  3. Un contrôleur de périphérique d'un périphérique contrôle le périphérique et effectue des opérations sur le périphérique. Sur quel appareil un contrôleur DMA contrôle-t-il et effectue-t-il des opérations?

Merci!

Tim
la source
Il semble que votre compréhension soit basée sur la maîtrise du bus, qui, je suppose, est plus moderne que le concept DMA décrit dans ce manuel. Le concept DMA dans le manuel est plus primitif.
rwong
J'ai ajouté un diagramme pour un modèle simplifié que le livre utilise.
Tim
La flèche 3 dans le diagramme ne semble pas correspondre à la description du texte ... félicitations. Pour déterminer lequel est correct, le chronogramme de bus pour l'étape 3 sera nécessaire. Plus important encore, il faut déterminer quel périphérique est responsable de la conservation du signal de données à l'étape 3. Le contrôleur de disque envoie-t-il d'abord les données au contrôleur DMA, puis le contrôleur DMA répète les données (en mettant sa propre tension sur le bus ) à la mémoire?
rwong
Le "Ack" à l'étape 4 est également suspect. Le DMA ne connaît-il pas déjà le nombre d'octets à copier?
rwong
Je ne sais pas comment clarifier. Quels livres sur l'OS et l'architecture avez-vous étudié ou pensez-vous être les meilleurs?
Tim

Réponses:

7

Q1

Dans la première étape, nous n'utilisons PAS DMA, donc le contenu du contrôleur de disque est lu morceau par morceau par le processeur. Le processeur va bien sûr (en supposant que les données vont réellement être utilisées pour quelque chose, et pas seulement être jetées) les stocker dans la mémoire du système.

Le tampon dans ce cas est un morceau de mémoire sur le disque dur (contrôleur) lui-même, et le dispositif de contrôleur enregistre un registre de contrôle du disque dur (contrôleur) lui-même.

Ne pas impliquer le système d'exploitation (ou un autre logiciel) nécessiterait une sorte d'opération DMA, et la section de texte dont vous discutez dans cette partie de votre question N'utilise PAS DMA. Donc, non, ça ne se passera pas comme ça dans ce cas.

Q2

Ainsi, tout l'intérêt d'un contrôleur DMA est de "réaliser la tâche fastidieuse de stocker des éléments du tampon interne de l'appareil dans la mémoire principale". Le CPU fonctionnera avec le contrôleur DMA et le périphérique de disque. Si le disque pouvait le faire lui-même, il n'y aurait pas besoin d'un contrôleur DMA.

Et en effet, dans les systèmes modernes, la capacité DMA est généralement intégrée au contrôleur de disque dur lui-même, en ce sens que le contrôleur a des capacités de "maîtrise du bus", ce qui signifie que le contrôleur lui-même EST le contrôleur DMA de l'appareil. Cependant, les considérer comme deux appareils distincts rend le concept de DMA un peu moins difficile à comprendre.

Q3 (genre de)

Si vous considérez le disque dur comme la pile de briques qui vient d'être livrée sur un chantier, et le processeur est le maçon qui pose les briques pour construire la maison. Le contrôleur DMA est l'ouvrier qui transporte les briques de la pile de briques à l'endroit où elles sont nécessaires pour le maçon, ce qui signifie que le maçon peut se concentrer sur le travail réel de pose de briques (qui est un travail qualifié, si vous l'avez déjà essayé). vous-même), et le simple travail de «chercher et porter» peut être effectué par un travailleur moins qualifié.

Preuve anecdotique: la première fois que j'ai entendu parler du transfert DMA du disque vers la mémoire, c'était vers 1997, lorsque les contrôleurs IDE ont commencé à utiliser DMA, et que vous deviez obtenir un pilote «contrôleur IDE de la carte mère» pour permettre à l'IDE de faire du DMA, et à ce moment-là , la lecture à partir du disque dur prendrait environ 6 à 10% du temps CPU, alors que DMA dans la même configuration utiliserait environ 1% du temps CPU. Avant cette date, seuls les systèmes sophistiqués dotés de contrôleurs de disque SCSI utilisaient le DMA.

Mats Petersson
la source
5

Ce n'est pas une réponse; il s'agit d'une demande de clarification trop longue pour tenir dans les commentaires.

Avant que quiconque puisse répondre à cette question, il faut expliquer clairement l'architecture du système informatique dont il est question. À savoir:

  • Quels sont les systèmes de bus impliqués dans cette description?

    • La plupart des systèmes informatiques ont un bus mémoire.
    • La plupart des ordinateurs ont également d'autres types de systèmes de bus.
  • Le disque IO passe-t-il également par le bus mémoire?

    • En d'autres termes, le disque utilise-t-il les lignes de bus d'adresses pour les adresses et les lignes de bus de données pour les données?
  • Le contrôleur de disque voit-il le bus mémoire comme ...

    • Un bus mémoire? Autrement dit, il pense qu'il parle à une puce mémoire; à savoir RAS (stroboscope d'accès aux lignes), CAS (stroboscope d'accès aux colonnes), ...
    • Très peu probable - parler à une puce de mémoire nécessite d'être ultra-précis sur l'émission de commandes en fonction de la synchronisation DRAM (latences) - quelques cycles d'horloge trop tôt ou trop tard, une perte de données se produira.
  • Alors ... qu'est-ce que le contrôleur de disque pense que le bus "est réellement"?

  • Dans la plupart des systèmes informatiques, il existe une sorte d'E / S appelée "Port I / O".

    • Les E / S de port peuvent être superposées au bus de mémoire ou avoir un autre bus dédié.
    • La caractéristique distinctive des E / S de port est que l'on peut terminer les choses en un seul cycle de bus (ou un nombre constant prédéfini) - pas besoin de s'inquiéter des dangers des temporisations DRAM.
  • Dans les systèmes plus avancés (enfin, il y a deux décennies), il existe de nouveaux types de systèmes de bus. Par exemple, ISA, PCI, AGP, PCMCIA ... SCSI, ATA, SAS, SATA, FC-AL ...


Maintenant, avec autant d'incertitudes sur "le système informatique dont on discute", vous pouvez comprendre pourquoi vous n'obtiendrez pas de réponse claire à votre question.

Oui, je sais que cela vient d'un manuel. Vous en avez une copie. Je ne. (Pas à la maison - il y en a un au bureau, cependant.) Par conséquent, si vous avez besoin d'une réponse, vous devrez montrer quelques diagrammes et expliquer à quoi ressemble le système de bus de votre ordinateur.


En fin de compte, cependant:

  • Un DMA est un appareil programmable. Autrement dit, le processeur a la responsabilité ultime de dire au DMA quoi faire. Bien sûr, pendant la tranche de temps où le DMA prend le contrôle du système, le CPU coopérera en laissant le DMA exécuter le show.

  • Sous le contrôle du CPU (et de l'OS qui l'exécute), un DMA a la capacité de prendre le contrôle d' un ou plusieurs bus (pluriel) afin de faciliter le transfert des données du contrôleur de disque vers la mémoire principale.

  • Pendant la période où le DMA prend le bus (au pluriel), le DMA émettra des commandes sur ce bus - c'est-à-dire à la place de son contrôleur habituel, c'est-à-dire que le DMA prétend qu'il fait le travail du CPU.

  • Si le transfert de données implique deux bus différents, le DMA peut avoir à le faire sur un bus différent.

  • Pour pouvoir déplacer un certain nombre d'octets (mots, etc.), le DMA contient un compteur de boucle pour garder une trace de la quantité restante de données à copier.

  • Pour pouvoir écrire dans la mémoire principale, le DMA contient un registre d'adresse mémoire, qui est programmable par l'UC, de sorte que l'UC peut indiquer au DMA où écrire les données.

  • Selon la conception du bus du système, le DMA peut ou non avoir à gérer les détails horribles des cycles de synchronisation DRAM.

  • Il était une fois, un certain temps après que le DMA a été inventé, certains périphériques commencent à pré-emballer le DMA sur leurs contrôleurs - c'est ce qu'on appelle la maîtrise du bus . Pourtant, que le DMA se trouve sur le package CPU, la carte mère ou la carte d'E / S, il doit être finalement sous le contrôle (programmation) du CPU, car ils doivent en quelque sorte négocier l'accès au bus système (pluriel), et la mémoire principale.

  • Les systèmes informatiques modernes ont un sous-système dédié appelé contrôleur DRAM. S'il y en a un, il est presque certain que ce contrôleur DRAM remplira également les fonctionnalités du DMA, c'est-à-dire qu'il ressemble à une "boucle de copie d'octets" programmable, et toute la complexité susmentionnée est cachée à l'intérieur du silicium de la DRAM. Manette.


Si vous trouvez cela très déroutant - je le trouve déroutant aussi - vous aurez besoin de diagrammes. Beaucoup de diagrammes. Schémas du système. Diagrammes de bus. Diagrammes de temps. Diagrammes de transition d'état. etc.


rwong
la source