I. Introduction aux systèmes d'exploitation

I.1. Définition d'un système d'exploitation

I.1.1. Rappels sur l'architecture des ordinateurs

Les trois éléments essentiels d'un ordinateur sont, du moins pour ce qui nous concerne, le processeur, la mémoire et le dispositif de gestion des entrées-sorties. Ils communiquent entre eux par l'intermédiaire du bus. Schématiquement un ordinateur peut être symbolisé comme suit :



Figure 1. Schéma de principe d'un ordinateur.

Le bus est le circuit d'échange des informations. Son débit ou bande passante est un paramètre important pour définir la rapidité d'une machine. Souvent, dans les micro-ordinateurs, elle est trop faible par rapport à la rapidité du processeur. Celui-ci attend fréquemment les informations en provenance de la mémoire ou des contrôleurs d'entrées-sorties. Dans le schéma ci-dessus on ne les a pas distingués mais un écran et un disque ne sont pas branchés sur le même contrôleur. Par exemple on trouve les mêmes processeurs PowerPC dans les Macintoshs et certaines machines SP (Scalable POWER parallel) d'IBM (International Business Machines Corporation).  La rapidité du bus et sa bande passante ne sont pourtant pas les mêmes, ce qui est une explique des différences de performances comme de prix. Les ordinateurs les plus performants possèdent un bus qui permet de transférer en parallèle 256 bits ou plus, les moins performants 32 bits seulement.  Il faut donc  plus de cycles pour transférer une information de même longueur (c'est à dire contenant le même nombre de bits) de la mémoire vers le processeur et  la rapidité effective de la machine n'a rien à voir avec celle du processeur. Un processeur moderne peut contenir plusieurs unités de calcul, additionneur, multiplicateur entier ou flottant. Certains peuvent effectuer des opérations plus complexes comme plusieurs additions et  multiplications flottantes simultanément. Le processeur peut donc réaliser plusieurs instructions élémentaires parallèlement. Les plus puissants possèdent une structure, appelée pipe-line qui permet d'enchaîner, dans certains cas, une opération à chaque cycle d'horloge alors que la précédente n'est pas terminée. Ceci accélère considérablement le débit de calcul. Cette complexité explique que la cadence de l'horloge ne permette pas de comparer des processeurs d'architecture différente. Deux directions se font jour pour augmenter les performances: compliquer l'architecture interne du processeur mais conserver un cycle relativement lent (IBM Power par exemple) ou diminuer le temps de cycle (Intel par exemple) mais avec une architecture plus simple. Il n'existe pas de meilleur choix: suivant les programmes l'une ou l'autre architecture se révèle la meilleure. Les unités de commande travaillent selon les processeurs sur des mots de 32 bits (Intel Pentium IV) ou, de plus en plus aujourd'hui, sur 64 bits (AMD (Advanced Micro Devices) Athlon, IBM Power...). Le jeu d'instructions varie fortement d'une réalisation à l'autre : instructions courtes RISC (reduced instruction set computer) (Power IBM, Sparc Sun, Intel Itanium par exemple) ou longues (Intel Pentium, AMD Athlon). Le code d'un langage évolué correspond donc à un nombre plus ou moins grand d'instructions machine et la comparaison des performances est beaucoup plus compliquée que la simple mesure des cycles d'horloge.

Les processeurs modernes intègrent dans leur puce une mémoire cache accessible très rapidement pour accélérer les opérations. On ajoute également un deuxième niveau de mémoire, placée juste à côté du processeur sur la carte mère, connue sous le nom de cache niveau 2 ou L2. Les communications avec le processeur sont plus rapides que celles avec la mémoire car elles ne passent pas par le bus dont la bande passante est bien inférieure au débit que peut accepter le processeur. Lorsqu'une instruction ou une donnée est contenue dans un cache son fonctionnement est accéléré car il n'attend plus un transfert. Le processeur demande simultanément l'information voulue à la mémoire et aux caches. Lorsqu'elle est disponible dans celles-ci la réponse arrive très rapidement et la requête est abandonnée. On a donc intérêt à posséder des caches de grande dimension car, statistiquement, la chance d'y retrouver une information est plus grande. Idéalement toute la mémoire devrait être un immense cache accessible très rapidement mais cela exploserait le prix des machines. C'est le cas des superordinateurs comme les Cray qui ne possèdent pas de caches. La mémoire est construite avec les dispositifs les plus rapides, identiques à ceux utilisés dans les caches des machines ordinaires. Les performances sont optimales mais le coût est absolument prohibitif!

La mémoire est organisée, dans tous les ordinateurs, en groupes de 8 bits appelés octets ou bytes en anglais. Chaque octet possède une adresse numérique. Cependant le quantum manipulé par le processeur est le mot qui regroupe de quatre à huit octets selon le processeur. Le mot est de deux octets dans les micro-ordinateurs anciens. Les ordinateurs personnels et les stations de travail utilisent des mots de quatre ou huit octets. Les superordinateurs Cray possèdent des mots de huit octets. L'accès à la mémoire se fait de façon matricielle, selon des lignes et des colonnes. Comme une ligne ou une colonne qui vient d'être lue ou écrite est inhibée pendant un certain temps appelé temps de latence, la mémoire est divisée en bancs. Deux octets dont les adresses sont consécutives sont placés dans des bancs différents ainsi plusieurs bancs peuvent être accédé simultanément, ce qui améliore les échanges avec le processeur. Il ne faut pas oublier que le temps d'accès à la mémoire est bien plus long que le temps de cycle du processeur, de l'ordre de quatre fois au minimum. Multiplier les bancs permet d'échanger plus rapidement plusieurs informations entre le processeur et la mémoire. Un PC comporte habituellement quatre bancs, une grosse machine seize ou plus. Chaque octet est accompagné d'un certain nombre de bits qui servent au contrôle d'erreurs et à leur correction lors des échanges. Ce nombre peut atteindre 8 sur les gros ordinateurs, il est limité à un seul sur les micro-ordinateurs. La fiabilité, les capacités de fonctionner en environnement dégradé, sont liées à ce nombre. On comprend donc pourquoi, indépendamment de sa rapidité, le prix de la mémoire varie avec les modèles de machines.

Il faut distinguer le rôle des différentes mémoires qui existent dans la machine. Les disques servent à stocker l'information de façon permanente. Leur contenu se conserve même lorsque l'ordinateur n'est plus sous tension. Cependant comme les transferts entre ces périphériques et le processeur sont lents, celui-ci ne travaille jamais directement avec ces supports. Le processeur échange ses informations avec la mémoire et la mémoire dialogue avec les disques. Pour exécuter un programme il faut donc d'abord le déplacer du support permanent (le disque) vers la mémoire. Puis, au cours de l'exécution les données lues dans les fichiers sont déplacées par morceaux des disques vers la mémoire pour être employées par le processeur. Il en est de même, en sens inverse, pour les écritures. Il existe un mécanisme caché en deux étapes qui fait obligatoirement transiter les échanges par la mémoire. Cette hiérarchie se retrouve également dans les échanges entre la mémoire et le processeur avec les caches. Le processeur recherche ses informations d'abord dans ceux-ci. Ceci met en œuvre des algorithmes complexes car il faut savoir gérer les cas où les données recherchées ne s'y trouvent pas. Enfin il faut également considérer le rôle des registres, véritable mémoire interne du processeur. L'utilisateur n'y accède pas directement mais un compilateur bien écrit sait en tenir compte.

Il convient de ne pas confondre la taille de la mémoire qui définit les possibilités logicielles de la machine et la taille des disques qui indique sa capacité à stocker des informations permanentes. Le couple longueur du mot, longueur du registre d'adresse (ou compteur ordinal) est la première notion de l'architecture physique visible de l'extérieur. En particulier il permet de définir les tailles maximum des programmes et des tableaux : tous les adressages nécessaires pour accéder aux informations que ce soit dans la mémoire ou sur disque se font au moyen de nombres entiers. Une architecture à mot de 32 bits permet donc d'adresser un peu plus de quatre Giga-octets et il devient impossible d'adresser directement un système de fichiers ou une mémoire plus grande. Il faut se déplacer par indirection au moyen d'informations relais jamais séparées par une distance supérieure à cette valeur fatidique, ce qui diminue fortement l'efficacité de l'ordinateur. On comprend donc pourquoi aujourd'hui on développe des processeurs à mot de 64 bits : l'ordre de grandeur du plus grand entier est 1,8 1019, ce qui laisse une marge certaine pour les disques et les mémoires que l'on sait fabriquer aujourd'hui !

Le troisième paramètre important pour l'utilisateur est la largeur du bus qui définit combien de bits peuvent être transférés en parallèle. La rapidité de travail effectif d'une machine y est très sensible. Les contrôleurs sont construits pour assurer les communications avec les périphériques. Ils sont spécialisés dans leur usage et possèdent leur propre mémoire. Un contrôleur d'écran stocke ainsi une partie des informations qu'il présente à l'utilisateur. Un ou des processeurs auxiliaires présents sur la carte assurent le fonctionnement de base. Le problème fondamental est de réussir à faire fonctionner cet ensemble, à assurer les échanges d'information entre les différents éléments qui constituent la machine et surtout, du point de vue de l'utilisateur, à dialoguer avec lui. C'est le rôle du système d'exploitation. A titre d'exemple, voici quelques performances mesurées entre deux machines qui diffèrent essentiellement par leur processeur. La première est équipée d'un Pentium MMX, la seconde d'un Pentium II, tous les deux à 233 MHz. Les disques sont les mêmes ainsi que la mémoire. Le programme de mesure est Wintune 95 et le système d'exploitation Windows 95. Certes ces données sont anciennes mais elles permettent de comprendre l'influence de l'architecture et le peu d'intérêt qu'il faut porter à la vitesse d'horloge, sauf lorsqu'il s'agit de processeurs de la même famille qui ne différent que par leur cadence d'horloge. Le résultat est intéressant quoiqu'il faille toujours considérer des tests avec la plus extrême prudence.

Tableau 1. Résultats de tests des processeurs

Test

Pentium MMX

Pentium II (PII)

Lecture d'un bloc de 32 Koctets

225 Mb/s

419 Mb/s

Ecriture d'un bloc de 32 Koctets

85 Mb/s

209 Mb/s

Lecture d'un bloc de 4 Kb

1173 Mb/s

873 Mb/s

Ecriture d'un bloc de 4 Kb

85 Mb/s

1107 Kb/s

Que signifie ce test ? Comme l'architecture interne des deux processeurs n'est pas la même ces différences peuvent provenir de la taille des caches (plus grands pour le PII) comme de l'efficacité des instructions. On a cependant le sentiment que le PII ne prend toute son efficacité que lorsque la taille des blocs échangés est suffisamment grande. Et ceci dépend beaucoup des codes des programmes mais aussi de celui du système d'exploitation. Les gains peuvent donc être fort décevants lorsqu'on change de processeur sans se préoccuper des programmes.

I.1.2. Définition du système d'exploitation

Il existe plusieurs définitions possibles des systèmes d’exploitation.

Un système d'exploitation peut être vu comme un programme agissant en tant qu’intermédiaire entre l’utilisateur et le matériel de l’ordinateur. Le but principal d’un système d’exploitation est de fournir un environnement qui permet à un utilisateur d’exécuter des programmes.

Un système informatique doit savoir répondre aux demandes suivantes:

  • gestion de l'information: stockage, désignation, recherche, communications... Le stockage comprend la gestion des périphériques.
  • désignation et recherche sont liées notamment à l'architecture du système de fichier.
  • préparation et mise au point des programmes
  • exploitation des programmes.

I.2. Fonctions d'un système d'exploitation

Les principales fonctions du système d'exploitation peuvent être classées en trois rubriques:

I.2.1. La machine virtuelle

  • fonctions de gestion de l'information: structuration, conservation, désignation (mémoire virtuelle, fichiers...). Ceci concerne aussi bien l'information stockée sur les mémoires périphériques que dans celle de l'ordinateur.
  • transferts entre les différents éléments de la machine. Ceci concerne les échanges entre les différentes parties: mémoire, processeur, périphériques... Voir la figure 1.
  • fonctions d'exécution: exécution des programmes en parallèle, en séquence.

I.2.2. La gestion et le partage des ressources

  • gestion des ressources physiques: allocation de la mémoire principale et de la mémoire secondaire (fichiers), gestion des organes d'entrées-sorties.
  • partage et échange de l'information entre utilisateurs
  • protection mutuelle entre utilisateurs, sécurité.

I.2.3. Les outils d'exploitation

  • compilateurs, aide à la mise au point de programmes.
  • outils de sauvegarde, d'archivage, traitement des défaillances.
  • éditeurs, outils divers...

La plupart des utilisateurs ne connaissent que ce troisième niveau. Sa richesse, sa facilité d'emploi, sa souplesse définissent la qualité d'un système d'exploitation du moins pour le non-spécialiste.

I.3. Organisation en couches d'un système d'exploitation

Conceptuellement si on représente l'ensemble des fonctions d'un système d'exploitation sous forme de couches, on pourrait les décrire comme suit :



Figure 2. Couches du système d'exploitation.

Le logiciel d'application, celui développé par l'utilisateur ou installé à la demande, comme un traitement de texte, par exemple, utilise des fonctions intrinsèques au système d'exploitation. L'utilisateur y a également accès soit directement soit par l'intermédiaire d'utilitaires livrés avec le système. La machine physique n'est accessible qu'au travers du logiciel de base. Ce schéma n'est pas tout à fait rigoureux. Il est délicat de tracer la limite entre logiciels applicatifs et de base. Un système sophistiqué d'utilitaires de gestion des fichiers comme PCTools pour micro-ordinateurs "IBM compatibles" est un applicatif car il est ajouté par l'utilisateur. Compris dans la livraison initiale il serait considéré comme logiciel de base !

A l'intérieur même du logiciel de base, on peut distinguer deux couches:

  • Les outils, les services, les compilateurs, éditeurs, communications ...
  • Le système d'exploitation

Là encore la distinction n'est pas nette entre certains outils et le système d'exploitation. Les communications peuvent également être considérées comme partie du système.

I.4. Virtualisation de la machine

Une des premiers systèmes d'exploitation à gérer le concept de machine virtuelle (l'adaptation du temps partagé) a été l'OS/360 d'IBM, proposé vers 1968 sous le nom de CP/CMS (Control Program/Cambridge Monitor System), puis sous le nom de VM/370 (Virtual Machine Facility) en 1979.

