Comment un ordinateur peut-il redémarrer tout seul? Une fois éteint, comment se dit-il de se rallumer? Quel type de logiciel est ce qui peut faire cela?
tl; dr:les états d'alimentation de votre ordinateur sont contrôlés par une implémentation de ACPI (configuration avancée et interface d'alimentation). À la fin d'un processus d'arrêt, votre système d'exploitation définit une commande ACPI indiquant que l'ordinateur doit redémarrer. En réponse, la carte mère réinitialise tous les composants à l’aide de leurs commandes ou lignes de réinitialisation respectives, puis suit le processus d’amorçage. La carte mère ne s’éteint jamais, elle ne réinitialise que divers composants, puis se comporte comme si le bouton d’alimentation venait d’être appuyé.
Long et décousu mais (à mon avis) réponse plus intéressante:
Dans les temps anciens (bon d'accord, pour un étudiant comme moi, les années 90 étaient très anciennes), nous avions des cartes mères AT (technologie de pointe) avec AT pouvoirmanagement. Le système d’alimentation AT était très simple: le bouton d’alimentation de votre ordinateur était une bascule matérielle (probablement à l’arrière du boîtier) et votre entrée 120vac le traversait parfaitement. allumez et éteignez votre alimentation, et quand cet interrupteur était en position Off, tout dans votre ordinateur était complètement mort (ceci rendait la batterie CMOS très importante, car sans elle, il n'y avait pas d'alimentation Le commutateur d’alimentation étant un mécanisme physique, il n’existait aucun moyen logiciel d’allumer et d’éteindre l’alimentation. Windows afficherait le fameux message "Il est maintenant sûr d’éteindre votre ordinateur" car, bien que tout garé et prêt à s’éteindre, il n’était pas possible pour le système d’exploitation d’inverser le commutateur d’alimentation. appelé puissance dure, parce que c'est tout le matériel.
De nos jours, les choses sont différentes, à cause des merveilles de ATX cartes mères et de ATX power(c'est la technologie avancée eXtended si vous gardez le suivi). avancées (mini-DIN PS/2, ça vous tente?), ATX apporté puissance douce. La puissance douce signifie que l’alimentation de l’ordinateur peut être contrôlée par logiciel. Cela a entraîné quelques modifications à l’importation:
Votre interrupteur d'alimentation ne met donc plus l'ordinateur sous tension. Au lieu de cela, il est connecté aux contrôleurs de base de votre carte mère, qui détectent que le bouton a été enfoncé et exécutent un certain nombre d'étapes pour préparer le système, notamment en allumant PS_ON pour que l'alimentation soit disponible. Le bouton d'alimentation n'est pas le seul moyen de déclencher le processus de démarrage, les périphériques de votre bus d'extension peuvent également le faire. Cela est important car vos cartes réseau Ethernet restent activées lorsque votre ordinateur est éteint et recherchent un paquet très spécifique, souvent appelé "paquet magique". S'ils détectent ce paquet adressé à leur adresse MAC, ils déclencheront le processus de démarrage. Voici comment fonctionne "Wake-on-LAN" (WL). L'horloge peut également initier un démarrage (la plupart des BIOS vous permettent de définir l'heure à laquelle l'ordinateur doit être démarré chaque jour), et les périphériques USB et FireWire peuvent déclencher un démarrage, bien que je ne sois au courant d'aucune implémentation de cela.
Eh bien, j’explique le soft power à la fois parce que j’estime que c’est intéressant (c’est toujours une raison essentielle pour expliquer les choses) et parce que cela vous permet de comprendre comment l’alimentation et l’état de fonctionnement de votre ordinateur sont tous contrôlés par logiciel. Dans la plupart des ordinateurs actuels, ce système logiciel est une implémentation de la configuration avancée et interface d'alimentation, ou ACPI. ACPI est un système normalisé et unifié permettant à un logiciel de contrôler le système d'alimentation de votre ordinateur. Vous avez peut-être entendu parler de la ACPI power states. Le mécanisme de base du contrôle de l’alimentation est constitué de ces "états d’alimentation", votre système d’exploitation bascule entre les modes d’alimentation en préparant le commutateur (processus d’arrêt/veille prolongée qui se produisent avant la mise hors tension), puis la carte mère pour changer d’état d’alimentation.
Vous remarquerez que le redémarrage n'est pas l'un de ces états. Alors, que se passe-t-il lorsque votre ordinateur redémarre? La réponse peut être surprenante car, du point de vue de la gestion de l’alimentation, c’est presque rien. Il y a une commande de réinitialisation ACPI.). Lorsque vous demandez à votre système d’exploitation de redémarrer, il se met en arrêt processus, effectue un peu de maintenance, démonte vos systèmes de fichiers, etc.), puis comme dernière étape, au lieu d’envoyer la machine à l’état d’alimentation G2 (comme si vous aviez simplement dit de l’arrêter), elle initialise la réinitialisation. C'est ce que l'on appelle généralement le "registre de réinitialisation", car comme la plupart des interfaces ACPI, il s'agit simplement d'une adresse sur laquelle une valeur spécifique doit être écrite afin de demander une réinitialisation. Je citerai la spécification 2.0 sur ce qu'elle Est-ce que:
Le mécanisme de réinitialisation ACPI facultatif spécifie un mécanisme standard fournissant une réinitialisation complète du système. Une fois mis en œuvre, ce mécanisme doit réinitialiser l’ensemble du système. Cela inclut les processeurs, la logique principale, tous les bus et tous les périphériques. Du point de vue de l'OSPM, l'affirmation du mécanisme de réinitialisation est l'équivalent logique du cycle d'alimentation de la machine. Après avoir pris le contrôle après une réinitialisation, OSPM effectuera les actions de la même manière qu’un démarrage à froid.
Ainsi, lorsque le registre de réinitialisation est défini, quelques événements se produisent en séquence.
L’effet final de ces deux étapes (qui se divisent en beaucoup d’autres étapes) est qu’il ressemble à tout, tout comme l’ordinateur qui vient d’être démarré, mais le courant est resté allumé. Cela signifie moins de temps d’arrêt et de démarrage (car vous n’aurez pas à attendre que l’alimentation électrique soit prête), et surtout, le démarrage du démarrage est provoqué par l’arrêt du système d’exploitation. Cela signifie qu'un autre déclencheur de démarrage n'a pas besoin d'être utilisé (WoL, etc.) et vous permet d'utiliser le redémarrage comme moyen efficace de réinitialiser le système à distance, lorsque vous ne disposez pas d'un moyen de déclencher le démarrage.
C'était une longue réponse. Mais bon, j'espère que vous en savez plus sur la gestion de l'alimentation des ordinateurs maintenant. J'ai certainement appris certaines choses en recherchant cela.
Voici un point de départ:
Les puces ne s'éteignent généralement pas puis s'allument. Au lieu de cela, il y a une ligne de réinitialisation qui amène le processeur à l'état de réinitialisation lorsque, normalement, toute la mémoire est effacée et que le processeur semble avoir été mis sous tension. Tant que cette broche est maintenue haute (ou basse, selon le processeur), le processeur est réinitialisé. Une fois que la broche est relâchée, il continuera de s’amorcer normalement, comme si elle avait été activée pour la première fois. Le fait est qu’il n’ya pas de courant coupé.
Alors, comment cette échelle s'adresse-t-elle à des systèmes plus volumineux tels que les PC modernes? Les ordinateurs modernes sont fabriqués à partir d’ordinateurs qui sont parfois fabriqués à partir d’ordinateurs eux-mêmes. Ainsi, lorsque vous configurez l'ordinateur pour qu'il se réinitialise, les "ordinateurs" qui le font commenceront à enregistrer leurs états (si la réinitialisation est contrôlée) ou tout simplement à retirer leurs broches de réinitialisation.
Certains processeurs et microcontrôleurs (qui sont des ordinateurs autonomes miniatures, généralement dotés de 20 ans de retard sur les ordinateurs de bureau modernes) peuvent se réinitialiser à l'aide de commutateurs internes. Comme je l'ai dit, une fois que le signal qui génère la réinitialisation a disparu, l'ordinateur se met en marche. Donc, la prémisse dans la question n'est pas complètement correcte. L'ordinateur ne sait pas quand allumer. En sachant quand il doit être "éteint" ou en réinitialisation et quand le signal qui le maintient est parti, il s'allume.
Ce comportement peut sembler étrange sur un ordinateur moderne qui peut être configuré pour s’allumer à une heure précise ou sur le réseau, etc. Comme je l'ai dit, les ordinateurs sont faits d'ordinateurs. Ainsi, même si le processeur principal est éteint, de nombreuses autres puces et microcontrôleurs peuvent être utilisés. Le cas le plus évident est l’horloge temps réel qui est souvent alimentée par batterie. Il peut ensuite allumer d'autres puces qui en allumeront d'autres et la réaction en chaîne continuera jusqu'à ce que tout l'ordinateur soit allumé. Sur les ordinateurs actuels, il existe une ligne d'alimentation appelée +5 VDC Standby Voltage. Il fournit environ 50 mW d’énergie aux divers périphériques allumés lorsque l’ordinateur est "éteint".
Petit détail: la broche de réinitialisation du processeur Intel 386 EX correspond au numéro de broche 110.
Sur Intel i7-900, le numéro de terrain est AL39.
J'espère que quelqu'un sera en mesure de fournir une réponse qui expliquera comment les choses fonctionnent du point de vue du haut niveau, car c'est un système assez compliqué.
Cet article de blog décrit comment Linux déclenche un redémarrage.
Extrait:
Linux propose différentes méthodes pour réinitialiser un x86. Certains d'entre eux sont en 32 bits seulement et je vais donc simplement les ignorer, car honnêtement, que faites-vous de votre vie? En outre, ils sont horribles. Donc, cela nous laisse avec cinq d'entre eux.
kbd - redémarre via le contrôleur de clavier. Le PC IBM d'origine avait la ligne de réinitialisation de l’UC reliée au contrôleur du clavier. L'écriture de la valeur magique appropriée impulse la ligne et la machine est réinitialisée. Tout cela est très simple, à l'exception du fait que les machines modernes ne disposent pas de contrôleurs de clavier (ils font en réalité partie du contrôleur intégré) et que même les machines les plus modernes ne prétendent même pas avoir de contrôleur de clavier. Maintenant, les contrôleurs intégrés exécutent un logiciel. Et, comme nous le savons tous, les logiciels sont affreux. Mais, pire, le logiciel du contrôleur intégré a été écrit par les auteurs du BIOS. Il est donc clair que toute prétention que cela fonctionne jamais est une sorte de fiction élaborée. Certaines machines sont très difficiles en ce qui concerne le matériel dans l'état exact dans lequel Windows serait programmé. Certaines machines fonctionnent 9 fois sur 10, puis se verrouillent en raison d’un problème de synchronisation particulier. Et les autres ne fonctionnent tout simplement pas du tout. Hourra!
triple - tentative de générer une triple faute. Ceci est fait en chargeant une table de descripteur d'interruption vide puis en appelant int (3). L'interruption échoue (il n'y a pas d'IDT), le gestionnaire d'erreurs échoue (il n'y a pas d'IDT) et la CPU entre dans une condition qui, en théorie, devrait alors déclencher une réinitialisation. Sauf que cela ne semble pas être une obligation et que cela ne fonctionne tout simplement pas sur un tas de machines.
pci - pas réellement pci. L'accès à l'espace de configuration PCI traditionnel est obtenu en écrivant une valeur de 32 bits sur le port io 0xcf8 pour identifier le bus, le périphérique, la fonction et le registre de configuration. Le port 0xcfc contient alors le registre en question. Mais si vous écrivez la paire appropriée de valeurs magiques dans 0xcf9, la machine redémarrera. Spectaculaire! Et pas standardisé (certainement pas partie de la spécification PCI), donc différents chipsets peuvent avoir des exigences différentes. Booo.
les services d'exécution efi - EFI fournissent un point d'entrée pour redémarrer la machine. Cela fonctionne généralement même! Tant que les services d'exécution EFI fonctionnent, ce qui peut s'avérer difficile.
acpi - Les versions récentes de la spécification ACPI vous permettent de fournir une adresse (généralement de la mémoire ou du système IO espace) et une valeur à écrire à cet emplacement. L'idée est que l'écriture de la valeur sur l'adresse réinitialise le système. Il s'avère que cela échoue souvent. Il est également impossible de représenter la méthode de redémarrage PCI via ACPI, car la méthode de redémarrage PCI requiert une paire de valeurs et ACPI ne vous en donne qu'une.
Il bloque un emplacement d'E/S qui tire vers le bas une ligne de données qui indique au processeur qu'il doit arrêter sa tâche et commencer à exécuter du code à partir d'un emplacement donné dans le BIOS.
Auparavant, avant la gestion de l'alimentation, les ordinateurs pouvaient toujours redémarrer eux-mêmes, bien sûr. (Quelqu'un se souvient du moment où un programme gelé vous obligeait à utiliser Ctrl + Alt + Suppr pour redémarrer l'ordinateur?)
Sur mon ancien 486, la commande JMP FFFF:0000
du langage d'assemblage (c'est-à-dire, réglez le pointeur d'instruction de la CPU sur cette adresse) ferait redémarrer tout l'ordinateur. En d'autres termes, FFFF: 0000 adresse un emplacement dans le BIOS qui contient des instructions sur ce que l'ordinateur doit faire lors du premier démarrage. Je soupçonne que l'épingle de réinitialisation décrite dans la réponse d'AndrejaKo, ou les boutons de réinitialisation des jours précédant la gestion de l'alimentation, forceraient également le pointeur d'instruction à la même adresse.
A La recherche Google pour JMP FFFF: 0000 révèle de nombreuses pages intéressantes à ce sujet.
Il y a aussi une chose nommée le chien de garde. Cet appareil sert d'interrupteur d'homme mort. L'ordinateur doit signaler au chien de garde à chaque minute qu'il est toujours en vie. Lorsque l'ordinateur se bloque, par exemple en se heurtant à une boucle sans fin, il ne pourra pas signaler au chien de garde qu'il fonctionne toujours comme prévu. Le chien de garde procédera alors à une réinitialisation matérielle. Cela a été démontré dans la série télévisée populaire du terminateur, où un robot a été assommé par une surtension haute tension. il se réinitialiserait dans 2 minutes.
De retour sur l'ancien IBM PC-1, le contrôleur de clavier, curieusement, gérait le redémarrage. IBM a intégré un petit microprocesseur pour gérer le clavier, ainsi que des lignes d’entrée/sortie de secours; ils ont donc utilisé l’une des lignes pour piloter la ligne de réinitialisation du processeur principal. Une commande envoyée au contrôleur du clavier entraînerait la réinitialisation de la CPU comme si l'alimentation venait juste d'être mise sous tension.
Je suppose que cette tradition a perduré bien longtemps dans l'ère "AT" et qu'il peut en rester des vestiges dans l'ACPI aujourd'hui.
Ajouté: Il y a un détail intéressant sur le schéma de réinitialisation ci-dessus. Au début de la séquence de démarrage, le code recherchait un motif particulier dans RAM qui aurait pu être défini par le code précédemment exécuté. Si ce code était présent, certains des diagnostics POST (auto-test à la mise sous tension) ont été ignorés. Le motif ne serait présent que sur un démarrage "chaud".