Processeur, mémoire, langage binaire... le PC


Aujourd'hui, nous allons disséquer notre ordinateur, pour savoir ce qu'il contient. En effet, comment pourrait-on vouloir programmer quelque chose dont on ne connaît rien du fonctionnement? Rassurez-vous, nous n'entrerons pas ici dans des détails techniques d'une complexité abominable. Il s'agit juste ici de quelques bases, qu'il est préférable mais pas nécessaire de connaître. De toute façon, vous apprendrez tout ce qui va suivre bien assez tôt.

D'abord, qu'est-ce que vous voyez ?

En effet, il semble logique de commencer par s'interroger sur ce qu'on a en face de nous. Me direz-vous : "Ce que j'ai en face de moi, c'est mon clavier, ma souris, mon écran et une grosse boîte qui fait du bruit quand je l'allume, avec plein de diodes qui cligontent et un porte-gobelet qui vient avec". C'est presque ça. Tout d'abord, je voudrais préciser qu'il ne s'agit pas d'un porte-gobelet, mais de votre lecteur de CD-ROMs (la nouvelle norme française voudrait que j'écrive cédérom, mais je m'y refuse par sentiment de rejet de l'idiotie culturelle).

Allons-y morceau par morceau. D'abord de la terminologie : tous les petits appareils qui sont autour de vous (et également dans la grosse boîte) sont des périphériques. Il en existe plusieurs types : périphériques de stockage, périphériques d'entrées, périphériques de sorties... bref, ils sont nombreux.

Le clavier est un bon exemple de périphérique d'entrée : c'est un des endroits par où les informations qui vont au PC entrent. La souris ou le micro en sont d'autres. En gros, un signal électrique est émis par ces périphériques, et le traitement de ce signal se fait dans un premier temps par le matériel de votre ordinateur, et dans un second temps par des logiciels, communéments appelés pilotes, ou drivers en anglais. Ainsi, il devient possible de traiter ces informations, et vous pouvez taper votre texte sans vous soucier des détails techniques.

L'écran, lui, constitue un bon exemple de périphérique de sortie : c'est par là que les informations "sortent" du PC, c'est-à-dire que c'est par là que le PC vous informe de ce qui se passe. D'autres exemples sont les enceintes ou l'imprimante. Là, c'est l'inverse qui se passe : la partie logicielle traite une information (une image à afficher), les pilotes transforment cette image en informations compréhensibles pour le matériel de l'ordinateur, qui lui-même va envoyer le signal approprié à l'écran pour que l'affichage soit celui désiré (en l'occurence, les superbes pages HTML de ce merveilleux site... aïe, j'ai mal aux chevilles, je sais pas ce qui m'arrive :-).

Certains périphériques sont plus sournois, car ils servent à la fois de périphériques d'entrée et de sortie. Prenez le modem, par exemple : quand vous téléchargez quelque chose de l'internet, il fait office de périphérique d'entrée. Mais si vous voulez envoyer quelque chose vers l'internet, tout de suite, il se transforme en périphérique de sortie... le viscieux.

Et puis on a les périphériques de stockage : c'est là que vous stockez vos données. On a donc les disques durs, les disquettes (dont le périphérique correspondant est le lecteur de disquettes), les CD-ROMs et tout le bataclan. La plupart du temps, ces périphériques peuvent lire et écrire des données (la plupart du temps, seulement, pensez à votre CD-ROM). Les données sont le plus souvent organisées en unités de stockage qu'on appelle communément des fichiers. Pas plus de détails là-dessus. Je voudrait juste préciser que "mémoire" ne fait pas référence à la capacité de stockage. L'autre jour, un ami m'a dit qu'il avait 4 giga-octets de mémoire, et j'étais un peu jaloux... jusqu'à ce que je me rendre compte qu'il parlait de son disque dur. Nous parlerons de la mémoire un peu plus loin.

Sésame, ouvre-toi !