Le cœur du système d'exploitation, appelé moniteur de machine virtuelle ou VM/370, s'exécute sur le même matériel et fournit à la couche supérieure plusieurs machines virtuelles. Ces machines virtuelles sont des copies conformes de la machine réelle avec ses interruptions, ses modes noyau/utilisateur,… etc.

Chaque machine virtuelle peut exécuter son propre système d'exploitation. Lorsqu'une machine virtuelle exécute en mode interactif un appel système, l'appel est analysé par le moniteur temps partagé de cette machine, CMS. Toute instruction d'entrées/sorties (E/S), toute instruction d'accès mémoire est convertie par VM/370 qui l’exécute dans sa simulation du matériel. La séparation complète de la multiprogrammation et de la machine étendue rend les éléments du système d'exploitation plus simples et plus souples. VM/370 a gagné de la simplicité en déplaçant une grande partie du code d'un système d'exploitation dans le moniteur CMS.

I.5. Evolution des systèmes informatiques

I.5.1. 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 étaient é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.

L'informatique moderne nait 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

I.5.2. 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 œuvre 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.

I.5.3. 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 chainé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.

I.5.4. Les compilateurs

L'emploi des premiers ordinateurs était une affaire d'hyper-spé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. 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.  Depuis 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.

I.5.5. 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 micro-bobines é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.

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 côté 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.

