Le système d’exploitation définit notre expérience informatique. C’est le premier logiciel que nous voyons lorsque nous allumons l’ordinateur, et le dernier logiciel que nous voyons lorsque l’ordinateur est éteint. C’est le logiciel qui active tous les programmes que nous utilisons. Le système d’exploitation organise et contrôle le matériel sur nos bureaux et dans nos mains, et pourtant la plupart des utilisateurs ne peuvent pas dire avec certitude ce que fait précisément le système d’exploitation.
Dans cette édition de HowStuffWorks, nous vous dirons ce qu’un logiciel doit faire pour être appelé système d’exploitation, et nous vous montrerons comment le système d’exploitation fonctionne pour transformer une collection de matériel en un puissant outil informatique !
Les Bare Bones
Il est important de réaliser que tous les ordinateurs n’ont pas de système d’exploitation. L’ordinateur qui contrôle le four à micro-ondes dans votre cuisine, par exemple, n’a pas besoin d’un système d’exploitation. Il doit exécuter un ensemble de tâches relativement simples, utiliser des méthodes d’entrée et de sortie très simples (un clavier et un écran LCD) et contrôler un matériel simple, qui ne change jamais. Pour un ordinateur comme celui-ci, un système d’exploitation serait un bagage inutile, ajoutant de la complexité là où il n’y en a pas besoin. Au lieu de cela, l’ordinateur dans un four à micro-ondes exécute simplement un seul programme tout le temps.
Pour les systèmes informatiques qui dépassent la complexité du four à micro-ondes, cependant, un système d’exploitation peut être la clé d’une plus grande efficacité opérationnelle et d’un développement plus facile des applications. Tous les ordinateurs de bureau ont des systèmes d’exploitation. Les plus courants sont la famille de systèmes d’exploitation Windows, la famille de systèmes d’exploitation UNIX et les systèmes d’exploitation Macintosh. Il existe des centaines d’autres systèmes d’exploitation disponibles pour des applications spécifiques, notamment des spécialisations pour les ordinateurs centraux, la robotique, la fabrication, les systèmes de contrôle en temps réel, etc.
Au niveau le plus simple, un système d’exploitation fait deux choses :
- Il gère les ressources matérielles et logicielles du système informatique. Ces ressources comprennent des éléments tels que le processeur, la mémoire, l’espace disque, etc.
- Il fournit un moyen stable et cohérent pour les applications de traiter avec le matériel sans avoir à connaître tous les détails du matériel.
La première tâche, la gestion des ressources matérielles et logicielles, est très importante, car divers programmes et méthodes d’entrée se disputent l’attention de l’unité centrale de traitement (UC) et demandent de la mémoire, du stockage et de la bande passante d’entrée/sortie (E/S) à leurs propres fins. À ce titre, le système d’exploitation joue le rôle du bon parent, en s’assurant que chaque application obtient les ressources nécessaires tout en jouant gentiment avec toutes les autres applications, ainsi qu’en ménageant la capacité limitée du système pour le plus grand bien de tous les utilisateurs et applications.
La deuxième tâche, fournir une interface d’application cohérente, est particulièrement importante s’il doit y avoir plus d’un d’un type particulier d’ordinateur utilisant le système d’exploitation, ou si le matériel composant l’ordinateur est toujours ouvert au changement. Une interface de programme d’application (API) cohérente permet à un développeur de logiciels d’écrire une application sur un ordinateur et d’être certain qu’elle fonctionnera sur un autre ordinateur du même type, même si la quantité de mémoire ou de stockage est différente sur les deux machines. Même si un ordinateur particulier est unique, un système d’exploitation peut garantir que les applications continueront à fonctionner lors des mises à niveau et des mises à jour du matériel, car c’est le système d’exploitation et non l’application qui est chargé de gérer le matériel et la distribution de ses ressources. Windows 98 est un excellent exemple de la flexibilité qu’offre un système d’exploitation. Windows 98 fonctionne sur du matériel provenant de milliers de fournisseurs. Il peut accueillir des milliers d’imprimantes, de lecteurs de disques et de périphériques spéciaux différents dans toutes les combinaisons possibles.
Dans la grande famille des systèmes d’exploitation, il en existe généralement quatre types, classés en fonction des types d’ordinateurs qu’ils contrôlent et du type d’applications qu’ils prennent en charge. Ces grandes catégories sont :
- Système d’exploitation en temps réel (RTOS) – Les systèmes d’exploitation en temps réel sont utilisés pour contrôler les machines, les instruments scientifiques et les systèmes industriels. Un RTOS a généralement très peu de capacité d’interface utilisateur, et aucun utilitaire pour l’utilisateur final, puisque le système sera une « boîte scellée » lorsqu’il sera livré pour utilisation. Une partie très importante d’un RTOS consiste à gérer les ressources de l’ordinateur de manière à ce qu’une opération particulière s’exécute exactement dans le même laps de temps à chaque fois qu’elle se produit. Dans une machine complexe, le fait qu’une pièce se déplace plus rapidement simplement parce que les ressources du système sont disponibles peut être tout aussi catastrophique que le fait qu’elle ne se déplace pas du tout parce que le système est occupé.
- Utilisateur unique, tâche unique – Comme son nom l’indique, ce système d’exploitation est conçu pour gérer l’ordinateur de façon à ce qu’un utilisateur puisse effectivement faire une seule chose à la fois. Le Palm OS pour les ordinateurs de poche Palm est un bon exemple de système d’exploitation moderne à utilisateur unique et à tâche unique.
- Mono-utilisateur, multitâche – C’est le type de système d’exploitation que la plupart des gens utilisent aujourd’hui sur leurs ordinateurs de bureau et portables. Windows 98 et le MacOS sont tous deux des exemples de système d’exploitation qui permettront à un seul utilisateur d’avoir plusieurs programmes en fonctionnement en même temps. Par exemple, il est tout à fait possible pour un utilisateur de Windows d’écrire une note dans un traitement de texte tout en téléchargeant un fichier sur Internet tout en imprimant le texte d’un message électronique.
- Multi-utilisateur – Un système d’exploitation multi-utilisateur permet à de nombreux utilisateurs différents de profiter simultanément des ressources de l’ordinateur. Le système d’exploitation doit s’assurer que les exigences des différents utilisateurs sont équilibrées et que chacun des programmes qu’ils utilisent dispose de ressources suffisantes et distinctes afin qu’un problème avec un utilisateur n’affecte pas toute la communauté des utilisateurs. Unix, VMS et les systèmes d’exploitation pour gros ordinateurs, tels que MVS, sont des exemples de systèmes d’exploitation multi-utilisateurs.
Il est important de faire ici la différence entre les systèmes d’exploitation multi-utilisateurs et les systèmes d’exploitation mono-utilisateurs qui prennent en charge les réseaux. Windows 2000 et Novell Netware peuvent chacun supporter des centaines ou des milliers d’utilisateurs en réseau, mais les systèmes d’exploitation eux-mêmes ne sont pas de véritables systèmes d’exploitation multi-utilisateurs. L’administrateur système est le seul « utilisateur » de Windows 2000 ou de Netware. Le support réseau et toutes les connexions d’utilisateurs à distance que le réseau permet sont, dans le plan global du système d’exploitation, un programme exécuté par l’utilisateur administratif.
Avec les différents types de systèmes d’exploitation en tête, il est temps d’examiner les fonctions de base fournies par un système d’exploitation.
Appel au réveil
Lorsque l’on met un ordinateur sous tension, le premier programme qui s’exécute est généralement un ensemble d’instructions conservées dans la mémoire morte (ROM) de l’ordinateur qui examine le matériel du système pour s’assurer que tout fonctionne correctement. Cet autotest de mise sous tension (POST) vérifie l’unité centrale, la mémoire et les systèmes d’entrée-sortie de base (BIOS) à la recherche d’erreurs et enregistre le résultat dans un emplacement de mémoire spécial. Une fois le POST terminé avec succès, le logiciel chargé dans la ROM (parfois appelé firmware) commence à activer les lecteurs de disque de l’ordinateur. Dans la plupart des ordinateurs modernes, lorsque l’ordinateur active le disque dur, il trouve la première pièce du système d’exploitation : le chargeur d’amorçage.
Le chargeur de bootstrap est un petit programme qui a une seule fonction : Il charge le système d’exploitation en mémoire et lui permet de commencer à fonctionner. Dans sa forme la plus élémentaire, le chargeur d’amorçage configure les petits programmes pilotes qui s’interfacent avec les divers sous-systèmes matériels de l’ordinateur et les contrôlent. Il configure les divisions de la mémoire qui contiennent le système d’exploitation, les informations utilisateur et les applications. Il établit les structures de données qui contiendront les innombrables signaux, drapeaux et sémaphores utilisés pour communiquer au sein et entre les sous-systèmes et les applications de l’ordinateur. Puis il remet le contrôle de l’ordinateur au système d’exploitation.
Les tâches du système d’exploitation, au sens le plus général, se répartissent en six catégories :
- Gestion du processeur
- Gestion de la mémoire
- Gestion des périphériques
- Gestion du stockage
- Interface d’application
- Interface utilisateur
Bien que certains soutiennent qu’un système d’exploitation devrait faire plus que ces six tâches, et certains fournisseurs de systèmes d’exploitation intègrent effectivement beaucoup plus de programmes utilitaires et de fonctions auxiliaires dans leurs systèmes d’exploitation, ces six tâches définissent le noyau de presque tous les systèmes d’exploitation. Examinons les outils que le système d’exploitation utilise pour exécuter chacune de ces fonctions.
Gestion du processeur
Le cœur de la gestion du processeur se résume à deux questions connexes :
- Assurer que chaque processus et application reçoit suffisamment de temps du processeur pour fonctionner correctement
- Utiliser autant de cycles du processeur pour le travail réel que possible
L’unité de base du logiciel avec laquelle le système d’exploitation traite pour ordonnancer le travail effectué par le processeur est soit un processus, soit un thread, selon le système d’exploitation.
Il est tentant de considérer un processus comme une application, mais cela donne une image incomplète de la façon dont les processus sont liés au système d’exploitation et au matériel. L’application que vous voyez (traitement de texte ou tableur ou jeu) est, en effet, un processus, mais cette application peut provoquer le démarrage de plusieurs autres processus, pour des tâches comme les communications avec d’autres périphériques ou d’autres ordinateurs. Il existe également de nombreux processus qui s’exécutent sans vous donner de preuve directe de leur existence. Un processus, donc, est un logiciel qui effectue une certaine action et qui peut être contrôlé — par un utilisateur, par d’autres applications ou par le système d’exploitation.
Ce sont les processus, plutôt que les applications, que le système d’exploitation contrôle et programme pour l’exécution par le CPU. Dans un système monotâche, la programmation est simple. Le système d’exploitation permet à l’application de commencer à s’exécuter, ne suspendant l’exécution que suffisamment longtemps pour traiter les interruptions et les entrées de l’utilisateur. Les interruptions sont des signaux spéciaux envoyés par le matériel ou le logiciel à l’unité centrale. C’est comme si une partie de l’ordinateur levait soudainement la main pour demander l’attention de l’UC lors d’une réunion animée. Parfois, le système d’exploitation planifie la priorité des processus de manière à ce que les interruptions soient masquées, c’est-à-dire que le système d’exploitation ignore les interruptions provenant de certaines sources afin qu’un travail particulier puisse être terminé le plus rapidement possible. Certaines interruptions (telles que celles provenant de conditions d’erreur ou de problèmes de mémoire) sont si importantes qu’elles ne peuvent être ignorées. Ces interruptions non masquables (NMI) doivent être traitées immédiatement, indépendamment des autres tâches en cours.
Bien que les interruptions ajoutent une certaine complication à l’exécution des processus dans un système monotâche, le travail du système d’exploitation devient beaucoup plus compliqué dans un système multitâche. Le système d’exploitation doit alors organiser l’exécution des applications de manière à ce que vous croyiez que plusieurs choses se passent en même temps. Cela est compliqué car l’unité centrale ne peut faire qu’une seule chose à la fois. Afin de donner l’impression que beaucoup de choses se passent en même temps, le système d’exploitation doit passer d’un processus à l’autre des milliers de fois par seconde. Voici comment cela se passe.
- Un processus occupe une certaine quantité de mémoire vive. Il utilise également des registres, des piles et des files d’attente dans l’espace mémoire du processeur et du système d’exploitation.
- Lorsque deux processus sont multitâches, le système d’exploitation alloue un certain nombre de cycles d’exécution du CPU à un programme.
- Après ce nombre de cycles, le système d’exploitation fait des copies de tous les registres, piles et files d’attente utilisés par les processus, et note le point où le processus a fait une pause dans son exécution.
- Il charge ensuite tous les registres, piles et files d’attente utilisés par le second processus et lui accorde un certain nombre de cycles de CPU.
- Quand ceux-ci sont terminés, il fait des copies de tous les registres, piles et files d’attente utilisés par le second programme, et charge le premier programme.
Toutes les informations nécessaires au suivi d’un processus lors de la commutation sont conservées dans un paquet de données appelé bloc de contrôle de processus. Le bloc de contrôle du processus contient généralement :
- Un numéro d’identification qui identifie le processus
- Des pointeurs vers les emplacements du programme et de ses données où le traitement s’est produit en dernier lieu
- Le contenu des registres
- L’état de divers drapeaux et commutateurs
- Des pointeurs vers les limites supérieures et inférieures de la mémoire requise. et inférieure de la mémoire requise pour le processus
- La liste des fichiers ouverts par le processus
- La priorité du processus
- Le statut de tous les périphériques d’E/S nécessaires au processus
Lorsque le statut du processus change, d’en attente à actif, par exemple, ou de suspendu à en cours d’exécution, les informations du bloc de contrôle du processus doivent être utilisées comme les données de tout autre programme pour diriger l’exécution de la partie de commutation des tâches du système d’exploitation.
Cette permutation de processus se fait sans intervention directe de l’utilisateur, et chaque processus obtient suffisamment de cycles de CPU pour accomplir sa tâche dans un temps raisonnable. Des problèmes peuvent survenir, cependant, si l’utilisateur essaie de faire fonctionner trop de processus en même temps. Le système d’exploitation lui-même a besoin de quelques cycles d’unité centrale pour effectuer la sauvegarde et l’échange de tous les registres, files d’attente et piles des processus d’application. Si un nombre suffisant de processus est lancé, et si le système d’exploitation n’a pas été conçu avec soin, le système peut commencer à utiliser la grande majorité de ses cycles CPU disponibles pour échanger entre les processus plutôt que pour les exécuter. Lorsque cela se produit, on parle de thrashing, et cela nécessite généralement une sorte d’intervention directe de l’utilisateur pour arrêter les processus et ramener l’ordre dans le système.
Une façon pour les concepteurs de systèmes d’exploitation de réduire le risque de thrashing est de réduire le besoin de nouveaux processus pour effectuer diverses tâches. Certains systèmes d’exploitation permettent un « processus-lite », appelé thread, qui peut traiter tout le travail intensif du CPU d’un processus normal, mais ne traite généralement pas les différents types d’E/S et n’établit pas de structures nécessitant le bloc de contrôle de processus étendu d’un processus régulier. Un processus peut démarrer de nombreux threads ou d’autres processus, mais un thread ne peut pas démarrer un processus.
Jusqu’à présent, tout l’ordonnancement dont nous avons parlé concernait une seule unité centrale. Dans un système comportant deux CPU ou plus, le système d’exploitation doit répartir la charge de travail entre les CPU, en essayant d’équilibrer les demandes des processus requis avec les cycles disponibles sur les différentes CPU. Les systèmes d’exploitation asymétriques utilisent une unité centrale pour leurs propres besoins et répartissent les processus d’application entre les autres unités centrales. Les systèmes d’exploitation symétriques se répartissent entre les différents CPU, équilibrant la demande par rapport à la disponibilité des CPU, même lorsque le système d’exploitation lui-même est tout ce qui est en cours d’exécution.
Même si le système d’exploitation est le seul logiciel ayant des besoins d’exécution, le CPU n’est pas la seule ressource à planifier. La gestion de la mémoire est la prochaine étape cruciale pour s’assurer que tous les processus se déroulent sans problème.
Gestion de la mémoire et du stockage
Lorsqu’un système d’exploitation gère la mémoire de l’ordinateur, il y a deux grandes tâches à accomplir :
- Chaque processus doit disposer de suffisamment de mémoire pour s’exécuter, et il ne peut ni empiéter sur l’espace mémoire d’un autre processus ni être emporté par un autre processus.
- Les différents types de mémoire du système doivent être utilisés correctement pour que chaque processus puisse s’exécuter le plus efficacement possible.
La première tâche exige que le système d’exploitation établisse des limites de mémoire pour les types de logiciels et pour les applications individuelles.
À titre d’exemple, considérons un système imaginaire avec 1 mégaoctet (1 000 kilo-octets) de mémoire vive. Au cours du processus de démarrage, le système d’exploitation de notre ordinateur imaginaire est conçu pour aller jusqu’au sommet de la mémoire disponible et ensuite « reculer » suffisamment loin pour répondre aux besoins du système d’exploitation lui-même. Disons que le système d’exploitation a besoin de 300 kilo-octets pour fonctionner. Maintenant, le système d’exploitation va au fond de la réserve de mémoire vive et commence à accumuler les divers logiciels pilotes nécessaires pour contrôler les sous-systèmes matériels de l’ordinateur. Dans notre ordinateur imaginaire, les pilotes occupent 200 kilo-octets. Donc, après avoir obtenu le chargement complet du système d’exploitation, il reste 500 kilo-octets pour les processus d’application.
Lorsque les applications commencent à être chargées en mémoire, elles sont chargées dans des tailles de bloc déterminées par le système d’exploitation. Si la taille du bloc est de 2 kilo-octets, alors chaque processus qui est chargé recevra un morceau de mémoire qui est un multiple de 2 kilo-octets en taille. Les applications seront chargées dans ces blocs de taille fixe, les blocs commençant et se terminant sur des limites établies par des mots de 4 ou 8 octets. Ces blocs et ces limites permettent de garantir que les applications ne seront pas chargées sur l’espace d’une autre application à cause d’un ou deux bits mal calculés. Ceci étant assuré, la plus grande question est de savoir ce qu’il faut faire lorsque l’espace d’application de 500 kilo-octets est rempli.
Dans la plupart des ordinateurs, il est possible d’ajouter de la mémoire au-delà de la capacité d’origine. Par exemple, vous pouvez étendre la mémoire vive de 1 à 2 mégaoctets. Cela fonctionne bien, mais a tendance à être relativement coûteux. Elle ignore également un fait fondamental de l’informatique : la plupart des informations qu’une application stocke en mémoire ne sont pas utilisées à un moment donné. Un processeur ne peut accéder à la mémoire qu’à un seul emplacement à la fois, de sorte que la grande majorité de la RAM est inutilisée à tout moment. Étant donné que l’espace disque est bon marché par rapport à la RAM, le déplacement des informations de la RAM vers le disque dur peut augmenter considérablement l’espace de la RAM sans frais. Cette technique est appelée gestion de la mémoire virtuelle.
Le stockage sur disque n’est qu’un des types de mémoire qui doit être géré par le système d’exploitation, et c’est le plus lent. Classés par ordre de vitesse, les types de mémoire d’un système informatique sont :
- Antémémoire à haute vitesse – Il s’agit de quantités de mémoire rapides et relativement petites qui sont accessibles à l’unité centrale de traitement par les connexions les plus rapides. Les contrôleurs de cache prédisent les éléments de données dont le CPU aura besoin ensuite et les tirent de la mémoire principale vers le cache haute vitesse pour accélérer les performances du système.
- Mémoire principale – C’est la mémoire vive que vous voyez mesurée en mégaoctets lorsque vous achetez un ordinateur.
- Mémoire secondaire – Il s’agit le plus souvent d’une sorte de stockage magnétique rotatif qui garde les applications et les données disponibles pour être utilisées, et qui sert de RAM virtuelle sous le contrôle du système d’exploitation.
Le système d’exploitation doit équilibrer les besoins des différents processus avec la disponibilité des différents types de mémoire, en déplaçant les données par blocs (appelés pages) entre les mémoires disponibles selon le calendrier des processus.
Gestion des périphériques
Le chemin entre le système d’exploitation et pratiquement tout le matériel qui n’est pas sur la carte mère de l’ordinateur passe par un programme spécial appelé pilote. Une grande partie de la fonction d’un pilote est d’être le traducteur entre les signaux électriques des sous-systèmes matériels et les langages de programmation de haut niveau du système d’exploitation et des programmes d’application. Les pilotes prennent des données que le système d’exploitation a définies comme un fichier et les traduisent en flux de bits placés à des emplacements spécifiques sur des dispositifs de stockage, ou en une série d’impulsions laser dans une imprimante.
Parce qu’il y a de si grandes différences dans le matériel contrôlé par les pilotes, il y a des différences dans la façon dont les programmes de pilotes fonctionnent, mais la plupart sont exécutés lorsque le périphérique est requis, et fonctionnent à peu près comme tout autre processus. Le système d’exploitation attribuera fréquemment des blocs de haute priorité aux pilotes afin que la ressource matérielle puisse être libérée et préparée pour une autre utilisation aussi rapidement que possible.
Une des raisons pour lesquelles les pilotes sont séparés du système d’exploitation est que de nouvelles fonctions peuvent être ajoutées au pilote — et donc aux sous-systèmes matériels — sans exiger que le système d’exploitation lui-même soit modifié, recompilé et redistribué. Grâce au développement de nouveaux pilotes de périphériques matériels, développement souvent effectué ou payé par le fabricant des sous-systèmes plutôt que par l’éditeur du système d’exploitation, les capacités d’entrée/sortie du système global peuvent être grandement améliorées.
La gestion de l’entrée et de la sortie est en grande partie une question de gestion des files d’attente et des tampons, des installations de stockage spéciales qui prennent un flux de bits à partir d’un périphérique, peut-être un clavier ou un port série, conservent ces bits et les libèrent vers l’unité centrale à un rythme suffisamment lent pour que l’unité centrale puisse y faire face. Cette fonction est particulièrement importante lorsqu’un certain nombre de processus sont en cours d’exécution et occupent le temps du processeur. Le système d’exploitation demandera à une mémoire tampon de continuer à recevoir des entrées du périphérique, mais de cesser d’envoyer des données à l’unité centrale pendant que le processus utilisant les entrées est suspendu. Ensuite, lorsque le processus nécessitant une entrée est à nouveau actif, le système d’exploitation ordonne au tampon d’envoyer des données. Ce processus permet à un clavier ou à un modem de traiter avec des utilisateurs ou des ordinateurs externes à une vitesse élevée, même s’il y a des moments où le CPU ne peut pas utiliser l’entrée de ces sources.
Gérer toutes les ressources du système informatique est une grande partie de la fonction du système d’exploitation et, dans le cas des systèmes d’exploitation en temps réel, peut être pratiquement toute la fonctionnalité requise. Pour les autres systèmes d’exploitation, cependant, fournir un moyen relativement simple et cohérent pour les applications et les humains d’utiliser la puissance du matériel est une partie cruciale de leur raison d’être.
Interface au monde
Interface d’application
De même que les pilotes fournissent un moyen pour les applications d’utiliser les sous-systèmes matériels sans avoir à connaître tous les détails du fonctionnement du matériel, les interfaces de programme d’application (API) permettent aux programmeurs d’applications d’utiliser les fonctions de l’ordinateur et du système d’exploitation sans avoir à suivre directement tous les détails du fonctionnement de l’unité centrale. Prenons l’exemple de la création d’un fichier de disque dur destiné à contenir des données pour voir pourquoi cela peut être important.
Un programmeur qui écrit une application pour enregistrer les données d’un instrument scientifique pourrait vouloir permettre au scientifique de spécifier le nom du fichier créé. Le système d’exploitation pourrait fournir une fonction API nommée MakeFile pour créer des fichiers. Lors de l’écriture du programme, le programmeur insérerait une ligne qui ressemblerait à ceci :
MakeFile
Dans cet exemple, l’instruction indique au système d’exploitation de créer un fichier qui permettra un accès aléatoire à ses données (1), qui aura un nom tapé par l’utilisateur (%Name) et dont la taille variera en fonction de la quantité de données stockées dans le fichier (2). Maintenant, voyons ce que fait le système d’exploitation pour transformer l’instruction en action.
- Le système d’exploitation envoie une requête au lecteur de disque pour obtenir l’emplacement du premier emplacement de stockage libre disponible.
- Avec cette information, le système d’exploitation crée une entrée dans le système de fichiers indiquant les emplacements de début et de fin du fichier, le nom du fichier, le type de fichier, si le fichier a été archivé, quels utilisateurs ont la permission de regarder ou de modifier le fichier, et la date et l’heure de la création du fichier.
- Le système d’exploitation écrit des informations au début du fichier qui identifie le fichier, met en place le type d’accès possible et inclut d’autres informations qui lient le fichier à l’application.
Dans toutes ces informations, les requêtes au lecteur de disque et les adresses du point de début et de fin du fichier sont dans des formats fortement dépendants du fabricant et du modèle du lecteur de disque.
Parce que le programmeur a écrit son programme pour utiliser l’API pour le stockage sur disque, il n’a pas à se tenir au courant des codes d’instruction, des types de données et des codes de réponse de tous les disques durs et lecteurs de bandes possibles. Le système d’exploitation, connecté aux pilotes des différents sous-systèmes matériels, s’occupe des détails changeants du matériel — le programmeur doit simplement écrire du code pour l’API et faire confiance au système d’exploitation pour faire le reste.
Les API sont devenues l’un des domaines les plus disputés de l’industrie informatique ces dernières années. Les entreprises réalisent que les programmeurs qui utilisent leur API se traduiront finalement par la capacité de contrôler et de profiter d’une partie particulière de l’industrie. C’est l’une des raisons pour lesquelles tant d’entreprises ont été disposées à fournir gratuitement au public des applications telles que des lecteurs ou des visionneuses. Elles savent que les consommateurs demanderont que les programmes tirent parti des lecteurs gratuits, et les sociétés d’application seront prêtes à payer des redevances pour permettre à leurs logiciels de fournir les fonctions demandées par les consommateurs.
Interface utilisateur
De même que l’API fournit un moyen cohérent pour les applications d’utiliser les ressources du système informatique, une interface utilisateur (IU) apporte une structure à l’interaction entre un utilisateur et l’ordinateur. Au cours de la dernière décennie, la quasi-totalité du développement des interfaces utilisateur s’est faite dans le domaine de l’interface utilisateur graphique (GUI), avec deux modèles, Macintosh d’Apple et Windows de Microsoft, qui ont reçu la plus grande attention et gagné la plupart des parts de marché. Il existe d’autres interfaces utilisateur, certaines graphiques et d’autres non, pour d’autres systèmes d’exploitation.
Unix, par exemple, possède des interfaces utilisateur appelées shells qui présentent une interface utilisateur plus souple et plus puissante que l’interface textuelle standard du système d’exploitation. Des programmes tels que le Korn Shell et le C Shell sont des interfaces textuelles qui ajoutent des utilitaires importants, mais leur objectif principal est de faciliter la manipulation des fonctions du système d’exploitation par l’utilisateur. Il existe également des interfaces graphiques, comme X-Windows et Gnome, qui rendent Unix et Linux plus proches des ordinateurs Windows et Macintosh du point de vue de l’utilisateur.
Il est important de se rappeler que dans tous ces exemples, l’interface utilisateur est un programme ou un ensemble de programmes qui se trouve comme une couche au-dessus du système d’exploitation lui-même. La même chose est vraie, avec des mécanismes quelque peu différents, pour les systèmes d’exploitation Windows et Macintosh. Les fonctions essentielles du système d’exploitation, la gestion du système informatique, se trouvent dans le noyau du système d’exploitation. Le gestionnaire d’affichage est distinct, bien qu’il puisse être étroitement lié au noyau sous-jacent. Les liens entre le noyau du système d’exploitation et l’interface utilisateur, les utilitaires et les autres logiciels définissent de nombreuses différences dans les systèmes d’exploitation aujourd’hui, et les définiront davantage à l’avenir.
L’avenir
Une question concernant l’avenir des systèmes d’exploitation tourne autour de la capacité d’une philosophie particulière de distribution de logiciels à créer un système d’exploitation utilisable par les entreprises et les consommateurs ensemble.
Linux, le système d’exploitation créé et distribué selon les principes de l’open source, pourrait avoir un impact significatif sur le système d’exploitation en général. La plupart des systèmes d’exploitation, des pilotes et des programmes utilitaires sont écrits par des organisations commerciales qui distribuent des versions exécutables de leurs logiciels — des versions qui ne peuvent pas être étudiées ou modifiées. L’open source exige la distribution de matériaux sources originaux qui peuvent être étudiés, modifiés et construits, les résultats étant à nouveau distribués librement.
La croissance continue d’Internet et la prolifération des ordinateurs qui ne sont pas des machines de bureau ou des ordinateurs portables standard signifient que les systèmes d’exploitation changeront pour suivre le rythme, mais les fonctions de gestion et d’interface de base continueront, même si elles évoluent.