Université Pierre et Marie Curie

Systèmes d'exploitation des ordinateurs

Chapitre 1. Les systèmes d'exploitation
1.1. Définition du système d'exploitation
1.2. Quelques exemples de systèmes d'exploitation
1.3. Evolution des systèmes d'exploitation
1.4. Unix
1.5. Windows
Chapitre 2. Mécanismes d'exécution et de communication
Chapitre 3. Gestion des activités parallèles
Chapitre 4. Gestion des fichiers
Chapitre 5. Partage des ressources
Chapitre 6. Au-dessus du système d'exploitation
Chapitre 7. Notions sur les communications
Chapitre 8. Notions sur la sécurité
Bibliographie
Chapitre 9. Exercices et TPs
Examens
Page d'accueilTable des matièresNiveau supérieurPage précédenteBas de la pagePage suivante

1.3. Evolution des systèmes d'exploitation

Un rapide historique

Les premiers ordinateurs ne possédaient pas vraiment de système d'exploitation. Le moniteur était chargé avec l'unique programme à exécuter qui se greffait sur ce système rudimentaire tout comme une fonction ou un sous-programme se greffe aujourd'hui sur le programme principal. Les entrées-sorties étaient rudimentaires, réduites à un ruban perforé, les programmes écrits en langage machine, c'est à dire directement codés en suite de chiffres, exécutés pas à pas et modifiés directement en mémoire au moyen d'un jeu de clés !

Vers 1950 est apparu le moniteur d'enchaînement. Il permettait l'exécution d'une série de travaux en séquence, c'est à dire l'un après l'autre. C'est l'ancêtre du traitement par lot. Il possédait déjà des fonctions de protection: maximum de temps par travail, supervision des périphériques, protection de la zone mémoire utilisée, gestion et abandon des travaux erronés. Ces avancées étaient fondamentales car elles introduisaient un environnement autour du programme à exécuter. Nous verrons, lorsque nous étudierons le fonctionnement des processus au chapitre II, l'importance de cette notion dans le fonctionnement des machines modernes.

L'informatique moderne naît dans les années 1960. On peut résumer rapidement ses avancées autour de l'invention des notions suivantes :

  • Apparition des processeurs d'entrées-sorties
  • Multiprogrammation, c'est à dire possibilité d'exécuter plusieurs programmes simultanément.
  • Compilateurs
  • Temps partagé
  • Mémoire paginée virtuelle. Elle permet de faire fonctionner un ensemble de programmes dont la taille est supérieure à celle de la mémoire physique.
  • Les communications
Les entrées-sorties

Les échanges entre la mémoire et le processeur sont très rapides. Le débit des périphériques est beaucoup plus lent, surtout lorsqu'il met en oeuvre des éléments mécaniques. D'où l'idée de tampons (ou buffers), zones spéciales de la mémoire réservées au stockage de l'information en attente de transfert. Dans les machines les plus performantes les contrôleurs d'E/S sont de véritables ordinateurs affectés uniquement à cette tâche. 

Multiprogrammation

La multiprogrammation ne doit pas être confondue avec le temps partagé qui apparaitra plus tard. L'idée part du constat que le processeur est mal employé à chaque fois qu'un programme est interrompu par l'attente d'une communication avec un périphèrique : plutôt que de le mettre en sommeil pourquoi ne pas l'affecter à une autre tâche ? Un ensemble de programmes est donc chargé simultanément en mémoire, leur exécution est chaînée, c'est à dire que le processeur exécute successivement des séquences d'instructions pour chacun. Le passage de l'un à l'autre est optimisé de façon à occuper au mieux la partie la plus précieuse de la machine: le processeur. L'unité centrale est affectée à une nouvelle tâche chaque fois qu'un programme est en attente d'échanges, c'est à dire effectue des entrées-sorties. La commutation des tâches doit être très rapide. Il faut aussi que le débit des échanges entre la mémoire et le processeur soit suffisant pour que ceci ne soit pas le facteur de blocage. La bande passante du bus doit donc être grande. Un système multitâche est complexe car il faut sauvegarder le contexte de travail de chaque programme lorsque son exécution est interrompue. De plus il n'est pas aisé de se prémunir contre des blocages possibles lorsque toutes les tâches se mettent en attente d'une ressource déjà réservée. Ce problème sera évoqué au chapitre III.1.

Les compilateurs