Faisons-nous maintenant tous petits et entrons dans la grosse boîte, qui au passage s'appelle Unité Centrale (très scolaire, comme terme!). C'est dans cette Unité Centrale que se trouvent cachés les composants les plus essentiels.

Si vous avez déjà vu l'intérieur d'un ordinateur, vous avez sans doute remarqué une énorme plaque électronique sur laquelle viennent se brancher moult câbles, fils et nappes de branchement. Il s'agit de la carte-mère. C'est l'un des composants essentiels, sans lequel votre PC n'existerait même pas. C'est elle qui joue le rôle de communicateur entre tous les composants, qui loge la mémoire, le processeur, les cartes d'extensions (ex: carte son, carte réseau...) et c'est sur elle qu'on branche tous ses disques (à l'exception des disques SCSI. Sans commentaire). Elle contient notamment le BIOS, sur lequel nous reviendrons plus tard.

Le processeur est le deuxième composant important de votre machine. C'est comme qui dirait le coeur et le cerveau de tout le système : il bat à une certaine fréquence, calculée en méga-Hertz, et il fait les calculs. C'est le processeur qui exécute les instructions écrites dans les fichiers exécutables, c'est donc lui qu'on programme en premier lieu. Certaines cartes-mère peuvent loger plusieurs processeurs, on dit alors qu'ils travaillent en parallèle (ces systèmes sont bien sûr beaucoup plus performants... eh! vous le seriez aussi avec deux cerveaux!). Les processeurs sont souvent coiffés de petits ventilateurs, afin d'éviter qu'ils ne surchauffent... c'est que certains travaillent au noir et ne sont pas couverts par la loi des 35 heures!

Ensuite, il y a la mémoire. Il en existe un peu d'office sur la carte mère, mais aujourd'hui, ce n'est plus du tout suffisant. On rajoute alors de la mémoire grâce aux barettes de mémoire. Ces barettes se trouvent sous plusieurs formats : SIMM, DIMM... il y a la RAM (Random Access Memory, ce qui veut dire qu'on peut y lire et y écrire des données), la DRAM, la SDRAM... on s'y perd. Pensez juste à la mémoire comme une longue (très longue) suite de cases numérotées, chaque case pouvant contenir un octet. On stocke dans la mémoire des informations temporaires : quand vous éteignez votre ordinateur, toute la mémoire se vide. Ce n'est donc pas un périphérique de stockage. Nous expliquerons plus loin comment le système d'exploitation gère la mémoire.

Les cartes d'extension sont les petites cartes électroniques qu'on branche directement sur la carte mère. Ces cartes sont en quelque sorte des traducteurs de signaux : la carte graphique (de base, pas la 4dfx Voodoo 4000 GigaForce 3D Accelerator Polygon Filling Map Texture Kick Your Ass) transforme l'image qu'on veut afficher en signaux lisibles par l'écran. Ceci est un principe largement simplifié. De même, la carte réseau transforme les données qu'on lui envoie pour les faire passer correctement sur les câbles de votre réseau. Les exemples sont infinis. Notez que certaines cartes (notamment les cartes graphiques modernes) sont également dotés de processeurs, qui font les calculs spécifiques à cette carte, afin de soulager le processeur central (ou CPU pour les intimes) de calculs trop lourds, comme on en rencontre souvent en 3D par exemple.

Je crois qu'on a fait un petit (voir très grossier) tour d'horizon du matériel que peut contenir un PC. Bien sûr, le PC est le royaume du numérique : toutes les informations circulent sous forme de bits et d'octets (voyez l'annexe Langage Binaire si vous pensez que je parle chinois). C'est donc sous cette forme qu'on traite les données, pour en faire quelque chose d'utilisable par nous. 00100101110011001011101010010101001011001010011010111101010100100001000110011 (traduction : car si je vous parlais comme ça, vous ne comprendriez rien!)

Le BIOS

Si vous ne voulez pas en savoir plus sur les détails techniques, vous pouvez sauter cette partie. Sinon, ceci peut vous intéresser.