I.5.6. Les communications

Les années 80 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 alors relié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.

I.6. Exemples de systèmes d'exploitation

Comme son nom l'indique l'ordinateur individuel n'est employé que par une seule personne à la fois. Celle-ci dispose de moyens de communication: écran, clavier, souris, une imprimante et éventuellement d'une tablette graphique. Des mémoires secondaires appelées aussi unités de stockage: disque, disquette ou bande magnétique permettent de conserver l'information de façon permanente. La taille de la mémoire principale est un paramètre important pour définir quels programmes peuvent être employés. Le système d'exploitation gère cet ensemble de façon plus ou moins transparente pour l'utilisateur. Il permet de donner des ordres à la machine et d'en recevoir en retour des informations qui sont le résultat du traitement demandé. Les ressources de l'ordinateur ne sont employées que par l'unique usager de la machine. Quelques fonctions peuvent s'exécuter simultanément. Par exemple il est possible d'afficher une horloge tout en utilisant un traitement de textes ou graver un CD (Compact disc) mais la simultanéité n'est pas le point de force de cette machine. Ce parallélisme qui n'est qu'apparent s'améliore dans les dernières versions des systèmes d'exploitation et parce que la puissance des processeurs ne cesse de croître. Les mécanismes de sécurité nécessaires pour préserver la confidentialité des informations sont peu ou mal employés lorsqu'ils existent.

