Ma question est:
Lorsque j'appuie sur le bouton "Arrêter" de Windows/Linux, l'ordinateur arrête. Comment la commande "Arrêter" a-t-elle réellement éteint l'ordinateur physiquement?
Pour que mon propos soit clair:
Lorsque nous frappons une balle, il y a un contact physique entre la balle et notre jambe, pour que la balle puisse bouger. Comment établit-on la connexion physique entre le logiciel et le matériel?Comment le texte brut des codes oblige-t-il l'ordinateur à faire ce qu'il fait?
Bien que la réponse soit relativement complexe et nécessite de comprendre les bases des systèmes et circuits électriques (KVL, KCL), des nombres binaires et de la logique booléenne, nous pouvons décrire le processus à un niveau élevé: le code (représenté par des mots en texte clair) est compilé , assemblés et finalement traduits en une combinaison de zéro et d’un, représentant respectivement les tensions basse et haute.
Lorsque des tensions sont appliquées à des matériaux et à des circuits, ces tensions peuvent modifier leurs propriétés physiques, telles que la fermeture d’un circuit qui alimente une ampoule (ce qui l’allume) ou celui d’un moteur à courant continu qui pourrait ouvrir un CD/lecteur. DVD/Bluray/(?) Drive.
Imaginons maintenant un processeur hypothétique à 1 bit, capable de fermer un circuit et de fournir du courant à une sonnerie, produisant un son. Cette CPU 1 bit a une seule entrée, qui peut avoir deux valeurs: 0 et 1.
Ce processeur simple a un langage d'assemblage très simple: ON
et OFF
, et nous avons un langage de programmation sophistiqué qui fournit des abstractions plus agréables: cpu.turnOn
, cpu.turnOff
.
J'écris mon programme cpu.turnOn;
pour le compiler, l'assembler et il est prêt à être exécuté. Lorsque je lance le programme sur mon processeur, le buzzer s’allume.
Dans le monde réel, les ordinateurs sont constitués de systèmes plus complexes. Au lieu d'un seul processeur à 1 bit, nous avons un processeur à 64 bits, avec des jeux d'instructions complexes et une multitude de périphériques.
Pour permettre aux systèmes complexes d'interagir, ces systèmes sont constitués de couches d'abstractions.
La couche la plus basse est constituée des tensions, des circuits et du silicium, ou de ce que vous pourriez appeler le «matériel physique». À côté du matériel, un «microcontrôleur» ou une unité de traitement spécialisée conçue pour interagir avec les spécificités du matériel. Imaginez un lecteur de disque optique, son microcontrôleur a la capacité d’éjecter la baie de lecteur, de démarrer le moteur, d’aligner le lazer et de transférer les données hors du disque.
Le logiciel exécuté par le microcontrôleur est appelé micrologiciel. C'est un système d'exploitation spécialisé qui contrôle les fonctions du matériel et peut également inclure une API. Dans l'exemple de processeur imaginaire à 1 bit, le programme serait un micrologiciel et le cpu.turnOn, cpu.turnOff
serait l'API.
Étant donné qu'un ordinateur est composé de nombreux composants matériels (graphiques, stockage, communications, entrées/sorties), les ordinateurs sont constitués de nombreux firmwares spécialisés. Pour que tout ce qui est utile de faire avec ce matériel, une autre couche d’abstraction est nécessaire, par exemple pour traiter les claviers de manière universelle, ou pour permettre aux souris, aux pavés tactiles et aux trackballs de se comporter de la même manière malgré des interactions différentes. C’est là que le système d’exploitation entre en jeu. Le système d’exploitation fournit une API permettant de gérer des groupes de périphériques associés, ainsi que des points d’accès permettant aux fournisseurs de matériel de fournir la traduction entre les commandes du système d’exploitation et les commandes comprises par le microcontrôleur. Sous Windows, il s'agit d'un driver.
La couche d'abstraction suivante, située au-dessus des systèmes d'exploitation et des pilotes, concerne les applications, que les utilisateurs utilisent pour effectuer un travail réel (ou jouer à Fortnite). Ces programmes sont écrits dans une myriade de langages, de SDK et de kits d’outils. C’est la raison pour laquelle StackOverflow existe. Ces langages sont compilés en un code exécutable que le système d’exploitation charge et gère, puis exécuté par l’ordinateur.
Rassembler le tout avec la commande shutdown
: la commande intepreter utilise une API au niveau du système d'exploitation qui gère l'alimentation du système. Cette API envoie une notification au reste du système d'exploitation pour gérer des tâches telles que le vidage en douceur des mémoires tampons, la sauvegarde de l'état des applications, la terminaison des canaux de communication et la mise hors tension de divers systèmes matériels (ou plus probablement en mode de consommation réduite). Il utilise également un pilote d'alimentation (ACPI?) Pour assurer l'interface avec le sous-système de gestion de l'alimentation des ordinateurs. Ce sous-système est chargé de s’arrêter, ce qui envoie à son tour un signal à l’alimentation de l’ordinateur pour interrompre le circuit et ne plus alimenter la plupart des composants.
Si vous pensez que le logiciel est une créature différente du matériel, aucune explication ne vous satisferait. Pensez logiciel comme une séquence de charges électriques. Tout le code que vous écrivez serait stocké sous forme de séquence de charges électriques sur RAM ou sur le disque. Donc, vous n'écrivez PAS du texte mais la séquence des charges électriques. Votre carte vidéo dessine les éléments sur le moniteur en anglais pour vous aider à comprendre ce que vous tapez. D'une certaine manière, peut-être vraiment, tout ce que vous faites sur l'ordinateur est physique.
Eh bien, l’arrêt n’est pas réellement physique, tous les circuits de l’ordinateur ne sont pas totalement éteints tant que vous n’avez pas débranché physiquement l’alimentation.
Le logiciel utilise l’interface APM (Advanced Power Management) du BIOS pour contrôler les circuits d’alimentation de l’ordinateur.
Lorsque l'ordinateur est éteint, vous pouvez toujours l'activer sans tirer physiquement un commutateur, par exemple, par un signal Wake on LAN d'une carte réseau de l'ordinateur.
Les logiciels sont stockés dans le matériel sous forme de domaines magnétiques sur le disque dur ou sur une disquette, ou sous forme de tensions basses et hautes dans des puces informatiques. Lorsque vous tapez sur un clavier, chaque caractère est converti en une série électrique de 0 et de 1, qui sont ensuite stockées sous forme de tensions hautes et basses dans les puces d'ordinateur appelées RAM. Les tensions basse et haute dans RAM sont ensuite converties en domaines magnétiques sur le disque dur ou la disquette pour une lecture ultérieure en tensions par les têtes de disque, ou sont stockées sous forme de tensions basse et haute dans des puces informatiques non volatiles pour relire plus tard. Les basses et hautes tensions représentent les 0 et les 1 électriques générés par les caractères du clavier.
La jambe qui frappe un ballon est un bon exemple. C'est assez similaire dans une machine. Le processeur est connecté à toutes les autres parties du système, mais contrairement au système nerveux qui est un câblage physique, tous les nerfs étant connectés en même temps, le processeur ne maintient pas une connexion permanente au reste du système. Il se connecte à la demande sur la partie souhaitée - comme pour passer un appel téléphonique - tous les téléphones sont connectés, mais seuls quelques-uns sont connectés à la fois.
Le cpu fonctionne en exécutant des instructions - le logiciel. Il existe des codes d’instruction qui ordonnent au processeur de composer une partie du système. Chaque partie a un numéro et le cpu a pour instruction de composer un numéro. Une fois que le cpu a composé ce numéro, il envoie un message à cette partie - le message est simplement des données - d'un bit à un bloc de taille arbitraire. Le matériel à cet emplacement agit alors sur le message codé.
En procédant ainsi, le processeur peut contrôler n’importe quel matériel en utilisant le même mécanisme. La seule chose qui change pour chaque périphérique est le numéro que le cpu doit composer et les données que le cpu envoie au périphérique - détails qui sont mis dans le logiciel que le cpu est en cours d'exécution.
Ainsi, pour éteindre la machine, le cpu compose le numéro du périphérique de gestion de l'alimentation et lui envoie des instructions pour passer à un état d'alimentation approprié. Le matériel répond et le PSU cesse d'envoyer l'alimentation principale à la carte mère.
Lorsque vous écrivez softare, vous n'avez pas à connaître vous-même tous ces détails. Ils sont généralement pré-emballés sous forme de code prêt à l'emploi. Par conséquent, votre logiciel doit simplement dire "arrêt" et les codes prêts à l'emploi pour cela (généralement dans le BIOS) sont exécutés pour effectuer l'arrêt, comme indiqué ci-dessus.
Il existe plusieurs interfaces entre les programmes PC et le monde réel extérieur.
Certains se connectent à la CPU. Des exemples de ceux-ci sont les interruptions des ports et du matériel (IRQ). Celles-ci permettent d’envoyer de petites quantités de données (par demande du programme de l’hôte) et des fonctions d’appel (gestionnaires d’interruptions) en fonction de déclencheurs matériels (ligne discrète allant de bas à haut).
Il existe des interfaces plus rapides pour transférer des quantités énormes de données sans passer par le processeur. Cela s'appelle DMA (accès direct à la mémoire). Ceux-ci sont utilisés pour transférer des données sur un disque, un réseau, des cartes graphiques, etc.
Pour le port IO (codes d'opération IN et OUT), le logiciel est l'initiateur. Pour l'IRQ, le matériel parle en premier pour déclencher une réponse logicielle.
Seuls les pilotes de périphériques sont autorisés à faire tout cela. Si vous essayez de le faire à partir de l'application, le système d'exploitation le brisera instantanément. Les applications se connectent à ce monde via des API présentées par des pilotes de périphérique. La plupart des API sont standardisées. Vous pouvez donc remplacer un périphérique réel sans avoir à interagir différemment (imprimante, disque, clavier, souris, CRROM, commutateur d'alimentation ATX dans votre exemple).
Comparons les solutions physiques et logicielles.
Lorsque vous appuyez sur le bouton, vous envoyez un signal de 5 volts au bloc d'alimentation. Cette tension de 5 volts ne s'éteint jamais (même lorsque vous pensez que votre ordinateur est éteint). Vous avez besoin de cette tension de 5 volts lorsque vous appuyez sur le bouton pour allumer l’ordinateur. À ce stade, 5 volts supplémentaires sont envoyés au bloc d’alimentation pour lui dire de se rallumer.
Donc, en réalité, votre pression physique sur le bouton est convertie en un signal électronique afin que l’alimentation puisse faire quelque chose.
Lorsque vous pensez à ces choses, vous réalisez soudainement que l'ordinateur n'a pas besoin de transformer son signal électronique en un bouton physique. Appuyez pour éteindre le téléphone. C'est quelque chose qu'ils ont ajouté pour le bénéfice des humains était un moteur minuscule qui a poussé un secret interne "off" bouton - il n'existe pas).
Il suffit donc au logiciel d’instruire un signal électronique, ce qui déclenche la mise sous tension du bloc d’alimentation en mode veille de 5 volts.
C'est simple: les codes/logiciels que nous écrivons sont des signaux électriques représentés par des 0 (OFF) et des 1 (ON) sur la CPU actuelle. A partir de là, pensez aux courants et aux moteurs.
En réalité, votre texte en clair ne provoque pas directement l'arrêt de l'ordinateur. Il appelle une procédure du système d'exploitation sous-jacent. Le système d'exploitation appelle à son tour l'ACPI/APM sur votre carte principale. Cela fera alors l'ordinateur éteint.
La façon dont les petits 1 et 0 interagissent avec les circuits de votre matériel est un sujet assez complexe sur lequel vous pourriez lire au moins un livre sur le point de le comprendre parfaitement ...
Si, au cas où vous recherchiez comment un périphérique est généralement utilisé pour exécuter son action, le périphérique est livré avec des firmwares stockés dans ROM/CHIP du tableau de bord. Le tableau de commande est utilisé pour contrôler l’appareil par le biais de signaux électriques.
Au-dessus du firmware, vous aurez des pilotes/fournisseur de services. L'application utilisera ces fournisseurs de services/pilotes pour communiquer ou demander au périphérique d'effectuer certaines actions.
Cliquez ici pour en savoir plus sur la façon dont les firmwares communiquent avec les dispositifs électroniques pour effectuer leurs opérations?
J'ai déjà réfléchi à la même question pour la tranquillité et me suis rendu compte qu'il existe en fait une connexion entre le monde des logiciels (fantasy) et celui du matériel (réel).
Pensez à quelque chose d'aussi simple que des circuits et des commutateurs, puis pensez à quelque chose de plus abstrait, comme un additionneur ou un ALU. Au fil du temps, l'abstraction s'est construite sur elle-même et devient complexe dans la prochaine rom. Viennent ensuite le microcode, les Opcodes, le langage de la machine, puis enfin Assembly et C. Après cela, le BIOS, le système d’exploitation, les pilotes et l’interface graphique utilisateur, tout en maintenant le bouton "Arrêter".