Différence entre le port mappé et l'accès mappé en mémoire?

19

Quelqu'un peut-il expliquer quelle est la différence entre le mappage de port et le mappage de mémoire, et ce que les deux accomplissent? Pourquoi le port est-il mappé, en quoi diffère-t-il dans sa structure des cartes mémoire, et y a-t-il une raison pour laquelle de nombreuses architectures utilisent les deux? En outre, qu'est-ce qu'un "port" dans ce sens, parce que le port peut signifier différentes choses dans différents contextes?

Exemple: redirection de port, port en tant que point d'extrémité de communication, "mappage de port".

Disons que j'écris sur le port 400h (fictif; juste par exemple) (comme dans x86-64, etc.).

À quoi ou où j'écris si ce n'est pas en mémoire? Comment un "port" est-il mappé, et qu'est-ce que c'est dans ce sens?

Varaquilex
la source

Réponses:

24

Les E / S mappées en mémoire et les E / S mappées sur les ports sont deux méthodes complémentaires pour les E / S.

E / S mappées en mémoire

Dans les systèmes mappés en mémoire, le périphérique d'E / S est accessible comme s'il faisait partie de la mémoire. Loadet les Storecommandes sont exécutées pour lire et écrire sur les périphériques d'E / S, tout comme elles sont utilisées pour la mémoire (le mappage de port a des commandes spéciales pour les E / S). Cela signifie que les périphériques d'E / S utilisent le même bus d'adresse que la mémoire, ce qui signifie que le processeur peut se référer à la mémoire ou au périphérique d'E / S en fonction de la valeur de l'adresse. Cette approche nécessite une isolation dans l'espace d'adressage: autrement dit, les adresses réservées aux E / S ne doivent pas être disponibles dans la mémoire physique.

Voici une image d'un système informatique simple et de base . Le cas est beaucoup plus compliqué dans les systèmes contemporains.

entrez la description de l'image ici


E / S portées

Selon Wikipedia

Les E / S mappées de port utilisent souvent une classe spéciale d'instructions CPU spécifiquement pour effectuer des E / S. Cela se trouve sur les microprocesseurs Intel, avec les instructions IN et OUT. Ces instructions peuvent lire et écrire de un à quatre octets (outb, outw, outl) sur un périphérique d'E / S. Les périphériques d'E / S disposent d'un espace d'adressage distinct de la mémoire générale, soit grâce à une broche "E / S" supplémentaire sur l'interface physique du processeur, soit à un bus entier dédié aux E / S. Étant donné que l'espace d'adressage des E / S est isolé de celui de la mémoire principale, cela est parfois appelé E / S isolées.


Quant aux avantages et inconvénients: comme les périphériques sont plus lents que la mémoire, le partage des données et des bus d'adresse peut ralentir l'accès à la mémoire. D'un autre côté, grâce à la simplicité des E / S mappées par les systèmes de mémoire, le processeur nécessite moins de logique interne, ce qui permet de mettre en œuvre des processeurs plus rapides, moins chers et moins consommateurs d'énergie. La logique est similaire à celle des systèmes RISC: réduire la complexité, obtenir un système plus dédié et robuste qui est assez pratique pour les systèmes embarqués, par exemple.

Au contraire (encore une fois de Wiki):

Les instructions d'E / S mappées de port sont souvent très limitées, ne prévoyant souvent que des opérations de chargement et de stockage simples entre les registres de CPU et les ports d'E / S, de sorte que, par exemple, pour ajouter une constante à un registre de périphérique mappé de port, il faudrait trois instructions: lire le port dans un registre CPU, ajouter la constante au registre CPU et réécrire le résultat sur le port.

Je vous recommande fortement de lire cet article wiki pour plus d'informations.


Pour répondre à l'une de vos questions:

À quoi ou où j'écris si ce n'est pas en mémoire?