Un ordinateur qui contrôle un procédé industriel doit veiller sur un ensemble de paramètres physiques et engager des actions en fonction de leurs valeurs. Les délais de réponse peuvent être très courts et doivent être toujours garantis. Ceci est particulièrement vrai en ce qui concerne la sécurité: au cas où certains paramètres sortiraient de leur plage de valeurs normales il est indispensable de réagir de façon appropriée en un temps défini. Un système d'exploitation orienté temps réel doit donc pouvoir garantir une réponse avec une contrainte dans le temps.

Ceci introduit deux contraintes importantes :

  • Les informations doivent être acquises sur les différents dispositifs d'entrés périodiquement. Cette période Description : tau.gif (838 octets) doit être respectée précisément ainsi qu'il a été défini dans le cahier des charges. Le traitement de ces informations est effectué en un temps maximum T. Ce temps peut être défini soit port d'entrée par port d'entrée soit pour l'ensemble des mesures à acquérir mais il est évident que le système ne pourra fonctionner correctement que si, dans tous les cas, T est plus petit, voire beaucoup plus petit queDescription : tt.
  • Les fonctions de sécurité sont prioritaires, certaines le sont plus que d'autres. Il faut donc disposer des moyens matériels et logiciels pour gérer ces priorités et pouvoir, le cas échéant, interrompre toute activité moins prioritaire.
  • Il doit également présenter la souplesse nécessaire pour que l'on puisse aisément piloter des dispositifs au travers de cartes électroniques standards du marché.

