1

Évolution historique de l'utilisation des ordinateurs

A l'origine, les ordinateurs étaient utilisés pour des besoins spécifiques, par une population réduite de personnes qui connaissaient tous les aspects de leur exploitation. Des raisons économiques, d'adéquation aux besoins, d'amélioration de performances, etc..., ont entraîné une évolution de cette exploitation. Cette évolution a conduit à l'introduction de plusieurs concepts successifs. Un rappel historique permet la présentation de ces concepts et leur justification.

1.1. Les systèmes purement séquentiels (1950-1960)

1.1.1. Les programmes autonomes (1950)

Initialement, les périphériques des ordinateurs se résumaient en un lecteur de cartes, un perforateur de cartes, et une imprimante. Le mode de fonctionnement était assez simple, vu de l'utilisateur, puisque l'exécution d'un programme consistait à mettre dans le lecteur de cartes un paquet contenant la forme “binaire” du programme suivie des données. Après lecture du programme, l'ordinateur en lançait l'exécution, les résultats étant obtenus sous forme d'un paquet de cartes perforées, ou de lignes imprimées (figure 1.1).

Fig. 1.1. Fonctionnement en programmes autonomes.
La constitution de la forme binaire était peut-être un peu compliquée. Il est en effet apparu très vite que l'écriture de programmes devait être aidée de façon à éviter la conception directe en forme binaire. Les langages d'assemblage ou de haut niveau, FORTRAN par exemple, sont apparus très tôt. Le programmeur constituait une suite de cartes contenant le texte source de son programme, dont il obtenait une traduction sous forme binaire au moyen de l'exécution successive de divers programmes standards (les “passes” du compilateur). Ainsi l'exécution d'un programme FORTRAN, perforé sur un paquet de cartes ps, pouvait, par exemple, demander les étapes suivantes:
A la fin de l'exécution de la passe 2, pi peut être jeté, car il ne sert plus à rien.
Le concept de base de ce mode de fonctionnement était la notion d'amorçage. La mise en route (ou la réinitialisation) de l'ordinateur lance l'exécution d'un programme cablé de quelques instructions (l'amorce cablée), qui met le matériel en position de lecture d'une carte, dont le contenu sera mémorisé dans un emplacement fixe de la mémoire. Dès que cette carte est lue, le matériel exécute l'instruction qui se trouve à cet emplacement fixe. Le contenu de cette première carte doit donc être un court programme qui assure le chargement en mémoire des cartes qui suivent, et le lancement du programme correspondant. D'où le terme d'amorce logicielle (bootstrap en anglais). Notons que ce concept est toujours utilisé sur les ordinateurs d'aujourd'hui, lors de leur mise en route ou de leur réinitialisation; le seul changement intervenu est de pouvoir amorcer la machine depuis n'importe quel périphérique, et non plus à partir de cartes perforées.
Ce mode de fonctionnement correspondait assez bien à la structure purement séquentielle de l'ordinateur. Le matériel était conçu pour exécuter les instructions du programme sans intervention extérieure possible, en dehors de la réinitialisation. Ainsi la lecture d'une carte commençait lorsque le programme faisait appel à l'instruction correspondante, cette instruction se terminant lorsque la carte avait été lue sans erreur en mémoire.
Ce mode de fonctionnement attire les remarques suivantes:
Notons que le mode d'utilisation des micro-ordinateurs individuels s'apparentent à celui-ci, avec remplacement des cartes par les disquettes. La fonctionnalité a néanmoins été améliorée, et les programmes ne fonctionnent plus tout à fait sur une machine nue.

1.1.2. Le moniteur d'enchaînement des travaux (1955)

L'émergence des supports magnétiques (bandes initialement) a tout d'abord permis la conservation des programmes binaires importants sur ce support. Il a fallu alors définir des outils spécifiques de gestion de ces périphériques, pour permettre aux utilisateurs de retrouver facilement ces programmes. Simultanément, pour améliorer la rentabilité des machines, on a imaginé l'introduction du moniteur d'enchaînement des travaux, qui est un programme particulier activé automatiquement à la fin de l'exécution de chaque programme utilisateur, et dont le but est d'assurer alors la lecture en mémoire et le lancement du programme utilisateur suivant (figure 1.2).

Fig. 1.2. Moniteur d'enchaînement des travaux.
Dans ce contexte, l'utilisateur prépare un paquet de cartes représentant son travail (job en anglais), et qui est constitué d'une ou plusieurs étapes (steps). Chaque étape correspond à un programme dont l'exécution est demandée par l'utilisateur sur un jeu de données particulier. Ce programme peut être un des utilitaires conservés sur bande, tel qu'un compilateur, ou le résultat d'une étape précédente mémorisé temporairement sur bande.
Le moniteur d'enchaînement joue le rôle du programme de l'amorce logicielle vu en 1.1.1, et assure le chargement et l'exécution successifs de chacun des programmes définis par les étapes des travaux des différents utilisateurs. Pour cela trois concepts ont été introduits:
Ce mode de fonctionnement attire les remarques suivantes:

1.1.3. L'ordinateur spécialisé d'entrées-sorties (1960)

Les opérations d'entrées-sorties relatives aux cartes et aux imprimantes sont, en général, longues par rapport aux performances des machines. Comme le moniteur d'enchaînement impose que ces opérations soient exécutées par le superviseur d'entrées-sorties, au lieu de l'être directement par le programme, celui-ci peut réaliser différemment ces opérations, pourvu que le résultat soit le même pour l'utilisateur. Aussi, pour améliorer la rentabilité de l'ordinateur de traitement, on a imaginé de transférer les cartes sur une bande, en utilisant un ordinateur spécifique et bon marché, et de faire lire cette bande, à la place des cartes, par le moniteur d'enchaînement des travaux. De même, les résultats d'impression sont transférés sur bande dans l'ordinateur principal, et la bande est ensuite lue par l'ordinateur spécifique pour être imprimée (figure 1.3).

Fig. 1.3. Traitement par lot avec ordinateur spécialisé d'entrées-sorties.
Ce mode de fonctionnement attire les remarques suivantes:

1.2. L'introduction du parallélisme (1960-1965)

1.2.1. Les entrées-sorties tamponnées (1960)

Il est apparu très vite que la réalisation matérielle d'une opération d'entrées-sorties par le processeur de calcul conduisait à une mauvaise rentabilité de la machine. Les concepteurs du matériel ont donc introduit des processeurs spécialisés qui prenaient en charge ces opérations de façon autonome (voir le chapitre suivant). Il était ainsi possible de poursuivre les traitements pendant l'exécution de l'opération. Ceci a permis de connecter de nouveau les périphériques de type lecteur de cartes ou imprimante sur l'ordinateur principal, et de supprimer l'ordinateur secondaire. Le superviseur d'entrées-sorties assure la lecture des cartes dans une zone dédiée de mémoire centrale, avant que le programme n'en ait effectivement besoin, permettant ainsi de satisfaire immédiatement sa demande ultérieure. De même, lorsque le programme demande une impression, celle-ci est remplacée par une recopie dans une zone dédiée de mémoire centrale, le superviseur assurant l'impression du contenu de cette zone ultérieurement.
Ce mode de fonctionnement n'a été rendu possible que par l'introduction du mécanisme d'interruption, permettant à un dispositif extérieur d'arrêter momentanément le déroulement normal d'un programme pour exécuter un traitement spécifique. Nous reviendrons plus en détail sur ce mécanisme dans le chapitre suivant. Par exemple, lorsque le lecteur de cartes a fini le transfert du contenu de la carte dans la mémoire centrale, il le signale au superviseur par le biais d'une interruption. Celui-ci peut alors commander la lecture de la carte suivante dans un autre emplacement mémoire. De même, l'imprimante signale au superviseur, par une interruption, la fin de l'impression d'une ligne. Celui-ci peut alors commander l'impression de la ligne suivante si elle est disponible.
Ce mode de fonctionnement attire les remarques suivantes:

Fig. 1.4. Entrées-sorties tamponnées.

1.2.2. La multiprogrammation (1965)

Les méthodes vues jusqu'alors, si elles améliorent la rentabilité des machines, atteignent cependant leurs limites. En effet, lorsqu'un programme s'exécute, il n'est pas possible de supprimer complètement les temps des opérations d'entrées-sorties. Le tamponnement, ainsi qu'il a été introduit ci-dessus, n'apporte qu'une solution partielle, du fait de la taille limitée du tampon. Par ailleurs, il n'est guère envisageable pour les périphériques à accès aléatoire tels que les disques. Les temps d'unité centrale laissés disponibles par un programme pendant ses entrées-sorties, peuvent être récupérés par d'autres programmes indépendants s'ils sont également présents en mémoire centrale à ce moment. C'est ce que l'on appelle la multiprogrammation (figure 1.5).

Fig. 1.5. Moniteur de multiprogrammation.
Constatons tout d'abord que, pour mettre plusieurs programmes simultanément en mémoire, il faut avoir de la place. La multiprogrammation a pu être développée grâce à l'augmentation de la taille des mémoires centrales conjointement à une diminution considérable de leur coût.
La mise en œuvre de la multiprogrammation nécessite le renforcement de certains mécanismes qui ont déjà été présentés:

Fig. 1.6. Fonctionnement simplifié de la multiprogrammation.
Ce mode de fonctionnement attire les remarques suivantes:

1.2.3. Le contrôle de procédés (1965)

Les ordinateurs peuvent aussi être spécialisés pour le contrôle de procédés. Par analogie avec ce qui précède, les interruptions vont permettre de déclencher des programmes spécifiques de lecture d'informations sur des capteurs, de mémorisation de ces valeurs, ou d'envoi de commandes à l'extérieur. Lorsque aucune activité de ce type (travaux en avant plan ou foreground en anglais) n'est à exécuter, l'ordinateur peut être utilisé pour des travaux en arrière plan (background en anglais). Les travaux en avant plan correspondent aux activités du superviseur vues au paragraphe précédent, alors que les travaux en arrière plan correspondent aux travaux des utilisateurs (figure 1.7).

Fig. 1.7. Contrôle de procédés industriels.

1.3. L'amélioration de l'interface homme-machine (1965-1980)

1.3.1. Le temps partagé (1965)

L'évolution qui ressort des étapes ci-dessus conduit à un éloignement entre l'utilisateur et la machine. Il était naturel que l'on cherche à retrouver certaines fonctionnalités intéressantes de l'utilisation en portes ouvertes, sans en avoir les inconvénients. Constatant qu'un utilisateur est satisfait s'il passe beaucoup plus de temps à réfléchir au travail qu'il va demander qu'à attendre le résultat de ce travail, ce temps de réflexion peut être mis à profit par l'ordinateur pour répondre aux besoins des autres utilisateurs. L'ensemble des ressources de la machine est partagé entre un ensemble d'utilisateurs, chacun d'eux ayant l'impression qu'il a la machine pour lui tout seul (figure 1.8).
La conception d'un système en temps partagé a nécessité l'introduction de l'horloge temps réel, en plus des mécanismes déjà vus.

Fig. 1.8. Système en temps partagé.
En réalité, c'est un peu plus complexe, dans la mesure où il n'est pas raisonnable de laisser un programme d'un utilisateur en mémoire pendant que cet utilisateur réfléchit, car ce temps de réflexion est souvent de l'ordre de 30 secondes. En général il est préférable de mémoriser ce programme sur disque pendant ce temps, et de le rappeler en mémoire lorsque nécessaire. Ceci a été rendu possible par des techniques de va-et-vient (swapping en anglais) ou de mémoire virtuelle.
Par ailleurs le grand nombre d'utilisateurs ayant des activités voisines implique qu'un même programme peut être en cours d'exécution pour plusieurs utilisateurs à la fois (un compilateur par exemple). Ceci a conduit à la conception de programmes réentrants: un seul exemplaire du programme capable de traiter en même temps plusieurs jeux de données.

1.3.2. Le transactionnel (1970)

Le temps partagé s'adresse plutôt à l'utilisateur qui désire concevoir, mettre au point et utiliser des programmes. Le développement des terminaux a conduit à s'intéresser aux utilisateurs qui désirent exploiter des applications spécifiques orientées vers la saisie et la consultation d'informations conservées dans des fichiers. Il ne s'agit plus alors de mettre à leur disposition une machine, mais de leur permettre d'effectuer sur des données, qu'ils ont mises en commun, des opérations préprogrammées qui demandent un temps d'unité centrale assez bref. Ceci conduit à gérer l'ordinateur et les terminaux de façon spécifique pour améliorer les temps de réponses vus de l'utilisateur.
Par rapport aux concepts évoqués jusqu'alors, le partage d'informations est ici fondamental, alors qu'il était secondaire dans les modes précédents. Ce partage peut couvrir les données proprement dites, mais aussi les instructions qui décrivent les opérations. Pour gérer ce partage et garder la cohérence de ces données partagées, on introduit la notion de transaction.
De plus la conservation des données, quoi qu'il arrive, est aussi exigée par les utilisateurs. Il faut donc mettre en œuvre des mécanismes de sauvegarde appropriés.

1.3.3. Les stations de travail (1980)

L'abaissement des coûts des matériels a permis la conception d'ordinateurs individuels dont les performances avoisinnent celles des ordinateurs de moyenne puissance des années 1970-1980. Ceci n'a pas eu pour conséquence la remise en cause des concepts de base des systèmes d'exploitation. L'utilisateur, habitué à une fonctionnalité fournie sur les gros systèmes, désire retrouver cette fonctionnalité agrémentée d'une meilleure convivialité sur sa machine personnelle.
D'un point de vue général, le poste de travail a d'abord été conçu de façon autonome, utilisé par une seule personne. En ce sens, le système lui-même avait des fonctionnalités simplifiées proches de celles des premiers systèmes. L'exemple type est MSDOS. Les performances de mémoires centrales ont ensuite permis de définir directement par logiciel et point par point, le contenu de l'image qui est affichée à l'écran 25 fois par secondes. Les fonctionnalités du système se sont alors naturellement étendues vers les aspects graphiques et l'interactivité au moyen de la souris, avec l'apparition des premiers MacIntosh au début des années 1980. Ceux-ci étaient déjà organisés en un petit réseau local permettant le partage de fichiers et d'imprimantes entre les utilisateurs. Par la suite, les recherches poursuivies au MIT ont conduit à la sortie d'un produit X-Window, à la fin des années 1980, qui permettait la séparation entre le programme de gestion de l'écran graphique situé sur une machine et celui de l'application elle-même de l'utilisateur situé sur une autre machine, la coopération entre les deux programmes passant par le réseau, selon un mode client-serveur. On appelle ainsi le mode de fonctionnement où l’un des programmes, appelé client, ici l’application, demande un traitement spécifique (service) à l’autre, appelé le serveur, ici la gestion de l’écran.
La généralisation des postes de travail en réseau et l’interconnexion des réseaux ont conduit au world wide web ou toile mondiale, où un programme, appelé navigateur, installé sur le poste de travail de l’utilisateur, permet à celui-ci d’obtenir, depuis des serveurs situés n’importe où, des informations qui sont mises en page par le navigateur.
Deux aspects importants découlent de ces utilisations:

1.4. Conclusion

+ L'amorce (bootstrap) est un petit programme qui est chargé en mémoire en une seule opération d'entrée lors de la mise en route de l'ordinateur, et dont l'exécution permet le chargement et le lancement d'un programme plus important.
+ Un programme autonome (stand alone) est un programme capable de s'exécuter sur une machine nue.
+ Un moniteur d'enchaînement des travaux est un programme spécifique qui assure, à la fin d'exécution d'un programme utilisateur, le chargement et l'exécution du suivant de façon automatique.
+ Le langage de commande permet à l'utilisateur de définir la suite des programmes dont il veut voir l'exécution.
+ Le superviseur d'entrées-sorties est un ensemble de sous-programmes qui assure le contrôle et la bonne exécution des entrées-sorties pour le compte des programmes des utilisateurs.
+ Le mécanisme d'interruption est le mécanisme qui permet à un organe matériel externe d'interrompre le déroulement normal du processeur pour lui demander d'exécuter un travail spécifique et bref.
+ La multiprogrammation consiste à mettre plusieurs programmes en mémoire centrale au même moment de façon à pouvoir exécuter l'un d'entre eux pendant que les autres sont en attente de la fin d'une entrée-sortie.
+ La protection mémoire est un dispositif matériel qui permet d'empêcher un programme d'accéder en mémoire à des données qui ne lui appartiennent pas.
+ Le temps partagé consiste à partager dans le temps les ressources de la machine entre les utilisateurs, de telle sorte que chacun d'eux ait l'impression d'avoir la machine pour lui seul.
+ Le système d'exploitation est le logiciel chargé de gérer l'ensemble du matériel et du logiciel à la disposition des utilisateurs et qu'ils se partagent.
+ Le débit des travaux est le nombre moyen de travaux exécutés par la machine en un temps donné.
+ Le temps de réponse est le délai qui sépare le moment où l'utilisateur soumet sa commande et le moment où il obtient le résultat.