Mappés en mémoire IO - comment est-il fait?
J'ai lu à propos de la différence entre le port mappé IO et mappé en mémoire d'e /s, mais je ne peux pas comprendre comment la mémoire mappée Io est mis en œuvre dans les systèmes d'exploitation modernes (windows ou linux)
Ce que je sais, c'est qu'une partie de la mémoire physique est réservé pour communiquer avec le matériel et il y a un MMIO Unité impliquée dans la prise en charge de la communication du bus et d'autres liés à la mémoire des trucs
Comment un pilote de communiquer avec le matériel sous-jacent? Quelles sont les fonctions que le conducteur peut utiliser? Sont les adresses pour communiquer avec une carte vidéo fixe ou est-il une sorte de "contrat" avant de les utiliser?
Je suis encore un peu confus
- Avez-vous regardé Utilisation de la Mémoire des e/S et Mappage de la Mémoire et de la DMA?
- Voyons voir si je l'ai eu(sous linux): 1) - je attribuer une mémoire IO région à l'adresse le matériel producteur m'a dit de 2) - je utiliser ioremap à le faire traduire à partir d'une adresse physique, les adresses virtuelles (si cela résout à la fois la segmentation et la pagination, je suppose) 3) j'utilise iowrite/ioread et similaire à lire et à écrire dans cette zone. Est-ce correct?
- C'est exact, n'oubliez pas de gratuit pour allouer de la mémoire de la région après l'utilisation.
Vous devez vous connecter pour publier un commentaire.
L'instruction suivante dans votre question est mal:
What I know is that a part of the physical memory is reserved to communicate with the hardware
Une partie de la mémoire physique est pas réservé pour la communication avec le matériel. Une partie de la physique espace d'adressage, à qui la mémoire physique et la mémoire mappée IO sont mappés, est. Cette disposition de la mémoire est permanent, mais les programmes de l'utilisateur ne le voit pas directement au lieu de cela, ils ont leur propre espace d'adressage virtuel à laquelle le noyau peut décider de la carte, là où il veut, de la mémoire physique et IO plages.
Vous pouvez lire les articles suivants qui, je crois, contiennent des réponses à la plupart de vos questions:
Êtes-vous demander à propos des fichiers mappés en Mémoire, ou mappés en mémoire de port-IO?
Les fichiers mappés en mémoire sont fait par la pagination les pages et de l'interception de la page défauts à ces adresses. Cela est fait par le système d'exploitation par voie de négociation entre le système de fichiers et le gestionnaire de la page gestionnaire de panne.
Mappés en mémoire de port-IO est fait à la CPU niveau par la surcharge des lignes d'adresse en tant que port-IO lignes qui permettent l'écriture de la mémoire à traduire sur le QPI lignes de bus en tant que port-IO. Cela est fait par le processeur de l'interaction avec la carte mère. La seule autre chose que l'OS a besoin de faire est de dire la MMU ne pas coalese lit et écrit par le PAE doit- "writethrough" et " no-cache bits.
http://en.wikipedia.org/wiki/Memory-mapped_I/O
http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/IO/mapped.html
Essentiellement, c'est juste une forme d'accès aux données, comme si vous êtes la sauvegarde /lecture de la mémoire. Mais le matériel snoop sur le bus d'adresse, et quand il voit l'adresse de mieux les cibler pour lui, il vient de recevoir les données sur le bus de données.