Retrouvez cet article dans : Linux Pratique 39
AGP, PCI, bus, chipset, socket, port, transistor, l'architecture d'un ordinateur fait appel à tout un vocabulaire spécifique et pas très simple à aborder. Nous allons essayer dans cet article de mieux comprendre comment tous ces composants s'articulent à différentes échelles pour former un ordinateur.
Comprendre l'architecture d'un ordinateur permet de mieux aborder les problèmes de gestion du matériel auxquels nous pouvons avoir à faire face et d'être plus à même de lire les documentations correspondantes. Dans ce but, nous essayerons de donner à chaque fois les termes anglais correspondants pour que le lecteur ne soit pas démuni face à l'utilisation de cette langue dans les termes techniques.
Un ordinateur est une sorte de boite noire (Fig. 1) dans laquelle on entre des informations (input), par le clavier ou la souris en général, et qui sort d'autres informations (output), en fonction de celles qui ont été entrées.

Le concept est simple, mais la mise en œuvre technique bien plus compliquée : elle nécessite l'articulation de différents composants, tout en assurant des services à ces derniers (alimentation, refroidissement).
Le processeur
Le processeur, ou CPU (pour Central Processing Unit), est le composant qui se charge d'effectuer tous les calculs.
Le processeur reçoit des bits qui forment des instructions : il est capable de comprendre cette suite de bits et d'y répondre par un comportement précis. C'est le code machine. Chaque processeur d'une même famille possède son langage, mais ils sont très souvent compatibles entre eux (les processeurs les plus modernes peuvent exécuter les instructions des plus anciens, le contraire n'étant pas vrai).

Fig. 2 : Ici, dans la configuration du noyau, les instructions spécifiques aux processeurs 64bits d'AMD ont été activées.
Ces instructions sont en général très simples (additions, opérations logiques...) même si la tendance est à en rajouter avec chaque nouvelle génération de processeur (1). Par exemple, le Pentium Pro d'Intel supporte un certain nombre d'instructions spécifiques, tout comme le K7 d'AMD. Donc si vous connaissez le modèle de votre processeur, le noyau Linux sera à même de supporter les instructions spécifiques de ce dernier et votre système sera optimisé (Fig. 2).
Pour être plus précis, un processeur se décompose en plusieurs unités dont les plus importantes sont :
(1) Les instructions des processeurs de l'architecture x86Â : http://en.wikipedia.org/wiki/X86_instruction_listings
- l'unité de contrôle, qui lit les instructions à exécuter, les décode et les transmet au cœur du processeur ;
- l'ALU (Arithmetic And Logical Unit) qui, comme son nom l'indique, prend en charge les calculs arithmétiques et logiques ;
- les registres qui sont de petites mémoires situées dans le processeur et donc extrêmement rapides d'accès : l'ALU effectue ses opérations sur les données qui y sont situées. Les processeurs intègrent également une mémoire cache, moins rapide que les registres, mais qui reste plus rapide d'accès que la RAM ;
- l'unité d'entrées/sorties : le processeur n'est pas isolé du reste de l'ordinateur et cette unité s'occupe de la communication avec les autres circuits ;
- l'horloge : toutes les opérations s'effectuent de façon synchronisée lors d'un « top » d'horloge ;
- le séquenceur qui coordonne toutes les unités ;
Il en existe d'autres concernant, par exemple, le calcul en virgule flottante (nombre décimaux).
Pour une raison d'optimisation, il serait dommage que pendant que l'une de ces unités travaille, une autre attende le résultat de la première pour s'activer : en fait, dès qu'une instruction est traitée par l'unité de contrôle, elle est transmise à l'ALU pendant qu'une nouvelle instruction se fait décoder par l'unité de contrôle. C'est le principe du pipeline (Fig.3).
Ce principe peut être répété au sein même de l'ALU entre ses différentes parties. Le passage d'une unité à une autre se fait lors d'un top d'horloge : toutes les unités sont synchrones.