L'emploi des premiers ordinateurs est affaire d'hyperspécialistes puisqu'on doit coder directement en langage machine voire en binaire ! Dès le milieu des années 50 des théoriciens se demandent s'il est possible d'imaginer un langage proche de l'expression humaine et un outil capable de le traduire en code binaire tout en optimisant le code réalisé. Un compilateur traduit un programme écrit dans un langage aussi naturel que possible en un code binaire compréhensible par l'ordinateur. Il peut éventuellement optimiser son déroulement. Par exemple, tous les compilateurs savent détecter dans les boucles les instructions qui ne dépendent pas de celles-ci et sont donc répétées inutilement. Ils les déplacent automatiquement. De même ils savent utiliser les jeux de registres du processeur pour minimiser les transferts de et vers la mémoire. Le premier compilateur est apparu en 1961. Il s'agit de Fortran, langage orienté vers le calcul scientifique (FORmulae TRANslation), développé à l'époque dans l'unique but de vérifier s'il était possible d'écrire un tel outil. On sait ce qui est advenu de ce travail qui n'avait au départ aucun but applicatif! Il ne faut pas confondre un compilateur avec un interpréteur - Basic fut le premier - qui lit puis décode chaque instruction successivement au moment de son exécution. Ceci sera évoqué au chapitre VI.  Depuuis bien d'autres langages ont été inventé. Mentionnons le langage C, inventé pour développer plus rapidement qu'en langage assembleur un nouveau système d'exploitation : il s'agissait d'Unix.

Mémoire virtuelle

Pendant longtemps le coût des dispositifs électroniques et leur manque de compacité ne permettait de construire que des mémoires de petite taille. Dans les années 60, par exemple, les super-ordinateurs possédaient une mémoire partie sous forme de microbobines électromagnétiques, partie sous forme de transistors et leur dimension n'excédait pas quelques centaines de Koctets ! Le souci était donc également d'optimiser son usage, d'où l'invention de la mémoire virtuelle qui sera évoquée au chapitre V.

Très schématiquement il s'agit d'un dispositif qui permet de simuler la mémoire de l'ordinateur sur un disque (zone de swap). Seules les informations nécessaires à l'activité immédiate résident, à un instant donné, dans la vraie mémoire. Ceci permet d'exécuter des programmes dont la taille est supérieure à la mémoire réelle de la machine. Le mauvais coté de cette invention est qu'il faut multiplier les échanges entre le disque et la mémoire pour la mettre à jour. Il faut donc disposer de périphériques et de contrôleurs d'entrées-sorties rapides. 

Les communications

Les années 1980 ont été marquées par le développement des échanges d'informations entre ordinateurs. Les systèmes se sophistiquent jusqu'à faire éclater l'organisation en étoile qui prévalait jusqu'alors: tous les terminaux, tous les périphériques étaient alorsreliés à une machine unique qui centralisait toutes les fonctions. Les réseaux, en conjonction avec l'effondrement du prix des mémoires et des processeurs et l'augmentation vertigineuse de leur rapidité, vont amener à la notion d'informatique distribuée. Les machines sont déplacées près des hommes. Il apparaît la notion de serveur, machine virtuelle répartie éventuellement sur plusieurs machines physiques, répondant aux requêtes d'utilisateurs distribués géographiquement sur un grand territoire: serveur de fichiers, serveur de calcul, de messagerie... Le réseau devient le bus d'une espèce de machine virtuelle à l'échelle d'un campus ou d'une entreprise.La demande croissante de puissance fait apparaître les machines multiprocesseurs et les ordinateurs massivement parallèles. Dans tous les cas ceci revient à faire travailler ensemble plusieurs processeurs (de quelques uns à quelques milliers) pour exécuter une ou plusieurs tâches. Le gros problème, loin d'être résolu aujourd'hui, est de faire coopérer cet ensemble. Les machines multiprocesseurs sont limitées par les conflits dans l'accès à une mémoire commune. On montre qu'il est inutile de dépasser quelques dizaines de processeurs dans le meilleur des cas car le gain devient de plus en plus faible et se révèle trop onéreux. Les ordinateurs parallèles sont des machines où chaque processeur dispose de sa propre mémoire. Le point critique est l'échange des informations entre ces processeurs qui doivent coopérer. Il n'existe pas de compilateur capable de générer automatiquement le code parallèle et leur programmation demande de grands efforts. Ils sont encore largement expérimentaux même si tous les grands constructeurs commencent à en produire.


Copyright Yves Epelboin, université P.M. Curie, 1994, MAJ 4 avril, 2005

Page d'accueilTable des matièresNiveau supérieurPage précédenteHaut de la pagePage suivante