Comment le processeur communique-t-il avec les périphériques?

Je suppose que le processeur a un accès direct au BIOS et à la RAM de la carte mère.(corrigez-moi si je me trompe)

Mais comment le processeur communique-t-il avec d'Autres matériels tels que les disques durs, les cartes d'extension, les périphériques, les autres BIOS, etc.?

Je connais OS et ses pilotes, mais ce sont des logiciels - ils sont en RAM. Comment le processeur communique-t-il avec tout ce matériel au niveau matériel? N'est-ce pas limité au BIOS et à la RAM de la carte mère?

22
demandé sur Paul Sonier 2011-07-28 03:11:59

3 réponses

Dans les architectures plus anciennes, les périphériques étaient accessibles via un mécanisme séparé pour accéder à la mémoire avec des instructions d'E/S spéciales. Sur x86, il y avait (et sont toujours!) instructions" in "et" out " pour transférer des octets entre le CPU et un périphérique. Les périphériques ont reçu des adresses, par exemple 0x80 pour le clavier. Simplifier beaucoup, faire "en 0x80" lirait un octet du contrôleur de clavier au registre CPU "AL".

Sur les architectures modernes, les périphériques sont accessibles dans un chemin vers la mémoire: via des adresses mémoire mappées sur un bus. Vous ne devriez pas penser à un bus comme un moyen d'accéder à la mémoire. C'est plus un moyen d'adresser des périphériques individuels, dont la mémoire (RAM/DDR) n'est qu'un type. Par exemple, vous pourriez avoir 2 Go de RAM aux adresses 0x00000000..0x7fffffff. Après que vous pourriez avoir une carte graphique à 0x80000000..0x80001fff. Le contrôleur de bus (PCIe ou autre) sait quelles plages d'adresses vont à quel périphérique.

La mémoire est généralement spéciale en ce sens qu'elle peut être mis en cache, de sorte que les lectures/écritures individuelles en mémoire ont tendance à ne pas se traduire directement en lectures/écritures individuelles sur les puces RAM. Les périphériques sont marqués comme Spéciaux-les accès CPU doivent sortir sur le périphérique exactement comme écrit dans votre programme.

La langue avec laquelle vous parlez aux périphériques est à peu près ad-hoc en fonction de l'appareil. Le thème général est que le périphérique est mappé quelque part dans la mémoire (par exemple 0x80000000 pour quelques Ko comme ci-dessus), avec un bit individuel d'état et d'actions contrôlé par des mots différents (généralement 32 ou 64 bits). Un exemple mythique d'un port série à 0x80000000:

  • Ecrire le mot 32 bits ' A 'à 0x80000000, en faisant la queue jusqu'à caractère' a ' dans sa sortie FIFO.
  • écrivez un mot 32 bits 0x1 à 0x80000004, qui indique au port série d'envoyer sa file d'attente.

Encore une fois, totalement faite juste pour l'exemple, mais un vrai port série (uart) n'est pas si différent.

Le problème est que vous ne verrez pas l'un des au-dessus de disposition de la mémoire dans un système d'exploitation moderne, en raison de la mémoire virtuelle. Les adresses ci - dessus seraient appelées "adresses de mémoire physique" (ou adresses de bus) - les adresses réelles qui sortent sur le bus. Le processeur voit plutôt les adresses de mémoire virtuelle. Les périphériques individuels devront être mappés dans l'espace d'adressage virtuel. C'est un peu compliqué à expliquer et probablement mieux dans une autre Question, mais le fait est que vous avez peu de chances d'accéder à un périphérique par son adresse physique réelle dans un système d'exploitation moderne.

35
répondu John Ripley 2011-07-28 00:57:13

La réponse acceptée est exacte, bien sûr, mais peut-être que DrStrangeLove avait l'intention d'aborder autre chose ou, au moins, la question correspond à une autre réponse. En fait, quand quelqu'un demande "comment les périphériques communiquent-ils avec le CPU au niveau matériel?", Je pense que la réponse devrait mentionner le rôle des modules d'E/S (comme les adaptateurs d'E/S que tout le monde connaît). Ceci est important à souligner car une partie de la logique requise pour parler avec les périphériques d'e / s est intégrée dans le Modules d'E/S, réduisant le besoin D'attention du processeur lors de l'exécution d'opérations d'E/S. Cela me semble pertinent dans le contexte de la question car il pose des questions sur les aspects matériels des opérations d'E/S, et les adaptateurs sont des pièces matérielles qui abstraient les intrinsèques des périphériques d'E/S, cachant leurs complexités du CPU (et du système d'exploitation aussi). Par exemple, les adaptateurs de disque masquent les aspects de géométrie des disques, libérant ainsi le processeur de la logique requise pour faire tourner les disques' placer un cylindre et attendre que le secteur correct passe sous les têtes de lecture / écriture. Des raisonnements similaires s'appliquent à d'autres appareils comme les adaptateurs vidéo, les cartes réseau,etc. En un mot, sans les modules d'E/S, les tâches d'E/S submergeraient le processeur. Pour citer Stallings:

