Initiation Informatique
Initiation Informatique
E
C
H
EN EDUCATION 5.51
R
C
H
E
Initiation à l’informatique
(Version provisoire et incomplète)
Charles Duchâteau
Septembre 1998
FACULTES UNIVERSITAIRES
NOTRE-DAME DE LA PAIX NAMUR
Mon propos n'est pas ici de réveiller le débat sur la nature de l'informatique : science,
technique, culture,… mais d'expliciter pourquoi, même si c'est de tout autre chose qu'il sera
question, le point de départ sera apparemment de proposer une "définition" de l'ordinateur.
On peut se livrer à la petite expérience suivante : comme dans certains tests psychologiques,
on invite les participants à associer de manière réflexe, sans longue recherche, un ou des
mots à ceux qu'on va énoncer. On donne ensuite successivement des mots comme
"météorologie" (qui amène "prévisions", "climat", "temps", "dépression",… et rarement
"thermomètre" ou "baromètre"), "astronomie" (qui évoque "calculs", étoiles", "univers",
"galaxie" … et rarement "télescope") en terminant par "informatique" (qui amène
essentiellement une majorité d' "ordinateur" et quelques "information").
On peut énoncer un premier principe essentiel :
1.1 L'ordinateur ?
Le mot "machine" ne sera pas ici davantage précisé1; il servira entre autre à corriger
tous les anthropomorphismes que nous serons amené à faire à propos de l'ordinateur et de son
comportement. La description de cette machine, du matériel (hardware) fera l'objet d'un
chapitre dans la suite.
Bien plus important est l'aspect traitement formel des informations et c'est lui qui va à
présent retenir notre attention.
Une manière frappante d'illustrer le propos du présent chapitre est de retenir le slogan
suivant :
Il importe ici de bien saisir dans quel sens les mots "traiter des informations" doivent
être entendus dans le contexte qui nous occupe.
Un point de départ possible consiste à chercher, dans notre expérience personnelle des
situations où ils nous semble bien "traiter des informations". Il est important cependant de
préciser ces exemples pour éviter que n'importe quelle activité rationnelle soit présentée
comme "traitement d'informations"; et cela, même si certains affirment que toute activité du
cerveau humain est traitement d'informations et que, dès lors, tous nos comportements
participent d'un certain traitement d'informations.
Les exemples sont fort nombreux, mais afin de pouvoir à la fois obtenir des descriptions
précises, nous présenterons ces traitements d'information sous une forme commune. Les
exemples obéiront donc à la schématisation suivante :
Informations Informations
reçues Traitements rendues
(Entrées) (Sorties)
Informations
consultées
Figure 2-1 : schéma d'un traitement d'informations
Un texte d'une dizaine Synthétiser en une page l'essentiel Un résumé d'une seule
de pages, en français du texte fourni page, en français
Une liste d'une Trier par ordre alphabétique la liste La même liste triée
trentaine de noms fournie par ordre alphabétique
Un dictionnaire
français-anglais
un formulaire
On pourra à raison objecter qu'un cours n'est pas (toujours) une conférence et que ce qu'en
capte "en direct" un étudiant au moment de sa prise de notes est bien plus que ce qu'en
restitue une cassette vidéo. J'espère qu'on aura compris que l'important ici est que les
"informations" tant en entrée qu'en sortie puissent être clairement identifiées, qu'elles laissent
en quelque sorte des traces objectives, formelles (dans le sens d'indubitables). La contrainte
du schéma tord évidemment ce qu'un humain attache à "traitement d'informations", avec tout
ce qui concerne la perception, les impressions, les sensations, … Ensuite, et ceci est loin
d'être anecdotique, les exemples fournis (sauf le dernier) mettent en oeuvre des traitements
sophistiqués et il est indispensable de chercher des propositions de traitements plus "bêtes"
ou plus réflexes (pour ne pas employer les termes "automatiques" ou "machinaux") si l'on
veut voir émerger des exemples comme celui de la conjugaison ou ceux des manipulations
numériques.
Beaucoup de propositions entrent difficilement sans le schéma prescrit, soit parce
qu'elles mettent en oeuvre des comportements, des actions ou se basent sur un faisceau
d'informations difficilement "objectivables", soit que les canaux de réception des informations
soient trop sophistiqués, soit encore que le "traitement" attendu ne soit pas très clair. Par
exemple :
- répondre à quelqu'un qui vous salue,
- confectionner un plat, d'après une recette de cuisine,
- poser un diagnostic après examen d'un malade,
- conduire une voiture,
D'autres entrent parfaitement dans le schéma attendu, au prix parfois de précisions
quant à la forme des entrées et des sorties :
- traduire un texte du français vers l'anglais,
- sur base de l'énoncé du sujet proposé, écrire le texte d'une dissertation,
- répondre à des questions lors d'un examen écrit,
- choisir le menu d'un déjeuner au restaurant,
A chaque fois que c'est possible, nous classons peu à peu ces propositions pour obtenir
le tableau suivant :
Traitement formel ou Traitement difficilement (non !)
aisément formalisable formalisable
(Sens, signification, ...)
Traitements portant - calculer la moyenne d'une
sur des nombres série de cotes
- faire une division par calcul
écrit
- ...
Traitements portant - conjuguer un verbe - résumer un texte
sur le langage - compter les mots d'un texte - synthétiser une conférence
(texte,...) - vérifier si un mot est présent - traduire un texte
dans un texte - écrire une dissertation
- fournir les fréquences respec- - corriger l'orthographe d'un texte
tives des mots d'un texte - ...
- écrire un nombre en toutes
lettres
- ...
Autres - chercher le numéro de télé-
phone d'un abonné dans
l'annuaire
- dériver une fonction
- trier une liste de noms
- ...
Figure 2-9 : classement des traitements d'informations
1 "On ne peut parler de signification attachée à un nombre. 4 ne veut rien dire. C'est un repère."
..."L'information numérique a donc ceci de très particulier qu'elle est un contenant sans contenu, une
forme sans signification." (Arsac 87).
2 Le chapitre suivant nous montrera d'ailleurs que quelles que soient les informations que nous pensons
lui faire manipuler, l'ordinateur reste essentiellement un calculateur
Plusieurs termes ont ici été employés : formel3, formaliste4, formalisé5, formalisable.
En ce qui nous concerne, l'éclairage des termes utilisés peut être synthétisé comme
suit :
C'est sans doute le terme formalisable qui rend le mieux compte de l'effort qui est au
coeur de la discipline informatique, celui d'une description purement formelle des traitements.
En effet, l'informatique peut être vue comme une entreprise et une démarche (une quête sans
fin ?) pour faire reculer vers la droite la frontière définie dans le tableau ci-dessus, pour élargir
la colonne du formalisé et réduire celle où les traitements semblent seulement redevables du
sens.
Résumer
additionner conjuguer dériver
Ecrire une dissertation
Figure 2-10 : classement des traitements d'informations
3 formel : qui concerne uniquement la forme. Une distinction purement formelle. Qualités formelles d'une
oeuvre. Qui considère la forme, l'apparence plus que la matière, le contenu. Classement, plan formel.
(Le Petit Robert, 1993).
4 Formaliste : qui observe les formes, les formalités avec scrupule. (Le Petit Robert, 1993)
5 Formaliser : réduire (un système de connaissances) à ses structures formelles. (Le Petit Robert, 1993)
Si on peut aisément recenser les traitements déjà formalisés - il suffit d'inventorier les
tâches dont un ordinateur peut venir à bout - il est par contre bien plus difficile de borner le
domaine du formalisable. C'est ici essentiellement une question d'opinion : la traduction d'un
texte constitue-t-elle un traitement formalisable ? et la synthèse d'un texte ? et la correction de
l'orthographe ?
Il est en tout cas indispensable de proposer un critère même s'il est imparfait ou
approximatif qui permette en quelque sorte de mesurer le degré de difficulté de formaliser un
traitement d'information.
J'ai un ami portugais qui ne connaît pas un traître mot de français, et je souhaite lui
donner (en portugais évidemment) les indications nécessaires à certains travaux. Il est facile de
voir que je pourrai par exemple lui fournir la marche à suivre pour qu'il puisse conjuguer un
verbe français : il ne sera pas conscient qu'il est en train de conjuguer, il serait parfaitement
incapable de prononcer les suites de caractères que je vais lui demander d'écrire, il ne
comprendra pas ce que signifie le travail que je lui commande, mais cela n'a aucune
importance : en suivant mes indications il va conjuguer en français.
Ainsi en se limitant à un verbe régulier du premier groupe, mes instructions (en
portugais) pourraient être du style :
- demande qu'on te fournisse le mot à on lui donne "porter"
traiter (par exemple sur un petit bout
de papier)
- écris ce mot au dessus de ta feuille il écrit porter
- efface les deux derniers caractères de le mot devient port
ce mot
- écris "je" puis passe un espace puis il écrit je porte
écris le mot raccourci auquel tu
colles (sans espace) la lettre "e"
- passe à la ligne, écris "tu", puis le il écrit à la ligne tu portes
mot raccourci auquel tu colles (sans
espace) les lettres "es"
... ...
Même si cela est fort loin des contraintes syntaxiques des langages de programmation (voir
la suite du cours), nous venons de concevoir ainsi un premier programme (à destination du
copain portugais). Nous allons y revenir, puisque (et cela illustre bien cette difficulté de
formaliser) ce premier exemple de programme est aussi le premier exemple de programme
incorrect... On notera que nous sommes ici aux prises avec la quatrième partie de la
"définition" préalablement donnée pour l'ordinateur : "pour autant qu'on lui ait indiqué
comment mener à bien ces traitements".
De la même manière nous pourrons expliquer à notre ami portugais (même s'il n'y
comprend rien) comment réaliser une addition écrite, comment calculer une moyenne, et même
en prenant pas mal de temps comment calculer la dérivée d'une fonction mathématique
élémentaire.
Mais si le travail consiste à donner (en portugais) les règles qui vont permettre de
résumer un texte écrit en français, on devine qu'il s'agit là d'une tâche redoutable, peut-être
même impossible.
Il importe de bien insister ici sur le fait qu'il s'agit de donner les indications pour un texte
quelconque, qu'on n'a évidemment pas devant les yeux lorsqu'on rédige ces indications.
Sinon, si c'était de la synthèse de tel texte précis qu'il s'agissait, la solution serait immédiate :
je le résume moi-même, je donne ce résumé à mon ami qui n'a plus qu'à le rendre. Ce que je
veux c'est lui indiquer comment résumer n'importe quel texte, c'est avoir formalisé le
processus de synthèse d'un texte.
On voudrait que face à un texte qu'il ne comprend pas (puisque c'est un texte français),
où il ne voit qu'une succession de lettres et de mots, il puisse à l'aide de nos indications
produire un autre texte français (qu'il ne comprendra pas davantage) et qui constitue un résumé
du premier... On mesure j'espère toute la difficulté du processus.
Et on devine que des stratégies formalistes simples comme "réécrire le texte en ne
retenant qu'un mot sur cinq" conduiront à un charabia qui ne constituera en aucune manière
une synthèse du texte original.
Le même défi se rencontre si la travail consiste à traduire un texte du français vers
l'anglais. On pourrait penser à une approche consistant à fournir au copain portugais un lexique
français - anglais qui comporterait par exemple les équivalences :
il he
la the
porte door
ce qui conduirait immanquablement à traduire la courte phrase "il la porte" par "he the door"...
Mais ce qu'il est essentiel de saisir c'est que si demain on dispose pour ces diverses
tâches des indications nécessaires à destination du copain portugais, après-demain, on pourra
les faire faire par l'ordinateur : le problème de leur formalisation sera réglé.
Le propos n'est évidemment pas ici d'assimiler les capacités d'un humain avec celles d'un
ordinateur. Mais du point de vue de la nécessité de formaliser (décrire les traitements sur la
seule base de la forme des informations à traiter, sans jamais faire intervenir la signification,
le sens que nous attachons à ces informations), le passage par un homme ne comprenant
pas notre langue mais auquel nous pouvons prêter par ailleurs les mêmes possibilités de
traitements formels que les nôtres (il peut compter, additionner, repérer une suite de
caractères dans un texte,...) est éclairant.
On lira à ce propos la magnifique contribution "Esprits, cerveaux et programmes" de John
Searle dans (Hofstadter 87).
6 le logiciel, ce sont les indications de traitement, conçues par un homme (ou une équipe) et dont il est
question dans la pseudo-définition apportée plus haut.
Voici ce que donne l'action d'un tel correcteur orthographique sur un texte (que je vous
recommande de lire à haute voix) :
Si l'on veut bien, pour quelques instants, se mettre dans la "peau de l'ordinateur" et
pour en terminer avec ces problèmes de mots, tout pour "lui" (y compris nos plus beaux textes
français) est comparable à ce que sont pour vous les "textes" qui suivent :
2.5 La programmation
définition d'ordinateur sous la petite phrase "pour autant qu'on lui ait indiqué comment mener
à bien ce traitement".
J'avais signalé ci-dessus que ce premier exemple de "programme pour faire conjuguer"
était aussi le premier exemple d'un programme incorrect. On aura vu que si, fort de nos
explications, notre ami portugais se voit confier le soin de conjuguer le verbe "aimer", il
fournira sans sourciller "je aime", puisque c'est là ce que nos indications lui ordonnent. On
pourra toujours alors corriger7 la première version en ajoutant les considérations indispensables
sur les verbes commençant par une voyelle. Puis on se rendra compte (toujours en se limitant
aux verbes réguliers du premier groupe -ceux en "er"-) qu'il y a aussi le problème du "h"
(j'hésite, mais je hume); ces "détails" réglés, j'aurai la surprise de voir l'ami portugais, servi par
un utilisateur facétieux, conjuguer sans problème "je cerisie" (première personne de l'indicatif
présent du verbe "cerisier") ou "je plombie"... et il me faudra alors lui fournir, en plus des
indications, la liste des verbes acceptables...
C'est cela le défi qui est au coeur de la programmation : comment décrire, sur la seule
base de la forme, sans jamais référer au bon sens ou à une commune expérience, des
traitements d'informations que nous n'accomplissons pas de manière formaliste. Je l'ai évoqué
plus haut, nous conjuguons essentiellement par euphonie et non pas en appliquant je ne sais
quelle règle; nous conjuguons sans réfléchir... Et même lorsqu'à l'école fondamentale nous
avons appris à conjuguer, l'essentiel était déjà fait : nous écrivions sans doute parfois "ils
porte", jamais "vous portons".
Vous pouvez passer en revue les tâches précédemment classées comme "aisément
formalisables" (écrire un nombre en toutes lettres, conjuguer, trier, calculer une dérivée) et
vous admettrez sans doute que l'adverbe aisément est peut-être un peu exagéré... sauf
lorsqu'on compare ces tâches à celles de la seconde colonne (résumer, traduire, synthétiser,...).
C'est ce qui fait sans doute de la programmation -même si d'autres difficultés viennent
de ce que l'ordinateur est infiniment plus formaliste encore que notre ami portugais - une des
activités les plus inhabituelles et les plus complexes.
2.6 Et l'intelligence ?
Il est à présent évident que, de notre point de vue d'être humain, d'autres termes
peuvent être accolés à l'axe qui va de l' "aisément formalisable" au "très difficilement
formalisable".
Très facilement Très difficilement (non !)
formalisable formalisable
Intelligent, sophistiqué
Bête, réflexe, inconscient
imbécile, stupide raison, entendement
abstraction, intuition
pensée
Figure 2-16 : axe de la difficulté de formaliser
7 En informatique on dit "debugger" (ôter les "bugs"); même si l'exotisme du terme en amoindrit peut-être
la portée, il s'agit bien de corriger des erreurs...
Plus les traitements concernés par le processus de formalisation exigé se situent à droite
sur l'axe, plus ils correspondent à des tâches qui réclament de notre part "de l'intelligence".
"Compter les mots d'un texte" n'est pas un travail très sophistiqué (pour nous !)8; "synthétiser
un texte" est un travail comportant pas mal de "matière grise ajoutée".
Dès lors, plus l'informatique s'attaque à des tâches difficilement formalisables pour
tenter de les formaliser, plus le comportement de l'ordinateur disposant de l'énorme masse des
indications nécessaires à l'accomplissement de cette tâche - indications toujours formalistes -
nous paraît "intelligent".
Battre un "grand maître" au jeu d'échecs était (est !) sans conteste considéré comme
une preuve d'intelligence; aujourd'hui l'ordinateur équipé des indications indispensables 9 gagne
aux échecs, même quand il est opposé aux grands maîtres. Guidé par un système expert
adéquat, l'ordinateur pose des diagnostics médicaux, aide à détecter les pannes des
locomotives, seconde les spécialistes dans la détection des champs de pétrole,...
Ceci, vu ce qui vient d'être dit, montre dans un premier temps que tous ces processus
ont pu être formalisés et dans un second temps pose la question de "l'intelligence", non de
l'ordinateur10, mais du couple ordinateur-indications de traitement.
Tout ce que je voudrais signaler ici c'est que, me semble-t-il,
1 cette question a du sens
2 il ne faut pas confondre "intelligence" et "conscience"
Si l'on veut bien en effet parler non d'intelligence, mais de comportements intelligents,
la question du comportement intelligent d'un système (même informatisé) me semble pouvoir
être posée11 et mérite plus qu'un haussement d'épaules ou que les anathèmes de ceux qui
définissent l'intelligence comme "ce que ne font pas (encore) les ordinateurs".
Il faut sans doute dissocier la question de l'intelligence et celle de la conscience : vous
pouvez me montrer votre intelligence, jamais vous ne pourrez me prouver votre conscience ou
le fait que vous "pensez". Le seul être dont je sois certain qu'il est conscient et qu'il pense, c'est
moi. (et encore!!!).
8 Même si la description des traitements formalisés qui décrivent ce processus n'est pas simple; on
retrouve à nouveau le fossé entre le "faire" (immédiat, réflexe,...) et le "faire faire" (qui ne peut se baser
que sur des considérations de forme); c'est ce fossé qui constitue toute la difficulté de l'activité de
programmation.
9 Ce qu'on appelle le "logiciel", et dans le cas du jeu d'échec on en devine la taille et la complexité...
10 Un ordinateur "tout seul" ou "tout nu" (= sans logiciel) , ça n'existe pas; et comme ça n'existe pas, ça ne
peut forcément pas "être intelligent".
11 et l'a été depuis bien longtemps (avant même la naissance de l'ordinateur) par des gens comme Turing
qui considérait même la question plus choquante "Les machines peuvent-elles penser ?" (Cf. Hofstater
87, pp. 61-76).
expliquez votre réponse. Si vous pensez que le traitement est "assez aisément
formalisable", imaginez sans entrer dans le détail comment on pourrait s'y prendre .
a. Détecter dans un texte écrit en français les fautes d'orthographe d'usage ou les
fautes de frappe.
Informations en entrée : le texte dactylographié
Informations en sortie : le même texte avec les mots fautifs soulignés.
b. Corriger dans un texte français les fautes d'orthographe d'usage et les fautes de
frappe.
Informations en entrée : le texte dactylographié
Informations en sortie : le même texte avec les mots fautifs corrigés.
c. Calculer la dérivée d'une expression mathématique.
Informations en entrée : la fonction à dériver
Informations en sortie : la fonction dérivée
d. Détecter dans un texte écrit en français les fautes d'orthographe grammaticales.
Informations en entrée : le texte dactylographié
Informations en sortie : une liste des erreurs détectées avec les mots du texte
original qui sont en cause.
e. Fournir pour n'importe quel mot français une liste des traductions anglaises
possibles.
Informations en entrée : un mot français
Informations en sortie : une liste de mots anglais constituant des traductions
possibles du mot fourni.
2. Pouvez vous donner un exemple de traitement formaliste d'un texte qui apporte
certaines "connaissances" sur ce texte.
3. Que pensez-vous de la définition formelle suivante d'un "mot" ?
C'est une suite non vide de caractères qui
- commence le texte ou est précédé d'un caractère délimiteur
- termine le texte ou est suivi d'un caractère délimiteur
- ne contient aucun caractère délimiteur.
Les caractères délimiteurs sont les suivants : ".?!:;,)( -" et l'espace et les guillemets.
Pouvez-vous trouver des exemples de mots (au sens où nous l'entendons
habituellement) qui échappent à cette définition et, réciproquement, des exemples de
"mots" au sens de la définition ci-dessus qui ne sont pas des mots au sens habituel ?
4. Soit le petit jeu "formel" suivant : 12
On va écrire des expressions formelles qui vont seulement utiliser les trois symboles o,
P et G.. Parmi toutes les configurations possibles, nous en distinguons que nous
appellerons "Axiomes". Ce sont toutes les configurations du type
xPoGxo
où x n'est composé que de symboles o.
3.1 Introduction
Nous savons à présent que les traitements permis par l'ordinateur auront toujours un
caractère formel (ou formaliste) et que dès lors le mot "information" y prendra un sens très
particulier.
Il reste cependant à dire sous quelle forme les diverses informations devront être
"écrites" pour être acceptable par l'ordinateur. Sous quelle forme l'ordinateur accepte-t-il un
texte, une image, des sons,...?
Ce que nous allons à présent découvrir c'est que
3.2 Codage
Nous sommes tellement accoutumés à employer les signes qui constituent notre
langage écrit que nous n'imaginons plus qu'il s'agit là d'un code1. Ainsi, vous êtes actuellement
en train de lire ces quelques lignes, et de décoder (sans en être vraiment conscient) leur
contenu. Notez qu'ici le mot "décoder" est essentiellement employé dans le sens de
"comprendre". Cette lecture-décodage ne vous demande d'ailleurs pratiquement aucun effort.
C'est seulement si subitement vous vous trouvez face au "texte"
✢✲✡✶✯✌ ✶✯✵✳ ✥✴✥✳ ✡✲✲✩✶✥✳ ✡ ✬✩✲✥ ✣✥ ✰✥✴✩✴ ✴✥✸✴✥ que ce dernier
va sans doute vous faire sursauter. Il y a là une succession de signes qui n'ont aucune
signification, aucun sens pour vous. C'est seulement si je vous indiquais le système de codage
employé que, en associant à chaque signe un autre signe -habituel-, vous reconstitueriez, sous
une autre forme le message codé, forme à laquelle vous seriez capable d'associer un sens.
Notons que nous nous retrouvons à nouveau aux prises avec des termes difficiles
comme signe (ou symbole), comme sens (ou signification).
Pourriez vous trouver des informations qui se présentent sous plusieurs formes
? différentes, mais en dessous desquelles nous identifions pourtant la même
information ?
Une même information peut souvent se présenter sous des formes diverses. Ainsi,
1 Code : système de symboles destiné à représenter et à transmettre une information. (Le Petit Robert,
1993)
où nous codons sous forme écrite des sons qui parviennent à nos oreilles2; ou encore de
l'écriture en chiffres d'un nombre écrit en toutes lettres.3
La situation est plus délicate lorsque le système de codage est inaccoutumé : il nous
faut alors patiemment apprendre et exercer le système inhabituel, jusqu'à ce qu'à nouveau nous
en ayons intégré les règles. Un bel exemple en est l'alphabet morse dont les débutants
déchiffrent péniblement les messages lettre après lettre et que les experts sont capables de
"lire" presque couramment.
En tant qu'être humain, nous parlerons évidemment plus volontiers de code ou de
codage lorsque nous n'avons pas encore assimilé (par apprentissage) le système de
représentation en question.
Notons que les quelques lignes qui précèdent posent plus de questions qu'elles
n'apportent de réponses. Et ceci est lié à l'éternel débat, réveillé par l'informatique, entre forme
et sens. Ce sont ces questions qui sont au coeur de disciplines comme la linguistique ou la
sémiologie (même si l'on y parle plutôt de "signifiant" (forme) et "signifié" (sens)). Je ne
souhaite pas ici prolonger ce débat, mais il est évident que des questions comme les suivantes
sont au coeur de l'informatique :
- Puisque "4" et "quatre" représentent ou évoquent pour nous (êtres humains parlant
français) la même chose, quelle peut bien être cette chose ? (Notons que le fait d'écrire
"information" au lieu de "chose", même si elle montre que cette question est au coeur
de l'informatique, ne change rien à la question).
- Est-ce que ce que nous nommons sens ou signification est autre chose qu'une forme
particulière au sein de notre cerveau, qu'une certaine configuration de circuits
neuronaux ?
On est évidemment loin de la technique, des RAM et des MegaBytes avec ce type de
problématique. Certains trouveront sans doute ces questions sans intérêt; pourtant l'ambition
de l'informatique n'est elle pas de formaliser la plupart des traitements dont nous sommes
capables : lire, écrire un texte sous la dictée, reconnaître un visage au milieu d'une centaine
d'autres,...
Pour qu'une information 4(ou qu'un ensemble d'informations) soit acceptable par
l'ordinateur, il faut que nous puissions la coder, la représenter sous la forme d'une série finie de
nombres entiers. On verra dans la suite qu'en réalité ces nombres eux-mêmes sont écrits en
2 Avec les anecdotes bien connues lorsque l'information n'est pas reconnue donc mal transcrite. Lisez
donc à haute voix la phrase suivante (que je transcris phonétiquement) puis tentez de l'écrire : "Lai poul
cétai sôvé dai kon leur avai ouvair la porte."
3 J'aime beaucoup cet exemple car j'ai encore très vivaces dans la mémoire les souvenirs des exercices de
transcription que nous faisions en 3ème ou 4ème primaire, où il s'agissait d'écrire en chiffres des
nombres donnés en lettre et réciproquement. Ainsi, si aujourd'hui "vingt-deux" et "22" représentent la
même information, cela résulte d'un apprentissage que nous avons tous mené dans notre enfance.
4 En laissant à ce mot tout le flou nécessaire...
binaire (et non en décimal), mais cela est sans importance pour l'instant. Nous allons donc à
présent passer en revue un certain nombre d'informations données sous des formes qui nous
sont habituelles et décider si ces informations sont codables sous forme de séries de nombres
entiers et proposer un tel système de codage.
Pourriez vous imaginer un codage en une série finie de nombres entiers pour l'
? information suivante :
BONJOUR
A quel ensemble d'informations votre système de codage est-il applicable ?
Pourrait-on l'étendre ?
Il est vraiment fort simple de découvrir une première ébauche de solution à la petite
question posée ci-dessus. Il suffit évidemment d'associer lettres majuscules et chiffres
A ⇔ 1
B ⇔ 2
C ⇔ 3
... ... ...
Z ⇔ 26
Ainsi, le code peut-il se décrire par la correspondance :
Ensemble des lettres → Ensemble des entiers (de 1 à 26)
majuscules
une lettre majuscule → son numéro d'ordre dans l'alphabet
et dès lors
BONJOUR se coderait par 2 15 14 10 15 21 18
Mais on devine immédiatement que, comme seules les majuscules sont codables dans ce
système, il ne serait pas possible de coder les informations suivantes :
COMMENT VAS TU ?
(puisqu'on n'a pas associé de nombre à l'espace et au point d'interrogation)
et encore moins
J'hésite; peut-être, à parler d'INFORMATION !
puisque les lettres minuscules, les minuscules accentuées, les signes de ponctuation ne sont pas
codés (du moins dans le code proposé).
Il est pourtant facile d'imaginer des extensions possibles pour que chacun des caractères
habituellement utilisés trouve un numéro. Ceci a donné lieu à plusieurs systèmes de codage
dont les plus connus sont le système ASCII et le système ANSI.
3.5.1 Le code ASCII
Primitivement, ce code (qui signifie American Standard Code for Information
Interchange) (Code américain standard pour l'échange d'informations) permettait de
représenter 128 caractères différents.
Les caractères qui nous sont habituels commencent au numéro 32. Ainsi, à l'espace
correspond l'entier 32. Les caractères-chiffres reçoivent les numéros entre 48 et 57. A a le code
65 et a le code 97.
esp 32 0 48 A 65 [ 91 a 97 { 123
! 33 1 49 B 66 \ 92 b 98 | 124
" 34 2 50 C 67 ] 93 c 99 } 125
# 35 3 51 D 68 ^ 94 d 100 ~ 126
$ 36 4 52 E 69 _ 95 e 101
% 37 5 53 F 70 ` 96 f 102
& 38 6 54 G 71 g 103
' 39 7 55 H 72 h 104
( 40 8 56 I 73 i 105
) 41 9 57 J 74 j 106
* 42 K 75 k 107
+ 43 L 76 l 108
, 44 : 58 M 77 m 109
- 45 ; 59 N 78 n 110
. 46 < 60 O 79 o 111
/ 47 = 61 P 80 p 112
> 62 Q 81 q 113
? 63 R 82 r 114
@ 64 S 83 s 115
T 84 t 116
U 85 u 117
V 86 v 118
W 87 w 119
X 88 x 120
Y 89 y 121
Z 90 z 122
Figure 3-1 : le code ASCII
On est évidemment en droit de se poser deux questions :
- pourquoi les entiers de 0 à 31 ne sont-ils pas repris pour coder certains des caractères ?
- qu'en est-il de toutes les lettres accentuées (é,à,è,ê,ü,...) et autre ç ?
1. Les premiers entiers positifs disponibles correspondait (et correspondent encore) à des
caractères spéciaux : les caractères de contrôle. Ces derniers datent des débuts de
l'informatique et nous héritons là, comme souvent, de choix faits dans le passé et dont
la pertinence n'est plus aujourd'hui évidente.
Ces caractères de contrôle servent à provoquer des réactions particulières des systèmes
informatiques. Ainsi, fort souvent le caractère codé 7 provoque un bip sonore. Le
caractère codé 13 est celui correspondant à l'appui sur la touche Entrée (aussi appelée
Return) et marquée sur le clavier par le symbole ↵ (on appelle souvent ce caractère
"retour du chariot", en anglais "carriage return" par analogie avec le "retour du chariot"
des machines à écrire). De même, on le découvrira sans la suite, ces caractères de
contrôle sont employés par exemple par l'ordinateur pour signaler aux imprimantes des
changements à effectuer lors de l'impression : passage à des caractères italiques, gras,...
alors que les caractères habituels sont simplement imprimés.
2. Le code ASCII primitif permettait de coder les 128 caractères nécessaires à l'écriture
des textes anglais (qui ne connaissent pas les lettres accentuées). Face aux besoins des
utilisateurs non anglophones, le nombre de caractères codés a été étendu : les entiers de
128 à 255 permettant de coder 128 caractères supplémentaires pour donner ce qu'on
appelle le code ASCII étendu :
Ç 128 û 150 ¼ 172 194 216 238
ü 129 ù 151 ¡ 173 195
217 239
é 130 ÿ 152 « 174 196 218 240
â 131 Ö 153 » 175 197 219 ± 241
ä 132 Ü 154 176 198
220 242
à 133 ¢ 155 177 199 221 243
å 134 £ 156 178 200 222 " 244
ç 135 ¥ 157 179 201 ! 223 # 245
ê 136 158 180 202 224 ÷ 246
ë 137 ƒ 159 181 203 ß 225 $ 247
è 138 á 160 182 204 226 ° 248
ï 139 í 161 183 205 227 % 249
î 140 ó 162 & 184 , 206 228 · 250
ì 141 ú 163 ' 185 - 207 229 2 251
Ä 142 ñ 164 ( 186 . 208 µ 230 3 252
Å 143 Ñ 165 ) 187 / 209 231 ² 253
É 144 ª 166 * 188 0 210 232 4 254
æ 145 º 167 + 189 1 211 233 255
5 Le logiciel, ce sont les programmes, les "indications de traitement" dont il est question dans la définition
proposée au début. C'est le logiciel qui détermine le comportement de l'ordinateur lorsqu'il reçoit un
"caractère".
6 toujours est un mot à éviter lorsqu'on tente de décrire des règles de comportement de l'ordinateur. Mais
c'est ce dernier terme "ordinateur" qui employé seul n'a pas de sens : le seul mot pertinent est "système
informatique" qui englobe alors l'ordinateur et le programme qui est en train de le contrôler. Aucune
règle n'est valable pour "l'ordinateur", on peut seulement donner des règles pour "tel système".
?
Pourquoi, pensez-vous, les nombres de caractères codés dans les différents systèmes
décrits (128 pour ASCII, 256 pour ASCII étendu, 65536 pour UNICODE) sont-ils
ce qu'ils sont plutôt que 100, 500 ou 50.000 ?
Si nous récapitulons la démarche suivie dans le cas du codage de texte, nous constatons
que
- nous avons scindé, découpé l'information à coder en une série de constituants
élémentaires (dans notre cas les caractères qui composeront les morceaux de textes)
- nous avons associé un nombre à chacun des ces constituants élémentaires, des
constituants différents étant bien entendu représentés par des nombres différents et
chaque constituant se voyant associer un nombre;
- une information étant alors une suite de ces constituants (un texte est une suite de
caractères), nous la codons grâce à la suite des nombres correspondants.
Deux remarques à ce stade :
- Remarquez à quel point cette écriture en nombres constitue bien ce que nous appelons
un codage étant donné notre difficulté à déchiffrer le message correspondant, à le
décoder. Décoder signifie d'ailleurs pour nous, passer de l'écriture "en nombres" à
l'écriture habituelle "en caractères" qui va prendre du sens. Combien de temps,
d'apprentissage et d'exercices nous faudrait-il pour devenir capable de lire un message
"en nombres" et à ce qu'il prenne immédiatement un sens, sans repasser par l'écriture
"en caractères".
- Il est important de percevoir que le rôle de ce que nous appelons en informatique un
périphérique d'entrée 7est d'automatiser au maximum le passage d'une forme qui nous
est familière ("BONJOUR") à la forme que réclame l'ordinateur (une suite de nombres
entiers). Ainsi, pour le codage du texte, le clavier (et l'intervention de programmes
logés dans l'unité centrale) permet ce codage. Notons aussi que l'automatisation du
processus n'est que très partielle puisqu'il faut toujours un être humain face à ce clavier
pour transformer des mots écrits sur une feuille de papier ou des sons en frappes sur
des touches qui activeront le codage8.
7 Un périphérique d'entrée est un des canaux par lequel l'ordinateur reçoit des informations venues de
l'extérieur. Ainsi le clavier, la souris, le scanner,... sont des périphériques d'entrée. Les périphériques de
sortie sont les canaux à travers lesquels l'ordinateur nous rend les informations après traitement, comme
l'écran ou l'imprimante.
8 Cf. plus loin d'autres manières de s'en sortir...
?
Voyez-vous une possibilité (ou des possibilités différentes) de coder (sous forme d'une
série d'entiers) n'importe quel nombre comportant une virgule (composé dès lors d'une
partie "entière" et d'une partie "décimale", comme -23,85 ou 0,067") ?
Nous pourrions inventer bien des manières de coder les nombres et cela en fonction de
la manière dont nous allons morceler l'information "nombre" en constituants élémentaires.
Ainsi, nous pouvons voir "236", comme un "mot", une suite de caractères et la coder
comme telle : nous sommes alors ramené au cas précédent. Ainsi dans le texte "ils étaient 236
présents", "236" est vu simplement comme une suite de caractères et sera codé en utilisant 3
nombres entiers (par exemple à travers le code ASCII. "236" est dans ce cas un mot et non un
nombre.
Mais il est de nombreux cas où 236 doit être considéré comme un nombre entier et
devra pouvoir être manipulé comme tel (il faudra pouvoir le faire additionner ou soustraire d'un
autre). Il est alors indispensable que 236 soit codé comme un entier.
?
Comment, lorsque nous frappons 236 au clavier, l'ordinateur peut-il savoir qu'il s'agit
d'un mot (à coder en accord avec le code ASCII) ou qu'il s'agit d'un nombre entier (à
coder comme tel) ?
Le plus simple pour les entiers, puisque nous devons les coder sous la forme d'entiers
est évidemment de les laisser tels quels; le codage de 236 est bêtement 236.9
En ce qui concerne les nombres avec une virgule, de nombreuses solutions sont
envisageables :
- On peut les voir comme des "mots", on les code alors comme ces derniers par la suite
des codes des caractères les constituant.
- Si on souhaite les considérer comme des nombres, on pourrait imaginer de scinder ces
nombres en deux constituants : la partie entière d'une part et la partie décimale d'autre
part. Ainsi le nombre -23,85 se coderait par la suite des deux entiers -23 et 85. On
devine cependant immédiatement la difficulté de ce type de codage : comment coderait-
on -23,085, ou -23, 0085 ? étant entendu que, vu comme des nombres 85, 085 ou 0085
sont en réalité le même nombre (les deux dernières écritures étant d'ailleurs
inhabituelles).
Si l'on persiste dans cette voie, on devine qu'il faut en quelque sorte indiquer le rang de
la partie décimale (s'agit-il de 85 centièmes, de 85 millièmes, ... ?).On coderait par
exemple :
-23,85 ⇔ -23 85 2 (= 2 chiffres après la virgule)
9 La question se pose évidemment de savoir comment le système informatique "comprend" lorsque nous
frappons 236 au clavier qu'il s'agit du mot constitué des 3 caractères 2, 3 et 6 (qui seront alors codés en
accord avec le code ASCII) ou bien qu'il s'agit de l'entier 236. Comme toujours, la réponse à cette
question consiste simplement à signaler qu'un système informatique, ce n'est pas l'ordinateur "tout nu",
mais plutôt l'ordinateur équipé de tel logiciel précis. C'est le logiciel qui indique alors si 236 doit être
codé comme une suite de 3 caractères ou plutôt comme un nombre entier.
?
Avec ce système de codage, pourriez-vous dire quels sont les nombres correspondants
aux codes suivants :
0 3 2
-12 13 4
22 123 2 ?
?
Avec ce système de codage, pourriez-vous dire quels sont les nombres correspondants
aux codes suivants :
1056 0
1056 3
1056 -1
?
Imaginez que vous disposiez d'une feuille de papier portant le dessin suivant :
On remarque que les informations portées par cette feuille sont en noir et blanc et sont
constituées de portions de texte "imprimé" ou "manuscrit", de caricatures, de dessins, ...
Il est sans doute plus malaisé ici de proposer une stratégie. Le principe en est pourtant
bien connu : c'est celui du tramage; on va en quelque sorte poser une grille (aussi serrée que
possible) sur l'image. Deux nombres seront d'emblée important pour décrire cette grille : le
nombre de petits carrés en largeur et ce même nombre en hauteur. Plus ces nombres sont
élevés, plus la surface de chaque petit carré est petite (et plus le dessin tramé sera proche de
l'original). Cela fait, on examinera l'intérieur de chacun de ces petits carrés avec un critère qui
permette de décider s'il doit être considéré comme noir ou comme blanc. On obtient donc pour
toute l'image un quadrillage comme celui montré ci-dessous pour une partie :
10 Dans le Petit Robert, discret est défini comme "qui ne peut prendre qu'un nombre fini ou dénombrable
de valeurs". Dans (Politis 83), on trouve la définition "qui désigne ou représente des données sous forme
d'éléments distincts ou séparés tels que des caractères ou des grandeurs physiques ne pouvant prendre
que des valeurs distinctes ou séparées".
11 Encore que, on le verra dans la suite, les tailles possibles de la mantisse et de l'exposant seront limitées
et que, dès lors, il arrivera qu'un nombre comportant trop de chiffres significatifs soit tronqué lors de son
codage en machine.
C'est un codage de ce type qui est sous-jacent au travail de la plupart des logiciels de
traitement de dessin de type "paint" : ils agissent sur des représentations discrétisées
des graphiques manipulés.
Une représentation (ou un codage) bitmap d'un dessin est d'un constituée d'un nuage de
points, chacun de ces points (ou plutôt de ces minuscules carrés) s'appelant un pixel (picture
element).
?
Si les deux premiers nombres du codage suivant donnent le nombre de pixels en
largeur et en hauteur et si les nombres qui suivent décrivent la couleur de chaque pixel
(0 pour blanc et 1 pour noir), pourriez vous reconstituer le dessin représenté ?
13 8
00000010000000000011100000000011011000000011000110000011111111100011
000000011011000000000110000000000000
(Ne passez cependant pas trop de temps à ce petit jeu !)
?
Imaginez que vous disposiez d'une feuille de papier portant le dessin suivant :
?
Voyez-vous cependant une situation où l'on ait fait l'effort de doter l'ordinateur d'un
logiciel qui le rende capable de reconnaître au sein d'un "graphique" certains "objets" ?
Il paraît en tout cas évident qu'il faut avoir décrit préalablement au système les objets
ou les types d'objets qu'on peut alors lui demander de reconnaître ou de détecter au sein
d'un graphique. Il reste alors à le rendre capable d'y détecter les objets (les formes)
concernés : c'est tout le problème de la reconnaissance des formes.
- Si donc ce type de codage ne permet pas aisément (= automatiquement) de passer d'une
feuille de papier portant un graphique à une représentation où les nombres codent des
objets et leurs caractéristiques, c'est pourtant lui qui est au coeur des logiciels
graphiques de type "draw". Ces logiciels permettent à l'utilisateur, le plus souvent grâce
à la souris (ou à un autre dispositif de pointage), de créer des objets (formes
géométriques, segments,...) pré définis (au sein du logiciel). Ces objets sont dans ce cas
codés d'après leur genre et leurs caractéristiques, selon la méthode envisagée.
3.7.5 La reconnaissance optique des caractères
?
Imaginez que vous disposiez d'une feuille de papier portant le texte suivant :
BONJOUR
COMMENT CA VA ?
Il est pourtant un cas où une reconnaissance automatique d'objets (et le type de codage
vectorisé correspondant) est utilisé : c'est celui de la reconnaissance automatique des
caractères. Ainsi, pour une feuille du type de celle portant les quelques mots ci-dessus, le texte
va dans un premier temps être scanné et donc la feuille sera codée en une succession de points
noirs et de points blancs (codage bitmap) comme ci-dessous.
12 En se rappelant bien que ce nuage de points est en réalité une suite de nombres...
?
Pourriez vous faire digérer à votre ordinateur les 5 premières secondes du premier
mouvement du concerto n° 23 pour piano de Mozart ?
N'oubliez pas qu'une fois de plus ces 5 secondes de musique devront être transformées
en une série finie de nombres entiers
3. Le signal électrique provoque alors des mouvements d'un stylet graveur qui traduit les
oscillations électriques en mouvements et donc en une gravure plus ou moins profonde
d'un sillon dans une matrice qui servira à produire les disques.
4. Chaque disque porte donc un très long sillon en spirale et dont les caractéristiques
reflètent finalement les vibrations sonores qui ont été à l'origine de tout le processus.
5. A l'inverse, un électrophone est essentiellement doté d'une aiguille de lecture dont les
mouvements, engendré par le sillon du disque, sont transformés en signal électrique.
6. Ce signal électrique est amplifié et met en mouvement la membrane d'un haut-parleur.
Les oscillations de cette membrane mettent l'air en mouvement et font naître une
vibration acoustique analogue à celle qui avait donné naissance à tout le processus.
Il faut remarquer que dans les tout premiers dispositifs d'enregistrement, le micro était
remplacé par un énorme pavillon, ce dernier accolé à une membrane canalisait les oscillations
acoustiques et les mouvements de la membrane se transmettaient à un stylet graveur qui lui
était solidaire et qui gravait un sillon dans un cylindre de cire en rotation. Il n'y avait donc pas
de signal électrique engendré par le processus. Il suffisait inversement de placer le stylet qui
jouait alors le rôle de "lecteur" sur le sillon ainsi gravé et de remettre le cylindre en rotation
pour que la membrane vibre et engendre des oscillations sonores amplifiées par le pavillon.
Si l'on veut que l'ordinateur puisse digérer les sons, il est indispensable qu'à un moment
du processus, il y ait codage sous la forme d'une série finie de nombres. C'est le signal
électrique qui va être discrétisé et cette discrétisation donnera naissance aux nombres
souhaités.
Le début du processus, consiste à nouveau en la transformation des oscillations
acoustiques en un signal électrique.
13 Comme on s'en doute, cette présentation simplifiée ne s'attache qu'aux principes mis en oeuvre sans
entrer dans les détails "techniques". Il faut être conscient cependant que ce sont ces "détails" qui font la
différence entre de belles idées et une technologie efficace.
Je me contenterai ici de reproduire un article paru dans le journal "Le Soir" et daté du
samedi 17 septembre 1994.
Un four qui a du nez
Il est particulièrement difficile , lors de la cuisson dans un four à micro-ondes de savoir
avec précision quand le met est parfaitement cuit. En raison de la technique très
particulière de ces fours, en effet, tout y est question de seconde. D'où l'idée des
ingénieurs japonais de tenter d'automatiser l'évaluation de cette cuisson. Un des
fabricants nippons, Sharp, estime y être parvenu en plaçant dans l'un de ses fours un
"nez" électronique qui détecte l'odeur émise par le plat et en confie l'analyse à un
véritable ordinateur doté de ce que l'on appelle une logique floue. C'est ce système
"intelligent" qui est donc chargé de déterminer le moment exact où la viande est à point
et le haricot encore croquant. A vérifier à l'usage tout de même...
La seule conclusion à en tirer, c'est qu'en tout cas que les odeurs sont devenues des
nombres.
Nous venons de montrer que pour que des information puissent être reçues puis traitées
par un ordinateur, il était nécessaire de trouver une représentation de ces informations sous la
forme d'une série finie de nombres entiers.
Deux cas peuvent se présenter :
1. Les informations considérées sont en nombre fini (ce qui est assez rare) ou ces
informations sont constituées d'un assemblage d'informations élémentaires qui sont,
elles, en nombre fini. Ces informations élémentaires constituent en quelque sorte un
alphabet dont la succession des signes construit les informations considérées. C'est le
cas des textes (français) : même si ces textes sont variés et multiples, ils sont obtenus
par juxtaposition des symboles d'un alphabet, les caractères.
Il suffit alors de coder par des entiers ces symboles élémentaires (ce qui est toujours
possible puisqu'ils sont en nombre fini). Le codage d'une suite de ces symboles
élémentaires se fait alors simplement en juxtaposant les nombres qui codent chacun des
symboles constitutifs.
2. S'il n'est pas possible de mettre en évidence aisément un alphabet qui soit tel que les
informations considérées puissent être considérées comme formées d'un assemblage fini
des éléments de cet alphabet, il est alors nécessaire de passer par un processus de
discrétisation qui va approximer les informations en cause.
On va donc remplacer les informations initiales par d'autres, caractérisées par le fait
qu'on peut y mettre en évidence un nombre fini de constituants élémentaires : ce sont
ces derniers qui constitueront les symboles de l'alphabet à considérer.
?
Dans le cas d'une image en noir et blanc, quels sont les constituants de l'alphabet
élémentaire dont la juxtaposition permet de décrire l'image discrétisée.
Ainsi, dans le cas d'une image en noir et blanc, après discrétisation les deux seuls
symboles carré noir et carré blanc suffisent par juxtaposition pour reconstituer l'image
tramée. L'alphabet est donc ici constitué des deux symboles et ; et il suffit de coder
ces derniers par des nombres entiers pour être capable de coder l'image discrétisée tout
entière.
Ajoutons enfin qu'il est impératif que le processus de discrétisation et de codage soit,
autant que possible, pris en charge par le système lui-même et des périphériques spécialisés. Il
y a évidemment face à une dictée (orale) un monde entre la solution consistant à faire frapper
le texte au clavier par un être humain et la création du même texte par l'ordinateur équipé d'un
système de reconnaissance vocale.
Les codages numériques dont nous venons de parler dans le cas de l'obligation de faire
digérer des informations de diverses natures par l'ordinateur, constituent un fait majeur de
notre culture et de notre société : nous passons d'une civilisation de l'analogique à une
civilisation du numérique.
Dans la présentation même des informations, on notera le passage de
à
Figure 3-17 : représentations analogique et numérique
La mesure même du temps qui passe (des durées) a été analogique : le fuite du temps
était analogue au passage du sable dans un sablier ou à celui de l'eau dans une clepsydre. Il se
fait aujourd'hui en comptant les oscillations d'un cristal.
J'ai évoqué ci-dessus le passage des vieux disques 33 tours vinyles (où le tracé du sillon
était analogue aux oscillations sonores qui leur avaient donné naissance) au disque compact
(où c'est une représentation de nombres que l'on peut trouver le long du sillon).
3.13 Questions
4. Existe-t-il à votre connaissance une manière de représenter les sons du langage parlé
sous forme écrite, donc de coder des sons par des signes écrits ?
5. Que proposeriez vous comme codage numérique d'une configuration quelconque du jeu
d'échec ? Pourriez-vous en proposer plusieurs ? Et pour le jeu de dame.
6. Que proposeriez vous comme codage numérique des différentes mains (constituées de
13 cartes) d'une donne au whist ?
4.1 Introduction
Nous savons à présent que les traitements permis par l'ordinateur auront toujours un
caractère formel (ou formaliste) et que dès lors le mot "information" y prendra un sens très
particulier.
La pseudo-définition donnée précédemment, insiste sur la nécessité d'indications de
traitements qui permettent et contrôlent le travail de traitement d'informations par l'ordinateur.
Nous pouvons dès lors énoncer un principe supplémentaire :
Informations Informations
reçues Traitements rendues
(Entrées) (Sorties)
Informations
consultées
peut se redessiner :
Informations Indications
consultées supplémentaires
ordinateur, mais toujours face à un système particulier ordinateur + logiciel, aux réactions
spécifiques1.
L'une des demandes les plus fréquemment formulées par les débutants (futurs utilisateurs)
est celle d'une initiation pratique (et rapide) aux "manipulations de base" de l'ordinateur :
quels sont les savoir faire élémentaires face à l'écran et au clavier ? en un mot, "comment
utiliser un ordinateur ?".
Le formateur est alors dans la position inconfortable du vendeur d'appareils électroménagers
face à un client qui souhaiterait être rapidement mis au courant des "manipulations de base"
de l'électroménager. Nous savons tous que "l'appareil électroménager" n'existe pas et que le
vendeur a intérêt à se faire préciser si la curiosité du client potentiel se porte plutôt sur les
lessiveuses ou les aspirateurs.
Il en va malheureusement de même de l'ordinateur. Le seul "objet" existant est toujours un
couple ordinateur-logiciel. Un ordinateur "nu" (= sans programme qui le gouverne) n'existe
pas et l'utilisateur n'a jamais à faire qu'à un tandem particulier "ordinateur-logiciel", les
comportements de ces couples pouvant être extrêmement divers. Ceci est d'autant plus
dissimulé que rien ne se modifie dans l'aspect physique du partenaire ordinateur des couples
évoqués : l'utilisateur a l'impression de garder la même "machine" en face de lui, alors même
que ce concept de machine "nue" n'est pas pertinent.
Notons au passage que cette réduction du système informatique (ordinateur + logiciel) à sa
seule composante matérielle est ce qui rend tellement choquantes des associations comme
"intelligence artificielle" ou des questions comme "l'ordinateur est-il intelligent ?". Si il y a
"intelligence" dans le comportement d'un système informatique, il faut redire que c'est dans la
partie logicielle qu'elle se trouve : elle sort du cerveau d'un homme qui a dû faire l'effort
d'objectiver, de formaliser et d'enclore dans un programme des traitements qui, lorsqu'ils
prennent le contrôle de l'ordinateur lui donnent un comportement plus ou moins "intelligent"
(Cf. plus haut). Dans le contexte des utilisations de systèmes informatiques, parler
d'ordinateur (seul) n'a tout bonnement aucun sens.
4.2.3 L'outil informatique n'existe pas
Par ailleurs, si la composante matérielle du système reste constante au travers des
utilisations, la composante logicielle, elle, est par nature extrêmement changeante et cela sans
que rien (ou peu de chose) ne signale ces modifications aux yeux de l'utilisateur. Si l'ordinateur
est la partie stable du système, il est aussi extraordinairement polygame : au cours d'une simple
session d'utilisation, c'est souvent à des dizaines de programmes différents que l'utilisateur aura
affaire.
L'outil informatique, au singulier, n'existe donc pas : ce sont des milliers d'outils
différents, avec leurs règles de fonctionnement propres et diverses, avec leurs champs
d'applications particuliers et leurs modes d'emploi singuliers qui existent.
Il y a d'ailleurs, avec des environnements comme Windows ou des systèmes comme ceux du
MacIntosh, une volonté de standardiser, sinon le mode d'emploi des logiciels, du moins la
représentation que l'utilisateur peut s'en faire à travers des interfaces semblables et des
menus similaires. Mais, même si le marteau et le tournevis ont à présent la même couleur, ils
restent des outils différents, pour faire des choses distinctes : il en est de même pour le
tableur et le logiciel de dessin.
Cette constatation a un corollaire important : les utilisations des systèmes informatiques
sont des univers sans règle stable : on ne peut pas parler des règles d'utilisation de l'outil
puisque il y a des outils, chacun avec ses règles particulières.
S'il est un mot à bannir du vocabulaire des utilisations de systèmes informatisés, c'est
bien le terme "toujours" : la même action (pression de touche, clic de la souris) ne produit pas
"toujours" les mêmes effets
Dans l'univers MS-DOS, l'appui simultané sur les touches Alt Ctrl et Del
produit (presque) "toujours" un réamorçage du système; ce n'est plus vrai sous
Windows; l'appui sur la touche F1 est souvent (pas "toujours") un appel à
l'aide; un double-clic sur le nom d'un fichier lance une application ou produit
un message d'erreur; ... Je pourrais ajouter des centaines d'exemples à la liste.
Je suis incapable d'en fournir un seul d'une action qui produise toujours le
même effet; sauf peut être l'action de retirer la prise de courant... et encore, il y
a les portables...
Combien de fois n'est-il pas arrivé qu'un utilisateur novice, qui achevait
d'utiliser un éditeur ou un système de traitement de texte et se retrouvait aux
prises avec MS-DOS, m'ait appelé pour tenter d'effacer les lignes "syntax
error" ou "file not found" apparues suite à des manipulations inadéquates du
système d'exploitation. L'instant d'avant, il pouvait à sa guise "remonter" dans
le texte affiché à l'écran; quelques secondes plus tard sur le même écran
l'opération est impossible et n'a plus de sens. En effet, l'écran MS-DOS retrace
une histoire , celle des échanges entre l'utilisateur et le système; par contre,
c'est un espace, celui du texte modifiable, dans un traitement de texte. Accéder
à une ligne supérieure pour la transformer, cela a du sens dans un traitement
de texte, où la métaphore spatiale s'applique à l'écran, mais cela n'a pas de sens
en MS-DOS où l'écran est une suite d'instants, une histoire; cela reviendrait à
vouloir modifier le passé.
Programmer
c'est
FAIRE FAIRE
Principe 4-3 : programmer, c'est faire faire
L'ordinateur, qui comme ci-dessus ne peut être "nu", sera, dans ce contexte de la
programmation, perçu non comme un instrument ou un outil qui va aider à l'accomplissement
d'un travail, mais plutôt comme un exécutant qui sera chargé d'effectuer une tâche. Il est donc
bien plus ressenti comme un obstacle que comme une aide : il faut tout lui dire de la manière de
mener à bien la tâche concernée.
Nous le verrons dans la suite, c'est l'ordinateur équipé d'un langage de programmation qui est
l'interlocuteur du programmeur. Ce langage de programmation va permettre d'exprimer les
indications nécessaires aux traitements, de concevoir et de rédiger les programmes
souhaités.
Ainsi, le schéma qui est au coeur de l'activité de programmation est le suivant :
il exécutera
Ordinateur =
Programmeur Tâche
Exécutant
marche à suivre
Figure 4-2 : schéma de l'activité de programmation
Dès lors, du point de vue du programmeur :
ordinateur
+ = executant
langage de programmation
et
Programmer, c'est face à une tâche formalisable de traitement d'informations (qu'il
s'agira de préciser),
face à un exécutant aux capacités limitées mais connues,
concevoir et rédiger une marche à suivre qui fera faire la tâche par
l'exécutant.
Nous avons vu que le schéma proposé page 3 (Figure 2-1 : schéma d'un traitement
d'informations) qui préside à tout traitement d'information se particularise dans le cas d'un
traitement opéré par un système informatique sous la forme proposée page 58 (Figure 4-
1 :schéma d'un traitement d'informations par un système informatique).
Ce schéma va s'incarner en une réalisation matérielle qui constituera en quelque sorte
l'architecture générale d'un système informatique.
C'est à dessein que nous parlerons désormais de "système" informatique et non plus
d'ordinateur, puisque, comme nous le savons, "l'ordinateur n'existe pas" (Cf. le principe de la
page 58).
Cinq composants essentiels peuvent être mis en évidence :
Unité centrale
Périphériques Périphériques
Mémoire
d'entrée Processeur de sortie
centrale
Liaisons
Mémoire
externe
• D'abord, le centre du système, l'unité centrale. C'est là que les traitements sur les
données sont effectués, sur base des indications de traitement qui y sont également
présentes.
• Ensuite, les périphériques d'entrée : leur rôle est de transformer une information qui se
présente sous une forme qui nous est habituelle en une série finie d'entiers, acceptable
par l'ordinateur (voir le principe énoncé page 16). Un périphérique d'entrée a donc pour
rôle de coder l'information sous une forme acceptable par l'unité centrale.
• Egalement les périphériques de sortie : leur rôle est de transformer des informations
telles que l'ordinateur les manipule (série finie d'entiers) en une forme qui nous soit
davantage habituelle. Un périphérique de sortie a donc pour rôle de décoder
l'information manipulée par l'ordinateur (des nombres entiers) en une forme habituelle
pour nous, êtres humains.
• Enfin, la mémoire externe (on dit aussi mémoire de masse, ou mémoire de stockage à
long terme) : elle mémorise à la fois des informations (données) susceptibles d'être
traitées par l'ordinateur et des indications de traitement (programmes) supplémentaires.
On utilise souvent comme synonyme les termes "information" et "donnée" pour désigner ce
que manipule l'ordinateur. Il s'agit bien entendu, dans tous les cas, d'une forme codée de ce
que, entre êtres humains, nous appelons "information" ou "donnée".
• Et pour terminer, le cas échéant, des liaisons entre le système considéré et d'autres
systèmes informatiques : périphériques de communication, connexion à un réseau,...
Nous reviendrons dans la suite sur divers composants de ce système, mais nous allons
dans un premier temps, nous focaliser sur l'unité centrale et procéder en quelques sortes à des
zooms successifs qui nous amèneront à examiner avec de plus en plus de détails de quoi est
faite cette unité centrale.
Principe
Constatation
TOUT ce que fait un
ordinateur, il le fait Dès son branchement,
gouverné par un l'ordinateur "fait des
programme choses"
Conclusion
Un programme fait
agir l'ordinateur
dès le début
Principe
Pour qu'un programme
puisse faire agir
l'ordinateur il doit être
en mémoire centrale
Conclusion
Ce programme doit rester
en mémoire centrale et y
persister même lorsque
l'ordinateur n'est pas
branché
Conclusion
Une zone de la mémoire
centrale doit garder les
informations qui y sont
contenues même sans
alimentation électrique
Conclusion
Il existe de la
mémoire morte
• Son contenu ne disparaît jamais, même lorsque l'ordinateur n'est plus alimenté en
courant électrique; c'est en quelque sorte une zone de mémoire dont le contenu est
gardé en permanence, une zone de mémoire "increvable".
On notera au passage le paradoxe qui veut que la mémoire qui reste en quelque sorte
toujours "vivante" (en me pardonnant cet abus) s'appelle la mémoire "morte".
• Pendant le travail de l'ordinateur, le système peut évidemment amener au processeur
des instructions et des données présentes dans cette mémoire morte. Par contre, jamais
cette zone de mémoire ne verra son contenu modifié lors du travail. Il s'agit en quelque
sorte d'une mémoire "intouchable". Le processeur peut y lire des instructions et des
données, jamais il ne pourra y écrire quoi que ce soit. En anglais cette mémoire est
d'ailleurs désignée par l'acronyme ROM, signifiant "Read Only Memory" (= mémoire
dont le contenu peut seulement être lu (par le processeur)).
On notera ici l'emploi consacré par la tradition informatique des termes lire et écrire. Lire veut
dire que le processeur copie en son sein une instruction ou une donnée présente en mémoire
centrale; notons au passage que cette lecture ne vide pas la ou les cellules de la mémoire
contenant ce qui a été lu : c'est toujours une copie que le processeur saisit. Ecrire, à l'inverse,
signifie que le processeur modifie l'une ou l'autre cellule de la mémoire en y plaçant une
donnée ou une instruction qui y remplace l'ancien contenu.
LIRE
Mémoire
Processeur
Copie de la Copie de la
Donnée
donnée donnée
ECRIRE
Mémoire
Processeur
Copie de la
Donnée Nouvelle donnée
donnée
1 Le terme Random ne sera pas davantage explicité; dans l'acronyme RAM, c'est le terme Access qu'il faut
souligner.
2 Voir ci-après pour une description plus complète des mémoires de masse (mémoires externes) :
disquettes, disques durs, CD-ROM, cassettes, …
On pourrait peut-être proposer une solution où ces données soient conservées sur les
mémoires externes (comme par exemple le disque dur) et chargées (= amenées) en RAM lors
de l'opération de bootstrapping. Cette solution ne résiste cependant pas à la constatation que
cette opération (qui consiste au démarrage à aller chercher sur les mémoires de masse des
programmes et données essentielles à la poursuite du travail) nécessite que les caractéristiques
de ces mémoires externes soient connues, avant de pouvoir y accéder.
En d'autres termes, avant même d'aller pêcher des informations sur le disque dur, le
système doit connaître le type et les caractéristiques de ce disque dur : ces caractéristiques ne
peuvent donc être portées par le disque : elles devraient être disponibles avant même d'avoir
été lues.
La solution consiste à alimenter une petite portion de la mémoire vive (modifiable) par
une batterie ou une pile électriques qui assure la "survie" des informations qui y sont
mémorisées, même en l'absence débranchement sur le réseau (= quand l'ordinateur est "éteint").
C'est un type particulier de mémoire vive, la CMOS, caractérisée par le fait qu'elle ne
nécessite qu'une faible alimentation électrique pour conserver les données
(modifiables) mémorisées qui est utilisée dans ce cas.
Il est essentiel d'avoir compris qu'il s'agit là d'un modèle, pratique et efficace pour parler de la
structure de la mémoire centrale, mais il ne faut pas confondre ce modèle avec la réalité
physique dont il rend compte : il n'y a pas de "case" dans un ordinateur, ni de "0" ou de "1".
Un ordinateur, c'est, en fin de compte du sable (silicium) et de l'acier, ou d'un autre point de
vue, des électrons qui circulent. Mais même (surtout !) quand on parle de cette manière on
est bien, à chaque fois en présence de modèles d'une certaine "réalité" (peut être
insaisissable autrement qu'en la modélisant).
Nous savions déjà que pour être traitables par un ordinateur, toutes les informations
devaient être codées sous le forme de séries finies de nombres entiers (Principe 3-1: codage de
l'information, page 16). Nous pouvons faire à présent un pas de plus : ces nombres entiers
devront eux mêmes être écrits sous la forme de succession de 0 ou de 1 : l'alphabet de
l'ordinateur est binaire.
0 ou 1
Figure 5-4 : un bit
Une telle case élémentaire, ne pouvant prendre que l'une des deux valeurs 0 ou 1 est
appelée un BIT (BInary digiT ou chiffre binaire).
On a pris l'habitude de désigner par 0 et 1 les deux symboles constitutifs de l'alphabet des
ordinateurs. N'importe quel autre couple de symboles distincts conviendrait évidemment. On
pourrait avoir choisi O (pour ouvert) et F (pour fermé) ou encore C (pour chargé) et D (pour
déchargé),…
Il faut noter qu'à l'instar d'une porte qui ne peut être qu'ouverte ou fermée, un BIT ne peut
être que 0 ou 1. Une case élémentaire de mémoire n'est jamais vide : elle contient toujours
soit 0 soit 1.
Ainsi donc, le BIT, unité élémentaire permettant la mémorisation de l'information, est
donc une unité de mesure de taille mémoire. C'est aussi une unité de mesure possible de
quantité d'information (en gardant le sens formel attribué à cette notion d'information aux
chapitres 1 et 2). Nous y reviendrons ci-dessous.
[Link].2 L'octet
Si l'unité élémentaire de la mémoire est bien le BIT, on a pourtant pris l'habitude,
essentiellement pour des raisons historiques, de considérer la mémoire comme organisée en
groupes ou en paquets de 8 bits. Un tel groupe est appelé octet ou byte.
Tout ce que codera un ordinateur sera écrit octet par octet, aussi bien
les informations manipulées que les instructions des programmes qui
feront agir le processeur
Principe 5-3 : l'octet est l'unité de taille mémoire et de quantité d'information
Adresses Contenus
00000000 (0) 01000001 (65)
00000001 (1) 00000011 (3)
00000010 (2)
Bus d' … … … … … … … … … …
adresses 11111101 (253)
11111110 (254)
11111111 (255)
Bus de données
Le processeur indique la Le processeur recueille le
cellule à laquelle il veut contenu de la cellule dont
accéder (pour lire ou l'adresse est précisée ou
pour écrire) en précisant bien y transfère une
son adresse nouvelle donnée
Processeur
Comme on s'est donné dix symboles (0 compris), on dit qu'on note les nombres en base
10 et ce sont les puissances de 10 qui sont importantes et donnent par ailleurs des nombres
bien "ronds" comme 0, 10, 100, 1000.
[Link] Comment les nombres sont écrits en binaire
Le codage binaire suit les mêmes règles, mais comme on ne permet que deux symboles
(0 et 1), c'est les puissances de deux qui seront importantes.
Ainsi, on commence avec
1 pour noter un
mais on est immédiatement tenu de passer à
10 signifiant une deuzaine et zéro unité pour noter deux
puis
11 signifiant une deuzaine et une unité pour noter trois
puis
100 signifiant une quatraine, zéro deuzaine et zéro unité pour noter quatre
etc..
Un nombre comme
1 0 1 0 1
1 seizaine 0 huitaine 1 quatraine 0 deuzaine 1 unité
4 3 2 1 0
1x2 0x2 1x2 0x2 1x2
signifie donc seize + quatre + un, soit vingt et un, qui serait écrit 21 (deux dizaines et une
unité) en notation décimale.
Pour passer de la notation décimale à la notation binaire, la méthode est simple et je
vais l'illustrer sur un exemple : le codage en binaire de cent.
divisions successives
1 3 6 12 25 50 100
on divise on divise on divise on divise on divise on divise on divise
par 2 par 2 par 2 par 2 par 2 par 2 par 2
Quotient : Quotient : Quotient : Quotient : Quotient : Quotient : Quotient :
0 1 3 6 12 25 50
Reste : Reste : Reste : Reste : Reste : Reste : Reste :
1 1 0 0 1 0 0
lecture de gauche à droite du codage binaire
Il faut bien noter que les nombres bien "ronds" sont en binaire les puissances de 2 (alors
qu'en décimal, il s'agissait des puissances de 10) :
10 soit en décimal 2
100 soit en décimal 4
1000 soit en décimal 8
10000 soit en décimal 16
100000 soit en décimal 32
etc.
5.2.3 Comment les informations sont codées en mémoire
Nous savions déjà que toutes les informations étaient devenues des nombres entiers. Il
reste à voir comment ces nombres sont codés en binaire.
[Link] Le codage des caractères
Chaque caractère s'était vu associer un nombre entier (entre 0 et 255) à travers le code
ASCII ou le code ANSI (Voir pages 23 et 27).
Le nombre maximal de caractères représentables s'explique à présent si l'on ajoute que
un caractère (ou plutôt l'entier qui lui est associé) est codé sur un octet.
On a en effet 256 configurations différentes d'un octet, depuis
0 0 0 0 0 0 0 0
Figure 5-8 : l'octet nul
jusque
1 1 1 1 1 1 1 1
Figure 5-9 : l'octet codant 255
qui est l'écriture binaire de 255.
Ainsi, le caractère A auquel le code ASCII avait associé l'entier 65 sera codé par l'octet
correspondant à l'écriture binaire de 65, soit
0 1 0 0 0 0 0 1
Figure 5-10 : l'octet codant A
ou encore, une soixante-quatraine et une unité.
Le codage d'un texte, succession de caractères, se fera à travers la succession des octets codant
ces caractères (un octet par caractère du texte).
[Link] Le codage des nombres entiers
[Link].1 Les entiers : des successions de caractères-chiffres
Un nombre entier peut d'abord être considéré comme la succession des caractères qui
servent à l'écrire. Il est alors codé comme n'importe quelle portion de texte à raison d'un octet
par caractère.
Ainsi, dans la phrase "On pouvait compter 253 présents à la réunion" (qu'on pourrait
trouver par exemple au sein d'un texte produit et manipulé à l'aide d'un logiciel de traitement de
texte), "253" n'est pas considéré comme un entier, mais plutôt comme la succession des
caractères "2", "5" et "3" au même titre que le mot "compter" est codé comme la succession
des caractères "c", "o", "m", "p", "t", "e" et "r".
Il va de soi que dans ce cas l'entier est codé comme la succession des caractères qui le
composent et pour coder "253", on utilisera 3 octets.
[Link].2 Les entiers vus comme des nombres
Lorsqu'on souhaite par exemple effectuer des calculs sur les entiers considérés, il est
évident qu'ils doivent être considérés comme des nombres en non comme du texte.
Il suffit d'indiquer sur combien d'octets sont codés les entiers. Malheureusement, la
réponse à cette question n'est pas uniforme. Le chapitre précédent nous a appris que la seule
réalité était toujours un système informatique, autrement dit, un couple ordinateur + logiciel.
Le choix du nombre d'octets retenus pour écrire en mémoire un entier dépend donc du logiciel
qui équipe l'ordinateur considéré.
C'est toujours le même problème : parler du codage des entiers par l'ordinateur n'a pas de
sens (puisque "l'ordinateur n'existe pas". C'est on le devine, le logiciel qui contrôle l'ordinateur
qui fait décider de la manière dont ce qui est frappé au clavier va être codé en mémoire;
"253" frappé au clavier sera codé comme du texte (sur trois octets) si c'est tel ou tel logiciel
qui est à l'oeuvre et codé comme un entier sur deux octets si c'est tel autre ou sur 4 octets
pour un troisième.
Si nous retenons (ce qui est fort souvent le cas) le chiffre de deux octets, pour le
codage d'un nombre entier, nous sommes en mesure de mener le raisonnement suivant : en
général (sauf si on souhaite ne représenter que des nombres positifs), un BIT va servir à retenir
le signe du nombre entier considéré :
signe
Comme on le voit, les entiers codables sont relativement limités en taille. Même si l'on
augmente le nombre d'octets utilisés pour ce codage, il subsistera toujours une borne à priori
sur la grandeur des entiers manipulables.
On touche là une des contraintes essentielles de l'univers informatique. En mathématique,
lorsqu'il est question de l'ensemble des entiers (ce qu'on note souvent Z), on sait que cet
ensemble est infini : il n'y a pas de limite à la taille des entiers. En informatique, c'est
seulement un intervalle fini de l'ensemble des entiers qui est représentable et manipulable :
on ne peut coder tous les entiers imaginables.
En résumé, il faut retenir que
Une question se pose alors : que se passe-t-il lorsque les manipulations effectuées sur
les entiers conduisent à dépasser les bornes fatidiques au-delà desquelles les entiers ne peuvent
plus être codés (en utilisant le nombre d'octets fixé) ? Ainsi, avec des entiers codés sur deux
octets, que se passe-t-il lorsque on commande une opération comme 20.000 + 20.000 qui,
conduit à un résultat, 40.000, qui n'est plus représentable ?
A nouveau, la réponse à cette question n'est pas uniforme, mais dépend du logiciel qui
contrôle l'ordinateur pendant ce dépassement de la taille des nombres entiers représentables.
Voici par exemple, dans le cas d'un petit programme, écrit en Pascal, qui
commande à l'ordinateur de placer en mémoire (dans deux cases destinées à
contenir des entiers et constituées chacune de deux octets) puis d'en afficher la
somme, le résultat surprenant obtenu :
var A,B : integer; (on définit deux casiers pouvant contenir chacun un entier)
begin
A:=20000; (on place 20000 dans le premier casier)
B:=20000; (on place 20000 dans le second casier)
writeln('La somme de ',A,' et ',B,' est ',A+B);
end. (on demande l'affichage de la somme des contenus des deux casiers contenant
chacun l'entier 20000)
L'exécution de ce programme conduit à l'affichage
La somme de 20000 et 20000 est -25536
Le résultat correct, 40.000, qui n'est pas codable est remplacé par un nombre
négatif, -25.536 !
Avec certains logiciels, le résultat est aberrant : la somme de deux entiers positifs donne
un résultat négatif. Avec d'autres, les choses sont plus claires : l'ordinateur "se plante" ou
signale une erreur.
[Link] Le codage des nombres réels
Il faut signaler à nouveau que la succession des symboles constituant le nombre peut
être vues comme du texte codé octet par octet. Ainsi, "345,56" peut être codé comme du
texte, sur 6 octets successifs.
Ce qui intéresse ici, c'est de considérer "345,56" comme un nombre. On sait déjà qu'il
sera codé, en virgule flottante, sous la forme de deux entiers, la mantisse soit 34556 et
l'exposant soit 2. Rappelons en effet qu'on passe de
Voici à nouveau, pour les amateurs, un court programme en Pascal qui illustre
les erreurs de troncature dues au nombre limité de chiffres significatifs des
réels, étant donné le nombre d'octets disponibles pour la mantisse :
var A,B : single; (on définit deux casiers A et B destinés à recevoir des réels avec
une mantisse codée sur 3 octets et un exposant sur 1 octet; ceci
permet de retenir 7 chiffres significatifs)
C,D : extended; (on définit deux casiers C et D destinés à recevoir des réels avec
une mantisse codée sur 8 octets et un exposant sur 2 octets; ceci
permet de retenir 19 chiffres significatifs)
begin
A:=123456789999.0; (on place dans A un réel comportant plus de chiffres que le
nombre de chiffres significatifs pouvant être retenus étant donné
la taille de la mantisse (3 octets))
B:=123456789000.0; (on place dans B un autre nombre réel comportant lui aussi plus
de chiffres que le nombre de chiffres significatifs pouvant être
retenus étant donné la taille de la mantisse (3 octets))
C:=123456789999.0; (on place dans C un réel comportant moins de chiffres que le
nombre de chiffres significatifs pouvant être retenus étant donné
la taille de la mantisse (8 octets))
D:=123456789000.0; (on place dans D un autre nombre réel comportant moins de
chiffres que le nombre de chiffres significatifs pouvant être
retenus étant donné la taille de la mantisse (8 octets))
(Il faut noter que, pour nous, A-B donne le nombre 999, tout comme C-D)
writeln('La différence de 123456789999.0 et 123456789000.O est ',A-B);
(On demande ici l'affichage de la différence entre A et B; ce devrait être 999.0)
writeln('La différence de 123456789999.0 et 123456789000.0 est ',C-D);
(On demande ici l'affichage de la différence entre C et D; ce devrait être 999.0)
end.
Voici ce que donne l'exécution de ce petit programme :
La différence de 123456789999.0 et 123456789000.O est 0.00000000000000E+0000
(La différence de A et B qui devrait théoriquement donner 999 donne en réalité 0 : les
derniers chiffres de A et B n'ont pu être retenus étant donné la taille de la mantisse (3
octets))
(Il faut savoir que l'écriture 0.0000...E+00... signifie 0.000... x 100 soit 0 x 1 soit 0)
La différence de 123456789999.0 et 123456789000.0 est 9.99000000000000E+0002
(La différence de C et D donne bien 999, puisque le résultat signalé soit
9.9900...E+0002... signifie 9.990 x 102 soit 9.99 x 100 soit 999. dans ce cas le
résultat est bien correct puisque les deux nombres réels C et D ont pu être codés avec
tous leurs chiffres étant donné la taille plus grande des mantisses permises.)
Deux informations sont en tout cas nécessaires pour commencer : le nombre de pixels
sur la hauteur de l'image et le nombre de pixels sur sa largeur. Chacune de ces quantités est par
exemple codée sur 2 octets.
Il faut aussi indiquer en général le nombre de couleurs possible pour le dessin soit le
nombre de couleurs possibles pour n'importe quel pixel) : 16, 256, … 16.777.216
Vient ensuite le codage de la succession de tous les pixels, avec pour chaque pixel
simplement l'indication de la couleur qui le caractérise. Cette couleur peut être codée sur ½
octet (2 pixels codable sur un octet, ce qui conduit à 16 couleurs seulement), un octet (256
couleurs) ou trois octets (16.777.216 couleurs).
[Link] Le codage des sons
Nous savons déjà qu'un échantillonnage du signal électrique correspondant au son à
traiter est effectué. Lorsque l'on souhaite que le codage du son ait une qualité analogue à celle
des CD-Audio, cet échantillonnage se fait avec une fréquence de 44,1 KHz (le signal est
analysé 44.100 fois par seconde). On utilise en général deux octets pour coder chacune des
valeurs obtenues lors de l'échantillonnage et cela pour chaque canal (gauche et droit) dans le
cas d'un son stéréo. C'est donc 2 x 44.100 x 2 octets, soit 176400 octets (environ 176 Ko), qui
sont alors nécessaire pour coder une seconde de son, avec cette qualité. Le codage de son
réclame donc des quantités énormes de mémoire, puisque pour coder une minute, plus de 10
millions d'octets (10 Mo) sont nécessaires. (Voir ci-dessous la définition du Ko et du Mo).
5.2.4 Comment les instructions des programmes exécutables sont codées en
mémoire
Nous savons déjà que la mémoire centrale comportera des données, codées comme
décrit ci-dessus, mais également les programmes exécutables par le processeur. Sans entrer
dans un détail qui ne sera possible qu'après la description de ce dernier, nous pouvons déjà
signaler que ces instructions seront évidemment (comme tout le reste) codée en binaire sur un
ou plusieurs octets.
5.2.5 Retour sur les unités de mesure
Nous savons à présent que l'octet est l'espace sur lequel on code un caractère. Nous
pouvons dès lors donner davantage de signification aux diverses unités utilisées pour mesurer
la taille des dispositifs de mémorisation et la quantité d'informations.
[Link] Les unités de mesure de taille mémoire
Au delà de l'octet, on va trouver :
• Le KiloOctet (Ko) qui vaut 1024 octets.
On pourrait s'étonner de ce chiffre : on aurait pu penser que le KiloOctet soit
exactement 1000 octets. En réalité, on a retenu 1024 à cause du fait que l'ordinateur
travaillant en binaire, 1024 est un nombre, proche de 1000 et bien "rond" lorsqu'on
utilise le binaire. En effet 1024 est égal à 210 ou encore, en binaire, 10000000000.
Sachant que de plus, un octet est la place prise par le codage d'un caractère et en
admettant qu'un page dactylographiée comporte environ 2000 caractères, on peut dire
que 1 Ko est la taille nécessaire en mémoire pour coder l'ensemble des caractères d'une
demi-page ou encore que 1 Ko équivaut environ à ½ page.
• Le MégaOctet (Mo) qui vaut 1024 Ko (210 Ko ou 220 octets), soit environ 500 pages.
• Le GigaOctet (Go) qui vaut 1024 Mo (210 Mo ou 220 Ko ou 230 octets), soit environ
500.000 pages.
• Le TéraOctet (Mo) qui vaut 1024 Go, soit environ 500.000.000 pages.
[Link] Le caractère formaliste des unités de mesure
Ces diverses unités de mesure, dont les plus utilisées sont le Ko et le Mo servent
également à mesurer la quantité d'informations. Mais tout se passe à nouveau de manière très
formaliste puisque, par exemple, pour évaluer la quantité d'informations contenue dans un
texte, on se contente de compter le nombre de caractères (octets) qui le composent.
Ainsi, en informatique, les deux textes suivants comportent chacun la même quantité
d'information, à savoir 16 octets (en comptant les espaces, figurés ici par le symbole de
soulignement)
A_BC_DE_FG_HI_JK 7_13_19_22_28_35
même si on vous assure que les caractères du second texte constituent à coup sûr les résultats
du prochain tirage gagnant du Lotto ! Pour l'informaticien, ces deux documents comportent la
même quantité d'information !
5.2.6 Le processeur et ses relations avec la mémoire centrale
Après avoir examiné de plus près l'organisation de la mémoire centrale, il nous faut à
présent décrire ce qui constitue le coeur du système, l'endroit où les instructions constituant les
programmes exécutables sont "comprises" et exécutées, l'endroit où les données à manipuler
sont traitées : le processeur.
[Link] Principes d'architecture
Ce sont les principes d'organisation et de fonctionnement du processeur et, surtout, de
ses liens avec la mémoire centrale qui seront illustrés ici. Il ne faut donc pas y chercher une
étude détaillée et technique des processeurs tels qu'ils se présentent aujourd'hui.
C'est l'organisation qui est commune à tous les ordinateurs qui sera décrite ici. Les détails
relatifs à telle ou telle machine qui complexifie la description seront largement passés sous
silence.
Mémoire centrale
Interface d'entrée/sortie pour l'accès aux périphériques d'entrée,
aux périphériques de sortie et aux mémoires externes
Registre d'instruction
Compteur Horloge
ordinal
Unité Arithmétique et
Unité de commande logique
Processeur
• Le registre d'adresses est également une cellule susceptible de contenir une information
écrite en binaire. Cette information sera toujours l'adresse d'une cellule de la mémoire
centrale à laquelle le processeur souhaite accéder (pour en ramener le contenu ou pour
y écrire un nouveau contenu). C'est en quelque sorte à travers ce registre que le
processeur indique l'emplacement en mémoire de la cellule avec laquelle il souhaite
travailler.
On devine déjà que la taille de ce registre d'adresses est un paramètre important de
description et d'évaluation d'un processeur et donc d'une unité centrale. Si ce registre a
une taille d'un octet, on pourra y placer seulement 256 adresses différentes (de
00000000 (0) à 11111111 (255)). Autrement dit, même si la mémoire centrale
comportait des milliers de cellules, le processeur ne pourrait travailler qu'avec les
cellules dont l'adresse pourrait être codée dans le registre d'adresses (ici entre 0 et 255).
La taille du registre d'adresses donne donc la quantité de cellules auxquelles le
processeur pourra accéder : on dit que cette taille détermine la mémoire adressable par
le processeur.
Il est essentiel d'avoir compris qu'il ne s'agit ici que d'un exemple, extrêmement
simplifié, mais qui illustre les principes de fonctionnement de tout ordinateur.
Tout ordinateur fonctionne un peu comme cela, mais pas exactement comme
cela.
[Link] Un modèle simplifié d'unité centrale
• La mémoire centrale de cette unité centrale (voir figure ci-dessous) est constituée de
seulement 32 cellules d'un octet. Les adresses de ces cellules vont de 0 à 31 (de 00000 à
11111 en codage binaire). Cette taille n'est pas dus au hasard : elle résulte de la taille du
registre et du bus d'adresses qui est seulement de 5 bits.
• Le compteur ordinal et le registre d'adresses du processeur sont constitués de 5 bits.
• Le registre d'instructions peut accueillir un octet.
• L'UAL ne comporte qu'un seul registre pour accueillir des données; sa taille est d'un
octet. Un second registre est présent dans l'UAL, le code condition (2 bits) dont le
contenu ne sera modifié que lors de l'exécution d'une instruction de comparaison.
!
"#
$
%
$
&"
'
'
Figure 5-13 modèle simplifié d'unité centrale:
[Link] Un modèle simplifié de langage machine adapté au modèle simplifié d'unité centrale
Chaque instruction à destination du processeur simplifié est codée sur un octet et a la
structure suivante :
• Les trois premiers bits de l'octet codant l'instruction constituent le code opératoire, c'est
à dire l'indication de l'opération à effectuer par le processeur. Le code opératoire étant
codé sur 3 bits, on a donc la possibilité de désigner seulement 8 (23) opérations
différentes.
• Les 5 bits suivants de l'octet codant une instruction désignent en général une adresse
mémoire (pour y lire ou y écrire une donnée).
Les 8 instructions disponibles sont les suivantes :
1. L'instruction de lecture : son code opératoire est 000, la seconde partie (=les 5 bits
suivants) est une adresse. Son effet est prendre copie du contenu de la cellule dont
l'adresse est indiquée et de l'amener à travers le bus de données dans le registre de
données de l'UAL (dont elle remplace l'ancien contenu). On notera que le contenu de la
cellule consultée n'est pas modifié.
2. L'instruction d'écriture en mémoire : son code opératoire est 001, la seconde partie
(=les 5 bits suivants) est l'adresse d'une cellule mémoire. Son effet est copier dans la
cellule dont l'adresse est indiquée le contenu du registre de données de l'UAL. L'ancien
contenu de cette cellule est perdu; par contre, le registre de l'UAL garde son contenu
inchangé.
3. L'instruction d'addition : son code opératoire est 010, la seconde partie (=les 5 bits
suivants) est une adresse. Son effet est prendre copie du contenu de la cellule dont
l'adresse est indiquée, de l'amener à travers le bus de données vers l'UAL et de
l'additionner au contenu actuel de ce registre de données.
Dans cette version extrêmement simplifiée, on ne se préoccupe pas des débordements qui
peuvent se produire lorsque l'addition conduit à un résultat qui ne tient plus sur un seul octet.
Par exemple, si le registre de données contenait 10000000 (128 en décimal) et que cette
instruction d'addition ramène comme contenu de cellule l'octet 10000011) (131 en décimal),
la somme 100000011 (259) ne peut pas tenir sur le seul octet constituant le registre de
données.
Dans les vrais processeurs, cette éventualité est bien entendu traitée.
4. L'instruction de soustraction : son code opératoire est 011, la seconde partie (=les 5
bits suivants) est une adresse. Son effet est prendre copie du contenu de la cellule dont
l'adresse est indiquée, de l'amener à travers le bus de données vers l'UAL et de la
soustraire du contenu actuel de ce registre de données. Comme d'habitude, le contenu
de la cellule consultée reste inchangé, et l'ancien contenu du registre de donnée est
perdu.
5. L'instruction de comparaison : son code opératoire est 100, la seconde partie (=les 5
bits suivants) est une adresse. Son effet est prendre copie du contenu de la cellule dont
l'adresse est indiquée, de l'amener à travers le bus de données vers l'UAL et de la
comparer au contenu actuel du registre de données. Le résultat de cette comparaison va
se retrouver dans le registre code condition de l'UAL
◊ si le registre de donnée de l'UAL est égal à la donnée amenée de la mémoire par
cette instruction de comparaison, le code condition prend la valeur 00 (l'ancienne
valeur du code condition étant perdue)
!
"#
$
%
$
&"
'
'
!
"#
$
%
$
&"
'
'
!
"#
$
%
$
&"
'
'
!
"#
$
%
$
&"
'
'
a+b=c a+b<c
a+b>c
Il est impératif de suivre pas à pas l'exécution du programme concerné en comprenant que
cette exécution suit un schéma immuable et parfaitement automatique.
La seule difficulté concerne l'instruction de branchement et l'effet qu'elle va avoir sur le
déroulement du programme.
On a initialement :
Adresses Contenus des cellules
Bus de données
Registre d'adresses
On notera au passage que les contenus des cellules 0 et 10 sont identiques, comme
celles de 1 et 11 ou 2 et 12. Nous y reviendrons.
Ce qui va provoquer le démarrage de l'exécution est le fait que le compteur ordinal,
prend la valeur 00000 suite à l'exécution de l'instruction qui précédait.
10110 (22)
10111 (23)
11000 (24)
11001 (25)
11010 (26)
11011 (27)
11100 (28)
Bus d'adresses 11101 (29)
11110 (30)
11111 (31)
00000 Bus de données
Registre d'adresses
3
000 01010
Reg Instruct Registre de données
1
00000
Compt. ordinal Code condition
00000 7
Compt. ordinal Code condition
8 00001
00011 (3) 10100101
00100 (4) 00001100
00101 (5) 00101101
00110 (6)
00111 (7)
01000 (8)
01001 (9)
01010 (10) 00001010
01101 (13)
01110 (14)
01111 (15)
... ... ... ... ... ... ... ...
10101 (21)
10110 (22)
10111 (23)
11000 (24)
11001 (25)
11010 (26)
11011 (27)
11100 (28)
Bus d'adresses 11101 (29)
11110 (30)
11111 (31)
01011 Bus de données
Registre d'adresses
14 00010
00011 (3) 10100101
00100 (4) 00001100
00101 (5) 00101101
00110 (6)
00111 (7)
01000 (8)
01001 (9)
01010 (10) 00001010
01101 (13)
01110 (14)
01111 (15)
... ... ... ... ... ...
10101 (21)
10110 (22)
10111 (23)
11000 (24)
11001 (25)
11010 (26)
11011 (27)
11100 (28)
Bus d'adresses 11101 (29)
11110 (30)
11111 (31)
00010 Bus de données
Registre d'adresses
15 00010
00011 (3) 10100101
00100 (4) 00001100
00101 (5) 00101101
00110 (6)
00111 (7)
01000 (8)
01001 (9)
01010 (10) 00001010
01101 (13)
01110 (14)
01111 (15)
... ... ... ... ... ... ... ...
10110 (22)
10111 (23)
11000 (24)
11001 (25)
11010 (26)
11011 (27)
11100 (28)
Bus d'adresses 11101 (29)
11110 (30)
11111 (31)
01100 Bus de données
Registre d'adresses
21 00011 01
23 00011 (3) 10100101
00101 (5) 00101101
00110 (6)
00111 (7)
01000 (8)
01001 (9)
01010 (10) 00001010
01101 (13)
01110 (14)
... ... ... ... ... ... ... ...
10101 (21)
10110 (22)
10111 (23)
11000 (24)
11001 (25)
11010 (26)
11011 (27)
11100 (28)
Bus d'adresses 11101 (29)
11110 (30)
11111 (31)
00011 Bus de données
Registre d'adresses
00011 (3) 10100101
00100 (4) 00001100
00101 (5) 00101101
00110 (6)
00111 (7)
01000 (8)
01001 (9)
01010 (10) 00001010
01101 (13)
01110 (14)
01111 (15)
... ... ... ... ... ... ... ...
10110 (22)
10111 (23)
11000 (24)
11001 (25)
11010 (26)
11011 (27)
11100 (28)
11101 (29)
11110 (30)
11111 (31)
00011 Bus de données
Registre d'adresses
25 00100 01
00011 (3) 10100101
27 00100 (4) 00001100
01101 (13)
01110 (14)
... ... ... ... ... ... ... ...
10101 (21)
10110 (22)
10111 (23)
11000 (24)
11001 (25)
11010 (26)
11011 (27)
11100 (28)
Bus d'adresses 11101 (29)
11110 (30)
11111 (31)
00100 Bus de données
Registre d'adresses
26 00100 01
00011 (3) 10100101
00100 (4) 00001100
00101 (5) 00101101
00110 (6)
00111 (7)
01000 (8)
01001 (9)
01010 (10) 00001010
01101 (13)
01110 (14)
01111 (15)
... ... ... ... ... ... ... ...
10110 (22)
10111 (23)
11000 (24)
11001 (25)
11010 (26)
11011 (27)
11100 (28)
Bus d'adresses 11101 (29)
11110 (30)
11111 (31)
01100 Bus de données
Registre d'adresses
32 00101 01
00011 (3) 10100101
00100 (4) 00001100
34 00101 (5) 00101101
00110 (6)
00111 (7)
01000 (8)
01001 (9)
01010 (10) 00001010
01101 (13)
01110 (14)
... ... ... ... ... ... ... ...
10101 (21)
10110 (22)
10111 (23)
11000 (24)
11001 (25)
11010 (26)
11011 (27)
11100 (28)
Bus d'adresses 11101 (29)
11110 (30)
11111 (31)
00101 Bus de données
Registre d'adresses
33 00101 01
00011 (3) 10100101
00100 (4) 00001100
00101 (5) 00101101
00110 (6)
00111 (7)
01000 (8)
01001 (9)
01010 (10) 00001010
01110 (14)
01111 (15)
... ... ... ... ... ... ... ...
10110 (22)
10111 (23)
11000 (24)
11001 (25)
11010 (26)
11011 (27)
11100 (28)
Bus d'adresses 11101 (29)
11110 (30)
11111 (31)
01100 Bus de données
Registre d'adresses
39 00110 01
[Link] Exercices
1. Pourriez vous écrire pour l'unité centrale simplifiée utilisée dans l'exemple précédent un
programme qui trie les données désignées par a et b, contenues dans les cellules
d'adresse 00001 (1) et 00010 (2). Autrement dit, à l'issue de l'exécution de ce
programme la cellule 1 contiendra la plus petite des quantités a et b et la cellule 2 la
plus grande.
Il est impératif de se rendre compte que le modèle simplifié présenté ici, s'il
nous a permis d'exposer et d'illustrer les principes qui sont à la base du
fonctionnement de pratiquement tous les ordinateurs, est infiniment plus simple
que les unités centrales réelles. Quelques remarques vont permettre d'élargir le
propos.
5.2.8 Architecture et fonctionnement d'une unité centrale, en général
[Link] Le modèle d'ordinateur de Von Neumann : calculateur universel à programme
enregistré
L'organisation décrite ci-dessus et les principes de fonctionnement mis en évidence à
travers l'exemple sont caractéristiques de tout ordinateur conforme au modèle développé par
John von Neumann dans un article3 publié le 30 juin 1945 et qui fut à la naissance (du moins
sur le plan théorique) des ordinateurs modernes.
Les concepts essentiels en sont les suivants :
• L'unité centrale est constituée d'une mémoire centrale et d'un processeur : entre ces
deux entités, instructions et données vont pouvoir être échangées.
• Les instructions constituant les programmes qui vont faire agir le processeur sont
enregistrées en mémoire centrale au même titre que les données; rien ne permet donc de
distinguer une instruction (codée en binaire) d'une donnée (codée en binaire). Ces
instructions peuvent elles-mêmes être modifiées pendant l'exécution du programme
qu'elles constituent.
• A tout moment c'est la valeur d'un registre particulier du processeur, le compteur
ordinal (en anglais P-Counter), qui donne à la fin de l'exécution de chaque instruction
par le processeur, l'adresse en mémoire de l'instruction qui sera exécutée ensuite.
Habituellement, ce compteur ordinal augmente de 1 à la fin de l'exécution de chaque
instruction; il peut aussi faire un saut en prenant une valeur particulière indiquée par
une instruction de branchement.
• Outre les échanges avec la mémoire centrale, le processeur effectue essentiellement des
calculs et des comparaisons sur les données présentes dans ses registres de données. Le
processeur est un calculateur, mais universel, puisque la succession des opérations qu'il
va exécuter et le choix des données pour ces opérations ne sont pas fixés une fois pour
toute mais sont précisés dans un programme.
• Une seule instruction à la fois est amenée de la mémoire centrale et exécutée par
l'unique processeur.
Ces principes de fonctionnement restent ceux de la plupart des ordinateurs modernes.
sorte ce que nous savons du cerveau humain. Ces ordinateurs sont constituée de
"neurone" électroniques connectés entre eux, des signaux électriques pouvant transiter
le long de ces connexions.
Ainsi, à la mise en marche d'un ordinateur de type PC, le compteur ordinal prend la
valeur 1048560, ce qui provoque l'exécution d'un programme logé en mémoire morte
à partir de l'adresse 1048560. Dès lors une série de programmes situés en ROM sont
exécutés les uns "passant la main" (par un branchement) aux autres, en un
enchaînement purement déterministe. Bien évidemment, au bout d'un temps, ce sont
les interventions venues de l'extérieur sous forme de données (au départ du clavier ou
de la souris, par exemple) qui vont faire évoluer le flot des programmes qui seront
chargés en mémoire et exécutés.
Il est donc important d'avoir cette vision dynamique de ce qui se passe dans l'unité
centrale : plusieurs programmes cohabitent en mémoire centrale, s'exécutent à certains
moments et passent ensuite la main à d'autres.
Ce qu'on peut en tout cas dire c'est qu'à aucun moment le processeur n'est "arrêté";
constamment des instructions sont ramenées, exécutées et, le compteur ordinal se modifiant,
font place à d'autres, et cela sans arrêt.
5.2.9 Les paramètres d'évaluation d'une unité centrale
On sait que les performances du matériel évoluent sans cesse (même si le principe de
fonctionnement reste celui décrit dans les années 40 par von Neumann). Il est essentiel de
disposer d'une grille d'analyse de ces évolutions et pour cela de connaître les principaux
paramètres permettant de décrire et d'évaluer une unité centrale.
[Link] La taille de la mémoire adressable : taille du registre d'adresses
On sait que pour accéder à une cellule de la mémoire, que ce soit en lecture ou en
écriture, le processeur place dans le registre d'adresses l'adresse de la cellule à atteindre. La
taille du registre d'adresse est donc un paramètre fondamental puisqu'elle détermine le nombre
des adresses possibles des cellules de la mémoire.
Ainsi dans l'exemple d'unité centrale présenté plus haut, la taille du registre d'adresses
était de 5 bits, ce qui permet de noter (en binaire) des adresses allant de 00000 (0) à 11111
(31). Il serait donc parfaitement inutile dans ce cas d'avoir une mémoire centrale qui
comporterait plus de 32 cellules, puisque au delà de la 32ème le processeur ne pourrait
indiquer dans le registre d'adresses les adresses correspondantes.
C'est un peu comme si on imposait que les numéros des maisons d'une rue ne comportent
qu'au plus 2 chiffres (décimaux). En admettant qu'une des maisons puisse avoir le chiffre 0,
on pourrait adresser du courrier aux 100 maisons portant les numéros de 0 à 99. Si des
maisons supplémentaires sont bâties dans cette rue, jamais on ne pourra leur affecter un
numéro (sur deux chiffres) et jamais elles ne pourront recevoir du courrier.
On peut aisément calculer que si le registre d'adresses possède une taille de n bits, 2n
cellules pourront être adressables. Si chaque cellule adressable a une taille d'un octet, on aura
alors 2n octets de mémoire adressable.
C'est sans doute le moment de rappeler les préfixes, tant multiplicatifs que de
division :
kilo x 1.000 mili /1.000
mega x 1.000.000 micro /1.000.000
giga x [Link] nano /[Link]
tera x [Link].000 pico /[Link].000
Pour donner un ordre d'idée de ce qu'est une nano-seconde, disons que la lumière qui se
propage pourtant à 300.000 km/s, parcourt seulement 30 centimètres pendant une nano-
seconde.
Les mémoires les plus rapides actuellement (SRam) ont des temps d'accès de quelques
nano-secondes (une petite dizaine de ns). Les mémoire plus lentes (DRam) ont des
temps d'accès de quelques dizaines de ns. Il y a environ un facteur 10 entre les temps
d'accès mémoires les plus lentes et les plus rapides.
?
Pourquoi les échanges entre la mémoire classique et la mémoire cache se font-
ils sans que les informations (instructions ou données) échangées ne transitent
par le processeur ?
C'est cette caractéristique (la "largeur" du bus de données) qui a servi à caractériser et à
nommer les processeurs. Ainsi, au fil de l'évolution des systèmes informatiques, on a eu des
processeurs 8 bits (un octet seulement est échangé lors des transferts entre mémoire et
processeur), des processeurs 16 bits (2 octets à la fois à chaque échange), des processeurs 32
bits et on en est aujourd'hui à des processeurs 64 bits (8 octets sont échangés d'un coup entre
la mémoire centrale et le processeur).
Un petit exemple fera comprendre le progrès apporté par le passage d'un processeur 8
bits à un processeur 16 bits. Nous savons que les entiers sont souvent codés sur 2
octets en mémoire (Voir page 81). Imaginons donc que nous avons deux entiers A et B
dont nous souhaitons obtenir simplement la somme. Le premier entier A est codé sur
deux octets et le second B également. Avec un langage machine du type de celui
développé dans l'exemple traité ci-dessus et avec un processeur 16 bits, il suffit de
trois "voyages" entre la mémoire et le processeur pour obtenir la somme. En effet,
• on va amener (dans un registre de données du processeur) en une fois les deux
octets dans lesquels A est écrit (premier transfert),
• on va également amener en une fois les deux octets codant B pour les additionner à
ceux déjà présents dans le registre de données (deuxième transfert);
• enfin le résultat (codé sur deux octets) sera en une fois transféré vers les deux
cellules de la mémoire qui contiendront le codage de la somme (troisième
transfert).
Par contre, avec un processeur 8 bits, il faudra en tout 6 transferts :
• on va amener (dans un registre de données du processeur) l'octet codant la partie
droite du nombre A; comme on ne peut transférer qu'un octet à la fois, c'est la
seule possibilité;
• on va amener l'octet codant la partie droite du nombre B en l'additionnant à la
partie droite de A déjà présente dans le processeur;
• on va transférer l'octet constituant la somme des deux parties droites ainsi obtenue
dans une cellule de la mémoire : celle-ci contiendra la partie droite du résultat; (on
garde dans le processeur le report éventuel obtenu suite à l'addition);
• on va amener (dans un registre de données du processeur) l'octet codant la partie
gauche du nombre A; comme on ne peut transférer qu'un octet à la fois, c'est la
seule possibilité;
• on va amener l'octet codant la partie gauche du nombre B en l'additionnant à la
partie gauche de A déjà présente dans le processeur (et au report éventuel obtenu
suite à l'addition des parties droites);
• on va transférer l'octet constituant la somme des deux parties gauches ainsi
obtenue dans une cellule de la mémoire : celle-ci contiendra la partie gauche du
résultat.
Pour effectuer le même traitement d'addition de deux entiers, il aura bien fallu 6
transferts avec un processeur 8 bits et seulement 3 avec un processeur 16 bits !
registres du processeur sont nombreux et plus leur taille est importante, plus on risque d'avoir
un système efficace.
[Link] Le jeu d'instructions disponibles pour le processeur et la "puissance" de ces
dernières
Il s'agit également d'un paramètre très technique et qui ne sera pas abordé en détail.
Nous l'avons déjà évoqué page 127. L'exemple développé montrait un processeur imaginaire
ne comportant que 8 instructions; de plus les opérations commandées par ces instructions
étaient fort élémentaires. Pour obtenir en mémoire, à l'adresse 00011 (3) la somme des
contenus des deux cellules d'adresses respectives 00001 (1) et 00010 (2), on était obligé de
donner trois instructions en séquence :
000 00001 charger le contenu de la cellule 00001 (1) dans le registre de données
010 00010 y additionner le contenu de la cellule 00010 (2)
001 00011 écrire le registre de données dans la cellule 00011 (3)
On devine que certains processeurs disposent d'instructions plus puissantes et que, par
exemple, une seule instruction permettrait alors de faire le même travail :
00001111 00000001 00000010 00000011
code opératoire, codé adresse (1) co- adresse (2) co- adresse (3) co-
sur un octet et com- dée sur un octet dée sur un octet dée sur un octet
mandant de lire succes- de la cellule de la cellule de la cellule où
sivement le contenu de contenant la contenant la le résultat de
deux cellules mémoire première don- seconde donnée l'addition doit
(dont les adresses sui- née qui doit être être placé.
vent) et de placer le additionnée à la
résultat dans une cel- première
lule (dont l'adresse suit
également)
Il est évident que l'écriture de programmes, dans ce cas, utilisera bien moins
d'instructions que dans le premier cas évoqué.
Le nombre et la puissance des instructions propres à un processeur constituent dès lors
un paramètre important de description de l'efficacité d'un système.
[Link] La vitesse d'horloge
On a vu (page 92) que les battements d'une horloge permettaient de synchroniser le
travail des divers éléments de l'unité centrale. La fréquence à laquelle cette horloge oblige ces
divers éléments à travailler est évidemment un paramètre important. Les valeurs actuelles de
cette fréquence sont de plusieurs centaines de méga-hertz (= plusieurs centaines de millions de
battements pas seconde).
Les premiers micro-processeurs travaillaient avec une fréquence de quelques MHz (de
0,108 MHz pour le 4004 à 8 MHz pour le 8088); on est ensuite passé à quelques
dizaines de MHz (de 12 MHz pour le 80286 à 100 MHz pour le 80486). On en est
aujourd'hui à des fréquences de plusieurs centaines de MHz (de 166 MHz pour le
Pentium à 300 MHz pour le Pentium II)
Afin de résumer l'évolution des systèmes (basés sur les micro-processeurs Intel), on
peut proposer le tableau suivant :
#
#
3
3
45
6
&7
&"'
%
,3
4
4 "Loi" de Moore (énoncée en 1965) : le nombre de transistors implantés sur une puce double tous les 18
mois
5.3.1 Rôle
A compléter
5.3.2 Contenu
A compléter
5.3.3 Classification
A compléter
5.3.4 Paramètres de description et d'évaluation
A compléter
. '
. '
. '
. '
5 Comme précisé, on n'évalue plus guère en MIPS les performances des processeurs récents.
6 En voie de disparition
7
A compléter
5.5.1 L'écran
A compléter
5.5.2 Les imprimantes
[Link] Fonction
Périphérique de sortie, l'imprimante a comme rôle de transformer des octets reçus par
l'ordinateur en traces sur du papier.
[Link] Types d'échanges entre l'ordinateur et l'imprimante
Avant d'aborder quelques paramètres de description et d'évaluation, il est essentiel de
préciser comment s'opèrent les échanges entre l'ordinateur et l'imprimante et cela en évoquant
plusieurs questions :
- que représentent les octets envoyés par l'ordinateur à l'imprimante ?
- comment l'imprimante est-elle capable de les transformer en signes sur du papier ?
- quel est le rôle (plus ou moins grand) de l'ordinateur dans la préparation de ce qui doit
être envoyé à l'imprimante ?
[Link].1 Les échanges de type texte (et les imprimantes travaillant en mode texte)
Les octets envoyés par l'ordinateur à l'imprimante représentent des caractères : ainsi
chaque octet est interprété par l'imprimante, par exemple à travers le code ASCII, comme
représentant un caractère à tracer.
Si l'imprimante est capable de tracer sur le papier les caractères correspondant aux
octets reçus, c'est qu'elle possède pour chaque caractère possible la représentation point par
point du dessin à réaliser. Ainsi, recevant l'octet 658 (caractère A dans le code ASCII),
l'imprimante consulte le dessin bitmap (point par point) qu'elle a pour ce caractère et imprime
sur le papier le nuage de points ainsi trouvé.
8 Noté en décimal et non en binaire comme c'est réellement le cas, pour des questions de facilité de
lecture.
Ainsi, sur les imprimantes de type EPSON (qui furent longtemps un standard en ce
qui concerne les imprimantes matricielles), ce sont des suites de caractères
commençant toujours par le caractère de code 27 (souvent appelé "Escape", et obtenu
au clavier par l'appui sur la touche "Esc") qui jouent le rôle d'indicateurs pour ces
changements. Par exemple, la suite de code 27 (Esc) et 52 (4) demandent à
l'imprimante un passage en italique.
Sur la HP 500 (une des imprimantes à jet d'encre les plus répandues), c'est la
séquence 27 (Esc) 40 (() 115 (s) 49 (1) 83 (S) qui provoque le passage au mode
italique.
Lorsqu'une imprimante travaille en mode texte, l'ordinateur se contente donc de lui
envoyer d'une part les octets correspondant aux caractères à imprimer, d'autre part les
caractères de contrôle permettant les changements de polices, de styles,... C'est le plus souvent
(mais pas toujours) lorsque l'ordinateur est équipé d'un logiciel de traitement de texte que du
texte est ainsi envoyé vers une imprimante. Le logiciel de traitement de texte comporte alors
les indications nécessaires concernant les caractères de contrôle correspondant à telle ou telle
imprimante. Sur base du choix de police et de mise en forme souhaité par l'utilisateur et fourni
au système (à travers le logiciel de traitement de texte), et sachant quelle est l'imprimante
sélectionnée, les caractères de contrôle adéquats sont glissés au sein des caractères imprimés
pour provoquer les choix désirés. Cet ensemble d'indications qui servent en quelque sorte
d'interface logiciel entre le programme de traitement de texte et l'imprimante s'appelle un pilote
d'imprimante (driver d'imprimante).
C'est la raison pour laquelle, lorsqu'on édite ou lorsqu'on demande l'affichage d'un
fichier contenant un texte déjà préparé par un logiciel de traitement de texte et à
destination d'une imprimante travaillant en mode texte, on y trouve, non seulement des
caractères normaux, mais encore un tas de caractères inattendus et correspondant aux
caractères de contrôle insérés dans le texte original.
Signalons encore que ce travail "en mode texte" est de plus en plus rare dans les
environnements de travail actuels. Il était pourtant le plus souvent la règle pour les logiciels
travaillant dans l'environnement MS-DOS sur PC.
[Link].2 Les échanges de type graphique (et les imprimantes travaillant en mode graphique)
Ici, les octets envoyés par l'ordinateur ne sont plus interprétés comme codant des
caractères mais plutôt comme décrivant une portion de graphique à tracer sur le papier.
L'imprimante interprète donc les octets comme la représentation bitmap (point par point) d'un
graphique à imprimer sur le papier.
Disons d'emblée que dans ce cas c'est l'ordinateur qui se charge de la plus grande partie
du travail. C'est lui, qui disposant simplement de la signification graphique (pour l'imprimante
concernée) des différents octets (= quel octet envoyer pour que l'imprimante sorte telle
configuration de points sur un petit espace de la feuille), va calculer quels octets envoyer pour
obtenir textes et graphiques.
Il faut donc remarquer qu'ici, lorsque du texte (des caractères) doivent être tracés par
l'imprimante, c'est l'ordinateur qui se charge de la tâche consistant à calculer quels octets
"graphiques" envoyer pour que l'imprimante dessine les caractères souhaités.
Dans ce mode d'échange graphique, l'imprimante se contente donc de dessiner sur base
des indications convenables correspondant aux octets reçus de l'ordinateur. Elle est alors
capable de dessiner aussi bien des graphiques que du texte, à condition que l'ordinateur se
charge de lui envoyer les octets de commandes de tracé souhaitées.
On verra ci-dessous que dans le cas des imprimantes à aiguilles ou à jet d'encre, la tête
d'impression se déplace horizontalement le long du papier en y laissant un ensemble de points
disposés verticalement. Ainsi, si le dessin et le texte figurant ci dessous doivent être tracés par
l'imprimante
Nous avons vu qu'il existait deux modes de codage des dessins : bitmap et
? vectorisé. Si l'ordinateur possède un mode de représentation des caractères
à faire tracer par l'imprimante, quel est selon vous le mode de codage le
plus approprié ?
Ajoutons encore que fréquemment, c'est d'une description vectorisée des différents
caractères (dans différentes polices et selon différentes mises en valeur) que le système dispose.
Une telle description vectorisée considère un caractère non comme un ensemble de points,
mais comme un objet composé de segments, de courbes, etc.. Ainsi, par exemple, le caractère
A peut être décrit par quelques grandeurs comme dans le schéma ci-après :.
h
θ
Ainsi en est-il, sous Windows, des polices dites True Type : le système qui possède la
description vectorisée de ces polices, en génère une description bitmap, tenant compte
de la taille souhaitée, et envoie cette description à l'imprimante graphique.
Il est important de saisir que si l'on dispose seulement d'une représentation bitmap du
caractère, dans une taille donnée
neutralisés. Une feuille de papier chargée négativement vient ensuite au contact du rouleau et
fixe les particules d'encre sur sa surface.
L'encre est ensuite fixée définitivement par chauffage.
Le présent texte est en police ARIAL de taille 11 points, avec un passage en taille 7 points, un passage
en italique et un passage en gras.
On peut également obtenir des caractères de très grande taille :
A,B,C
Et voici, sous un petit graphique, un texte en police Times, 12 points, avec quelques mots en taille 7
points, un passage en italique et un passage en gras.
, puis quelques uns dans la police Braggadocio,
puis dans la police Colonna, puis dans la police
DESDEMONA. Et il y en a des dizaines et des dizaines d'autres
εν µοδε γραπηιθυε.
Vitesse 180 CPS 300 CPS 120 300 CPS 4 ppm 20 ppm
(Texte) (Texte)
10 Min/page (Graph) 1 ppm (Graphique)
Taille de la 3 Ko 32 Ko 8 Ko 32 Ko 1 Mo 70 Mo
mémoire tampon (RAM)
Prix 10.000 F 30.000 F 12.000 F 30.000 F 50.000 F 200.000
F et +
Prix par page 1F 3F (N/B) 2,50 F
20 F 120 F
(Couleur)
Figure 5-50 : paramètres d'évaluation des imprimantes
[Link] Questions
1. Le texte suivant peut il avoir été produit par une imprimante travaillant en mode texte ?
Et en mode graphique ? Et en mode programme ?
Et le texte suivant ?
Expliquez pourquoi.
2. Pensez-vous que l'on puisse parler de la résolution d'une imprimante travaillant en mode
texte ? Pourquoi ?
3. Un de vos amis souhaite acquérir une imprimante. Quelles questions lui poseriez-vous
pour l'aider à prendre sa décision.
4. Que représentent les octets envoyés par l'ordinateur à l'imprimante ?
5. Par quel(s) type(s) d'imprimante (texte, graphique, programme) le texte suivant est-il
vraisemblablement produit ?
ACM Turing Award Lectures; The First Twenty Years. 1966-1985. ACM Press, New York,
1987.
Initiation à l'informatique., Amsterdam : Editions Time-Life, 1986.
L'ère de l'informatique., Amsterdam : Editions Time-Life, 1987.
BERUBE Y., Initiation aux ordinateurs., Paris, London, New York : McGraw-Hill, Editeurs,
1980.
BRETON P., Une histoire de l'informatique, Paris : Editions du Seuil, 1990.
CLAVIEZ J., Micro-ordinateurs. Que peut-on faire avec ?, Montréal : JCI Inc., 1993.
LABIN E., Comprendre l'informatique. Bordas, Paris, 1973.
LE ROCH J-C., Regards sur l'informatique. Edition Marketing, Paris, 1991.
LIGONNIERE R., Préhistoire et histoire des ordinateurs, Paris : Robert Laffont, 1987.
RALSTON A., REILLY E., Encyclopedia of Computer Science, London : Chapman & Hall,
1993.
SANDERS D.H., L'univers des ordinateurs., Paris, London, New York : McGraw-Hill,
Editeurs, 1984.
STEHLE J-L., HOCHARD P., Ordinateurs et langages. Edition Marketing, Paris,
1989.
ARSAC J., Les machines à penser. Des ordinateurs et des hommes. Editions du Seuil,
Paris, 1987.
BULL , Intelligence artificielle et bon sens. Collection F.R. BULL, Masson, Paris, 1991
CHANGEUX J-P., CONNES A., Matière à pensée Editions Odile Jacob, Paris, 1989.
DEFAYS D., L'esprit en friche. Les foisonnements de l'intelligence artificielle Pierre
Mardaga, Bruxelles, Liège, 1988.
GANASCIA J-G., L'âme machine Les enjeux de l'intelligence artificielle Editions du Seuil,
Paris, 1990.
HOFSTADTER D., Godel, Escher, Bach. InterEditions, Paris, 1985.
HOFSTADTER D., DENNETT D. (EDIT)., Vues de l'esprit. Fantaisies et réflexions
sur l'être et l'âme. InterEditions, Paris, 1987.
LUCAS Y. Codes et machines : essai de sémiologie industrielle. Presses Universitaires de
France, Paris, 1974.
VARELA F.J., Connaître les sciences cognitives. Tendances et perspectives. Editions du
Seuil, Paris, 1989.
WEIZENBAUM J., Puissance de l'ordinateur et raison de l'homme. Les Editions
d'Informatique, Paris, 1981.
LAZORTHES G., Le cerveau et l'ordinateur., Toulouse : Privat, 1988.
SIMONS G., L'ordinateur est-il vivant ?, Evolution et nouvelles formes de vie., Londreys,
1984.
DUCHATEAU C., Quand le savoir faire ne suffit plus. Qu'y a-t-il au coeur, de la pensée
algorithmique et de la programmation., Namur : CEFIS, Facultés N-D de la Paix,
1989.
DUCHATEAU C., Images pour programmer. Apprendre les concepts de base. De Boeck-
Wesmael, Bruxelles, 1990.
Les langages de programmation., Amsterdam : Editions Time-Life, 1987.
LESUISSE R., BORSU A., Initiation aux raisonnements de la programmation., Namur :
Presses Universitaires de Namur, 1987.
7
Tables et Index
INTRODUCTION........................................................................................................................................... 1
1.1 L'ORDINATEUR ?...................................................................................................................................... 1
... DE MANIÈRE FORMELLE ..................................................................................................................... 3
2.1 TRAITER DES INFORMATIONS .................................................................................................................... 3
2.2 UN PEU DE VOCABULAIRE ET... UNE DÉFINITION DE L'INFORMATIQUE .......................................................... 8
2.3 LE CRITÈRE DU "COPAIN PORTUGAIS" ........................................................................................................ 9
2.4 L'ORDINATEUR, UN MANIPULATEUR FORMALISTE D'INFORMATIONS .......................................................... 10
2.5 LA PROGRAMMATION ............................................................................................................................. 12
2.6 ET L'INTELLIGENCE ? ............................................................................................................................. 13
2.7 QUESTIONS RÉCAPITULATIVES ................................................................................................................ 14
... DES INFORMATIONS... ......................................................................................................................... 17
3.1 INTRODUCTION...................................................................................................................................... 17
3.2 CODAGE ................................................................................................................................................ 18
3.3 DES QUESTIONS PLUS QUE DES RÉPONSES ................................................................................................ 19
7.4 Index
D M
dessin vectorisé .................................... 106 machine de von Neumann ...................... 93
discrétisation .................................... 28, 37 mantisse................................................. 62
disque compact ......................................36 MégaOctet (Mo).................................... 65
DPI (Dot Per Inch)............................... 108 mémoire adressable.......................... 67, 95
draw ......................................................31 mémoire centrale ................................... 49
mémoire de masse.................................. 49
E mémoire externe .................................... 49
échantillonnage ......................................36 mémoire morte .................................... 103
Q V
quantité d'information.............................65 vectorisé................................................ 31
virgule flottante ............................... 26, 61
R vitesse d'impression.............................. 108
reconnaissance de la parole.....................36
reconnaissance optique...........................32