BIOS signifie Basic Input/Output System, ou encore Système d'Entrées/Sorties de Base. Le BIOS est contenu dans une petite puce sur la carte mère, et c'est lui qui affiche les toutes premières lignes que vous voyez sur votre écran lorsque vous allumez votre ordinateur (d'habitude, il y a même un petit message du BIOS de la carte graphique qui vient en tout premier). Le mien me dit quelque chose comme :

Award Modular ... truc ... truc Copyright ....
AMD K6 3D processor found
System memory : 128 Mb OK

Found ATAPI CD-ROM

et en bas de l'écran :

Press DEL to enter Setup.

Ensuite, il y a un petit tableau qui s'affiche, avec plein de caractéristiques de mon ordinateur (co-processeur, types de ports, types de disques...). Et puis il y a le logo Windows... Au fait, ne rigolez pas trop des valeurs si nous sommes en 2015 : cette page a été écrite en 2000, et pour l'époque, 128 Mo de RAM, c'est pas si mal!!!

Vous reconnaissez sans doute l'affichage, même si il varie entre les différents contructeurs de cartes mères. Vous avez sans doute remarqué aussi que l'ordinateur met quelques secondes avant de démarrer Windows, ou Linux, ou quel que soit le système que vous avez. C'est parce que le BIOS teste un peu tous les composants présents, pour s'assurer que tout va bien : c'est le Power-On Self Test, ou POST.

Le BIOS présente une interface entre les composants et les programmes. En effet, c'est lui qui joue le rôle de traducteur entre une instruction et le matériel concerné. Il présente une interface pour les disques durs, les lecteurs de disquettes, l'affichage en mode texte à l'écran et même quelques modes graphiques, le clavier, la souris, les ports parallèle et séries, la machine à café... j'en passe et des meilleurs. Euh... non, je n'ai pas de machine à café dans mon ordinateur...

C'est sur le BIOS que s'appuie votre système d'exploitation pour vous donner accès à tous ces périphériques.

Le Système d'Exploitation

En anglais, on dit Operating System, ou OS (BeOS, Windows 95 OSR2, AmigaOS, MacOS...). Le système d'exploitation est lancé par le BIOS après le démarrage de la machine. Ensuite, le système se débrouille tout seul : il est le seul maître à bord. C'est lui qui vous permet d'utiliser vos fichiers en les organisant (il y a plusieurs manières de les organiser, au choix de l'OS) sur vos disques, qui vous permet de les manipuler en vous fournissant des commandes (copy, move...), qui charge les programmes en mémoire et qui dit au processeur de les exécuter... bref, il vous fait tout. Sans lui, il serait bien difficile (quoique pas impossible) d'utiliser son ordinateur.

Pour la programmation : souvent, l'OS fournit un certain nombre de service, c'est-à-dire de fonctions préprogrammées pour faire les tâches les plus basique, comme par exemple pour l'affichage d'un texte. Parfois, il présente des services un peu plus évolués, comme la gestion de la souris, et parfois même, il se propose de vous tracer vos figures 3D à votre place et de faire chanter la carte son en conséquence. C'est le principe de DirectX, par exemple.

Windows, pour prendre un exemple bien connu, fournit un certain nombre de services pour les fenêtres : création de fenêtre, déplacement, redimensionnement, affichage d'une boîte de messages, extraction d'une icone ou d'une image de votre programme, lancement d'un autre programme... la liste est très longue. Tout ceci se regroupe sous le nom d'API, pour Application Program Interface. Il s'agit donc d'une interface... qui nous évite de réinventer la roue à chaque programme. Dites à Windows que vous voulez une fenêtre, et il s'occupera de la tracer pour vous (ce qui fait notamment que toutes les fenêtres se resemblent quelque peu). C'est gentil, non? De la même façon, Windows trace pour vous les polices de caractères, qui serait une tâche réellement pénible si on devait le faire à chaque foid. Nous n'allons pas beaucoup utiliser ce genre de services au début de notre cursus d'apprenti programmeur, mais si nous abordons la programmation Windows (c'est à voir...), nous les utiliserons un peu plus. Mais ça reste important à savoir, pour comprendre comment ça marche.