Vous écrivez dans les registres de l'interface d'E / S via le bus de données, qui plus tard (lorsqu'il est prêt) envoie les données au périphérique d'E / S réel. Vous trouverez ci-dessous une image d'un exemple d'interface de périphérique d'E / S.

entrez la description de l'image ici

Varaquilex
la source
Qu'est-ce que cela signifie que vous écrivez pour la mémoire mappée "Cette approche nécessite une isolation dans l'espace d'adressage: autrement dit, les adresses réservées aux E / S ne doivent pas être disponibles pour la mémoire physique." Voulez-vous dire que les adresses réservées aux E / S sont dans la mémoire principale et non disponibles pour les non-E / S. Il est clair que les adresses E / S et les adresses non E / S sont de la mémoire physique. Il n'y a pas de mémoire non physique. (à moins que vous ne croyiez aux arguments de William Lane Craig, c'est-à-dire qu'une chose peut avoir un cerveau et une mémoire non physiques!).
barlop
1
et lorsque vous écrivez ceci "Vous écrivez dans les registres de l'interface d'E / S via le bus de données, qui plus tard (une fois prêt) envoie les données au périphérique d'E / S réel. Ci-dessous est une image d'un exemple d'E / S dispositif." Vous ne savez pas si le «registre» d'E / S se trouve dans l'appareil, je suppose que si vous l'appelez «enregistrer», il semble que ce soit dans l'appareil. Mais ensuite, vous écrivez «..qui plus tard (quand il sera prêt) envoie les données au périphérique d'E / S réel». Il n'est donc pas clair où vous dites que ces emplacements de mémoire sont. Qu'ils se trouvent à l'intérieur de l'appareil, ou à l'extérieur de l'appareil .. ou jamais à l'extérieur de l'appareil.
barlop
1
Attention: j'ai compilé ceux de ce que j'ai appris dans la conférence Microprocessors et certains du Wiki. Cela dit, ce que je veux dire par ce que vous avez demandé dans votre premier commentaire, c'est que: "Les adresses E / S et les adresses non E / S sont de la mémoire physique" n'est pas clair comme vous le pensez. En fait (pour autant que je sache, autant que je sache), le décodeur de code d'adresse active l'interface IO lorsque l'adresse IO est spécifiée, ce qui signifie que lorsque vous fournissez une adresse, elle ne doit pas être dans la plage d'adresses physiques, par exemple , 0000 $ - 00 $ FF pour le physique et 0100 $ - 01 $ FF pour les E / S (ignorez le montant, faites attention aux limites).
Varaquilex
@barlop Pour votre deuxième question, vous êtes ici, ce que je voulais dire était "Ci-dessous une image d'un exemple d' interface de périphérique d'E / S ". J'ai corrigé cela dans le montage que je viens de faire. J'espère que cette modification a éliminé la confusion. Sinon, demandez plus. Je vais essayer de répondre du mieux que je peux.
Varaquilex
1
@barlop Le point de l'emplacement de la mémoire est ambigu dans la plupart des articles et de la littérature que j'ai rencontrés. Soit ils supposent que vous le savez déjà, soit ils ne le savent pas vraiment. Je crois que la réponse est dans ces mots de LDD3 ch. 9: "La mémoire d'E / S est simplement une région d'emplacements de type RAM que le périphérique met à la disposition du processeur via le bus." (italique ajouté) C'est-à-dire que la mémoire et / ou les registres sont sur l'appareil. Le port d'E / S et la mémoire d'E / S ne sont que les 2 façons dont le système met ces emplacements à la disposition du logiciel.
orodbhen
2

Dans les E / S mappées en mémoire (simplement MMIO), les périphériques sont accessibles via des instructions qui sont en fait destinées à accéder à la mémoire. Chaque appareil obtient une ou plusieurs adresses mémoire. Cependant, lorsque vous essayez de lire ou d'écrire sur cette partie de la mémoire, un certain périphérique (probablement le northbridge) l'envoie simplement au périphérique associé à la place. Même si l'ordinateur n'a pas assez de mémoire pour une telle adresse (car les adresses MMIO sont généralement très élevées), cela n'a pas d'importance comme mémoire physique (c'est celle que vous voyez lorsque vous regardez la carte mère, celle connue sous le nom de RAM ) n'est même pas apparenté. Si vous avez suffisamment de RAM pour l'adresse, celle-ci est soit mappée à une autre non-E / S, soit juste perdue, ce qui signifie que vous ne pouvez pas y lire ou y écrire.

Les E / S portées (simplement PMIO) sont très différentes. Vous avez différentes instructions pour lire et écrire sur les ports. Il existe un espace d'adressage de port, tout comme l'espace d'adressage de la mémoire, où les adresses sont des adresses d'E / S qui communiquent réellement avec les périphériques ou sont tout simplement invalides. PMIO peut être essentiellement considéré comme un MMIO avec un espace d'adressage mémoire séparé juste pour les E / S.

Ahmet Zahit Can
la source
"PMIO peut être essentiellement considéré comme un MMIO avec un espace d'adressage mémoire séparé juste pour les E / S." - L'espace d'adressage est un concept si simple et si basique, pourquoi adoptez-vous une analogie trompeuse avec votre réponse par ailleurs raisonnable? Cette analogie trompeuse ne change rien aux faits: par exemple, il peut y avoir d'autres espaces d'adressage en plus d'un "espace d'adressage mémoire".
sciure de bois
1

Avec des noms tels que `` signal d'E / S '' et `` mappage de mémoire '', tout est beaucoup plus compliqué qu'il ne l'est en réalité, et donne donc à la personne l'impression qu'il y a beaucoup plus et couvre un sujet avancé. La tendance est maintenant que les gens le considèrent comme quelque chose de nouveau. Mais c'est très loin d'être le cas. Même Babbage dans les années 1830 conduisait son imprimante, cela nécessitait un signal d'E / S, bien que cela soit fait par un essieu et une roue dentée. Par exemple, dans les machines de Hero of Alexandria il y a 2000 ans ou dans les théâtres remontant à l'époque grecque, ils tiraient toujours une corde d'un ensemble de cordes différentes pour contrôler les lumières ou le paysage, chaque corde est comme une ligne d'entrée et de sortie, c'est comme aussi simple que cela, l'adresse est "quelle ligne" c'est-à-dire quelle chose, mémoire ou appareil que nous choisissons,

Bien que les gros ordinateurs centraux qui remplissaient les bâtiments d'armoires, utilisaient des choses comme le 64 bits dans les années 40, et traitaient donc le mappage des E / S de la même manière il y a longtemps, e..g Konrad Zuse et son ordinateur de taille de pièce utilisaient flottant point qui avait environ 20 chiffres en décimal dans les années 1930, et devait piloter des choses comme son imprimante et ses divers indicateurs d'ampoule et ses commutateurs. Mais sur les microprocesseurs minuscules, l'histoire est différente, ils n'ont pas été envisagés avant les années 60 et construits jusqu'en 1971. Toutes ces techniques utilisant une logique 8 bits dans les années 80 ont été utilisées pour les microprocesseurs en 4 bits dans les années 70, 2 bits dans les années 60 et ont été utilisées en 16bit dans les 90 ' s lorsque tout le monde a commencé à se procurer un ordinateur et donc parce qu'il était maintenant devant eux, a commencé à discuter de ce sujet d'E / S et de mappage de mémoire pour la première fois, et il semblait que quelque chose de nouveau soit venu avec l'avènement d'Internet; puis nous avions des ordinateurs 32 bits dans les années 00 et 64 bits dans les années 10, ce qui a provoqué des discussions interminables sur les lignes de données de la mémoire. Afin de répondre à votre question, je vais parler des puces que les amateurs d'électronique ont achetées il y a 30 à 40 ans, comme je l'ai fait à l'époque, car plus tard, les choses sont devenues si avancées que je n'ai pas pu construire avec les dernières puces, mais le les principes sont exactement les mêmes maintenant, les portes sont juste cachées à l'intérieur de plus grosses puces en boîte noire qui incorporent d'autres broches qui traitent ces opérations se déroulant beaucoup plus en parallèle (par exemple, permettre de nombreux verrous octaux,

Eh bien, je ne sais rien de tous les nouveaux langages ni de la façon dont ils fonctionnent sur les PC modernes, mais je peux vous dire comment c'était autrefois quand je construisais des ordinateurs avec des puces.

Tout le mappage d'E / S et le mappage de mémoire signifie en termes simples, si vous avez accroché une charge d'ampoules, par exemple, pour une célébration et que vous avez eu des fils allant à chacun et appelé les emplacements de mémoire des ampoules (c.-à-d. Que les ampoules représentent la mémoire dans la RAM, soit activé ou désactivé, et si vous sélectionnez l'emplacement 0, vous obtenez le fil 0, l'emplacement 1, le fil 1, le loc 2, le fil 2, etc.) si vous avez ajouté d'autres fils, par exemple un fil est une cloche, cet emplacement particulier n'est pas une mémoire qu'il est un périphérique vers lequel vous émettez, à l'aide de la commande OUT, pour le faire sonner. Mais il est considéré comme un emplacement de mémoire du point de vue de l'ordinateur, car il arrive tout de même comme un câble au MPU. Si un autre fil a été ajouté, qui était un commutateur que vous avez actionné en externe, il s'agit d'un périphérique d'E / S, qui serait une instruction IN SUR le PC. C'est ce qu'on appelle des E / S mappées d'E / S.

Maintenant, sur les ordinateurs, les fils sur les bus représentent des lignes d'adresse ou des lignes de données, MAIS ils sont en binaire, c'est à dire avec 2 fils vous pouvez avoir 00 01 10 11 soit 4 combinaisons 2 ^ 2, donc avec 8 lignes 2 ^ 8 = 256 possibilités, avec 20 lignes 2 ^ 20 = 1048576 avec 30 lignes 2 ^ 30 = 1073741824 (1 gig) de possibilités avec 30 lignes. C'est pourquoi cela s'appelle MAPPED, plutôt que de simplement dire E / S et mémoire, ils disent E / S mappés et mémoire mappée, car vous mappez les fils COMME COMBINAISON et les codez en binaire. Donc, si vous disiez que vous aviez 2 fils, 4 combinaisons, ils ne peuvent pas simplement être connectés à des ampoules, (sans parler de l'amplification du courant requise des minuscules tensions du MPU et de la prévention du courant de retour), mais les 2 fils ont pour passer par un décodeur (nous utilisions un 138 pour décoder 3 lignes en 8 lignes, un 164 pour décoder 4 lignes binaires en 16 lignes. ) Une fois dans le décodeur, ces 2 lignes, par exemple A0 et A1 (adresse0 et adresse 1 (LIGNES)), deviennent 4 lignes (allumées ou éteintes) pour l'ampoule particulière que vous conduisez (dans le cas d'un ordinateur, LA MÉMOIRE), mais dans certains cas, cet emplacement sélectionne plutôt un périphérique d'entrée / sortie et dit `` utilisez-moi '' à la place, c'est-à-dire comme la mémoire, une fois localisée, les données sont ensuite transmises d'une manière ou d'une autre (en utilisant une logique intelligente à trois états pour couper les tensions en cours de route). à chaque fois) sur les lignes de bus de données D0..7 ou D0..31 ou quelle que soit la taille des données sur l'ordinateur (vous avez un ordinateur 2 bits, 4 bits, 8 bits, 16 bits, 32 bits, 64 bits, 128 bits, 256 bits, ordinateur que vous construisez). Ainsi, les données passent naturellement à l'intérieur ou à l'extérieur des lignes de données à la mémoire ou au périphérique d'E / S (SI c'est de la mémoire mappée), mais CECI NE DOIT PAS ÊTRE CONFONDU AVEC LES instructions IN / OUT, CECI ENTRÉE et SORTIE signifie à partir d'un autre bloc de mémoire d'E / S, un bloc de mémoire d'E / S spécial à l'intérieur du MPU affecté spécialement juste pour les E / S, c'est-à-dire (pas de mémoire mappée), cet espace d'E / S que vous n'obtenez pas toujours sur certains microprocesseurs, par exemple, je ne pense pas que nous l'avons eu sur un 6502, mais nous l'avons eu sur un z80. Plus de puces artistiques utilisées que le mappage de mémoire, par exemple dans les consoles de jeux, etc., des puces plus sensibles mais sans intérêt (restées dans le livre) vont aussi pour l'espace d'E / S. Les E / S mappées en mémoire accélèrent la vitesse car elles intègrent un adressage mémoire (qui est super rapide pour la RAM), par conséquent, les ordinateurs de type graphique utilisent uniquement le mappage mémoire pour les E / S pour obtenir la vitesse. Les E / S mappées d'E / S sont affectées aux ports lents, par exemple rs232 ou au port parallèle, et utilisent les commandes IN OUT. e. (pas de mémoire mappée), cet espace d'E / S que vous n'obtenez pas toujours sur certains microprocesseurs, par exemple, je ne pense pas que nous l'avions sur un 6502, mais nous l'avons sur un z80. Plus de puces artistiques utilisées que le mappage de mémoire, par exemple dans les consoles de jeux, etc., des puces plus sensibles mais sans intérêt (restées dans le livre) vont aussi pour l'espace d'E / S. Les E / S mappées en mémoire accélèrent la vitesse car elles intègrent un adressage mémoire (qui est super rapide pour la RAM), par conséquent, les ordinateurs de type graphique utilisent uniquement le mappage mémoire pour les E / S pour obtenir la vitesse. Les E / S mappées d'E / S sont affectées aux ports lents, par exemple rs232 ou au port parallèle, et utilisent les commandes IN OUT. e. (pas de mémoire mappée), cet espace d'E / S que vous n'obtenez pas toujours sur certains microprocesseurs, par exemple, je ne pense pas que nous l'avions sur un 6502, mais nous l'avons sur un z80. Plus de puces artistiques utilisées que le mappage de mémoire, par exemple dans les consoles de jeux, etc., des puces plus sensibles mais sans intérêt (restées dans le livre) vont aussi pour l'espace d'E / S. Les E / S mappées en mémoire accélèrent la vitesse car elles intègrent un adressage mémoire (qui est super rapide pour la RAM), par conséquent, les ordinateurs de type graphique utilisent uniquement le mappage mémoire pour les E / S pour obtenir la vitesse. Les E / S mappées d'E / S sont affectées aux ports lents, par exemple rs232 ou au port parallèle, et utilisent les commandes IN OUT. les puces plus sensibles mais sans intérêt (restées dans le livre) vont aussi pour l'espace d'E / S. Les E / S mappées en mémoire accélèrent la vitesse car elles intègrent l'adressage mémoire (qui est super rapide pour la RAM), par conséquent, les ordinateurs de type graphique utilisent uniquement le mappage mémoire pour les E / S pour obtenir la vitesse. Les E / S mappées d'E / S sont affectées aux ports lents, par exemple rs232 ou au port parallèle, et utilisent les commandes IN OUT. les puces plus sensibles mais sans intérêt (restées dans le livre) vont aussi pour l'espace d'E / S. Les E / S mappées en mémoire accélèrent la vitesse car elles intègrent l'adressage mémoire (qui est super rapide pour la RAM), par conséquent, les ordinateurs de type graphique utilisent uniquement le mappage mémoire pour les E / S pour obtenir la vitesse. Les E / S mappées d'E / S sont affectées aux ports lents, par exemple rs232 ou au port parallèle, et utilisent les commandes IN OUT.

Maintenant, si au lieu d'ajouter deux fils, si vous avez réellement remplacé deux fils qui sont allés à l'origine aux ampoules et ont pris certaines de ces ampoules et les ont remplacées par d'autres choses, par exemple une cloche sur une et un interrupteur sur une autre, celles-ci ne sont plus référencées (sélectionné ) avec les instructions IN et OUT respectivement, elles sont référencées en accédant à cet emplacement de mémoire particulier qui sélectionne ces fils (qui étaient à l'origine des ampoules). Il s'agit donc d'E / S mappées en mémoire.

Les E / S mappées en mémoire signifient que le bus d'adresse réel qui va normalement à la mémoire (la RAM), est également connecté à d'autres décodeurs (décodeurs logiques), et lorsqu'il détecte la combinaison binaire particulière de signaux d'adresse, il produit une sortie élevée , (par exemple, si vous aviez une charge de et et non des portes, et vous avez dit, si ceci et non cela et ainsi de suite, en utilisant les broches A0..A20 ou quelle que soit la taille de votre bus d'adresse), alors ce signal haut PERMET UN verrou, (pour un périphérique particulier, comme un port série, un port parallèle), ce verrou transmet ensuite les données sur le bus de données au périphérique d'E / S. C'est pour écrire sur le périphérique d'E / S. La lecture fonctionne dans le sens inverse, le périphérique d'E / S, retransmet les données et, si je me souviens bien, il envoie exactement la même combinaison de codes d'adresse sur les lignes d'adresse.

Je suppose que cela doit fonctionner de la même manière aujourd'hui, sauf qu'il y aura juste beaucoup plus de données et de lignes d'adresse.

Vous câblez littéralement les E / S aux lignes d'adresse. Par conséquent, les E / S sont effectivement MAPPÉES dans l'espace mémoire, comme s'il s'agissait de mémoire. Mais un autre verrou empêche les broches d'adresse d'accéder au ram en même temps, de sorte que vous n'obteniez pas de tensions de deux adresses ou sources de données sur la même ligne, ce qui endommagerait les puces.

Avec l'instruction IN et OUT, nous l'avions il y a 40 ans, sur la puce z80. C'est pour des cas particuliers où la puce traite les E / S elles-mêmes d'une manière différente, c'est-à-dire qu'elle n'est pas mappée en mémoire. (c.-à-d. avec la mémoire mappée, vous lisez ou écrivez simplement à l'emplacement de la mémoire, mais avec IN et OUT vous dites déjà au CPU qu'il s'agit d'un signal d'E / S et non de mémoire). Donc, avec l'instruction IN / OUT, celle-ci a son propre espace d'adressage d'E / S (qui est supplémentaire à la mémoire du RAM), ce Ram d'E / S, comme il semble être, a un ensemble d'adresses tout de même, sauf que vous accédez directement au périphérique via un décodeur attaché à ces adresses d'E / S, et que vous n'accédez pas au périphérique d'E / S à partir des broches d'adresse standard, c'est pour l'instruction IN / OUT.

qui, dans ce cas, sont mieux transmises sous forme de chaînes de codes ASCII pour les lettres et les chiffres. Ces commandes sont exactement les mêmes que si vous utilisiez les instructions IN et OUT dans une boucle où le nombre correspond à la longueur de la chaîne.

Si vous accédez par exemple au haut-parleur du PC, vous passerez simplement une donnée à la fois en utilisant OUT.

Si vous lisiez depuis le port parallèle, vous feriez IN et utiliseriez le code pour l'adresse d'E / S du port. En y écrivant, par exemple pour piloter de vieilles imprimantes ou de la robotique par des signaux électroniques, vous utiliseriez la commande OUT. Le port parallèle et le port série (ancien RS232) sont des ports typiques qui ont été utilisés. Le RS232 est des données série, un seul bit est autorisé à entrer ou sortir, donc si vous lisiez à partir d'un rs232, vous n'auriez qu'un bit de l'octet qui est pertinent, de même avec la sortie. Le débit en bauds est d'environ 17 kHz maximum pour un rs232, mais ceux-ci utilisaient beaucoup de composants électroniques, à l'époque, je construisais des circuits rs232, par exemple pour lire des tensions ou piloter des micro-contrôleurs PIC. Chaque port est nommé par exemple COM1 COM2 COM3 COM4 et ils ont des adresses d'E / S. Je ne suis pas sûr à portée de main ici, mais ils sont similaires à par exemple 3F8h 378h (h = adresse hexadécimale)

Je ne suis pas sûr des ports modernes, mais si vous écriviez sur l'USB, ce seront probablement des E / S mappées en mémoire pour une plus grande vitesse.

Le port clavier PS / 2, je pense que cela utilise l'instruction IN, pour lire les données du clavier. Cela remplace l'ancien RS232, mais a une spécification légèrement différente je crois.

Un lecteur de disque était généralement mappé en mémoire, probablement maintenant, c'est-à-dire que vous ne conduisez pas un lecteur de disque avec des instructions IN / out, ils seraient trop lents. Mais les ports sont lents de toute façon, donc cela n'a pas d'importance, par exemple, une imprimante est lente en ce qui concerne le débit de données requis par rapport à la formidable par exemple 200 mégaoctets / seconde requis d'un disque dur. Un haut-parleur, il n'a besoin que de la fréquence des temps sonores d'environ 10 ou 20, disons que 20 kHz serait suffisant pour un buzzer, donc c'est des E / S. Les choses lentes utilisent les E / S, les instructions IN / OUT. Par conséquent, l'USB est probablement mappé en mémoire, vous devrez le vérifier.

Une meilleure façon de le comprendre est la suivante. Sur les anciens ordinateurs des années 80, vous vouliez parfois contrôler certains appareils que vous aviez construits, et vous n'aviez aucune spécification pour les ports de sortie (comme à l'époque le fabricant gardait cela caché pour que certaines sociétés, par exemple les sociétés de joystick et de cartouches) puissent prendre de l'avance dans le marché par un accord commercial). Ce que vous deviez faire était d'ouvrir l'ordinateur et de souder littéralement les fils à certains points du bus d'adresse, par exemple, vous avez soudé trois fils à certains points du circuit à une distance de sécurité (afin de ne pas endommager la puce avec la chaleur), ceux des points câblés par la configuration de la carte de circuit imprimé, par exemple, aux broches A15 A7 et A1 du microprocesseur. Et vous devez également câbler généralement une ligne MREQ (une ligne de demande de mémoire et / ou la ligne RD / WR pour faire un signal plus net, et l'ajouter dans la logique et / ou non, mais si vous étiez intelligent, vous pourriez simplement le faire avec les lignes d'adresse) Et puis vous avez connecté ces trois fils + ce signal de type Ready supplémentaire (par exemple, la ligne MREQ RD ou WR pour donner un niveau bas ou haut actif (qui aurait besoin d'un supplément supplémentaire NON ici) pour dire que les DONNÉES sont prêtes sur la ligne MAINTENANT) à travers une porte ET à 4 entrées, qui a donné une sortie à une LED via une résistance de 200 ohms, vous avez votre propre mémoire mappée d'E / S à grande vitesse à une lumière LED , que vous pouvez verrouiller via un verrou SR ou un verrou de type D pour le stocker dans une mémoire 1 bit en externe sur une carte de circuit imprimé. Ici 15 est la ligne 32K, 7 est la ligne 64, 1 est la ligne 2 (binaire fonctionne en puissances de 2, donc A1 est 2 ^ 1, A7 est 2 ^ 7 et A15 est 2 ^ 15), donc si vous emplacement adressé 32768 + 64 + 2 = 32834 = F041 en hexadécimal, en utilisant LDA ou STA ou LD sur les anciennes MPU de l'assembleur, vous sortiriez sur cette led, il s'allumerait si la résistance était d'environ 100 ohms. Vous avez donc fait des E / S mappées en mémoire, aussi simple que cela puisse être, vous pouvez le faire aujourd'hui en soudant de la même manière vos lignes d'adresse mpu. Mais vous ne le feriez pas maintenant en raison de la délicatesse des circuits. Mais vous pouvez également joindre les lignes de données D0..7 (dans l'ancien temps) ou dire d0..31 maintenant pour 32 bits sur un vieux PC 486. Ensuite, si vous avez adressé cet emplacement dans le code machine en chargeant l'accumulateur avec la valeur 8 (mov ax, 8 de nos jours) ou en stockant cette valeur d'accumulateur dans un emplacement d'adresse (mov F041h, accumulateur de hache, vous obtiendriez même aujourd'hui que cela a conduit à venir Remarque, le 8, dans l'exemple est ce qui se trouve sur le bus de données, dans ce cas particulier, nous ne transmettons pas de données, nous activons simplement le périphérique particulier (la LED est allumée, si nous avons sélectionné CE périphérique d'E / S, ici, juste une LED), donc dans cet exemple, peu importe le nombre que nous avons avec cette instruction MOV ax, 8, cela pourrait être par exemple mov ax, 243 et nous activerons toujours la LED sur la ligne F041h quand nous ferons ensuite mov F041h, comme puisque nous utilisons la même adresse. Vous voyez, il y a des lignes d'adresse et des lignes de données. Ainsi, lorsque vous adressez 3F8 dans COM1 ou quelle que soit l'adresse, la carte de mémoire d'E / S envoie simplement un signal à un port, par exemple ps / 2, et une porte et vérifie si vous avez 1110000100 sur les lignes, c'est-à-dire que 11 est 3 1000 est F et 0100 est 8, voir conversion binaire en hexadécimal. Si des tensions élevées apparaissent dans les positions de bits où il y a un 1, alors le port, par exemple rs232 ou ps / 2, est réglé sur actif, c'est-à-dire qu'il est activé, cela active les verrous, par le signal d'activation de la puce CE ou la puce CS sélectionnez simple. 8 instructions, cela pourrait être par exemple mov ax, 243 et nous continuerions à activer la LED sur la ligne F041h lorsque nous ferons ensuite mov F041h, car nous utilisons la même adresse. Vous voyez, il y a des lignes d'adresse et des lignes de données. Ainsi, lorsque vous adressez 3F8 dans COM1 ou quelle que soit l'adresse, la carte de mémoire d'E / S envoie simplement un signal à un port, par exemple ps / 2, et une porte et vérifie si vous avez 1110000100 sur les lignes, c'est-à-dire que 11 est 3 1000 est F et 0100 est 8, voir conversion binaire en hexadécimal. Si des tensions élevées apparaissent dans les positions de bits où il y a un 1, alors le port, par exemple rs232 ou ps / 2, est réglé sur actif, c'est-à-dire qu'il est activé, cela active les verrous, par le signal d'activation de la puce CE ou la puce CS sélectionnez simple. 8 instructions, cela pourrait être par exemple mov ax, 243 et nous continuerions à activer la LED sur la ligne F041h lorsque nous ferons ensuite mov F041h, car nous utilisons la même adresse. Vous voyez, il y a des lignes d'adresse et des lignes de données. Ainsi, lorsque vous adressez 3F8 dans COM1 ou quelle que soit l'adresse, la carte de mémoire d'E / S envoie simplement un signal à un port, par exemple ps / 2, et une porte et vérifie si vous avez 1110000100 sur les lignes, c'est-à-dire que 11 est 3 1000 est F et 0100 est 8, voir conversion binaire en hexadécimal. Si des tensions élevées apparaissent dans les positions de bits où il y a un 1, alors le port, par exemple rs232 ou ps / 2, est réglé sur actif, c'est-à-dire qu'il est activé, cela active les verrous, par le signal d'activation de la puce CE ou la puce CS sélectionnez simple. car puisque nous utilisons la même adresse. Vous voyez, il y a des lignes d'adresse et des lignes de données. Ainsi, lorsque vous adressez 3F8 dans COM1 ou quelle que soit l'adresse, la carte de mémoire d'E / S envoie simplement un signal vers un port, par exemple ps / 2, et une porte et vérifie si vous avez 1110000100 sur les lignes, c'est-à-dire que 11 est 3 1000 est F et 0100 est 8, voir conversion binaire en hexadécimal. Si des tensions élevées apparaissent dans les positions de bits où il y a un 1, alors le port, par exemple rs232 ou ps / 2, est réglé sur actif, c'est-à-dire qu'il est activé, cela active les verrous, par le signal d'activation de la puce CE ou la puce CS sélectionnez simple. car puisque nous utilisons la même adresse. Vous voyez, il y a des lignes d'adresse et des lignes de données. Ainsi, lorsque vous adressez 3F8 dans COM1 ou quelle que soit l'adresse, la carte de mémoire d'E / S envoie simplement un signal à un port, par exemple ps / 2, et une porte et vérifie si vous avez 1110000100 sur les lignes, c'est-à-dire que 11 est 3 1000 est F et 0100 est 8, voir conversion binaire en hexadécimal. Si des tensions élevées apparaissent dans les positions de bits où il y a un 1, alors le port, par exemple rs232 ou ps / 2, est réglé sur actif, c'est-à-dire qu'il est activé, cela active les verrous, par le signal d'activation de la puce CE ou la puce CS sélectionnez simple. 11 est 3 1000 est F et 0100 est 8, voir conversion binaire en hexadécimal. Si des tensions élevées apparaissent dans les positions binaires où il y a un 1, le port, par exemple rs232 ou ps / 2, est réglé sur actif, c'est-à-dire qu'il est activé, cela active les verrous, par le signal d'activation de la puce CE ou la puce CS sélectionnez simple. 11 est 3 1000 est F et 0100 est 8, voir conversion binaire en hexadécimal. Si des tensions élevées apparaissent dans les positions binaires où il y a un 1, le port, par exemple rs232 ou ps / 2, est réglé sur actif, c'est-à-dire qu'il est activé, cela active les verrous, par le signal d'activation de la puce CE ou la puce CS sélectionnez simple.

Sur un verrou, il s'agit de la broche E Enable ou de l'activation de sortie basse active OE. C'est-à-dire que dans l'exemple décrit ci-dessus, nous utilisons les adresses pour sélectionner (par décodage) le périphérique d'E / S que nous voulons utiliser (c'est-à-dire que dans l'exemple la LED s'allume, si ce périphérique d'E / S est sélectionné. Il s'agit donc de la ligne d'activation ALORS, une fois que le périphérique d'E / S est sélectionné, ALORS les données sont transmises depuis le bus de données (D0..7 dans l'ancien temps, ou exemple D0..63 maintenant pour un ordinateur 64 bits), via des verrous octaux 373 dans l'ancien jours, ce sont des circuits de bascule de type D qui stockent les données à l'intérieur des bascules. Avec un front d'horloge élevé actif, les données transitent et sont stockées. Ce front d'horloge proviendra du signal 'DATA RDY' sur le signal de données , cela a plusieurs noms, je ne sais pas quel est le nom maintenant. Donc pour 64 bits, nous avons 8 verrous octaux. Et ils utilisent des verrous bidirectionnels pour contrôler les données dans un sens ou dans l'autre, de sorte que lorsque le périphérique d'E / S n'est pas utilisé, les lignes de données sont dans l'état de haute impédance. Donc, par conséquent, vous sélectionnez le périphérique d'E / S avec une combinaison sur les lignes d'adresse, c'est le nombre, par exemple 3f8h dans OUT 3F8h, 7, et les données, ici dans l'exemple 7, sont ce qui est transmis sur les lignes de données, en la commande OUT, les données passent OUT au verrou de données et sortent vers le périphérique d'E / S. Si vous aviez IN, vous feriez une commande, par exemple IN 3f8h, 800h, (je suppose, mais je ne connais pas la syntaxe de l'assembleur x86), ce que je veux dire, c'est que pour IN, vous saisissez les données du lignes de données (après avoir sélectionné l'adresse, par exemple ici 3f7h, qui sélectionne CE périphérique d'E / S), ces données proviennent du périphérique d'E / S, à travers les bascules de type D dans le verrou de données (une pour chaque bit des lignes de bus de données), et est entrée aux broches D0..7 ou (D0..63 sur les ordinateurs modernes) sur l'unité de micro-traitement MPU ). Dans cet exemple, j'ai mis IN 3f8h, 800h, pour montrer qu'une fois que les données arrivent, elles sont ensuite stockées dans l'adresse 800h. Je pense que la syntaxe de x86 est différente, vous devriez probablement faire IN 3f8h, ah ou quelque chose de similaire, c'est-à-dire dans un registre d'abord avec les données qui arrivent, ensuite vous MOV 800h, ah c'est-à-dire déplacer les données dans la mémoire emplacement dans la RAM, (si vous vouliez le stocker), ou faites autre chose avec ah etc. ah est un exemple de registre, il peut s'agir de n'importe quel, al, bh, bl etc., mais vérifiez la syntaxe, chaque système d'assembleur est légèrement différent, je ne suis pas un expert en x86. Encore une fois, j'utilise 3f8h comme exemple d'adresse d'E / S, il y en a des centaines,

Alors que lorsque vous accédez à la mémoire (la RAM, par exemple les béliers statiques de 64 octets et les RAM dynamiques dans les années 70, les 8K SRAM et les DRAM dans les années 80, les rangées de SIMMS ayant chacune quelques mégaoctets chacune (module de mémoire en ligne unique) dans les années 90 et maintenant est sous la forme de modules DDR contenant des modules DIMM, des modules de mémoire double en ligne, je n'ai pas vérifié mais les derniers ont sans doute probablement chacun quelques gigaoctets sur chaque petite puce), si ce n'est pas une adresse d'E / S (très peu d'adresses sont des adresses d'E / S, de nos jours la mémoire est des millions de fois ou plus susceptible d'être dans l'espace d'adressage que les E / S sur un PC moderne), vous utilisez toujours les mêmes instructions de lecture / écriture de données dans la mémoire, mais vous n'êtes pas pilotant certains circuits logiques externes qui recherchent ces bits, au lieu de cela ces broches d'adresse et de données sont câblées directement aux puces RAM.

Dans le code machine, les E / S et l'adressage de la mémoire apparaissent exactement comme s'ils étaient tous deux des accès à la mémoire, mais ce qui se passe physiquement est totalement différent dans le circuit électronique réel.

Christine
la source