8
votes

Quelles sont les véritables plateformes de la carte des ports matériels vers des adresses de mémoire?

Je vois parfois des déclarations sur certaines plates-formes le code C ou C ++ suivant: xxx

peut entraîner une écriture sur un port d'entrée d'entrée matériel si PTR arrive stocker l'adresse à laquelle ce port est mappé. Habituellement, ils sont appelés "plates-formes intégrées".

Quels sont les exemples réels de ces plates-formes?


2 commentaires

Juste pour ajouter à toutes les réponses, votre plate-forme X86 fait également ceci (mémoire I / O). Vous êtes tout simplement utilisé pour travailler dans un environnement protégé [1] créé par votre système d'exploitation, vous n'avez donc pas besoin (ou par accident peut) toucher tous les aspects sales du matériel réel. Écrivez un pilote ou mieux encore, un système d'exploitation et vous devrez faire face à une mémoire cartographiée parmi une multitude d'autres choses amusantes. :) [1] en.wikipedia.org/wiki/protected_mode


Voir Stackoverflow.com/questions/ 15371953 / ...


8 Réponses :


1
votes

playstation. C'est ainsi que nous avons eu un accès direct optimisé aux caractéristiques graphiques de bas niveau (et autres) du système.


0 commentaires

2
votes

Ceci s'appelle E / S mappé de mémoire, et un bon endroit pour démarrer est le article Wikipedia .

Les systèmes d'exploitation modernes vous protègent généralement de cela à moins que vous ne écriviez de pilotes, mais cette technique est pertinente, même sur les architectures de PC. Rappelez-vous la limite DOS 640KB? C'est parce que des adresses de mémoire de 640k à 1 Mo ont été attribuées pour des E / S.


0 commentaires

1
votes

Un pilote NDIS sous Windows est un exemple. C'est ce qu'on appelle les E / S mappés de mémoire et le bénéfice de cela est la performance.


0 commentaires

0
votes

La série Motorola 68K et PowerPC sont les plus grandes.


0 commentaires

1
votes

voir Systèmes incorporés pour des exemples d'appareils utilisant des E / S E / O.G. routeurs, modems ADSL, microcontrôleur, etc.


0 commentaires

1
votes

Il est principalement utilisé lors de la rédaction de pilotes, car la plupart des périphériques communiquent avec la CPU principale à travers des registres mappés en mémoire.


0 commentaires

11
votes

La plupart des systèmes de mon expérience utilisent des E / S mappées de mémoire. La plate-forme X86 dispose d'un espace d'adresse d'E / S distinct et non mappé de mémoire (qui utilise le dans / out la famille des processeurs op-codes), mais l'architecture PC Utilise également largement l'espace d'adresses de mémoire standard pour les E / S de l'appareil, qui dispose d'un espace d'adressage plus grand, d'un accès plus rapide (généralement) et d'une programmation plus facile (généralement).

Je pense que l'espace d'adresses d'E / S séparé a été utilisé initialement car l'espace d'adressage de la mémoire des processeurs était parfois assez limité et il est peu logique d'utiliser une partie de celui-ci pour l'accès des périphériques. Une fois que l'espace d'adressage de la mémoire a été ouvert à des mégaoctets ou plus, cette raison de séparer les adresses d'E / S des adresses de mémoire est devenue moins importante.

