Description
Le système d'exploitation est le logiciel principal d'un ordinateur car il permet aux programmes de fonctionner après que le programme d'amorçage a configuré tous les périphériques lors du démarrage de l'ordinateur.
Il offre une suite de services généraux facilitant la création de logiciels applicatifs et sert d'intermédiaire entre ces logiciels et le matériel informatique. Un système d'exploitation apporte commodité, efficacité et capacité d'évolution, permettant d'introduire de nouvelles fonctions et du nouveau matériel sans remettre en cause les logiciels.
Il existe sur le marché des dizaines de systèmes d'exploitation différents, très souvent livrés avec l'appareil informatique. C'est le cas de Windows, Mac OS, Irix, Symbian OS, Unix (Berkeley, System V…), GNU/Linux, (pour lequel il existe de nombreuses distributions) ou majoritairement Android et iOS développés respectivement par Google et Apple pour les téléphones mobiles. Les fonctionnalités offertes diffèrent d'un système à l'autre et sont typiquement en rapport avec l'exécution des programmes, l'utilisation de la mémoire centrale ou des périphériques, la manipulation des systèmes de fichiers, la communication, ou la détection et la gestion d'erreurs.
En avril 2022, Android, un système d'exploitation utilisant le noyau Linux, est le système d'exploitation le plus utilisé au monde (si l'on prend en compte l'utilisation Web). Il détient 43 % du marché mondial, suivi de Windows (30 %), d'Apple iOS (17 %), de macOS (6 %), puis de Linux (desktop) (0,98 %), qui utilise également le noyau Linux. Ces chiffres ne tiennent pas compte des appareils intégrés ni des consoles de jeux.
- Pour les smartphones et autres appareils de poche, Android est en tête avec 72 % de parts de marché, et iOS d'Apple en détient 28 %.
- Pour les ordinateurs de bureau et les ordinateurs portables, Windows est le plus utilisé (75 %), suivi de macOS d'Apple (15 %) et des systèmes d'exploitation basés sur Linux (5 %) (c'est-à-dire "Linux desktop", 2,48 %, plus ChromeOS de Google, 2,38 %, et 3,2 % aux États-Unis).
- En ce qui concerne les tablettes, l'iPadOS d'Apple représente 54 % et Android 46 % dans le monde entier.
La communication inter-processus
Dans certains logiciels applicatifs, plusieurs programmes effectuent la même tâche simultanément, et s'échangent des informations. Le mécanisme de protection de la mémoire (voir plus loin) empêche aux programmes de manipuler les mêmes informations, et ceux-ci doivent faire appel à des services du système d'exploitation.
Mémoire
Le système d'exploitation dirige l'utilisation de la mémoire. Il retient la liste des emplacements de mémoire utilisés, et par qui, ainsi que la liste des emplacements libres. Le système d'exploitation réserve un emplacement de mémoire lorsqu'un processus le demande, et le libère lorsqu'il n'est plus utilisé, par exemple lorsque le processus s'est arrêté.
Les fonctions de contrôle de l'utilisation de la mémoire vont en particulier suivre l'utilisation de celle-ci, quels emplacements sont libres, lesquels sont utilisés, et par qui. Ces fonctions vont également décider quel programme reçoit de la mémoire, quand et quelle quantité est mise à disposition et récupérer la mémoire qui était utilisée par un programme après son exécution, que le programme se soit arrêté volontairement ou accidentellement.
La quantité de mémoire utilisée par l'ensemble du système informatique dépend essentiellement de la manière dont le système d'exploitation effectue les réservations.
Dans les systèmes d'exploitation contemporains, plusieurs programmes sont exécutés en même temps et utilisent simultanément la mémoire centrale. Si un processus modifie - accidentellement ou intentionnellement - un emplacement de mémoire utilisée par un autre processus, il met celui-ci en danger. S'il modifie un emplacement utilisé par le système d'exploitation il met en danger l'ensemble du système informatique.
Pour éviter un tel incident, le système d'exploitation réserve à chaque programme un espace d'adressage — un emplacement en mémoire que seul le programme en question peut manipuler. Le système d'exploitation détecte toute tentative d'accès en dehors de l'espace d'adressage et provoque l'arrêt immédiat du programme qui tente d'effectuer telles opérations, par le biais d'une erreur de protection générale.
La mémoire virtuelle
Le mécanisme dit de mémoire virtuelle est destiné à simuler la présence ou l'absence de mémoire centrale par manipulation de l'unité de gestion mémoire — un composant électronique (anglais Memory Management Unit abrégé MMU). C'est un mécanisme courant dans les systèmes d'exploitation contemporains.
La mémoire virtuelle permet d'exécuter simultanément plus de programmes que ce que la mémoire centrale peut contenir. Chaque programme n'ayant pas besoin que la totalité des informations qu'il manipule soit présente dans la mémoire centrale, une partie des informations est stockée dans la mémoire de masse (en général dans un fichier ou une partition de disque dur) habituellement plus importante mais plus lente et sont transférées en mémoire centrale lorsque le programme en a besoin.
Les programmes disposent d'un (ou plusieurs) espaces virtuels de mémoire continus pour travailler. Les adresses des données sont dites virtuelles dans la mesure où l'information adressée ne se trouve pas forcément ni en mémoire centrale, ni à l'adresse indiquée. Lorsque le programme essaie de lire ou écrire une donnée dans sa mémoire virtuelle, l'unité de gestion de mémoire cherche l'adresse physique correspondant à l'adresse virtuelle sollicitée grâce à une table de correspondance. Si l'emplacement n'est pas présent en mémoire centrale (on appelle cela une faute de page), il n'y aura évidemment aucune adresse physique correspondante. Le système d'exploitation devra alors chercher à libérer un espace en mémoire centrale en échangeant (anglais swap) le contenu d'un emplacement donné de mémoire centrale avec le contenu sollicité, qui se trouve en mémoire de masse. Cette opération s'effectue automatiquement, à l'insu des programmes.
Des mémoires associatives, incorporées dans l'unité de gestion de mémoire, accélèrent le calcul des adresses. Les systèmes d'exploitation utilisent généralement deux mémoires associatives : une pour le mode noyau et une pour le mode utilisateur. La mémoire du mode noyau est arrangée de manière à permettre au processeur d'utiliser la totalité de la mémoire centrale disponible — lors de l'exécution des programmes du noyau du système d'exploitation. Tandis que celle du mode utilisateur est arrangée de manière à protéger le noyau (qui est ainsi invisible pour le programme en question) — lors de l'exécution des programmes hors du noyau. C'est ce que l'on nomme la protection, et ces mécanismes constituent les principales caractéristiques du mode protégé.
Chaque programme dispose de sa propre table de correspondance, ce qui permet de les isoler les uns des autres. Lors d'une commutation de contexte, le système d'exploitation placera la table du programme courant dans la mémoire associative. Le système d'exploitation crée également de nouvelles tables pour les programmes qui démarrent et décide quels emplacements de mémoire virtuelle seront ou ne seront pas présents en mémoire centrale.
Périphériques
Les périphériques sont tous les dispositifs informatiques qui permettent au processeur de communiquer avec l'extérieur : clavier, imprimante, carte réseau, mémoire, disque dur. Ils ont tous besoin d'un driver (pilote) pour fonctionner. Ils permettent en particulier de recevoir des informations, d'en envoyer, ainsi que de stocker des informations — les collecter dans le but de les renvoyer plus tard.
Une des responsabilités du système d'exploitation est de suivre l'état d'utilisation — libre ou réservé — de tout le matériel du système informatique. Lorsqu'un matériel libre est demandé par un processus, il est alors réservé à ce processus. Pour utiliser un périphérique, le système d'exploitation se sert d'un contrôleur et d'un pilote de périphérique.
Contrôleur
Un contrôleur est un composant électronique, qui comporte une mémoire tampon, et manipule un certain type de périphérique (disque dur, imprimante, mémoire, lecteur de bande magnétique…). Le contrôleur est souvent intégré au périphérique9. Les différents contrôleurs disponibles sur le marché ne s'utilisent pas tous de la même manière.
Pilote (anglais driver)
Les instructions de manipulation d'une gamme de contrôleurs donnée sont incluses dans un pilote informatique : un logiciel qui exploite les possibilités offertes par les contrôleurs. Les pilotes informatiques font partie du système d'exploitation, et offrent des services uniformes utilisés par les autres programmes du système d'exploitation.
Il existe deux stratégies de manipulation des contrôleurs :
- Les contrôleurs rapides sont manipulés en programmed I/O. dans cette stratégie le processeur envoie des demandes d'opérations au contrôleur puis vérifie de manière intermittente l'état du contrôleur pour vérifier si l'opération demandée est terminée.
- Les contrôleurs moins rapides sont manipulés en interrupt driven I/O. Dans cette stratégie le processeur effectue une demande au contrôleur, puis continue d'exécuter des logiciels applicatifs. Le contrôleur envoie un signal électrique lorsque l'opération est terminée. Lors de la venue de ce signal, le processeur interrompt l'exécution des logiciels applicatifs et exécute un programme particulier interrupt service routine qui vérifie le nouvel état du contrôleur.
Certains périphériques ne peuvent pas être partagés, et leur utilisation est alors dédiée à un seul programme à la fois. Certains périphériques peuvent être virtuels, ou leur utilisation peut être indirecte. Par exemple l'utilisation d'une imprimante n'entraine pas une impression immédiate parce que les informations sont tout d'abord mises en attente. Cette technique du spool permet l'utilisation partagée d'un périphérique qui sans ça ne pourrait pas être partagé.
Fichiers
Un fichier est une collection d'informations portant un nom, enregistrée sur un média tel qu'un disque dur, une bande magnétique ou un disque optique. Chaque médium a ses propres caractéristiques et sa propre organisation.
Le système d'exploitation s'occupe de créer et de détruire des fichiers et des répertoires, de réserver de l'espace sur les médias ainsi que copier le contenu des fichiers de et vers la mémoire centrale. Il aide également les logiciels applicatifs à retrouver les fichiers, partager les fichiers entre plusieurs utilisateurs, modifier le contenu des fichiers et créer des répertoires (permettant de classer et d'organiser les fichiers). La vitesse du système informatique dépendra de la vitesse de manipulation des fichiers.
Le système d'exploitation permet en particulier de manipuler les attributs : les caractéristiques du fichier tels que son nom, la date de création, le type du contenu, la taille et l'emplacement. Il permet également de manipuler les permissions : des autorisations qui indiquent si un utilisateur pourra lire, écrire ou exécuter le fichier.
Le système d'exploitation tient compte du système de fichiers : la manière dont les fichiers sont organisés et répartis sur un dispositif de stockage.
Les mémoires amovibles telles que les CD ou les DVD ont une disposition normalisée dont les spécifications sont publiques, ce qui assure leur reconnaissance par tous les systèmes d'exploitation (voir ISO 9660 et UDF ainsi que l'hybride ISO/UDF).
Lorsque le système de fichier est distribué, et que les fichiers sont donc stockés sur différents ordinateurs d'un réseau informatique, le système d'exploitation envoie une requête à l'ordinateur stockant le fichier pour chaque opération à effectuer (voir NFS ou CIFS).
Dans un système d'exploitation multi-utilisateurs, les programmes manipulant le système de fichiers effectuent des contrôles pour vérifier qu'aucun fichier n'est manipulé par une personne non autorisée. Ce type de système d'exploitation refusera toute manipulation non autorisée.
Réseau
Dans un réseau informatique, deux ordinateurs reliés communiquent dès lors que les communications se font de part et d'autre selon les mêmes protocoles réseau. Selon le modèle OSI, les différents protocoles existants sont répartis sur sept niveaux, où un protocole d'un niveau donné peut être combiné avec n'importe quel protocole des niveaux situés en dessus et en dessous (voir encapsulation).
Un système d'exploitation contient typiquement plusieurs programmes nécessaires pour des échanges d'informations dans différents protocoles des niveaux 1 à 4. Tandis que les niveaux 5 à 7 sont pris en charge par les logiciels applicatifs et les middleware.
Pour les échanges d'informations selon les protocoles de niveau 1 et 2, le système d'exploitation demande l'opération au matériel de l'ordinateur par l'intermédiaire d'un pilote informatique, pilote qui peut faire partie intégrante du système d'exploitation ou être fourni par le constructeur du matériel.
Lors de l'envoi d'informations sur le réseau, un logiciel applicatif crée une information, la met en forme conformément aux protocoles des niveaux 7 à 5, puis la transmet au système d'exploitation. Divers programmes du système d'exploitation vont découper cette information en trames, puis vont mettre en forme les trames et les envoyer conformément aux protocoles des niveaux 4 à 1.
Lors de la réception de trames depuis le réseau, divers programmes du système d'exploitation vont tenter de les décoder conformément à différents protocoles des niveaux 1 à 4, puis transformer la suite de trames en un flux continu, qui sera envoyé au logiciel applicatif destinataire. Le logiciel va alors décoder le flux conformément aux protocoles de niveaux 5 à 7. Le logiciel applicatif effectue préalablement une connexion, c'est-à-dire une liaison logique par laquelle il va s'associer avec un flux particulier.
Le choix exact des protocoles utilisés dépend de l'ordinateur concerné et des liaisons réseau qui vont être utilisées. Divers paramètres de configuration permettent d'influencer le choix des protocoles. Ils permettent par exemple d'empêcher l'utilisation de protocoles interdits sur le réseau concerné.
Contrôle d'accès
Les systèmes d'exploitation contemporains permettent à plusieurs usagers de se servir simultanément de l'ordinateur. Le système d'exploitation comporte des mécanismes destinés à contrôler l'utilisation des ressources par les utilisateurs, les processus et les programmes. Ces mécanismes permettent de certifier l'identité du programme ou de l'utilisateur et l'autoriser à accéder à une ressource en application de règlements de sécurité.
Les mécanismes de sécurité du système d'exploitation servent à protéger le système informatique de l'intérieur comme de l'extérieur : les mécanismes de sécurité intérieure protègent les processus les uns des autres, et assurent la fiabilité du système informatique. Les mécanismes de sécurité extérieure protègent les données et les programmes enregistrés dans l'ordinateur contre des accès non autorisés et des erreurs de manipulation. Le système d'exploitation empêche la lecture par des personnes non autorisées, la falsification, la suppression de données, ainsi que l'utilisation non autorisée de périphériques.
Plusieurs programmes sont exécutés en même temps et utilisent simultanément la mémoire centrale. Si un processus modifie — accidentellement ou intentionnellement — un emplacement de mémoire utilisée par un autre processus, il met celui-ci en danger. S'il modifie un emplacement utilisé par le système d'exploitation il met en danger l'ensemble du système informatique.
Pour éviter tel incident, le système d'exploitation réserve à chaque programme un espace d'adressage - un emplacement en mémoire que seul le programme en question peut manipuler. Le système d'exploitation détecte toute tentative d'accès en dehors de l'espace d'adressage et provoque l'arrêt immédiat du programme qui tente d'effectuer de telles opérations.
Le système d'exploitation va également refuser la mise hors service de programmes centraux tels que les logiciels serveur ou des programmes du système d'exploitation par tout utilisateur qui n'a pas préalablement reçu le privilège d'effectuer cette opération — selon les règlements introduits par l'administrateur de sécurité.
Lorsqu'un logiciel autonome (bot informatique) demande des opérations au système d'exploitation, le logiciel doit préalablement décliner son identité en tant que produit puis, sur la base de cette identité, le système d'exploitation effectue les mêmes vérifications que pour une personne physique.
Les mécanismes de contrôle d'accès ont aussi pour effet de lutter contre les logiciels malveillants — ceux-ci effectuent souvent des opérations susceptibles de perturber l'utilisation de l'ordinateur.
Interface utilisateur
Un ensemble de programmes du système d'exploitation reçoit les informations envoyées par les logiciels applicatifs, et les place sur une image numérique qui sera envoyée au matériel par l'intermédiaire d'un pilote. En complément un autre ensemble de programmes reçoit les manipulations effectuées par l'usager par l'intermédiaire de pilotes puis les transmettent au logiciel concerné. Ces deux ensembles créent l'interface homme-machine qui permet à un usager de dialoguer avec la machine.
Le système d'exploitation peut dialoguer avec un usager par l'intermédiaire d'un autre ordinateur ou d'un terminal (interface distribuée). Les informations envoyées par les logiciels applicatifs seront alors envoyées à l'autre ordinateur selon un protocole prévu à cet effet, tandis que l'autre ordinateur enverra les manipulations effectuées par l'utilisateur. Voir SSH, RFB ou X Window System.
Lorsque l'interface est en mode texte, l'image numérique est une grille dans laquelle sont placés des caractères d'imprimerie, la grille comporte typiquement 80 colonnes et 35 lignes. L'interface se manipule avec un clavier. Ce type d'interface, qui existe depuis les débuts de l'informatique est aujourd'hui remplacé par les interfaces graphiques.
Interface graphique
Dans une interface utilisateur graphique (anglais Graphical User Interface abrégé GUI), l'image numérique est composée par un programme du système d'exploitation par superposition de points, de lignes, de pictogrammes et de caractères d'imprimerie. L'interface se manipule typiquement avec une souris selon le principe WIMP (anglais Windows, Icons, Menus and Pointer device). L'image numérique est créée à l'aide du processeur graphique de l'ordinateur.
Lors des manipulations de la souris, le système d'exploitation déplace l'élément d'image qu'est le pointeur et effectue les calculs nécessaires pour déterminer quel est l'élément de l'image qui se trouve juste en dessous. À chaque élément de l'image peut être associé un programme. Un widget est un programme qui dessine et anime un élément d'image dont l'aspect peut-être celui d'un bouton poussoir, d'une lampe témoin, d'un ascenseur, d'une zone texte, d'un menu, etc. Divers widgets sont fournis avec l'interface graphique.
Les programmes pour interface graphique sont aujourd'hui (2011) inclus dans tous les systèmes d'exploitation contemporains. Le X Window System est l'ensemble des programmes pour interface utilisateur graphique inclus dans tous les systèmes d'exploitation de la famille Unix. Pour Windows, l'équivalent est le programme Explorer, aussi nommé Explorateur Windows (à ne pas confondre avec Internet Explorer).
Logiciels utilitaires
Un logiciel applicatif sert à assister l'utilisateur dans une activité. Les logiciels utilitaires sont des logiciels applicatifs qui permettent à l'utilisateur d'effectuer des manipulations basiques telles que démarrer des programmes, copier des fichiers ou modifier des paramètres de configuration. Divers logiciels utilitaires sont fournis avec les systèmes d'exploitation.
Un interpréteur de commandes est un programme qui permet d'exécuter d'autres programmes en écrivant leur nom éventuellement suivi de divers paramètres. Il est accompagné de plusieurs programmes qui permettent la manipulation des fichiers (copie, changement de nom…). Ce type de programme est utilisé pour effectuer des manipulations ou exécuter des scripts — suites de manipulations pré-enregistrées (voir commande informatique). Ce type de programme est souvent fourni avec le système d'exploitation, mais rien n'y oblige, et on peut très bien en importer.
Un environnement de bureau est un programme dans lequel les différents éléments de l'ordinateur (programmes, fichiers, disques durs) sont présentés sous forme de pictogrammes sur lesquels il est possible d'effectuer différentes actions. Il permet d'exécuter des programmes, d'effectuer différentes opérations sur les fichiers (copie, changement du nom, déplacement ou suppression).
Certains programmes permettent à l'utilisateur de modifier les paramètres de configuration du système d'exploitation. Ceux-ci proposent des listes à choix multiples et effectuent des contrôles de validité avant le modifier les paramètres.
D'autres programmes servent à installer des logiciels, c'est-à-dire copier les fichiers dans les emplacements prévus à cet effet, et effectuer les modifications de configuration nécessaire pour rendre le logiciel opérationnel. Ces programmes peuvent aussi servir à consulter la liste des logiciels actuellement installés dans l'ordinateur.
Un système d'exploitation multi-utilisateurs est en général fourni avec des programmes permettant de surveiller l'utilisation — par autrui — de l'ordinateur — consultation de journaux d'activité — ou de modifier les listes de droits d'accès en vue d'autoriser ou d'interdire un fichier à certains utilisateurs.
Typologie
Il existe cinq générations de systèmes d'exploitation : par lots (batch), multi programmés, en temps partagé, temps réel, et distribués. Chacun des principes mis en œuvre dans une génération se retrouve dans les générations suivantes.
- Un système de traitement par lots (batch) est prévu pour l'exécution de grands calculs les uns après les autres, avec peu d'intervention utilisateur.
À partir de la génération des systèmes d'exploitation multi-programmés, plusieurs programmes sont exécutés simultanément par planification (scheduling). Dans ces systèmes d'exploitation multitâches, plusieurs programmes résident dans la mémoire centrale et le système d'exploitation suspend régulièrement l'exécution d'un programme pour continuer l'exécution d'un autre.
- Dans la génération des systèmes multi-programmés, l'exécution simultanée de plusieurs programmes vise l'utilisation efficace de la puissance de calcul du processeur.
- Dans la génération des systèmes en temps partagé l'exécution simultanée de plusieurs programmes vise à répondre rapidement aux demandes de plusieurs utilisateurs en communication directe avec l'ordinateur.
- Un système d'exploitation temps réel doit garantir que toute opération se termine dans un délai donné, en vue de garantir la réussite du dispositif dans lequel l'ordinateur est utilisé.
- Un système distribué dirige l'utilisation des ressources de plusieurs ordinateurs à la fois. Il utilise les capacités d'un réseau informatique, contrôle un groupe de machines, et les fait apparaître comme une machine unique, virtuelle, de très grande capacité.
Chaque système d'exploitation est conçu pour fonctionner avec une gamme particulière de machines (type de processeur, constructeur, architecture). Si un système d'exploitation est disponible pour plusieurs gammes de machines différentes, alors le même code source est compilé et adapté à chaque gamme de machines. La palette de pilotes inclus dans le système d'exploitation est adaptée au matériel informatique disponible sur le marché pour cette gamme de machines.
Première génération : traitement par lots
Les systèmes d'exploitation basés sur le traitement par « lots » (suites d'instructions et de données dans un ensemble de cartes perforées) sont apparus dans les années 1950. Un programme (avec ses données) n'est rien d'autre qu'une pile de cartes avec des indicateurs de début et de fin de lot. L'exécution d'un programme consiste à demander à un opérateur de placer la pile de cartes dans le lecteur, puis l'opérateur lance la lecture séquentielle des cartes. Le processeur central est au repos, durant les manipulations de l'opérateur.
Un batch est un lot de travaux à effectuer. L'opérateur compose un batch en posant les unes sur les autres les piles de cartes des différents programmes (avec leurs données) demandés par les utilisateurs. Il forme une grande pile de cartes séparées par des marque-pages, en général une carte de couleur particulière, qu'il place ensuite dans le lecteur. Le regroupement de plusieurs programmes en un batch diminue les interventions de l'opérateur.
Dans un système basé sur les batchs, le cœur du système d'exploitation est un programme moniteur qui réside continuellement en mémoire centrale et permet à l'opérateur de demander le début ou l'arrêt de l'exécution du lot. À la fin de l'exécution de chaque tâche du lot, le moniteur effectue des travaux de nettoyage, puis lance l'exécution de la tâche suivante. Ainsi, l'opérateur intervient uniquement au début et à la fin du lot.
Dans ces systèmes d'exploitation les commandes ajoutées au marque-page, formulées dans le langage JCL (Job Control Language) sont un des seuls moyens qu'a l'utilisateur d'interagir avec le système d'exploitation.
Les systèmes d'exploitation batch sont adaptés à des applications nécessitant de très gros calculs mais peu d'implication de l'utilisateur : météo, statistiques, impôts… Les utilisateurs n'attendent pas immédiatement de résultats. Ils soumettent les demandes, puis reviennent ultérieurement collecter les résultats.
En raison de la grande différence de vitesse entre le processeur et les périphériques, dans un système d'exploitation batch le processeur est inutilisé 90 % du temps car les programmes attendent qu'un périphérique ou un autre termine les opérations. Avec ces systèmes d'exploitation il n'y a pas de concurrence entre les différentes tâches, la mise en œuvre de l'utilisation du processeur, de la mémoire et des périphériques est triviale8 mais loin d’être optimale.
Deuxième génération : la multiprogrammation
Les systèmes d'exploitation multi-programmés sont apparus dans les années 1960. Le but recherché par de tels systèmes est d'augmenter l'efficacité de l'utilisation du processeur et des périphériques en utilisant la possibilité de les faire fonctionner en parallèle. Plusieurs programmes sont placés en mémoire centrale, et lorsque le programme en cours d'exécution attend un résultat de la part d'un périphérique, le système d'exploitation ordonne au processeur d'exécuter un autre programme.
Dans les systèmes d'exploitation multi-programmés, l'utilisation du processeur est partagée par planification (scheduling) : à chaque utilisation d'un périphérique, le système d'exploitation choisit quel programme va être exécuté. Ce choix se fait sur la base de priorités. Le système d'exploitation comporte un mécanisme de protection évitant ainsi que le programme en cours d'exécution ne lise ou n'écrive dans la mémoire attribuée à un autre programme. Les programmes sont exécutés dans un mode non-privilégié, dans lequel l'exécution de certaines instructions est interdite.
Les systèmes multi-programmés nécessitent un ordinateur et des périphériques mettant en œuvre la technique du DMA (direct memory access). Selon celle-ci, le processeur ordonne à un périphérique d'effectuer une opération, le résultat de l'opération est ensuite placé en mémoire centrale par le périphérique tandis que le processeur exécute d'autres instructions. Dans les systèmes multi-programmés, tout comme pour les systèmes batch, l'utilisateur n'a que peu de contact avec les programmes et de maigres possibilités d'intervention.
Troisième génération : le temps partagé
Les systèmes d'exploitation en temps partagé sont apparus dans les années 1970. Ils sont utilisés dans des dispositifs interactifs où plusieurs utilisateurs sont simultanément en dialogue avec l'ordinateur. Un système d'exploitation en temps partagé est destiné à répondre rapidement aux demandes de l'utilisateur, et donner à chaque utilisateur l'impression qu'il est le seul à utiliser l'ordinateur.
Un système en temps partagé met en œuvre des techniques sophistiquées de multiprogrammation en vue de permettre l'utilisation interactive de l'ordinateur par plusieurs utilisateurs et plusieurs programmes simultanément. L'arrivée, en 1970, de cette nouvelle génération de systèmes d'exploitation résulte d'une forte demande des consommateurs, et de la baisse du prix du matériel informatique ayant rendu possible sa réalisation.
Dans les systèmes d'exploitation en temps partagé la notion de batch n'a que peu d'importance. Ces systèmes mettent en œuvre de nouveaux mécanismes d'utilisation du processeur et de la mémoire, qui leur permet de répondre rapidement à des demandes provenant simultanément d'un grand nombre d'utilisateurs.
Dans ces systèmes, tout comme dans la génération précédente, l'utilisation du processeur est planifiée. Cependant, contrairement aux systèmes de la génération précédente, dans les systèmes en temps partagé chaque programme est exécuté durant une tranche de temps déterminé, puis le système d'exploitation bascule sur l'exécution d'un autre programme, ce qui évite qu'un programme monopolise l'utilisation du processeur au service d'un utilisateur, entraînant des retards pour les autres utilisateurs.
Les systèmes d'exploitation en temps partagé mettent en œuvre la technique du swap : lorsque le programme en cours d'exécution a besoin de plus de mémoire que celle disponible, un autre programme inactif est retiré pour gagner de la place, le programme inactif est alors enregistré temporairement sur le disque dur. L'enregistrement sur disque provoque cependant une perte de temps non négligeable.
En 2011, de nombreux systèmes d'exploitation sont basés sur Unix, un système en temps partagé.
Quatrième génération : le temps réel
Les systèmes d'exploitation temps-réel sont apparus au milieu des années 1970, notamment chez Hewlett-Packard14. Ils sont destinés aux dispositifs devant non seulement donner des résultats corrects, mais les donner dans un délai déterminé. Ces systèmes d'exploitation sont souvent utilisés par des ordinateurs reliés à un appareil externe (pilotes automatiques, robots industriels, applications vidéo et audio8) pour lequel un retard de réponse de l'ordinateur entraînerait un échec de l'appareil.
Dans ces systèmes d'exploitation, l'accent est mis sur la durée nécessaire pour effectuer chaque opération, pour répondre aux demandes rapidement en vue de satisfaire aux contraintes de temps du système dans lequel il est utilisé.
Certains services offerts par ces systèmes d'exploitation sont réalisés comme des logiciels applicatifs, et sont exécutés en concurrence avec ceux-ci. Un système d'exploitation temps réel autorise un contact direct entre les logiciels applicatifs et les périphériques. Dans certains systèmes temps réel les ressources sont réservées, évitant ainsi les ralentissements que provoqueraient les réservations à la volée, et garantissant que les ressources sont continuellement disponibles.
Les systèmes d'exploitation temps-réel évitent d'utiliser la technique du swap en raison des risques de dépassement des délais.
RTX, Windows CE, Embedded Linux, Symbian OS, Palm OS et VxWorks sont des systèmes d'exploitation temps réel.
Cinquième génération : les systèmes distribués
La baisse des prix du matériel informatique a permis, dans les années 1990, la création de systèmes informatiques composés de plusieurs ordinateurs, et donc plusieurs processeurs, plusieurs mémoires, et de nombreux périphériques. Un système distribué permet le partage des ressources entre les ordinateurs. Un utilisateur d'un ordinateur bon marché peut se servir de ressources coûteuses existant sur un autre ordinateur.
Mach, Amoeba, Andrew, Athena, et Locus sont des systèmes d'exploitation distribués. Ils ont tous été développés par des universités.
Histoire
L'histoire des systèmes d'exploitation est fortement liée à celle des ordinateurs. Les premières générations d'ordinateurs, dans les années 1945 à 1955, ne comportaient pas de système d'exploitation. Dans ces ordinateurs équipés de tubes à vide, les programmes manipulaient les ressources matérielles de l'ordinateur sans passer par un intermédiaire17. L'ordinateur était utilisé par une seule personne à la fois : la tâche de l'opérateur consistait à placer des piles de cartes perforées dans le lecteur, où chaque carte comportait des instructions d'un programme ou des données. Les ordinateurs à tube à vide de cette génération n'avaient qu'une faible puissance de calcul, ils étaient volumineux, peu commodes et peu fiables (les tubes à vide grillaient souvent).
1960, la multiprogrammation
Dans les années 1960, avec l'arrivée des circuits électroniques à semi-conducteurs, la puissance de calcul des processeurs a augmenté de manière significative. Cela a permis la réalisation de systèmes d'exploitation rudimentaires : les ordinateurs ont été équipés d'un spooler — file d'attente permettant d'utiliser la puissance de calcul du processeur pendant que l'opérateur introduit les cartes. L'utilisation des ressources matérielles par les programmes se faisait alors par l'intermédiaire d'une bibliothèque logicielle. Il a alors été possible de placer en mémoire plusieurs programmes simultanément et de les exécuter simultanément ; un programme dit resident monitor résidait continuellement dans la mémoire centrale et contrôlait l'exécution des différents programmes.
En 1965 le Massachusetts Institute of Technology se lance dans la création du premier système d'exploitation multitâche et multi-utilisateurs : Multics (pour MULTiplexed Information and Computing Service, ou service multiplexé d'information et de calcul). Sur le principe de la multiprogrammation, le système d'exploitation autorisait le chargement de plusieurs programmes en mémoire et gérait le passage de l'un à l'autre, mais cette fois-ci sans attendre le blocage d'un programme. Chaque programme était exécuté pendant une durée de quelques millisecondes, puis le système passait au suivant. Ce temps, très court, donnait l'illusion que les programmes s'exécutaient simultanément — une illusion qui existe encore avec les systèmes d'exploitation contemporains.
De plus, ces programmes pouvaient appartenir à des utilisateurs distincts, chacun ayant l'impression que la machine travaille uniquement pour lui. La possibilité pour un ordinateur de servir simultanément plusieurs personnes augmentait le retour sur investissement de l'achat de matériel très coûteux par les entreprises et les institutions. Cependant, du fait de son écriture dans un langage de programmation PL/I trop complexe pour les ordinateurs de l'époque, Multics fut un échec commercial. Il a cependant inspiré en grande partie la gamme de systèmes GCOS développés conjointement par Honeywell et Bull.
En 1969, les ingénieurs Ken Thompson et Dennis Ritchie des laboratoires Bell rêvent d'utiliser le système d'exploitation Multics, mais le matériel pour le faire fonctionner est encore hors de prix. Thompson se lance dans l'écriture d'une version allégée de Multics pour un PDP-7 inutilisé. Le système, fonctionnel, est surnommé Unics (pour UNiplexed Information and Computing ServiceT 7), puis finalement baptisé UNIX. Rapidement reprogrammé dans un langage de programmation plus approprié (le C, développé par Ritchie pour l'occasion), UNIX se révèle particulièrement simple à porter sur de nouvelles plateformes, ce qui assure son succès.
1972, les micro-ordinateurs
Dès 1980, les circuits électroniques à transistor ont été remplacés par des circuits intégrés, plus petits, ce qui a permis de réaliser des appareils plus compacts et moins coûteux et lancé le marché des ordinateurs personnels. De nombreux concepteurs de système d'exploitation qui se sont lancés sur ce marché n'avaient pas d'expérience, ce qui a donné de nouveaux produits, fondés sur des nouvelles idées, sans héritage ou influence de ce qui se faisait jusqu'alors. CP/M, mis sur le marché en 1974, a été le premier système d'exploitation pour micro-ordinateur, son caractère très sympathique, facile à aborder et commode (user-friendly) l'a rendu très populaire et influencé le marché des systèmes d'exploitation.
En 1980, IBM prend contact avec Bill Gates, cofondateur de la société Microsoft, pour l'adaptation du langage BASIC à son nouveau micro-ordinateur : le Personal Computer (abrégé PC). IBM est également à la recherche d'un système d'exploitation, et Bill Gates leur conseille de se tourner vers CP/M. Mais Gary Kildall refuse de signer le contrat avec IBM. Bill Gates saute sur l'occasion : il rachète QDOS — un système d'exploitation quick-and-dirty pour les processeurs Intel 8086 — pour proposer à IBM le package DOS/BASIC. Après quelques modifications effectuées à la demande d'IBM, le système est baptisé MS-DOS.
Xerox, une des sociétés majeures de l'époque, s'intéresse à l'optique de Steve Jobs. Elle réunit une poignée de scientifiques et d'ingénieurs dans son centre de recherche de Palo Alto et développe le premier micro-ordinateur équipé d'une interface utilisateur graphique, sur la base de thèses et d'études en ergonomie effectuées les années précédentes. Le résultat de ces recherches, le Xerox Star, ne sera jamais commercialisé. Dix ans plus tard, c'est Apple avec le Macintosh qui popularise les recherches effectuées par Xerox.
1990, les systèmes d'exploitation sous licence libre
En 1983, Richard Stallman du Massachusetts Institute of Technology lance l'idée d'un système d'exploitation sous licence libre : GNU. Il développe des outils de programmation, des logiciels utilitaires, et crée la GNU General Public License — un contrat de licence autorisant une utilisation sans restrictions ainsi que la publication du code source, sa modification, et sa redistribution. Le succès est immédiat, mais le système ne possède toujours pas, en 1990, de noyau libre, et les tentatives pour en développer un sont loin d'être abouties.
En 1987, Andrew Tanenbaum, professeur à l'université libre d'Amsterdam crée le système d'exploitation Minix, clone d'UNIX dont le code source est destiné à illustrer son cours sur la construction des systèmes d'exploitation. Mais Minix, dont la vocation est pédagogique, comporte alors de trop nombreuses limitations techniques et ne permet pas une utilisation poussée.
En 1989 un « système d'exploitation libre » apparaît à la même époque : 4.4BSD. La Berkeley Software Distribution (BSD) est la version d'UNIX développée par les étudiants et les chercheurs de l'université de Berkeley depuis 1977. Les logiciels utilitaires, créés sous licence libre, sont vendus avec le noyau Unix de AT&T, lui-même sous licence propriétaire. Cette double licence de BSD est à l'origine de plusieurs années de litige entre l'Université de Berkeley et AT&T. Les étudiants de l'université travaillent à remplacer les programmes développés par AT&T par leurs propres programmes, sous licence libre, afin de résoudre le litige. Cette situation dure jusqu'à la sortie de 4.4BSD en 1994, qui ne contient pratiquement plus de code AT&T.
En 1991, Linus Torvalds, étudiant à l'université d'Helsinki, inspiré par les travaux de Tanenbaum, sort la toute première version (0.0.1) de son propre noyau : Linux, qui est au départ une réécriture de Minix[réf. nécessaire]. Linux passe sous licence GNU en 1992 et il faut attendre 1994 pour voir la version 1.0, donnant ainsi naissance à la distribution d'un système d'exploitation entièrement libre, GNU/Linux.
C'est à la suite des initiatives et travaux de Linus Torvalds et de Richard Stallman, aidés par des milliers de bénévoles, et consécutivement aux travaux des étudiants de l'université de Berkeley que GNU/Linux et 4.4BSD sont devenus les premiers systèmes d'exploitation sous licence libre.
Organisation générale du noyau
Un système d'exploitation est essentiellement événementiel - il est exécuté lorsque quelque chose s'est passé, typiquement lors d'un appel système, une interruption matérielle ou une erreur. C'est un logiciel étendu et complexe, qui offre de nombreuses fonctions. Il est construit comme une suite de modules, chacun ayant une fonction déterminée.
Le noyau (en anglais : kernel) est la pièce centrale du système d'exploitation. C'est le second programme chargé en mémoire (juste après le bootloader) et il y reste en permanence - ses services sont utilisés continuellement.
Il réside généralement dans un emplacement protégé de mémoire vive, qui ne peut pas être modifié ni exploité par les autres programmes (c'est-à-dire dans le cas d'un système d'exploitation en mode protégé).
C'est un composant critique : si le kernel subit une erreur et s'arrête alors l'ordinateur cessera de fonctionner, tandis que si un autre programme s'arrêtait (par exemple un programme utilisateur) alors le système d'exploitation resterait opérationnel.
Il offre typiquement des fonctions pour créer ou détruire des processus (i.e. exécuter des programmes), diriger l'utilisation du processeur, de la mémoire et des périphériques. Il offre également les fonctions qui permettent aux programmes de communiquer entre eux et de s'aligner dans le temps (synchronisation).
Noyau monolithique
Dans une construction monolithique, le système d'exploitation est composé d'un seul programme : le noyau. Celui-ci est typiquement organisé en couches. La construction monolithique est la plus courante, appliquée à la plupart des Unix ;
Noyau à micronoyau
Dans la construction micronoyau, le kernel fournit les services minimu : de nombreuses fonctions du système d'exploitation ont été retirées du noyau et sont offertes par des programmes manipulés par celui-ci, qui sont ce que l'on appelle des services (pour un système en mode protégé, la grande différence avec un système monolithique sera que ces services seront exécutés dans l'espace mémoire utilisateur et non celui du noyau).
Les appels de fonction au système d'exploitation par les programmes utilisateurs ont été remplacées par des envois de message. Dans cette construction le noyau est utilisé principalement pour planifier l'exécution de processus, et pour échanger des messages. AIX, BeOS, Mach, Hurd, MacOS X, Minix et QNX sont des systèmes d'exploitation qui utilisent cette construction ;
Noyau hybride
La construction hybride ressemble à une construction microkernel, cependant certaines fonctions ont été placées dans le noyau pour des raisons d'efficacité. Windows NT, 2000 et XP (et également les Windows plus récents) ainsi que DragonFly BSD sont en construction hybride ;
Système organisé par couches
Le principe de la répartition par couches est que chaque module d'une couche donnée utilise uniquement des fonctions offertes par les modules qui se trouvent dans la couche au-dessous. L'organisation en couche n'est pas unique aux systèmes d'exploitation et est couramment appliquée aux logiciels applicatifs. Dans un système d'exploitation, les couches inférieures concernent les périphériques et la mémoire ; au-dessus desquelles se trouvent les systèmes de fichiers, puis les processus. Ces couches constituent la normalisation de la machine : pour un programme utilisateur et un système d'exploitation donné, tous les ordinateurs seront identiques (ou presque). C'est ce que l'on nomme l'abstraction matérielle.
Appels système
Le kernel étant dans un emplacement protégé, il est impossible pour un logiciel applicatif d'appeler directement ses fonctions. Un mécanisme permet aux logiciels applicatifs de demander des services au système d'exploitation. Il est typiquement mis en œuvre par une bibliothèque. Celle-ci comporte des fonctions bouchon qui consistent à placer les paramètres selon une convention, puis utiliser une instruction du processeur qui provoque la mise en pause du processus en cours et l'exécution du système d'exploitation. Les fonctions de bouchon s'utilisent comme les fonctions ordinaires d'une bibliothèque.
Noyau client-serveur
Dans une construction client-serveur, le cœur du système d'exploitation a pour seule fonction d'assurer la communication entre les modules. Le système d'exploitation est divisé en nombreux petits modules qui sont exécutés de la même manière que des logiciels applicatifs. Cette construction est bien adaptée aux systèmes d'exploitation distribués ;
Principe de machine virtuelle
Le principe des machines virtuelles, est qu'une application spécifique (l'hyperviseur) crée l'illusion qu'il existe plusieurs machines, aux capacités plus limitées, en utilisant une machine aux capacités plus étendues. Le cœur du système de virtualisation est un moniteur qui crée les illusions — machine virtuelle. Celles-ci peuvent être utilisées pour exécuter un autre système d'exploitation.