« Fonctionnement d'un ordinateur/L'architecture de base d'un ordinateur » : différence entre les versions

Contenu supprimé Contenu ajouté
m →‎Programmes : Orthographe : le participe passé du verbe "définir" est "définI" avec un I final
mAucun résumé des modifications
Ligne 1 :
Dans les chapitres précédents, nous avons vu comment représenter de l'information, la traiter et la mémoriser avec des circuits. Mais un ordinateur n'est pas qu'un amoncellement de circuits et est organisé d'une manière bien précise. Il est structuré autour de trois circuits principaux :
 
* les '''entrées/sorties''', qui permettent à l'ordinateur de communiquer avec l'extérieur ;
* une '''mémoire''' qui mémorise les données à manipuler ;
* un '''processeur''', qui manipule l'information et donne un résultat.
 
[[File:Architecture Von Neumann.png|centre|vignette|upright=2|Architecture d'un système à mémoire.]]
 
Pour faire simple, le processeur est un circuit qui s'occupe de faire des calculs et de traiter des informations. La mémoire s'occupe purement de la mémorisation des informations. Les entrées-sorties permettent au processeur et à la mémoire de communiquer avec l'extérieur et d'échanger des informations avec des périphériques. Tout ce qui n'appartient pas à la liste du dessus est obligatoirement connecté sur les ports d'entrée-sortie et est appelé '''périphérique'''. Ces composants communiquent via un '''bus''', un ensemble de fils électriques qui relie les différents éléments d'un ordinateur.
 
[[File:Architecture minimale d'un ordinateur.png|centre|vignette|upright=2|Architecture minimale d'un ordinateur.]]
 
Parfois, on décide de regrouper la mémoire, les bus, le CPU et les ports d'entrée-sortie dans un seul composant électronique nommé '''microcontrôleur'''. Dans certains cas, qui sont plus la règle que l'exception, certains périphériques sont carrément inclus dans le microcontrôleur ! On peut ainsi trouver dans ces microcontrôleurs, des compteurs, des générateurs de signaux, des convertisseurs numériques-analogiques... On trouve des microcontrôleurs dans les disques durs, les baladeurs mp3, dans les automobiles, et tous les systèmes embarqués en général. Nombreux sont les périphériques ou les composants internes à un ordinateur qui contiennent des microcontrôleurs.
Ligne 37 ⟶ 36 :
Tout ordinateur contient au moins une mémoire ROM et une mémoire RWM (souvent une RAM). La mémoire ROM stocke un programme, alors que la mémoire RWM sert essentiellement pour maintenir des résultats de calculs.
 
[[File:CPT-System-Architecture-gapfill1-ANS.svg|centre|CPT-System-vignette|upright=2|Architecture-gapfill1-ANS avec une ROM et une RAM.]]
 
Mais si tout ordinateur contient au minimum une ROM et une RWM (souvent une mémoire RAM), les deux n'ont pas exactement le même rôle. Sur de nombreux ordinateurs, l'ensemble de la mémoire est séparée en deux gros blocs spécialisés : la mémoire programme et la mémoire travail. Le premier contient le programme à exécuter et parfois les constantes : ce sont des données qui peuvent être lues mais ne sont jamais accédées en écriture durant l'exécution du programme. Elle ne sont donc jamais modifiées et gardent la même valeur quoi qu'il se passe lors de l'exécution du programme. La mémoire travail mémorise les variables du programme à exécuter, qui sont des données que le programme va manipuler. Vu que les variables du programme sont des données qui sont fréquemment mises à jour et modifiées, elles sont naturellement stockées dans une mémoire RWM. Pour ce qui est du programme, c'est autre chose : ceux-ci sont stockés soit totalement en ROM, soit en partie dans la ROM et en partie dans la RWM. C'est notamment le cas sur le PC que vous êtes en train d'utiliser : les programmes sont mémorisés sur le disque dur de votre ordinateur et sont copiés en mémoire RAM à chaque fois que vous les lancez. On peut préciser que le système d'exploitation ne fait pas exception à la règle, vu qu'il est lancé par le BIOS.
 
[[File:Répartition des données et du programme entre la ROM et les RWM.png|centre|vignette|upright=3|Répartition des données et du programme entre la ROM et les RWM.]]
 
Il y a toujours, dans tous les ordinateurs, une petite mémoire ROM qui contient un programme. Certains ordinateurs très simples s'en contentent. Sur les PC modernes, ce programme est un programme de démarrage nommé le '''BIOS''', qui va charger le système d’exploitation dans la mémoire RWM. Les autres programmes, système d'exploitation compris, sont stockés sur un périphérique dédié au stockage, connecté sur une entrée-sortie : un disque dur, par exemple. Dans ce cas, la mémoire programme n'est pas intégralement stockée dans une ROM, mais l'est en grande partie sur un périphérique. Les programmes sont chargés en mémoire RWM pour être exécutés. L'avantage, c'est qu'on peut modifier le contenu d'un périphérique assez facilement, tandis que ce n'est pas vraiment facile de modifier le contenu d'une ROM (et encore, quand c'est possible). On peut ainsi facilement installer ou supprimer des programmes sur notre périphérique, en rajouter, en modifier, les mettre à jour sans que cela ne pose problème. C'est cette solution qui est utilisée dans nos PC actuels, et la petite mémoire ROM en question s'appelle le BIOS.
Ligne 48 ⟶ 47 :
 
Outre leurs capacités respectives, touts les mémoires ne sont pas aussi rapides. La rapidité d'une mémoire se mesure grâce à deux paramètres :
 
* Le '''temps de latence''' correspond au temps qu'il faut pour effectuer une lecture ou une écriture : plus celui-ci est bas, plus la mémoire sera rapide.
* Le '''débit mémoire''' correspond à la quantité d'informations qui peut être récupéré ou enregistré en une seconde dans la mémoire : plus celui-ci est élevé, plus la mémoire sera rapide.
Ligne 80 ⟶ 78 :
 
Le but de cette organisation est de placer les données accédées souvent, ou qui ont de bonnes chances d'être accédées dans le futur, dans une mémoire qui soit la plus rapide possible. Le tout est de faire en sorte de placer les données intelligemment, et les répartir correctement dans cette hiérarchie des mémoires. Ce placement se base sur deux principes qu'on appelle les principes de localité spatiale et temporelle :
 
* un programme a tendance à réutiliser les instructions et données accédées dans le passé : c'est la '''localité temporelle''' ;
* et un programme qui s'exécute sur un processeur a tendance à utiliser des instructions et des données consécutives, qui sont proches, c'est la '''localité spatiale'''.
Ligne 89 ⟶ 86 :
 
Les '''mémoires de masse''' servent à stocker de façon permanente des données ou des programmes qui ne doivent pas être effacés (on dit qu'il s'agit de mémoires non-volatiles). Les mémoires de masse servent toujours à stocker de grosses quantités de données: elles ont une capacité énorme comparée aux autres types de mémoires, et sont donc très lentes. Parmi ces mémoires de masse, on trouve notamment :
 
* les mémoires magnétiques, comme disques durs ou les fameuses disquettes (totalement obsolètes de nos jours) ;
* les mémoires électroniques, comme les mémoires Flash utilisées dans les clés USB et disques durs SSD ;
Ligne 118 ⟶ 114 :
 
L''''unité de traitement''' est un circuit qui s'occupe de faire des calculs et de manipuler l'information provenant des entrées-sorties ou récupérée dans la mémoire. Dans les ordinateurs, l'unité de traitement porte le nom de '''processeur''', ou encore de '''''Central Processing Unit''''', abrévié en CPU. Tout processeur est conçu pour effectuer un nombre limité d'opérations bien précises, comme des calculs, des échanges de données avec la mémoire, etc. Ces opérations sont appelées des '''instructions'''. Elles se classent en quelques grands types très simples :
 
* Les instructions arithmétiques font des calculs. Un ordinateur peut ainsi additionner deux nombres, les soustraire, les multiplier, les diviser, etc.
* Les instructions de test comparent deux nombres entre eux et agissent en fonction.
Ligne 125 ⟶ 120 :
* Etc.
 
===Les logiciels et programmes===
===Programmes===
 
Tout processeur est conçu pour exécuter une suite d'instructions dans l'ordre demandé, cette suite s'appelant un '''programme'''. Ce que fait le processeur est défini par la suite d'instructions qu'il exécute, par le programme qu'on lui demande de faire. La totalité des logiciels présents sur un ordinateur sont des programmes comme les autres. Ce programme est stocké dans la mémoire de l'ordinateur, comme les données : sous la forme de suites de bits dans notre mémoire. Le programme est donc dans une mémoire, volatile, de type RWM, qui est donc modifiable à loisir. C'est ainsi que notre ordinateur est rendu programmable : on peut parfaitement modifier le contenu de la mémoire (ou la changer, au pire), et donc changer le programme exécuté par notre ordinateur. Mine de rien, cette idée d'automate stockant son programme en mémoire est ce qui a fait que l’informatique est ce qu'elle est aujourd’hui. C'est la définition même d'ordinateur : appareil programmable qui stocke son programme dans une mémoire modifiable.
Ligne 131 ⟶ 126 :
En théorie, il est impossible de faire la différence entre donnée et instruction. Il arrive assez rarement que le processeur charge et exécute des données, qu'il prend par erreur pour des instructions, mais cela est rare. Cela peut même être un effet recherché : par exemple, on peut créer des programmes qui modifient leurs propres instructions : cela s'appelle du '''code auto-modifiant'''. Ce genre de choses servait autrefois à écrire certains programmes sur des ordinateurs rudimentaires (pour gérer des tableaux et autres fonctionnalités de base utilisées par les programmeurs), pouvait aussi permettre de rendre nos programmes plus rapides, servait à compresser un programme, ou pire : permettait de cacher un programme et le rendre indétectable dans la mémoire (les virus informatiques utilisent beaucoup ce genre de procédés). Mais passons ! Ce qu'il faut retenir est que le fait que le programme soit stocké comme les données est ce qui permet à l'ordinateur d'être reprogrammable, et non simplement reconfigurable.
 
===Le ''Program Counter''===
 
Pour exécuter une suite d'instructions dans le bon ordre, le processeur détermine à chaque cycle savoir quelle est la prochaine instruction à exécuter. Il faut donc que notre processeur se souvienne de cette information quelque part, dans une petite mémoire. C'est le rôle du registre d'adresse d'instruction, aussi appelé '''Program Counter'''. Ce registre stocke l'adresse de la prochaine instruction à exécuter, adresse qui permet de localiser la prochaine instruction en mémoire. Cette adresse ne sort pas de nulle part : on peut la déduire de l'adresse de l'instruction en cours d’exécution par divers moyens plus ou moins simples qu'on verra dans la suite de ce tutoriel. Généralement, on profite du fait que ces instructions sont exécutées dans un ordre bien précis, les unes après les autres. Sur la grosse majorité des ordinateur, celles-ci sont placées les unes à la suite des autres dans l'ordre où elles doivent être exécutées. L'ordre en question est décidé par le programmeur. Un programme informatique n'est donc qu'une vulgaire suite d'instructions stockée quelque part dans la mémoire de notre ordinateur. En faisant ainsi, on peut calculer facilement l'adresse de la prochaine instruction en ajoutant la longueur de l'instruction juste chargée (le nombre de case mémoire qu'elle occupe) au contenu du registre d'adresse d'instruction. Dans ce cas, l'adresse de la prochaine instruction est calculée par un petit circuit combinatoire couplé à notre registre d'adresse d'instruction, qu'on appelle le compteur ordinal.
Ligne 137 ⟶ 132 :
Mais certains processeurs n'utilisent pas cette méthode. Sur de tels processeurs, chaque instruction va devoir préciser quelle est la prochaine instruction. Pour ce faire, une partie de la suite de bit représentant notre instruction à exécuter va stocker cette adresse. Dans ce cas, ces processeurs utilisent toujours un registre pour stocker cette adresse, mais ne possèdent pas de compteur ordinal, et n'ont pas besoin de calculer une adresse qui leur est fournie sur un plateau. Les processeurs de ce type contiennent toujours un registre d'adresse d'instruction : la partie de l'instruction stockant l'adresse de la prochaine instruction est alors recopiée dans ce registre, pour faciliter sa copie sur le bus d'adresse. Mais le compteur ordinal n'existe pas. Sur des processeurs aussi bizarres, pas besoin de stocker les instructions en mémoire dans l'ordre dans lesquelles elles sont censées être exécutées. Mais ces processeurs sont très très rares et peuvent être considérés comme des exceptions qui confirment la règle.
 
[[File:Encodage d'une instruction sur un processeur sans Program Counter.png|centre|vignette|upright=2|Encodage d'une instruction sur un processeur sans Program Counter.]]
 
==Le bus de communication==
Ligne 143 ⟶ 138 :
Le processeur est relié à la mémoire ainsi qu'aux entrées-sorties par un ou plusieurs '''bus de communication'''. Ce bus n'est rien d'autre qu'un ensemble de fils électriques sur lesquels on envoie des zéros ou des uns.
 
[[File:Elektronische bus beginsel.png|centre|vignette|upright=2|Bus électronique.]]
 
Tout ordinateur contient au moins un bus, qui relie le processeur, la mémoire, les entrées et les sorties ; et leur permet d’échanger des données ou des instructions. Pour permettre au processeur (ou aux périphériques) de communiquer avec la mémoire, il y a trois prérequis que ce bus doit respecter : pouvoir sélectionner la case mémoire (ou l'entrée-sortie) dont on a besoin, préciser à la mémoire s'il s'agit d'une lecture ou d'une écriture, et enfin pouvoir transférer la donnée. Pour cela, on doit donc avoir trois bus spécialisés, bien distincts, qu'on nommera le bus de commande, le bus d'adresse, et le bus de donnée. Le '''bus de données''' est un ensemble de fils par lequel s'échangent les données entre les composants. Le '''bus de commande''' permet au processeur de configurer la mémoire et les entrées-sorties. Le '''bus d'adresse''', facultatif, permet au processeur de sélectionner l'entrée, la sortie ou la portion de mémoire avec qui il veut échanger des données. Chaque composant possède des entrées séparées pour le bus d'adresse, le bus de commande et le bus de données. Par exemple, une mémoire RAM possédera des entrées sur lesquelles brancher le bus d'adresse, d'autres sur lesquelles brancher le bus de commande, et des broches d'entrée-sortie pour le bus de données.
 
[[File:Architecture Von Neumann avec les bus.png|centre|vignette|upright=2|Architecture Von Neumann avec les bus.]]
 
Il faut noter que certaines architectures utilisent plusieurs bus. Cela vient du fait que les périphériques peuvent être nombreux et avoir chacun droit à des bus dédiés. Mais une autre raison est la présence d'au moins deux mémoires : une ROM et une ou plusieurs RWM/RAM.