Je ne sais pas combien de processeurs fournissent un espace d'adresse d'E / S distinct comme le X86. Comme indique comment l'espace d'adresses d'E / S séparé est tombé hors de faveur, lorsque l'architecture X86 est entrée dans le royaume 32 bits, rien n'a été fait pour augmenter l'espace d'adressage d'E / S de 64 Ko (bien qu'ils aient ajouté la capacité déplacer des morceaux de données de 32 bits dans une instruction). Lorsque X86 se déplaçait dans le 64-royaume, l'espace d'adresses d'E / S est resté à 64 Ko et n'a même pas ajouté la possibilité de déplacer des données dans des unités 64 bits ...

Notez également que les plates-formes de bureau et de serveur modernes (ou d'autres systèmes utilisant la mémoire virtuelle) ne permettent généralement pas à une application d'accéder aux ports d'E / S, qu'ils soient mappés sur la mémoire ou non. Cet accès est limité aux pilotes de périphériques et même les pilotes de périphérique auront une interface OS pour faire face aux mappages de mémoire virtuelle de l'adresse physique et / ou de configurer l'accès DMA.

sur des systèmes plus petits, tels que des systèmes embarqués, des adresses d'E / S sont souvent accessibles directement par l'application. Pour les systèmes utilisant des adresses mappées en mémoire, cela se fera généralement en définissant simplement un pointeur avec l'adresse physique du port d'E / S du périphérique et en utilisant ce pointeur comme n'importe quel autre. Toutefois, pour que l'accès se produise et se produit dans le bon ordre, le pointeur doit être déclaré comme indiquant un objet volatile .

Pour accéder à un périphérique utilisant une autre chose qu'un port d'E / S mappé de mémoire (comme l'espace d'adresses d'E / S X86), un compilateur fournira généralement une extension qui vous permet de lire ou d'écrire dans cet espace d'adresses. En l'absence d'une telle extension, vous devez appeler une fonction de langage de montage pour effectuer les E / S.


11 commentaires

Je fais des recherches sur ce sujet ces derniers temps, et votre réponse s'est avérée extrêmement utile. J'ai quelques questions: Quels appareils utilisent l'espace d'adresses d'E / S? Et, étant donné que la mémoire sera courante pour les appareils mappés en mémoire et tous les programmes (en mémoire d'E / S), que se passerait-il lorsque l'espace mappé de mémoire est utilisé? Cet espace est-il rendu indisponible pour cette période?


Quelques exemples d'appareils utilisant l'espace d'adressage d'E / S sur PC sont des éléments tels que le clavier PS / 2, les ports COMGACY COM. Je suis sûr qu'il y a quelques autres choses. Je ne suis pas un concepteur de matériel, je ne sais donc pas si le nouveau périphérique conçu utiliserait l'espace d'E / S ou préférez l'espace mappé de mémoire même si le nombre de ports impliqués était petit (il me semble que presque tout Sauf adaptateur vidéo se branche dans USB ou SATA De nos jours).


En ce qui concerne l'accès des applications à des E / S mappés en mémoire, dans des systèmes prenant en charge les adresses virtuelles que la mémoire ne serait généralement pas mappée dans l'espace de processus, à l'exception de certaines requêtes spécifiques qui permettent au système de toujours arbitrer entre les applications.


Michael Burr: Merci beaucoup !!


L'utilisation d'instructions séparées pour les E / S sur le 8080 signifiait que si un vecteur de premier vecteur pointe accidentellement lors d'une première instruction, il peut détruire toute la mémoire mais ne frapperait pas de périphériques d'E / S aléatoires. Le 8088 était en grande partie une arrache-pied du 8080 et a probablement suivi ses traces pour des raisons similaires, même si le pointeur de pile sur le 8088 n'atteindrait pas à l'extérieur d'un segment de 64k.


@Michaelburr, pourquoi dites-vous que la plupart des systèmes utilisent des E / S mappées de mémoire lorsque la plupart des microprocesseurs d'Intel utilisent-t-il du portail? (Intel X86 et processeurs compatibles utilisent tous ports-mappés.)


@Pacerier: Dans quelle partie considérez-vous controversé? La documentation 8080 et 8088 décrit les comportements en question. En ce qui concerne "la plupart des systèmes", les microcontrôleurs extérieurs des ordinateurs de bureau plus nombreux, et n'importe quoi basé sur n'importe quelle image, la famille 68HCXX ou le bras utilisent des E / S mappées de mémoire. Certains autres contrôleurs comprenant les E / S 8x51 effectuent des instructions d'adresse fixe, mais elles sont considérablement inférieures à des trois familles mentionnées.


@Pacerier: Par exemple, le "pilote de périphérique Linux, le 3ème éd" livre de Rubini & Corbet dit: "Il est intéressant de noter qu'aucun processeur en dehors de la famille X86 ne comporte un espace d'adressage différent des ports".


Et même dans le monde Intel X86 (de Wikipedia ): "Mémoire de mémoire Les E / S sont préférées dans les architectures x86, car les instructions qui effectuent des E / S à base de port sont limitées à un registre ... I / O mappée de mémoire utilise moins d'instructions et peut fonctionner plus rapidement que le port I / O. AMD Ne pas étendre les instructions d'E / S du port lors de la définition de l'architecture X86-64 pour prendre en charge des ports 64 bits, de sorte que les transferts de 64 bits ne peuvent pas être effectués à l'aide d'un port d'E / S. "


@Michaelburr: Si l'on se concentre uniquement sur les micro-ordinateurs reprogrammables de fabrication actuels, le X86 peut être seul dans son utilisation d'un espace d'E / S séparé, mais il n'est unique que si l'on ignore d'autres transformateurs historiques ainsi que de nouveaux contrôleurs intégrés et neufs et DSPS.


Peut-être devrions-nous garder à l'esprit que je n'ai dit que "la plupart des systèmes dans mon expérience utilisent des E / S mappées de mémoire". En outre, je pense - cela fait plus de 5 ans - que j'essayais vraiment de dire que la plupart des architectures plutôt que la plupart des processeurs installés utilisent des E / S Mémoire-mappés (cependant, je vais principalement par expérience personnelle plutôt que statistique qui peut être soutenu par une citation ferme). Si quelqu'un aime, je peux changer le libellé en "de nombreuses architectures ..." au lieu de "la plupart des systèmes ...".



-2
votes

Vous pouvez le faire dans les fenêtres modernes (et je suis à peu près sûr que Linux l'offre aussi). Cela s'appelle des fichiers mappés de mémoire. Vous pouvez charger un fichier dans la mémoire sous Windows, puis écrivez / modifiez-le simplement en manipulant les pointeurs.


1 commentaires

Je ne pense pas que c'est ce que l'OP parle. L'E / S mappé de mémoire est différent des fichiers mappés de mémoire.