human
Comment démarre un ordinateur ? Qu'est-ce qui donne vie au matériel ? Comment le code communique-t-il avec le matériel pour faire les choses ? S'il vous plaît, expliquez-moi comme si j'avais cinq ans.
gpt
Un ordinateur est constitué d'un processeur et d'une mémoire. La mémoire est la puce la plus simple à comprendre - la mémoire se compose d'un large éventail de * cellules de mémoire *, chacune pouvant contenir un 0 ou un 1 (un seul bit). Les cellules sont divisées en groupes de 8, chaque groupe peut contenir 8 bits (un octet). Chaque groupe de 8 bits est numéroté avec une *adresse* qui est simplement un nombre (codé en binaire) qui identifie la cellule. Ainsi, par exemple, le CPU peut indiquer à la mémoire "écrire 00101101 dans la cellule numéro 1493". Ensuite, à un moment ultérieur, l'ordinateur peut indiquer à la mémoire "lire le contenu de la cellule numéro 1493" et la mémoire répondra par "00101101". L'adresse 1493 est elle-même codée comme une séquence de bits, de sorte que le CPU dira en fait "lire/écrire le contenu de la cellule numéro 0000010111010101". Une interface CPU/mémoire typique se compose d'un certain nombre de *lignes* qui sont plusieurs fils de cuivre qui relient physiquement le CPU à la mémoire : - Lignes d'adresse. Le CPU met l'adresse codée de la cellule avec laquelle il veut travailler (comme 0000010111010101) sur ces 16 lignes. - Lignes de données. Les données (00101101) vont sur ces 8 lignes. Dans le cas de l'écriture de données en mémoire, la CPU définit les lignes de données. Dans le cas de la lecture de données depuis la mémoire, la mémoire définit les lignes de données. -Bit R/W. Une seule ligne que le CPU met à 0 lorsqu'il veut lire en mémoire, à 1 lorsqu'il veut écrire en mémoire. - L'horloge . Les impulsions sur cette ligne dictent le moment exact où la mémoire/UC doit lire/écrire les lignes d'adresse/données. La rapidité avec laquelle les impulsions d'horloge se produisent détermine la rapidité avec laquelle la mémoire peut être lue/écrite. Le rendre plus rapide augmente les performances du système, mais augmente également les exigences de vitesse physique des puces CPU/mémoire. Le processeur fonctionne en lisant la mémoire au niveau du compteur de programme, en exécutant l'instruction en fonction de ce qu'il fait et en incrémentant le compteur de programme pour passer à l'instruction suivante. Par exemple , 37 pourrait être le code pour " charger le nombre 0 dans le registre A " , la séquence de 3 octets 87 21 63 pourrait être le code pour " charger le nombre 6321 dans le registre B " , 88 34 14 pourrait être le code pour " charger le nombre 3414 dans le registre C " et 22 pourrait être le code pour " ajouter le registre A au registre C , puis stocker le résultat dans le registre A. " (Un * registre * est un petit nombre de circuits de cellules de mémoire à l'intérieur du CPU qui servir de "bloc-notes" ou de "mémoire à court terme" pour que le CPU stocke les valeurs en interne.) Si nous voulions faire ces choses dans un programme, ce serait 37 87 21 63 88 34 14 22 qui irait dans la mémoire consécutive cellules . Mettons 37 87 21 63 88 34 14 22 dans des cellules mémoire aux adresses 2100 , 2101 , 2102 , 2103 , etc . puis réglez le PC sur 2100 et laissez le processeur fonctionner. La CPU lit un 37 à partir de l' adresse 2100 , incrémente PC à 2101 et exécute l' instruction pour mettre le registre A à 0 . PC est maintenant 2101 , donc le CPU lit un 87 à partir de l' adresse 2101 , incrémente PC à 2102 , voit que 87 est le code d' une instruction à trois octets , récupère le premier octet supplémentaire 21 de PC ( qui est 2102 ) , incrémente PC à 2103 , récupère un deuxième octet supplémentaire 63 de PC , incrémente PC à 2104 . Le CPU a maintenant les trois octets nécessaires pour la deuxième instruction et charge 6321 dans le registre B. Le CPU continue à faire cette boucle d'extraction-décodage-exécution indéfiniment (ou jusqu'à ce qu'il soit éteint). Maintenant que vous savez comment fonctionnent le processeur et la mémoire, le processus de démarrage est simple : physiquement câblé dans le processeur se trouve un nombre appelé *vecteur de réinitialisation* (comme tous les nombres dans un ordinateur, il est codé en binaire). Lors de la mise sous tension ou de la réinitialisation du système, la CPU copie le vecteur de réinitialisation dans le compteur de programme. C'est au concepteur du système d'inclure une puce mémoire qui répondra à l'adresse vectorielle de réinitialisation et contiendra un programme utile. Sur le PC, cette puce mémoire s'appelle *BIOS*. La puce initiale est appelée ROM (mémoire en lecture seule), car au début, elle était littéralement câblée avec le programme. Dans les temps modernes, les ROM sont des puces flash (la technologie des disques USB, des téléphones intelligents et des disques durs SSD modernes), donc la ROM n'est pas vraiment "en lecture seule" (on peut y écrire), mais c'est toujours appelée ROM pour la distinguer de la mémoire " ordinaire " ou de la RAM ( qui est beaucoup plus rapide , mais perd des données lorsqu'elle est éteinte ) . Maintenant votre deuxième question : Comment le code communique avec le matériel. En plus d'être connecté à la mémoire, le CPU possède des broches supplémentaires qui peuvent être connectées à d'autres périphériques. Il existe des instructions CPU pour lire et écrire l'état électrique de ces broches. Il existe un certain nombre de méthodes de communication standardisées pour envoyer des données sur ces broches supplémentaires ( série , SPI , I2C , ISA , PCI ) . Vous pouvez également avoir des périphériques qui ne sont pas des cellules mémoire connectées au bus mémoire et répondre aux adresses mémoire (« memory-mapped I/O »). Donc vraiment le cœur de l'ordinateur est le CPU + mémoire qui permet d'exécuter un programme composé d'instructions stockées. Pour tout le reste, vous avez juste besoin d'une connexion physique au CPU et d'un moyen d'accéder à cette connexion à partir du niveau logiciel des instructions stockées. La vaste gamme de périphériques d'un ordinateur typique - écrans et claviers pour communiquer avec les humains, réseau pour communiquer avec d'autres ordinateurs, disques durs pour stocker des masses de données en permanence, haut-parleurs, caméra vidéo, microphone - ils sont tous littéralement séparés. dispositifs qui sont conçus électroniquement pour être contrôlés par ordinateur et conçus mécaniquement pour s'adapter parfaitement dans le même boîtier (ou sur la même carte de circuit imprimé) que le CPU/la mémoire.