Un ordinateur est une machine utilisant et produisant de l'information. Il recoit de l'information (de l'utilisateur, par internet, ...) donne de l'information (informations affichées à l'écran, imprimées, ...) mémorise de l'information (en mémoire vive, sur disque dur, clé USB, CD, DVD, ...) et traite de l'information (calcul mathématique, "raisonnement" logique, ...).
Nous allons donc commencer par parler de l'information et plus exactement de la manière dont elle est représentée dans un ordinateur.
Toute information traitée par un ordinateur est codée en binaire c'est à dire par une suite de bits valant zéro ou un.
La représentation physique du zéro et du un dépend du type de support utilisée: mémoire vive, disque dur, clé USB, CD, etc ... Mais, quelque soit le type de support utilisé, il s'agit toujours d'un point de vue logique, d'une suite de zéros et de uns.
Pour prendre un exemple, la représentation physique actuelle d'un bit en mémoire vive est un transistor composé de silicium. La représentation du zéro et du un est basée sur la répartition des charges négatives et positives dans le transistor.
Voici par exemple le zéro. Et voici le un.
De 1970 à 2008, le nombre de transistors sur une puce électronique a augmenté de manière vertigineuse en suivant la loi de Moore : le nombre de transistors par puce double tous les deux ans pour le même prix de fabrication. Les transistors deviennent donc de plus en plus petits.
Comme un signal électrique met moins de temps à parcourir une distance plus courte, cette progression a des répercutions directes sur la vitesse des processeurs (elle double tous les 18 mois). Elle entraine également une augmentation constante de la capacité des mémoires vives (la RAM des PCs double tous les deux ans environs).
En 2008, la taille minimale d'un transistor était de l'ordre de 45 milliardième de mètre.
Une suite de huit bits est appelé un octet (ou byte en anglais). C'est l'unité de base permettant de définir la dimension d'un espace de stockage. Il en dérive des unités plus grandes comme:
La mémoire vive des ordinateurs actuels (2013) est de l'ordre de plusieurs Gigas alors que la capacité des disques durs se compte en Teras.
La manière de coder une information en binaire dépend du type d'information. Les informations numériques par exemple, ne sont pas codées de la même manière que le texte ou que des images ou du son.
Pour fixer les idées, voyons deux exemples de codage.
Le codage binaire des nombres entiers est basé sur l'écriture des nombres en base 2 (en utilisant uniquement les chiffres 0 et 1).
Le principe est le même que celui de l'écriture d'un nombre entier en base 10. C'est à dire l'écriture habituelle d'un nombre utilisant les 10 chiffres de 0 à 9. Rappelons que dans ce système, chaque chiffre est associé à une puissance de 10. Il y a un chiffre pour les unités (100), un chiffre pour les dizaines (101), un pour les centaines (102), un pour les milliers (103), etc ... Par exemple, 2013 signifie : 2 × 103 + 0 × 102 + 1 × 101 + 3 × 100
L'écriture d'un nombre entier en base 2 utilise le même principe, sauf que les puissances de 10 sont remplacées par des puissances de 2. Le nombre 40, s'écrira par exemple: 101000. Car 40 = 32 + 8 ou autrement dit 25 + 23 et donc 40 = 1 × 25 + 0 × 24 + 1 × 23 + 0 × 22 + 0 × 21 + 0 × 20
Comme 40 n'a que six chiffres en base 2, on peut représenter ce nombre sur un octet comme suit:
Ce codage permet de coder de grands nombres en utilisant très peu de bits
Les informations textuelles (suite de caractères) sont souvent codés en ASCII. Dans ce codage, chaque caractère est représenté par un octet de valeur prédéfinie dans une table de correspondance.
La "valeur" est en fait l'interprétation du codage binaire de l'octet en nombre entier, comme nous l'avons vu au paragraphe précédent.
Prenons par exemple, le caractère '('. Dans la table de correspondance ASCII, on voit que sa valeur est 40. Autrement dit, le codage binaire du caractère '(' est :
C'est à dire le même codage que celui du nombre 40 sur un octet !
Mais alors comment un ordinateur peut il distinguer un nombre d'un caractère ?
Il ne le peut pas !
En effet, la simple connaissance d'une suite de 0 et de 1, ne permet pas de savoir ce que représente cette suite. Tout dépend de la manière dont elle est interprétée.
Si on donne l'octet précédent à un ordinateur, il y verra le nombre 40, si à ce moment là il s'attend à un nombre et il y verra le caractère '(', si à ce moment là, il s'attend à un caractère.
![]() |
Barette de RAM DDR3 de 4 Go |
La mémoire vive (ou RAM pour Random Access Memory) d'un ordinateur peut être vue comme une suite continue d'octets.
Chaque octet possède un numéro. Le numéro du premier est 0, du deuxième 1, etc ... Ce numéro s'appelle l'adresse de l'octet.
Une plage mémoire est une suite d'octets consécutifs. Elle peut donc être définie par une plage d'adresse (adresse minimale et maximale) ou bien par l'adresse de début (ou autrement dit, l'adresse minimale) de la zone et du nombre d'octets qu'elle contient.
Voici, par exemple une plage mémoire de 3 octets, démarrant à l'adresse 2:
![]() |
Processeur Intel 80486DX2 (taille: 12 × 6,75 mm) |
Le processeur d'un ordinateur exécute en permanence des instructions que l'on appelle instructions machine. Il contient (en autre) des mémoires de petites tailles (quelques octets) appelées registres, qui servent à transférer des données de la mémoire vers le processeur (ou inversement) en vue d'effectuer des opérations sur ces données.
Par exemple:
Nous avons vu plus haut que toute information traitée par un ordinateur est codée en binaire. Il en de même des instructions machines. Une instruction machine est codée en binaire sur quelques octets (4 ou 8 dans les machines actuelles). Une partie du codage défini le type d'opération à effectuer et une autre, les objets (les registres par exemple) sur lesquels cette opération doit agir.
La manière de coder les instructions machines dépend du type de processeur.
Il est important de noter que le langage machine est le seul langage directement exécutable par un ordinateur. Les langages de programmation (comme C, Java, Php, ...) ne le sont pas !
Les programmes exécutables peuvent se trouver en mémoire (on dit qu'ils sont résidents) où sur le disque, sous la forme de fichiers (reconnaissables sous windows par leur extension .exe). Mais pour pouvoir être exécutés, ils doivent forcément être chargés en mémoire (schéma).
Nous avons dit plus haut qu'un programme exécutable est une suite d'instructions.
En fait, pour être plus exact, il faudrait définir un programme exécutable comme un mélange de zones de code contenant des instructions machine et de zones de données servant à stocker provisoirement les informations traitées (données ou résultats).
La mémoire d'un ordinateur contient plusieurs programmes que le processeur exécute à tour de rôle à une telle vitesse que l'on a l'impression qu'ils sont exécutés en même temps.
Chacun de ces programmes résidents possède donc ses propres zones d'instructions et de données.
Notez qu'un même programme peut donner lieu à plusieurs processus.
Parmis les processus résidents figurent nécessairement les processus système qui servent (entre autre) à gèrer les périphériques (clavier, souris, écran, disque, lecteur de CD, imprimantes, etc...) et les fichiers.
Jusqu'à présent nous avons essentiellement décrit l'ordinateur du point de vue du processeur et de la mémoire vive. Le processeur exécute en permanence des programmes chargés en mémoire. Ces programmes sont des suites d'instructions machines et de plage mémoires réservées aux données.
Mais si les instructions exécutées par le processeur ne font que transférer des informations entre la mémoire vive et les registres, comment peut-il communiquer avec le clavier ? avec la souris ? avec l'écran ?
Comment les plages mémoire réservées aux données peuvent elles recevoir les données de l'utilisateur ?
Comment peuvent-elles s'afficher à l'écran ?
Pour répondre à ces questions, il nous faut tout d'abord complèter notre vision d'un ordinateur et considérer les éléments externes à l'unité centrale que l'on appel les périphériques (écran, claviers, souris, disque, lecteur de CD, clé USB, imprimante, etc ...)
Les périphériques ont leurs propres circuits spécialisés appelé interfaces d'entrées-sorties. Pour l'écran par exemple, il s'agit de la carte graphique. Ces circuits peuvent avoir leurs propres registres, leur propres mémoire et même leur propre processeurs.
Ils communiquent avec le processeur et la mémoire par un ensemble de fils que l'on appelle le bus de données.
En réalité, les instructions exécutés par le processeur ne se limitent pas à la mémoire centrale. Certaines instructions spéciales appelées instructions d'entrée-sortie, permettent de transférer des données entre les interfaces d'entrée-sortie et les registres du processeur ou directement avec la mémoire vive.
Ceci explique très sommairement comment se fait la communication entre le processeur et les périphériques et indirectement, comment un programme peut envoyer des informations vers un périphérique ou recevoir des informations provenant d'un périphérique.
Mais cela n'explique pas l'interaction avec l'utilisateur. En effet, vous remarquerez que votre ordinateur réagit instantanément (ou quasiment) lorsque vous éjectez un CD, introduisez une clé USB, bougez la souris, appuyez sur une touche du clavier, etc ...
Ces actions physiques de l'utilisateur sur l'ordinateur peuvent se produire à n'importe quel moment, alors que le processeur est occupé à exécuter les instructions machine d'un programme quelconque. Or c'est nécessairement le processeur qui doit réagir à ces actions.
Il faut donc qu'il soit capable d'interrompre l'exécution du programme en cours pour réagir immédiatement à n'importe quelle action de l'utilisateur.
Comment cela est-il possible ?
La réponse à cette question se trouve dans le mécanisme d'interruption.
Le clavier va par exemple envoyer un signal d'interruption au processeur chaque fois qu'une touche est appuyée. La souris envoie une interruption chaque fois qu'elle est déplacée ou que l'utilisateur effectue un clic.
Le processeur possède des entrées spécialement prévues pour recevoir ces signaux.
Lorsqu'il recoit une interruption, il interrompt provisoirement le programme qu'il est entrain d'exécuter pour exécuter des instructions du système d'exploitation prévues pour traiter ce type d'interruption. Il existe par exemple des instructions prévues pour traiter les interruptions claviers, d'autres pour traiter des interruptions souris, etc ...
Le système ne gère pas entièrement les interruptions, elles sont sous-traitée par les pilotes (drivers en anglais) des périphériques. Un pilote est un programme spécialisé dans la gestion d'un périphérique spécifique. Il ne fait pas partie du système d'exploitation car il est généralement produit par le fabriquant du périphérique.
Une fois l'interruption traitée, le processeur reprendra ce qu'il était entrain de faire à l'endroit exact où il s'était arrêté.
Pour donner une image, on pourrait comparer ce mécanisme au réflexe humain. Prenons par exemple une personne lisant un livre. Le cerveau de cette personne joue le rôle du processeur. Le programme exécuté est la lecture du livre. Soudain, une abeille pique la personne. La douleur percue est le signal d'interruption envoyé au cerveau (le processeur). Par réflexe, la personne lache le livre. C'est une réaction préprogrammée dans l'inconscient (le système d'exploitation). Après avoir soigner la piqûre (traitement de l'interruption), la personne reprend la lecture du livre à l'endroit où elle s'était arrêtée.