Il s'agit d'un autre cas où la sagesse populaire reçue sur le sujet, comme malheureusement illustrée par psusi
la réponse de et en fait une partie de la question, est bloquée dans le monde telle qu'elle était vers 1991, malgré la richesse des références techniques disponibles expliquant comment elle est maintenant autrement.
Dans le monde de la fin des années 80, le firmware de la machine - l'une des deux choses appelées "le BIOS" dans le monde du PC compatible IBM - était en effet dans une puce ROM sur le bus ISA; et les CPU ont en effet commencé à exécuter du code à l'adresse physique 000FFFF0
, un emplacement dans la "mémoire conventionnelle" accessible via le pointeur en mode réel. F000:FFF0
Ce monde est révolu depuis longtemps.
(Le monde dans lequel l'auteur de la page WWW que vous avez désignée, S. Ebrahim Shubbar, vit par erreur, malgré l'écriture en 2002, est encore plus ancien. Les processeurs n'ont pas commencé avec la CS:IP
combinaison FFFF:0000
depuis le 8086. Le 80286 l'a changé en F000:FFF0
Mais le monde 80286 lui - même est le monde hautement dépassé de la fin des années 1980 que la sagesse populaire continue de diffuser.)
Votre "puce BIOS" est RAM; et votre CPU n'est pas 16 bits.
Sur les PC modernes, le micrologiciel de la machine est conservé dans une mémoire RAM non volatile . La puce NVRAM est connectée au bus LPC (ou à une interface dédiée «hub de micrologiciel»), et le pont LPC / FWH dans le «chipset» désactive normalement les cycles d'écriture. Le «clignotement» du micrologiciel implique la définition de registres de chipset qui permettent les écritures sur la NVRAM, puis l'écriture sur la NVRAM. (Dans l'Intel ICH10, par exemple, le bit de registre du chipset qui autorise les cycles d'écriture est nommé BIOSWE
"BIOS Write Enable". Il y a quelques détails supplémentaires que je vais sauter ici, mais c'est l'essentiel.)
Les processeurs x86 n'ont pas commencé à s'exécuter sur place 000FFFF0
depuis l'époque du 80286. Les processeurs 32 bits démarrent dans ce qui est communément appelé mode irréel . Même si la valeur initiale du CS
registre après réinitialisation est F000
, le descripteur de segment associé à ce registre tient initialement FFFF0000
comme son adresse de base. Ainsi , l'adresse physique qui correspond d' abord au CS du 16h16: l' adresse IP F000:FFF0
est en fait, et a été depuis les jours du 80386, FFFFFFF0
.
Et c'est là que le micrologiciel de la machine est principalement mappé dans l'espace d'adressage physique sur les machines x86 32 bits et 64 bits. Il y a une fenêtre de 128 Ko sur le micrologiciel dans la zone "mémoire conventionnelle", mais la NVRAM contenant le micrologiciel de la machine peut atteindre 16 Mo (bien que cela varie selon le chipset) sur les PC modernes et est principalement mappée immédiatement dans les 16 Mo d'espace d'adressage physique immédiatement sous la ligne 4GiB - c'est-à-dire les adresses physiques FF000000
à FFFFFFFF
. (Pour utiliser à nouveau l'ICH10 comme exemple: la quantité de cet espace d'adressage mappé à la NVRAM est contrôlée par un registre de chipset connu sous le nom de registre FWH_DEC_EN
"Firmware Hub Decode Enable". Le micrologiciel est codé pour reprogrammer leFWH_DEC_EN
enregistrez-vous en fonction de la taille de la puce NVRAM réelle installée sur la carte mère. Mais le haut 512KiB de la NVRAM est toujours mis en correspondance, à des adresses physiques FFF80000
à FFFFFFF
, et ne peut pas être désactivé.) Le code initialement exécuté par le processeur immédiatement après la vie remise à zéro dans la partie supérieure de cette 64 Kio plage d'adresses 16MiB.
En ce qui concerne l'observation de la ROM du BIOS (c'est ainsi qu'on l'appelle - tout à fait pourquoi barlop
pense que le processeur est observé est un mystère): Oui, l'accès à la NVRAM sur le bus LPC ou le concentrateur de micrologiciel n'est toujours pas aussi rapide que l'accès au système principal (volatile) RAM. Mais les raisons pour lesquelles l'observation est importante ont considérablement diminué avec les progrès des systèmes d'exploitation tels que OS / 2 et Windows NT - à la fin des années 80 et au début des années 90. Les systèmes d'exploitation en mode réel tels que MS-DOS, PC-DOS, DR-DOS et ainsi de suite ont été superposés aux fonctionnalités d'E / S fournies par le micrologiciel de la machine. Ainsi, le code du micrologiciel et les données en lecture seule ont fini par être consultés beaucoup au moment de l'exécution. Les systèmes d'exploitation en mode protégé tels que OS / 2 et Windows NT reposent beaucoup moinssur les services fournis par le firmware au moment de l'exécution. Ainsi, le fait que le code s'exécutant hors de la NVRAM, et les données en lecture seule dans le même, arrivent au processeur plus lentement que lorsqu'ils sont masqués dans la RAM du système est moins problématique qu'auparavant.
De plus, quel code firmware et les données qu'ils ne se fondent sur ne sont pas nécessairement en direct dans la partie de NVRAM mis en correspondance avec la partie de l' espace d'adressage physique, mentionnée ci - dessus 128KiB fenêtre « mémoire conventionnelle », qui est nécessairement même copiable en premier lieu. Les services de micrologiciel en mode protégé n'ont pas tous besoin de vivre sous la ligne 1 Mo dans l'espace d'adressage physique comme le font les services de micrologiciel en mode réel, et certains ne le font pas. (Et bien sûr , il serait possible de faire la même astuce avec la zone de l' espace d'adressage physique qu'ils font en direct s'il y a au moins 4GiB de RAM du système.)
Ironiquement, une source d'informations plus précise à ce sujet que S. Ebrahim Shubbar écrivant en 2002 est le livre de Phil Croucher The BIOS Companion datant d'un an auparavant en 2001. M. Croucher observe que Unices, Linux, Windows NT et "vraisemblablement (95 / 98) "" ne tirent aucun avantage de l'observation ". Ce n'est pas nécessairement entièrement sans avantage, mais c'est relativement peu par rapport au monde des personnes qui exécutent MS-DOS, PC-DOS et DR-DOS en mode réel sur des machines 80286 16 bits en 1989.