De tels systèmes sont appelés systèmes temps réel. Certains systèmes d'exploitation peuvent s'en rapprocher, notamment parce que la puissance des processeurs aujourd'hui permet à un système de répondre relativement rapidement, mais sans disposer de toutes les fonctions qui pourraient permettre de garantir les délais de traitement. Enfin n'oublions pas que les commandes de processus industriel doivent être particulièrement fiables, en relation avec le niveau de sécurité exigé, ce qui peut nécessiter des dispositifs électroniques et logiques supplémentaires. Dans certains cas plusieurs ordinateurs effectuent le même travail, comparent en permanence leurs résultats et prennent une décision ... à la majorité!

Le cas des systèmes embarqués est particulier : outre les contraintes des systèmes temps réel il est impossible pour des raisons diverses; (environnement, volume, poids..) d'employer les composants que l'on retrouve dans la plupart des ordinateurs. Il faut alors employer des systèmes d'exploitation spécifiques, le plus souvent allégés et ne comportant que les fonctions utiles. Ne parlons pas des systèmes militaires et spatiaux !

La caractéristique fondamentale d'un système transactionnel est de gérer un ensemble d'informations structurées de grande dimension, de l'ordre de plusieurs giga-octets, appelé base de données. Ces informations sont consultées, modifiées simultanément à partir d'un grand nombre de points d'accès, terminaux ou micro-ordinateurs. Les contraintes d'intégrité sont énormes. L'exécution d'un ordre ou transaction doit préserver la cohérence de la base. Par exemple il est nécessaire d'afficher l'état exact des places disponibles dans un train tout en évitant qu'un siège puisse être réservé plusieurs fois au même moment à partir de deux terminaux différents. Ces systèmes doivent être très fiables puisque leur arrêt, même très court bloquerait un nombre important de personnes. En cas d'interruption du service il faut pouvoir redémarrer les nombreuses activités parallèles de façon cohérente sans perte d'information, dans l'état exact où était le système avant cette interruption. On mesure les performances en nombre de transactions par secondes (TPS).

