Fonctionnement général d'un ordinateur
A chaque fois que l'horloge passe à 1, les sorties du circuit logique sont écrites dans les espaces mémoires. Elle deviennent alors ses nouvelles entrées. Et ainsi de suite.
Dans ce schéma,
- Le circuit logique est appelé
microprocesseur.
- Les espaces mémoires sont appelés
registres.
Il y a tout au plus une dizaine de registres, parmi lesquels...
- Des registres quelconques : reg1, reg2, reg3...
- Des registres spéciaux :
instruction et
curseur. Leur fonction sera expliquée plus loin.
L'accès à la mémoire viveAjoutons quelques éléments au microprocesseur, pour qu'il puisse accéder à la mémoire vive du chapitre 3 :

Il possède à présent de nouvelles entrées et sorties :
- Un bus "adresse", qui permet de sélectionner l'espace mémoire voulu.
- Un bus "lecture", qui délivre le contenu de l'espace mémoire sélectionné.
- Un bus "écriture", qui transporte les (éventuelles) nouvelles données à écrire dans l'espace mémoire sélectionné.
- Un fil "ordre d'écriture", qui permet d'écrire le contenu du bus "écriture" dans l'espace mémoire sélectionné, par le biais d'un rafraîchisseur.
On peut donc manipuler à souhait les milliards d'espaces de la mémoire vive... un par un. (Mais comme il y a quelques milliards de tic-tac d'horloge par seconde, ça compense.)
L'instructionLe microprocesseur contient en fait plusieurs circuits logiques, chacun correspondant à une fonction : additionner, soustraire, permuter, comparer...

Pour sélectionner la fonction voulue, on utilise un système d'adressage, comme au chapitre 3 :

Le bus d'instruction lit le contenu du registre
instruction, qui contient le numéro de la fonction à sélectionner... et peut lui-même être manipulé par le microprocesseur ! Commencez-vous à comprendre l'
oméga-power de la chose ?
Le programmeUn programme est une suite d'instructions élémentaires :
>> Faire ci
>> Faire ça
>> ...A chaque instruction élémentaire correspond un circuit logique dans le microprocesseur. On peut donc écrire le programme en remplaçant les instructions par leur numéro :
>> 010110001
>> 101100101
>> ...Où est est stocké ce programme ? Dans la mémoire vive, pardi. Voyons comment le microprocesseur s'y prend pour le lire.
Déjà , nous avons un registre spécial, nommé
curseur, qui stocke l'adresse de la prochaine ligne de programme.
Ensuite, le microprocesseur contient un circuit logique "lecteur de programme". Il est sélectionné lorsque le registre
instruction vaut 00000....0. Voici la fonction qu'il réalise :
- Il envoie le contenu du registre
curseur dans le bus d'adresse.
- Il envoie le contenu du bus de lecture (la prochaine ligne de programme, donc) dans le registre
instruction.
- Il additionne 1 au registre
curseur.
(Pour les deux premiers points, il suffit de connecter des fils. Pour le dernier, on utilise l'additionneur binaire d'un chapitre 2.)
Ainsi, dès le prochain "top" (passage à 1 de l'horloge), on sélectionnera le circuit logique correspondant à notre ligne de programme (à présent stockée dans
instruction).
Comme les autres circuit ne balancent rien dans le registre
instruction (soit 00000...0), le circuit "lecteur de programme" sera à nouveau sélectionné au "top" suivant. Sauf que, comme il a précédemment ajouté 1 au registre
curseur, c'est la ligne de programme suivante qui sera lue.
Et ainsi de suite.
Exemple : programme multiplicateurVoici un programme qui multiplie le contenu des registres "reg1" et "reg2", et stocke le résultat dans "reg3". On a donc : reg3 = reg1 x reg2 = reg1 + reg1 + reg1 + reg1.... "reg2" fois.
>> Mettre "reg3" à 0000...0
>> Additionner le contenu de "reg1" à "reg3"
>> Soustraire 1 à "reg2"
>> Si "reg2" vaut 000...0, additionner 1 à "curseur"
>> Soustraire 4 à "curseur"Petite explication :
Citer:
Quand "reg2" vaut 0000...0, cela signifie que l'on a additionné "reg1" à "reg3" un nombre de fois égal au contenu initial de "reg2". Autrement dit, "reg3" contient à présent le résultat de la multiplication ! On additionne alors 1 à "curseur", ce qui revient à sauter la ligne de programme suivante, et passer à la suite du programme.
Si "reg2" n'est pas encore égal zéro, cela signifie que l'on doit continuer à additionner "reg1" dans "reg3". On exécute donc la dernière ligne de programme, qui soustrait 4 à "curseur" : cela revient à reculer de trois ligne dans le programme (trois lignes et pas quatre, car il faut anticiper le fait que le lecteur de programme additionnera 1 à "curseur", quoiqu'il arrive).
Bien sûr, on n'utilise pas cette méthode bourrine dans les ordinateurs, mais un algorithme similaire à celui qu'on vous a enseigné à l'école primaire.
En conclusion...Tout les programmes que vous utilisez sur votre ordinateur, sont en fait une série d'instructions basiques. Bien sûr, ce "langage" de programmation (dit "langage machine") est atroce à manipuler : les programmeurs utilisent donc des compilateurs, programmes qui convertissent un langage de programmation plus "humain" en langage machine. Compilateurs programmés eux-mêmes à partir de compilateurs... mais il a bien fallu programmer le premier compilateur directement en langage machine, hé.
Un système d'exploitation (Windows, Linux...) est en fait un méta-programme : un programme qui gère l'ensemble de programmes ouverts simultanément. Ce méta-programme est exécuté à l'allumage de l'ordinateur, il doit donc commencer à l'adresse mémoire 00000...0 (car "curseur" est initialement à zéro).
Donc,
voilà . Des questions ? Le moindre point obscur ou douteux se doit d'être éclairci.