2016-02-16 4 views
0

Je passe en revue les éléments essentiels des E/S, et même si je pense comprendre la plupart de ce qui se passe, je ne comprends toujours pas comment les adresses physiques ou les ports distincts sont mappés sur des périphériques individuels. L'ordinateur interroge-t-il le bus au démarrage du système, attribuant des adresses aux périphériques un par un, ou y a-t-il des adresses fixes qui sont chargées dans la mémoire quelque part? Si cela est fait via le BIOS, comment cette information de mise en mémoire est-elle relayée au système d'exploitation?Mappage de la mémoire d'E/S

Merci pour votre aide!

Répondre

0

(cette question a été posée et répondu avant, vous devez rechercher en premier)

dépend de la plate-forme, vous n'étiez pas spécifiques

certains systèmes, certains périphériques dans ces systèmes, sont hardcoded par la puce/concepteurs de systèmes. Pour pci (e), comme défini par cela, vous énumérez le ou les bus recherchant des périphériques attachés, et ces espaces de configuration de périphériques (qui sont définis par le fournisseur de périphériques selon leurs besoins) indiquent combien et combien ils ont besoin. Pour un PC x86, le BIOS fait cette énumération pas le système d'exploitation. Pour d'autres plateformes, cela dépend de la plate-forme, il peut s'agir du bootloader ou du système d'exploitation. mais quelqu'un doit prendre l'espace disponible (essentiellement codé en dur essentiellement pour cette plate-forme sachant la plate-forme et ce qui est déjà utilisé) et le diviser. pour x86, il s'agissait juste d'un concert qui a été divisé en 32 bits, et qui arrive encore sur certains systèmes, mais pour les systèmes 64 bits, les bioses ouvrent jusqu'à 2gig et peuvent le placer dans un espace d'adressage élevé pour éviter le bélier (demandez-vous pourquoi votre système 32 bits avec 4gig de dram seulement avait 3gig utilisable?). naturellement un espace mémoire plat n'est qu'une illusion, les fenêtres demandées par les périphériques pci peuvent être de petites fenêtres dans leur espace, des cartes vidéo avec beaucoup de bélier par exemple. vous utilisez les csrs pour déplacer la fenêtre, comme si vous étiez debout dans votre maison regardant par une petite fenêtre et bougeant physiquement d'un côté à l'autre pour voir plus de choses à travers la fenêtre, mais seulement la taille de la fenêtre à la fois.

même chose pour USB, il est énuméré, les bus sont recherchés et les périphériques répondent. avec usb bien qu'il ne mette pas dans l'espace d'adresse de l'hôte. Comment le système d'exploitation trouve cette information dépend fortement du type de système. avec bios sur un x86 il y a une façon connue d'obtenir cette information, je pense que vous pouvez également obtenir la même information dans dos (oui dos est encore fortement utilisé). pour non pcie ou usb les pilotes du système d'exploitation doivent trouver les périphériques ou juste savoir, si la plate-forme est cohérente (adresse des ports série dans un pc) ou avoir un moyen de les retrouver sans nuire aux autres périphériques ou crash. il y a les cas où le système d'exploitation lui-même a fait l'énumération. ou le chargeur de démarrage si c'est l'endroit où l'énumération s'est produite. mais chaque combinaison de bootloaders et de systèmes d'exploitation sur différentes plates-formes peut avoir sa propre solution différente, aucune raison de s'attendre à ce qu'elles soient identiques. Ok, vous avez dit bios et avoir un bios, ce qui implique des systèmes x86. le BIOS fait l'énumération pci/pcie au démarrage, si vous ne configurez pas votre bios pour savoir que votre système d'exploitation est en 64 bits, il peut prendre un gig sur votre espace inférieur 4Gig pour les périphériques pcie (et si vous définissez pour 64 bits installer un système d'exploitation 32 bits, alors vous êtes en difficulté là-bas pour d'autres raisons). Je ne me souviens pas, mais je suppose qu'il existe des appels bios que le système d'exploitation peut utiliser pour savoir ce que le bios avait fait, ne devrait pas être difficile du tout pour trouver cette information. Tout ce qui n'est pas détectable de cette manière est probablement hérité et codé en dur ou utilise des techniques héritées pour être détectable (recherche de style de bus isa pour un bios sur une plage d'adresses, etc.). le fournisseur de pcie/usb et l'information d'identification de produit indiquent aux conducteurs ce qui existe et à partir de laquelle ils ont des décalages codés en dur dans ces espaces pour compléter les adresses nécessaires pour communiquer avec les périphériques.