Q. Qu'est-ce qui empêche un programme d'assemblage de planter le système d'exploitation?
R. Rien.
Cependant, beaucoup de programmeurs très intelligents ont fait de leur mieux au fil des ans pour le rendre de plus en plus difficile. Malheureusement, pour chaque programmeur intelligent, il y en a beaucoup, beaucoup d'autres qui, entre eux, sont plus créatifs, plus ambitieux et parfois juste plus chanceux que les plus intelligents. Chaque fois qu'un programmeur intelligent dit que personne ne devrait, ne ferait ou ne pourrait faire quelque chose, quelqu'un trouverait un moyen de le faire. Microsoft Windows (à titre d'exemple) existe depuis près de 35 ans et nous avons toujours des BSoD (Blue Screens of Death), qui ne sont que des instructions qui ont fait planter le système d'exploitation.
Commençons par un peu de terminologie. Tout ce qui s'exécute sur un ordinateur le fait en code machine. Le bit qui lit les frappes ou le mouvement du pointeur de la souris, le bit qui change la couleur d'un pixel à l'écran ou lit un octet dans un fichier et le bit qui calcule si votre balle a frappé le méchant ou le bit qui décide si votre demande de carte de crédit est acceptée, toutes sont exécutées comme une séquence d'instructions de code machine. Certains travaux sont si courants et sont effectués si souvent qu'il est logique d'assembler les instructions nécessaires pour les faire et de faire en sorte que tout le monde utilise cet assemblage. Le tas de ces emplois qui permettent ou aident les autres à utiliser l'ordinateur ont tendance à être appelés le système d'exploitation, mais il n'y a rien de fondamentalement différent entre eux et les autres programmes. Ce ne sont que des séquences d'instructions de code machine.
Ce qui rend les systèmes d'exploitation plus compliqués (et donc sujets à planter), c'est qu'ils doivent tenir compte de choses auxquelles vous n'avez normalement pas à penser. Prenons l'exemple des tâches les plus simples. Je veux écrire un message à la fin d'un fichier. Dans une langue de haut niveau, vous écririez quelque chose comme:
with open("myFile.txt", "w+") as f:
# do some really clever things
f.write("Goodbye cruel world!")
Permet d'ignorer tous les détails sur la façon dont les états physiques sont accédés et modifiés ou comment ils sont interprétés comme des bits et des octets ou comment ces octets sont transférés vers et depuis la mémoire et le CPU, et espérons que tout ce qui est géré par les programmes fournis par le système d'exploitation Dans les coulisses. Réfléchissons simplement à la façon dont vous ajoutez à la fin d'un fichier. 1) Découvrez où se trouve la fin du fichier, 2) écrivez quelque chose à cette position. Qu'est ce qui pourrait aller mal? En fait, beaucoup. Pensez à ce qui se passe d'autre sur l'ordinateur pendant que vous faites des choses intelligentes. Si quelque chose d'autre fait par quelqu'un d'autre (y compris le système d'exploitation lui-même) modifie le fichier sur lequel vous travaillez de quelque manière que ce soit, alors ce travail vraiment simple devient soudainement beaucoup plus compliqué. Le fichier est plus long, le fichier est plus court. Le fichier n'est plus là. Le disque est plein,