L'invention du temps partagé est le fruit d'une simple constatation: l'homme est beaucoup plus lent que la machine et prend un temps non négligeable pour élaborer une requête ou analyser les réponses de l'ordinateur. Dans toute phase d'interaction la machine attend. La fonction d'un système temps partagé est donc de donner à tous ces acteurs humains l'impression qu'ils sont chacun seul en face de la machine. Chacun doit avoir le sentiment que l'ordinateur est à sa disposition; la qualité du service sera appréciée en termes de temps de réponse. Il faut donc ajouter les services adéquats pour tenir compte du fait que l'ordinateur est utilisé simultanément par un grand nombre de personnes. On combine donc dans un tel système les aspects évoqués pour les ordinateurs individuels et transactionnels. Il faut ajouter un programme gestionnaire qui partage le temps disponible entre les différents utilisateurs. Par exemple, si on estime que 90% du temps passé devant un terminal est un temps de réflexion indispensable entre requêtes successives, 10% des utilisateurs seulement sont réellement actifs à un moment donné. Si le programme gestionnaire alloue des tranches de temps de 50 ms à chacun, le temps d'attente moyen est donc de 0,5s environ pour ces dix utilisateurs (ce ne sont jamais les mêmes). La machine peut être utilisée en fait par cent personnes.

De tels systèmes ne sont pas adaptés aux travaux qui nécessitent peu de dialogues. On remplace alors le terminal par un ensemble de fichiers utilisés soit en lecture soit en écriture. Ces programmes sont exécutés en traitement par lot ou batch. Leur déroulement est volontairement ralenti par rapport aux tâches qui dialoguent avec les hommes. On diminue donc la priorité - déjà évoquée pour les systèmes temps réel - de ces calculs. Les systèmes en temps partagé sont souvent employés pour le temps réel et le transactionnel, en leur ajoutant le cas échéant les quelques fonctionnalités qui leur manquent.

Aujourd'hui deux systèmes prédominent : Windows, dans toutes ses variations, sur les postes personnels, Unix et de plus en plus sa version Linux, sur les serveurs et les gros ordinateurs (Windows est réservé aux processeurs Intel). La puissance des processeurs permet d'employer l'un ou l'autre système pour couvrir la plupart des gammes d'application, au moyen de modules spécifiques éventuellement. Windows ne dispose pas des éléments nécessaires au temps partagé mais parvient à servir plusieurs utilisateurs simultanés, s'ils sont physiquement connectés à un autre poste relié par le réseau, en employant une technologie client-serveur.