Commentaire sur :
Laurent Bloch, Les systèmes d'exploitation
des ordinateurs, Vuibert 2003
23 avril 2003
Nous avons pris une habitude barbare : vivre au
milieu d'objets techniques dont on ignore tout. Beaucoup de gens ignorent
comment marchent automobile, télévision, réfrigérateur, téléphone etc. Cela ne les
empêche pas de s'en servir. Cette ignorance a des inconvénients. L'expertise
étant le monopole des experts, ils peuvent en abuser : alors un fossé de
méfiance se crée, des fantasmes naissent. Savons-nous si le téléphone mobile est
mauvais pour la santé ? si les antennes sont dangereuses pour les habitants des
immeubles où elles sont perchées ? Non, sans doute ; notre ignorance va si loin
que nous sommes incapables de lire les rapports d'expertise. Cela ne calme pas
nos émotions.
Parmi ceux qui préfèrent Linux à Windows, ou
l'inverse, quelques-uns savent pourquoi mais pour la plupart c'est une affaire
de mode. La mode, l'émotion, font de nous des moutons de Panurge. Ne
devrions-nous pas plutôt étudier les objets familiers qui nous entourent, avoir
avec eux un rapport raisonnable, sinon rationnel ?
- *
- * *
- Pour savoir comment marche notre ordinateur,
il faut avoir compris ce que fait son système d'exploitation (SE). Il est vrai
que les livres sur le sujet sont arides. Laurent Bloch comble une lacune et
satisfait notre curiosité.
Que savons-nous du SE ? qu'il affiche les
fenêtres que nous voyons à l'écran et qu'il gère le répertoire des fichiers
(ceux qui ont utilisé MS-DOS se rappellent les instructions qui permettaient de
les créer, déplacer, détruire, concaténer etc.) Nous savons en outre que les SE
des mainframes sont dotés de fonctions plus riches que celles-là, mais que nous
ignorons. Ici s'arrête d'habitude notre science. En effet, la seule partie du SE
qui soit visible par l'utilisateur est l'interface homme-machine et le
répertoire des fichiers.
Laurent Bloch nous permet d'aller plus loin. Le
SE vise à faciliter l'utilisation de l'ordinateur ; il exécute pour notre
confort, et sans que nous ne lui demandions rien, nombre de tâches essentielles et
discrètes. Lors de l'exécution d'un programme, il reçoit les instructions que
fournit le compilateur. Ces instructions sont écrites sous la forme d'une suite
de 0 et de 1 qui représentent des commandes et des adresses. Le SE déclenche
l'exécution d'autres programmes pour gérer les processus en cours, les
équipements périphériques et la mémoire. Son "noyau" ("kernel") regroupe tous
les programmes qui interagissent avec les éléments matériels de l'ordinateur.
Notre ordinateur obéit à l'architecture de von
Neumann (1945) : un processeur, comportant l'unité de commande, l'unité
arithmétique, l'unité d'entrée sortie et des registres, puise dans la mémoire
les instructions et les données ; il consulte ces dernières, les traite, charge
dans la mémoire le résultat des traitements.
Je ne retiens ici que les fonctions qui m'ont le
plus intéressé parmi celles décrites par Laurent Bloch : l'exécution
pseudo-simultanée des programmes et la gestion de la mémoire.
Exécution pseudo-simultanée
Le processeur exécute les instructions de façon
séquentielle, l'une après l'autre ; et pourtant, nous utilisons plusieurs
applications simultanément (sont ouverts en ce moment sur mon PC FrontPage,
Word, Outlook Express, Internet Explorer et Group Mail Pro : eh oui, je suis
pour quelque temps encore un des captifs de Microsoft...). Le processeur, qui
est très rapide, exécute les programmes de façon pseudo-simultanée : il sait
arrêter le programme en cours, gérer les priorités dans la file d'attente des
programmes candidats, relancer l'exécution d'un programme antérieurement arrêté.
Considérons une opération simple comme déplacer
le curseur en fin de ligne lors de la saisie d'un texte. Si nous utilisons un
raccourci clavier, cette action prendra 0,25 secondes et se traduira par environ
20 000 instructions élémentaires. Si notre processeur a une vitesse de 500 MIPS,
il peut en 0,25 secondes traiter 124,97 millions d'instructions supplémentaires.
20 000 instructions élémentaires, c'est donc très peu de choses ...
Certains SE "non préemptifs" comme MS-DOS ou les
premières versions de Windows ne géraient pas la file d'attente des programmes.
Ce soin était laissé aux programmes eux-mêmes. Certains trouvaient cela "cool" :
comme c'était "décentralisé", c'était "démocratique". Mais cela provoquait des
plantages de plus en plus fréquents, notamment si le PC travaille en réseau ou
qu'il se produit des interruptions asynchrones (provoquées par un élément
matériel extérieur au processeur, elles peuvent se produire alors qu'une
instruction est en cours de traitement) (p. 52). La démagogie existe aussi en
informatique.
Gestion de la mémoire
Comme le coût de la mémoire est fonction
croissante de la vitesse d'accès, le PC utilise plusieurs mémoires dont la
taille est d'autant plus petite que la vitesse d'accès est plus élevée (le
disque dur, mémoire la plus volumineuse, est aussi la plus lente).
Outre la RAM, où résident les programmes en cours
d'exécution, le processeur comporte des mémoires caches très petites (quelques
Mo) et très rapides, dont le SE assure la gestion (fort délicate).
La "mémoire virtuelle" est une technique
d'écriture des adresses : les adresses virtuelles que comporte le programme ne
sont traduites en adresses réelles que lorsque l'on en a besoin. Cela permet
d'utiliser un espace d'adressage aussi grand qu'on le souhaite, et de se libérer
des contraintes liées à la taille de la mémoire physique. La traduction des
adresses virtuelles en adresses réelles est effectuée à la volée par la MMU ("Memory
Management Unit"). Les programmes, eux, n'ont à connaître que les adresses
virtuelles.
L'appel d'une donnée par un programme doit
pouvoir être indifférent à la nature de la mémoire sur laquelle elle réside :
c'est au SE qu'il revient d'automatiser les entrées et sorties.
|