Quand l'OS lance un programme, il met à la disposition de ce programme un petit bout de la mémoire de l'ordinateur, dans lequel ledit programme pourra stocker ses données et son code. De la manière dont l'OS gère ce partage de la mémoire entre les programmes dépend sa stabilité. Linux, par exemple, est véritablement draconien sur la façon dont on utilise la mémoire, si bien que si un programme tente d'aller utiliser de la mémoire qui n'est pas à lui, il le termine immédiatement, sans état d'âme. De cette façon, un programme ne peut pas aller en faire planter d'autres qui tournent en même temps, et surtout, personne ne va toucher à la mémoire qui contient le système lui-même. Car tout programme qui est exécuté réside quelque part en mémoire. En effet, au lancement d'un fichier exécutable, les instructions sont recopiées en mémoire, et on indique au processeur l'endroit où se trouve le début du programme, pour qu'il puisse commencer à lire les instructions une par une et à les exécuter. Pourquoi recopier un programme en mémoire, me demanderez-vous ? Voici la raison (prenons pour exemple mon ordinateur) : mon processeur est capable d'exécuter 300 millions d'intructions à la seconde (300 MHz) au maximum. Le disque dur, lui, peut entre le moment d'une requête et le moment où il renvoie l'information, mettre plusieurs millièmes de secondes, ce qui est lamentablement lent par rapport au processeur. Comme c'est un disque, il lui faut attendre que le plateau tourne jusqu'au bon endroit, puis il faut qu'il déplace la tête de lecture... bref, un temps fou est perdu. La mémoire, elle, est bien plus rapide, et peut accéder à l'octet voulu en quelques nano-secondes. Le programme peut donc s'exécuter plus vite s'il faut lire les instructions dans la mémoire que s'il faut aller lire les instructions sur le disque dur.

Par contre, la mémoire est souvent bien plus limitée que l'espace disque : j'ai 128 Mo de mémoire, mais 11 Go de disque dur, soit presque 100 fois plus. Certains OS proposent alors, pour pallier aux eventuels manques de mémoire, un système de mémoire virtuelle : ils s'accaparent un certain espace sur le disque dur, et en font une sorte de zone de mémoire, dans laquelle ils stockent les informations qui se trouvent en mémoire mais qui ne sont pas utilisées. Ainsi, on libère de la place pour mettre en mémoire des informations qu'on doit utiliser souvent. C'est pourquoi, parfois, quand vous lancez un programme volumineux, le disque dur travaille particulièrement intensément : des données sont constamment copiées vers le disque sur cette zone de mémoire virtuelle. C'est plus lent, mais ça augmente considérablement la mémoire disponible sur votre ordinateur (et au final, vous pouvez exécuter plus de programmes en même temps). Mon Linux est configuré pour utiliser, en plus de mes 128 Mo de RAM, 128 Mo de mémoire virtuelle, ce qui me fait un total confortable de 256 Mo de mémoire.

Le code utilisé pour les fichiers exécutables varie d'OS en OS et de processeur en processeur. Ainsi, un programme compilé pour Linux ne tournera pas sous Windows. De même, un programme compilé pour un Mac ne pourra pas tourner sur un processseur x86 (Intel). C'est entre autres une des raisons pour lesquelles je ne fournis que les codes sources de mes programmes, pas les version compilées.

A l'issue de ce cours, je ne pense pas que vous ayez tout compris et tout retenu. En fait, ce cours sert juste de base, sur laquelle vous pourrez peu à peu édifier vos connaissances en architecture informatique. Relisez de temps en temps cette page, afin de mieux comprendre, et vous aurez certainement plus de facilités par la suite. Et puis c'est toujours interessant de savoir comment fonctionne l'outil qu'on utilise.


Voir aussi: Le langage binaire - Système d'Exploitation - Compilation