Un module d'E/S fonctionne pour permettre au processeur de visualiser une large dispositifs d'une manière simple d'esprit. Il y a un éventail de capacités qui peuvent être fournis. Le module d'E / S peut masquer les détails du moment, et l'électromécanique d'un dispositif externe de sorte que le processeur peut fonctionner en termes de simples commandes de lecture et d'écriture, et éventuellement ouvrir et fermer les commandes de fichiers. Dans sa forme la plus simple, l'I/O module peut encore laisser une grande partie du travail de contrôle d'un dispositif (par exemple, rembobiner une bande) visible pour le processeur. Un module d'E / S qui prend la majeure partie de la charge de traitement détaillée, présentant un niveau élevé interface au processeur, est généralement appelé une E / S canal ou I/O processor. Un module d'E / S qui est assez primitif et nécessite le contrôle détaillé est généralement appelé contrôleur ou périphérique d'E/S contrôleur. Les contrôleurs d'E/S sont généralement vus sur les micro-ordinateurs, alors que les canaux d'E / S sont utilisés sur les ordinateurs centraux.

En outre, comme John Ripley l'a correctement déclaré, Il existe un espace d'E/S qui est mappé de la même manière que la RAM. En effet, les périphériques pourraient être mappés directement dans l'espace d'adressage mémoire (qui est connu sous le nom de MMIO , E / S mappées en mémoire), ou dans un espace d'adresse séparé (PMIO , Port-Mapped I/O, qui est également appelé "isolé I/O" parce que, contrairement à MMIO, les adresses d'E / S sont entièrement séparés de ceux de la RAM de l'ordinateur. C'est pourquoi vous devez utiliser les instructions in et out pour communiquer avec les périphériques utilisant PMIO).

Par ce qui précède, MMIO et PMIO traitent les périphériques d'E/S comme des positions de mémoire - ce qui est l'essence de la façon dont le matériel traite des opérations d'E/S, mais quelques détails supplémentaires méritent d'être mentionnés ici afin d'obtenir la charge conceptuelle riche impliquée dans les e/s. Comme chaque adaptateur a une plage d'adresses limitée, nous devons comprendre que ces positions de mémoire fonctionnent comme des tampons de données, ce qui signifie que vous n'avez que quelques octets ("blocs de données") Pour cette raison, il est courant que le processeur n'utilise pas directement les données qu'il lit à partir de ces positions de mémoire: tout d'abord, les données sont lues à partir du Périphérique d'E/S via l'adresse correspondante, ensuite, ces données sont stockées dans la RAM et seulement alors le CPU peut l'utiliser. Pour obtenir cela, pensez dans un gros fichier binaire que le CPU doit exécuter: l'adaptateur de disque a un tampon limité limité par son espace d'adressage d'E/S( notez que je ne fais pas référence aux tampons internes de l'adaptateur, mais à son espace d'adressage vu par le CPU), donc l'adaptateur lit certaines données du disque et avertit le CPU interrompt tout ce qu'il fait, lit le tampon, copie le contenu du tampon dans la RAM et signale à l'adaptateur qu'il peut continuer à apporter plus de données du disque. Ce cycle se répète jusqu'à ce que le fichier binaire soit complètement chargé dans la RAM. À partir de ce moment, l'opération de lecture est déclarée terminée et le fichier peut enfin être exécuté.

Ce cycle est appelé E / S entraînées par interruption et se produit totalement dans le matériel (avec un certain support du système d'exploitation pour gérer les interruptions), mais veuillez notez qu'il existe deux options pour effectuer des opérations d'e/S. Il est également possible d'utiliser le soi-disant PIO (Programmable I/O) où au lieu d'utiliser le mécanisme d'interruption, le CPU met en commun en continu le contrôleur via une boucle jusqu'à ce que toutes les informations requises soient collectées, bloc par bloc (lorsque le dernier bloc est récupéré, la boucle se termine). Les deux E/S entraînées par interruption et PIO gaspillent du temps CPU (en particulier ce dernier) et ont été remplacés il y a longtemps par L'accès direct à la mémoire (DMA), ce qui permet au périphérique d'E/S d'écrire (ou de lire) ses données directement vers (ou depuis) la RAM comme indiqué par le processeur. En raison de sa nature de mise en commun, je crois que PIO est entièrement implémenté dans le logiciel, mais je pourrais me tromper à ce stade. Je dois remarquer que, bien que DMA ait rendu les E/S PIO et interrompues obsolètes, Je ne suis pas sûr que les deux aient été bannies des architectures modernes.

2
répondu Humberto Fioravante Ferro 2018-03-30 18:06:27

Cela dépend de ce que vous entendez par "accès direct". Un noyau CPU communique avec la mémoire principale (RAM) sur un bus . (Le noyau peut avoir un accès plus direct à des quantités relativement faibles de mémoire (cache ou registres), mais c'est un problème différent.) Le processeur communique également avec les périphériques via des bus. Certains types de bus dont vous avez peut-être entendu parler sont universal serial bus (USB; généralement pour les périphériques externes), PCI, front-side bus (un type de bus reliant les cœurs de processeur et la mémoire principale), ou Serial-ATA (SATA; souvent utilisé pour les périphériques comme les disques durs).

ETA: j'ai mentionné que dans mon commentaire ci-dessous, les pilotes de périphériques gèrent la communication au niveau matériel entre le processeur et le périphérique. La mécanique réelle de la communication peut impliquer l'utilisation de parties spécifiques de l'espace d'adressage pour transférer des données (e / s mappées en mémoire), de sorte que la lecture physique depuis ou l'écriture vers un périphérique ressemble à l'accès à la mémoire ordinaire. Le pilote de périphérique traite également de la façon dont un processeur répondra à interrompt depuis un périphérique.

0
répondu Asher L. 2011-07-28 00:12:43