Fig. 3 : Le principe du pipeline
Car à un processeur est associé une horloge fonctionnant à une fréquence donnée ; une horloge à 1 Ghz donnera au processeur 1 milliard de « tops » par seconde. Ainsi, plus cette fréquence est élevée, plus vite les instructions traitées par le processeur se succèderont ; pour donner une image, sur la figure 3, si une instruction correspond à une bille verte, l'instruction 1 passe de l'unité 1 à l'unité 2 lors du top d'horloge et l'instruction 2 entre alors dans l'unité 1. Si les tops d'horloge se succèdent rapidement – si la fréquence du processeur est plus élevée – les billes tomberont plus vite d'une unité à l'autre.
Pour obtenir des informations sur votre processeur sous Linux, vous pouvez utiliser la commande :
$ cat /proc/cpuinfo [...] model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4200+ stepping : 2 cpu MHz : 2210.212 cache size : 512 KB [...]
Les mémoires
La RAM
La RAM (Fig. 4), Random Access Memory, plus couramment nommée « mémoire vive », est une mémoire volatile (elle a besoin d'être alimentée pour sauver des informations) contrairement aux disques durs ou à la mémoire flash. Le terme Random, qui signifie « aléatoire » en français, peut paraître surprenant : il exprime simplement le fait qu'on peut accéder à n'importe quelle position dans la mémoire contrairement à d'autres mémoires pour lesquelles l'accès se fait de façon séquentielle (on accède à une adresse, puis à celle qui se situe juste après). De plus, le temps d'accès est le même quelle que soit l'adresse mémoire demandée, contrairement aux disques durs, par exemple. La RAM est importante, car c'est là où l'ordinateur stocke toutes les données temporaires qu'il manipule : lorsque vous ouvrez un fichier, son contenu, éventuellement modifié par vos soins, se situe dans la RAM et n'est écrit sur le disque dur qu'au moment où vous enregistrez votre document.

Fig. 4 : Une barrette de RAM. Chaque puce noire correspond à un sous-multiple de la capacité totale. (Source : Wikimedia Commons ; auteur : Sassospicco).
Le temps d'accès à la RAM est très important et est à prendre en compte lors de l'achat de celle-ci. Il n'y a pas que la capacité qui joue un rôle : ce temps d'accès dépend de la fréquence de fonctionnement de la RAM, et de la latence CAS (Column Access Strobe, Column car la RAM est vue comme un tableau de lignes et de colonnes). Plus cette latence est petite, moins le processeur attendra les données provenant de la mémoire. Enfin, sachez qu'en général en utilisant deux barrettes identiques sur deux slots mémoire différents, vous bénéficiez du Dual Channel qui double le taux de transfert des données au travers du contrôleur mémoire.
Pour accéder à la RAM, le processeur possède l'instruction load qui lui permet de charger dans ses registres les données situées à une adresse mémoire donnée. C'est l'unité d'entrées/sorties qui gère
ce processus.
La RAM est probablement un composant que vous avez déjà eu l'occasion de manipuler, car il est très facile de la changer ou d'en augmenter la quantité.
La mémoire cache
Certaines instructions s'exécutent très souvent. Pour optimiser le fonctionnement du processeur, elles vont être placées dans une mémoire dite « mémoire cache » plus proche du processeur (en fait, dans le processeur), plus performante et donc plus rapide d'accès, mais aussi plus chère, donc en quantité limitée. Pour être précis, il existe plusieurs niveaux de mémoire cache, intégrés au processeur ou situés sur la carte mère.
Le disque dur
Le disque dur est un périphérique qui permet de stocker les informations sous forme magnétique. Son gros avantage est le faible coût au mégaoctet, et contrairement à la RAM, il conserve les informations une fois l'alimentation coupée.
Un disque dur est constitué de plateaux physiques qui tournent à une vitesse donnée ; plus cette vitesse est élevée, plus la vitesse de transfert de données est importante. Une tête de lecture passant au-dessus vient lire et écrire les données de façon magnétique. Contrairement à la RAM, le temps d'accès n'est pas constant selon le bloc demandé. Il va dépendre de la distance qu'aura à parcourir la tête de lecture et d'autres facteurs physiques.
Il existe différents connecteurs pour les relier à la carte-mère :
- La norme IDE ou ATA (renommée P-ATA pour Parallel ATA), qui était, et est encore, très largement utilisée jusqu'ici. Les connecteurs sont de larges nappes de 40 ou 80 fils, et ne peuvent être très longs.
- La norme SATA (pour Serial ATA), apparue en 2003, qui permet des transferts de données beaucoup plus rapides. Les connecteurs sont simplifiés. Ce sont des câbles de 7 fils qui peuvent être beaucoup plus longs (jusqu'à 1 m).
- La norme SCSI moins utilisée sur les ordinateurs personnels, mais qui permet des transferts très rapides.
Sous Linux, les disques durs apparaissent dans le répertoire /dev. Si le disque suit la norme IDE, il sera présent sous le nom /dev/hda (/dev/hda1, /dev/hda2... correspondant aux partitions). S'il suit la norme SATA ou SCSI, il apparaîtra sous le nom /dev/sda.
Concernant les disques, une des commandes les plus intéressantes est hdparm. Attention, elle est à utiliser avec beaucoup de précautions (d'ailleurs, seul root peut l'utiliser). Pour obtenir des informations sur votre disque dur, tapez la commande suivante :
# hdparm /dev/hda /dev/hda: IO_support = 1 (32-bit) unmaskirq = 1 (on) using_dma = 1 (on) keepsettings = 0 (off) readonly = 0 (off) readahead = 256 (on)
En particulier, sachez que vous pouvez améliorer de façon très significative les performances d'un
disque dur IDE en activant le DMA, s'il n'est pas activé (using_dma = 0 (off)) :
# hdparm -d 1 /dev/hda
Le DMA, Direct Memory Access, permet à certains périphériques, en particulier les disques durs, d'accéder directement à la mémoire sans avoir à passer par le processeur. Le DMA améliore donc grandement les performances de votre ordinateur, car il décharge le processeur du transfert ; d'autant plus que le bus du périphérique, moins rapide que celui de la RAM, fait office de goulot d'étranglement pour le CPU. Avec le DMA, le processeur ne fait qu'initier le transfert et peut ensuite se consacrer à autre chose.
La carte mère
Tous les composants nécessaires à faire fonctionner un ordinateur doivent bien sûr être alimentés et interagir entre eux. C'est le rôle de la carte mère.
Les bus
Pour communiquer, les composants utilisent des bus. Un bus permet de transférer n bits simultanément. Le bus le plus simple qu'on puisse imaginer consiste en l'utilisation de n fils parallèles, chaque fil transférant un bit. Par exemple, il existe un bus reliant le processeur à la mémoire vive.
Un bus qui ne permet de connecter que deux composants est en général appelé un port.
Les ports
Pour qu'un ordinateur fonctionne, les différents composants vitaux doivent pouvoir communiquer entre eux. Pour cela, ils sont tous fixés sur la carte mère par l'intermédiaire de ports.
Les ports sont plus ou moins standardisés :
Fig. 5 : Le port PCI permet d'ajouter des cartes d'extension à l'ordinateur. (Source : Wikimedia Commons)
- Pour le processeur, le port (ou socket) dépend de la marque du processeur. Souvent, le nom du socket (par exemple le socket 939) correspond au nombre de broches du processeur.
- Les ports PCI (Peripheral Component Inter-connect) sont présents sur toutes les cartes mères (Fig. 5). Ils servent à enficher les nombreuses cartes d'extension (carte modem, ethernet, d'acquisition vidéo, etc.) Le port PCI est géré par le southbridge.
- Ports AGP (Accelerated Graphics Port). Le port AGP sert spécifiquement aux cartes graphiques. En effet, il est extrêmement rapide et fournit un accès direct au processeur, sans passer par le southbridge du chipset, contrairement aux ports PCI : il est en effet géré par le northbridge. D'autre part, alors qu'une carte PCI doit copier les textures de la RAM vers la mémoire vidéo de la carte, une carte AGP peut l'afficher directement. Cependant, ce port est en train de disparaître au profit du port PCI Express.
- Le Port PCI Express est le remplaçant du port AGP. Il permet des débits encore plus élevés et en full duplex (les échanges se font dans les deux sens, à la même vitesse et simultanément).
Le chipset
Le chipset (Fig. 6) est un ensemble de circuits intégrés se trouvant sur la carte mère ; c'est le composant central de cette dernière, car il assure les échanges entre le processeur et tous les composants enfichés sur la carte-mère : RAM, disque dur, mais aussi ports PCI, souris, clavier. Le chipset est relié au processeur par le FSB ou Front Side Bus. Sa fréquence de fonctionnement est donc très importante, puisqu'elle limite les échanges du processeur.
Il est décomposé en deux puces :
- Le Northbridge, littéralement « pont nord », qui gère les échanges entre le processeur, la RAM, les ports AGP et PCI Express, ainsi qu'avec le southbridge. Éventuellement, c'est lui qui contient la carte graphique intégrée de la carte mère.
- Le Southbridge, « pont sud », également appelé « contrôleur d'entrées/sorties », est la deuxième puce du chipset qui gère les échanges plus lents. Le southbridge est relié au processeur par l'intermédiaire du northbridge. Parmi les ports gérés par le southbridge, on peut citer les ports PCI, les ports USB ; il gère souvent l'alimentation (mise en veille).

Fig. 6 : Les dénominations « northbridge » et « southbridge » viennent de la disposition des puces.
Pour être précis, le chipset n'est pas toujours constitué de ces deux puces ; l'équivalent du northbridge peut être intégré directement dans le processeur comme sur la plupart des Athlon 64.
À noter que les échanges encore plus lents, comme les claviers, souris, ports parallèles, séries ou les disquettes sont gérés par une puce distincte nommée « Super I/O ».
Pour obtenir des informations sur le chipset, on peut utiliser la commande lspci qui liste les informations concernant les cartes PCI, mais aussi concernant les bus PCI et AGP. lspci indiquera la liste des contrôleurs intégrés au chipset, avec leur marque, qui sont toujours de la même marque que ce dernier :
 00:1e.0 PCI bridge: nVidia Corporation nForce2 AGP (rev c1)
Cette ligne, par exemple, nous permet d'affirmer que le chipset est un nForce2 de la marque nVidia.
L'environnement
Nous ne parlerons pas ici du boîtier. Bien que son rôle soit important sur le plan du confort (silence) et de l'esthétique, il sert presque uniquement à maintenir les différents composants en place, physiquement.
Le refroidissement
La concentration de circuits logiques dans un petit volume (ce qui est bien le cas des processeurs !) a une conséquence importante : le dégagement de chaleur.
Or, il est nécessaire d'évacuer cette chaleur afin que les composants ne s'abîment pas. Il s'agit de maximiser le flux de chaleur quittant les composants ;
il existe pour cela différentes solutions :
- De façon active : on utilise des ventilateurs qui augmentent le flux d'air sur les composants, évacuant l'air chaud.
- De façon passive : on place des dissipateurs thermiques en métal conduisant facilement la chaleur. Ces dissipateurs permettent d'augmenter la surface d'échange avec l'air frais (on remarque que le dissipateur du processeur n'est pas un bloc de cuivre, mais de nombreuses lamelles de cuivre) et donc d'augmenter la quantité de chaleur quittant le processeur.
En particulier, le processeur chauffe énormément. Pour évacuer au mieux la chaleur, on fixe donc dessus un dissipateur (heatsink). Pour que la chaleur lui soit transmise au mieux, on intercale entre le processeur et le radiateur une petite couche de pâte thermique qui facilite le transfert et on écrase le radiateur sur le processeur. Enfin, on ajoute sur le dissipateur un ventilateur pour cumuler les deux moyens de refroidissement.
L'alimentation
L'alimentation joue un rôle vital. Elle doit convertir la tension de 230 V fournie par EDF en tensions utilisables par l'ordinateur. En effet, les 0 et les 1 qui forment les bits correspondent à des tensions données. Un 0 correspondra à une tension inférieure à une valeur précise, de même un 1 correspondra à une tension supérieure à une valeur. L'alimentation doit donc délivrer les tensions les plus précises possible (c'est ce qui fait la qualité d'une alimentation).
Une alimentation peut fournir une puissance maximale. Cette puissance doit bien sûr être supérieure à la somme des puissances consommées par chaque composant (processeur, carte graphique principalement, mais aussi disques durs !).
L'alimentation propose différentes tensions, car tous les composants n'ont pas les mêmes standards pour ces niveaux logiques. Pour certains, le niveau logique 1 correspond à 3,3 V, pour d'autres 5 V ou encore pour d'autres 12 V. C'est la raison pour laquelle un paquet de fils arrive sur votre carte mère par l'intermédiaire d'un large connecteur.
Enfin, notons que ces alimentations sont « stabilisées », c'est-à -dire que quel que soit le courant qui leur est prélevé, elles maintiennent la tension voulue. C'est bien sur extrêmement important pour le fonctionnement de l'ordinateur.
Conclusion
Avec le temps, de nouveaux ports, de nouvelles normes font leur apparition ; les processeurs évoluent (augmentation de la taille de la donnée sur laquelle le processeur travaille), mais le fonctionnement reste similaire. L'architecture n'a jamais été réellement remise en cause par les fabricants principalement pour des raisons de compatibilité.
Nous n'avons pas pu entrer dans les détails, mais ce n'était pas le but. En revanche, Internet regorge de ressources détaillées concernant cette architecture, depuis la spécification détaillée des processeurs jusqu'à des articles très complets dans Wikipédia.
Un peu plus loin : les circuits logiques
Nous avons parlé plus haut de bits transférés entre composants. Il est intéressant de comprendre comment cela se déroule du point de vue physique : pour simplifier, on peut considérer que les deux composants sont reliés par un simple fil. Tous les composants travaillent de façon synchrone avec une horloge : lorsque cette horloge donne le « top », ils écrivent le bit sur leur sortie, c'est-à -dire qu'ils appliquent une tension électrique correspondant au niveau logique voulu, 0 ou 1, sur leur sortie ; au top d'après, le bit est lu sur le composant suivant : la tension est détectée. C'est similaire à ce qui se passe sur le pipeline, mais à une échelle beaucoup plus petite (quelques transistors).
Pour appliquer cette tension, ce sont les transistors qui entrent en action. Un transistor est comme un petit interrupteur commandé. En les assemblant en parallèle et en série, on peut facilement réaliser des opérations logiques (deux interrupteurs ouverts en série ne laissent passer le courant – donc ne « transmettent » la tension correspondant au niveau logique 0 ou 1 – que si le premier ET le deuxième sont fermés ; deux interrupteurs ouverts en parallèle ne laissent passer le courant que si l'un OU l'autre est ouvert).
On constate aussi que le temps de transmission de l'information entre deux composants limite la fréquence de l'horloge. Il limite donc le nombre d'informations pouvant être traitées par seconde. Pour accélérer ce temps de transmission, on peut accélérer par exemple le temps de commutation d'un transistor ; réduire sa taille est un facteur important ; la finesse de gravure des processeurs (90 nm, 65 nm) est un paramètre de la taille d'un transistor.

