ENSEIGNEMENT DE PROMOTION SOCIALE —————————————————————— Cours de SYSTEMES D'EXPLOITATION - Introduction —————————————————————— UF 75 52 03 U32 D2 H. Schyns Septembre 2012 Version provisoire Systèmes d'eploitation Sommaire Sommaire 1. 2. INTRODUCTION 1.1. Le concept d'ordinateur 1.2. Les couches de fonctionnement 1.3. Les processus DEFINITION ET ROLES D'UN SYSTEME D'EXPLOITATION 2.1. Definition 2.2. Rôles d'un système d'exploitation 2.2.1. 2.2.2. 2.2.3. 2.2.4. 3. TYPES DE SYSTEME D'EXPLOITATION 3.1. Position du problème 3.2. Monotâche 3.3. Multitâche 3.3.1. 3.3.2. 3.3.3. 3.3.4. 3.3.5. 4. Multitâche coopératif Multitâche préemptif Multiutilisateur Multithreading Synthèse 3.4. Multiprocesseur 3.5. Multiordinateur HISTORIQUE 4.1. 5. Gérer les ressources Créer des couches d'abstraction Fournir une interface ergonomique Autres fonctions Premiers essais SOURCES 5.1. Internet 5.2. Autres H. Schyns S.1 Systèmes d'exploitation 1. 1 - Introduction Introduction 1.1. Le concept d'ordinateur Nous avons vu dans le cours de structure des ordinateurs que, d'un point de vue matériel, celui-ci s'organise autour d'une unité de traitement des données (fig. 1.1) : Unité de Traitement UAL fig. 1.1 Unité Arithmétique et Logique Cette unité de traitement contient notamment l'unité arithmétique et logique (ang.: Arithmetic and Logical Unit). L'ALU regroupe un certain nombre de circuits électroniques de base, construits en combinant des portes logiques élémentaires (AND, OR, NAND, NOR, XOR). Ces circuits réalisent les opérations mathématiques élémentaires (addition et soustraction, multiplication et division) ainsi que les opérations logiques élémentaires (plus grand que, égal). Ces opérations élémentaires sont ensuite combinées au sein du processeur dans des micro-programmes pour accomplir des fonctions plus avancées (logarithmes et exponentielles, fonctions trigonométriques,…). L'unité de traitement doit échanger des informations avec son environnement grâce à des périphériques d'entrée (clavier, scanner, souris, …) et des périphériques de sortie (écran, imprimante, …) Elle doit aussi conserver les données et les résultats pendant les traitements ce qui implique l'existence d'une mémoire (fig. 1.2). Périphérique d'entrée Unité de Traitement Mémoire (données) Périphérique de sortie Mémoire (programmes) fig. 1.2 Architecture d'un ordinateur élémentaire Un "vrai" ordinateur est capable d'exécuter tout seul des procédures de traitement, autrement dit, des programmes. Tout cela est très joli, mais comment la machine sait-elle quand elle doit lire le périphérique d'entrée ? Comme il existe différents types de périphériques d'entrée (clavier, souris, CD, réseau, …), comment la machine sait-elle comment elle doit lire l'information présentée sur tel ou tel périphérique ? H. Schyns 1.1 Systèmes d'exploitation 1 - Introduction D'un autre côté, en supposant qu'un programme soit en cours d'exécution comment sait-il où se trouve tel ou tel fichier auquel il doit accéder ? Comment connaît-il les emplacements de mémoire auxquels il peut accéder ? Il est donc nécessaire d'ajouter un processus de gestion et de contrôle pour gérer l'ensemble des ressources du système et les attribuer aux différents programmes qui en ont besoin. Ce processus, en réalité, un ensemble de processus, constitue le système d'exploitation. (ang. Operating System) Evidemment, ce processus de gestion est lui aussi un programme qui est aussi exécuté par l'unité de traitement (processeur). Et ce programme doit aussi utiliser certaines ressources. Mais comment sait-il… Nous tournons en rond (fig. 1.3). fig. 1.3 Le problème du système d'exploitation Le truc consiste à mettre "en dur" dans la machine un petit programme qui s'exécutera automatiquement dès la mise sous tension : le programme d'amorçage (ang.: boot process). Le programme d'amorçage va à son tour lancer et laisser la main à des procédures de plus en plus complexes jusqu'à ce que l'utilisateur puisse prendre la main et effectuer le travail qu'il désire. D'où vient ce premier programme ? Comment va-t-il permettre de lancer tous les autres ? Quels sont ces autres programmes ? C'est ce que nous verrons dans le cadre de ce cours. 1.2. Les couches de fonctionnement Il est commode de présenter la réalisation d'une tâche à l'aide d'un ordinateur selon un modèle en couches superposées. Chaque couche possède son langage particulier, c'est à dire un jeu d'instructions qui lui est propre. Chaque couche se fonctionne comme un traducteur placé entre la couche qui lui est supérieure et la couche qui lui est inférieure. On s'adresse à un traducteur ou à un interprète dans un langage qu'il comprend (son jeu d'instructions). Le traducteur transforme ces informations (instructions) en les traduisant dans le langage qui est compris par le traducteur suivant. Ce modèle en couches est aussi appelé hiérarchie de machines virtuelles. Pour résoudre un problème à l'aide d'un ordinateur, on empile généralement huit couches (fig. 1.4) : H. Schyns 1.2 Systèmes d'exploitation 1 - Introduction Les programmes d'application sont tous les logiciels dont l'utilisateur se sert couramment : tableur, traitement de texte, navigateur internet. Tous ces logiciels ont leurs propres jeux de commandes et de fonction. Pour développer ces logiciels, un programmeur a du imaginer les fonctions qu'il mettrait à la disposition de l'utilisateur puis les traduire dans l'une des nombreux langages de programmation tels que Java, C++, FORTRAN et des centaines d'autres. Utilisateur 8 L'utilisateur doit résoudre un problème Programme d'application 7 Il utilise un logiciel comme Excel et ses instructions Langage de programmation 6 Excel est conçu en C ou C++ Assembleur 5 Les lignes de code C ou C++ sont compilées en Assembleur (ASM) Noyau du système d'exploitation 4 Le code ASM est combiné au SE pour accéder aux ressources Langage machine 3 Chaque famille de processeurs a son langage numérique propre Langage de microprogrammation 2 Les instructions complexes sont micro-programmées dans le processeur Logique électronique et numérique 1 Les bits sont codés en tensions (volts) qui commandent les transistors fig. 1.4 Modèle en couches de la réalisation d'une tâche sur un ordinateur Tel quel, le langage de programmation n'est pas compréhensible par l'ordinateur. Chaque instruction doit être décomposée et détaillée dans un langage beaucoup plus universel mais aussi plus limité : l'assembleur. C'est la compilation. Chaque instruction symbolique en Assembleur correspond à une instruction du langage machine. Le logiciel va utiliser des ressources système : il doit lire la souris, scruter le clavier, afficher des informations à l'écran, utiliser de la mémoire. Toutes ces ressources sont gérées de manière standard par le système d'exploitation. C'est lui par exemple qui sait comment on ouvre un fichier sur le disque dur, comment on y inscrit une information, comment on la relit. Le système d'exploitation a son propre langage : on ne s'adresse pas à DOS comme à Windows ou à Linux. H. Schyns 1.3 Systèmes d'exploitation 1 - Introduction 1 Chaque processeur a son propre langage machine ( ). C'est un langage natif, codé en "dur" dans chaque processeur, le seul qu'il comprenne; ce qui rend incompatibles des processeurs de familles différentes. Les instructions complexes (logarithme, fonctions trigonométriques) sont implémentées dans le processeur au moyen de microprogrammes gravés dans le chip. Les microprogrammes traduisent ces fonctions évoluées en une suite d'instructions logiques et arithmétiques élémentaires. Les instructions simples sont implémentées au moyen de portes électroniques, agencées selon des circuits qui produisent l'opération désirée. Nous sommes ici au cœur du "hard", le lieu de rencontre de l'informatique et de l'électronique numérique… 1.3. Les processus La notion de processus est au centre du fonctionnement du système d'exploitation. Plusieurs définitions qui se recouvrent largement ont été proposées mais la définition idéale reste à formuler. Une application n'est pas un processus. Plus exactement, pour qu'une application fonctionne, il peut y avoir des dizaines de processus mis en œuvre en arrière plan. Pour faire simple, nous dirons qu'un processus est un segment de programme en cours d’exécution - un programme est une suite d’instructions ; c’est du texte, un code statique. un processus est un concept dynamique, il représente le déroulement d’une tâche faisant partie d’une application ou un programme système quelconque. Un processeur n’est capable de traiter qu’un seul processus à la fois. Le processus est donc la plus grosse séquence d'instruction que le processeur peut traiter seul. Une application peut être multitâches ou, plus simplement, multiprocessus. Ceci a pour avantage - 1 de fractionner des applications afin d'en simplifier le développement, de permettre l'exacution apparemment simultanée de plusieurs applications d’optimaliser l’utilisation du (ou des) processeurs(s) Plus exactement, ce langage est particulier à chaque famille de processeurs p.ex. la ligne des processeurs Pentium de Intel. H. Schyns 1.4 Systèmes d'exploitation 2. 2 - Définition et rôles d'un système d'exploitation Définition et rôles d'un système d'exploitation 2.1. Definition A son origine, dans les années 1950, le système d'exploitation était simplement définit comme le programme qui contrôle le matériel. Aujourd'hui, le système d'exploitation est un ensemble de programmes qui permet entre autres - de gérer l'utilisation des ressources du système informatique afin de les partager entre plusieurs processus. Par ressources, on entend : - 2.2. le processeur (ang.: processor), la mémoire RAM (ang.: RAM memory), le disque dur (ang.: hard disk, disk drive, HDD), les périphériques d'entrée/sortie (ang.:. Input/output devices), les périphériques de communication (ang.: communication devices), etc. Rôles d'un système d'exploitation Au cours de l'histoire, le système d'exploitation a progressivement été amené à remplir de plus en plus de rôles. 2.2.1. Gérer les ressources Ainsi qu'il a été dit ci-dessus, le premier rôle du système d'exploitation a été de de contrôler la manière dont les ressources (entités passives) sont allouées aux processus (entités actives) : quantité de mémoire, temps de calcul autorisé, etc. Aujourd'hui, la plupart des systèmes d'exploitation sont capables de gérer dynamiquement cette répartition des ressources entre les divers processus. En d'autres mots, la répartition des ressources varie au fil du temps sans que l'utilisateur s'en aperçoive. Ainsi, un système d'exploitation est capable de voir que le temps de calcul qu'il a attribué à un processus est écoulé. Il peut alors l'interrompre tout en mémorisant l'état dans lequel il a été interrompu. Ceci fait, il peut dégager les ressources qui lui était attribuées et les donner à un nouveau processus qui veut lancer ou à un processus qui avait été mis en attente précédemment et qu'il veut réactiver. Si les tranches de temps de calcul sont suffisamment courtes (de l'ordre du centième de seconde), plusieurs processus peuvent se succéder rapidement sans que l'utilisateur en soit conscient. On crée ainsi un système d'exploitation multi-tâches. Il est important de noter que c'est le système d'exploitation et non le matériel qui définit si un système informatique est mono- ou multi-tâches. H. Schyns 1.1 Systèmes d'exploitation 2 - Définition et rôles d'un système d'exploitation 2.2.2. Créer des couches d'abstraction - Les pilotes de périphériques Une première couche d'abstraction (ang.: abstraction layer) permet de masquer les détails du fonctionnement d'une ressource (mémoire, disque dur, clavier, écran, …) tout en offrant un ensemble de fonctions standardisées à un utilisateur (lequel peut être un être humain ou un logiciel). Prenons une comparaison : le téléphone et le réseau téléphonique sont des couches d'abstraction que nous utilisons tous les jours. Qu'il s'agisse de téléphoner en Belgique ou à l'étranger, que ce soit depuis un poste fixe ou un appareil mobile, la procédure suivie par l'utilisateur est toujours la même. Pourtant, les opérations mises en œuvre par l'appel sont différentes dans chaque cas mais l'utilisateur n'a pas à s'en préoccuper. Il en va de même pour l'accès aux différentes ressources de l'ordinateur : les codes ou instructions de contrôle de chaque périphérique sont propres à chaque fabricant et ne sont pas normalisés (1). Par contre, de l'autre côté, les développeurs d'applications souhaitent utiliser une seule instruction pour accéder au périphérique quel que soit son fabricant. Pour résoudre ce problème, le système d'exploitation fournit des sous-programmes appelés pilotes de périphériques (and.: device drivers). Ces pilotes sont généralement écrits par le fabricant du périphérique considéré. - L'encapsulation et la virtualisation des périphériques D'une manière similaire, le système d'exploitation met à la disposition du développeur des fonctions simples qui, en réalité, exécutent un ensemble complexe d'instructions pour accéder à tel ou tel périphérique et lui demander d'exécuter une action donnée. Ces fonctions masquent complètement le fonctionnement interne du périphérique en question, lequel n'est plus accessible qu'au travers des fonctions standard proposées par le système d'exploitation. On dit alors que le périphérique a été encapsulé. En poursuivant dans la même ligne d'idées, le même ensemble de fonctions peut agir sur différents périphériques, à nouveau sans que le développeur ait à se soucier de leur fonctionnement interne. Pour le développeur, ces périphériques sont devenus des abstractions. Un exemple est la notion de flux (ang.: stream) qui peut tout aussi bien représenter l'envoi de données vers l'écran, vers un fichier sur disque dur ou vers la carte réseau. Le développeur utilisera les mêmes instructions dans tous les cas. - Le virtualisation de machines élémentaires En poussant le raisonnement à l'extrême, ce n'est plus seulement un périphérique qui devient une abstraction mais tout un ordinateur, avec ses ressources en mémoire et ses périphériques. 1 Les fabricants veillent à rester cohérents dans leurs lignes de produits (p.ex. imprimantes) en utilisant les mêmes codes pour produire les mêmes effets mais il n'y a généralement pas d'accord entre les fabricants sur les codes à utiliser. H. Schyns 1.2 Systèmes d'exploitation 2 - Définition et rôles d'un système d'exploitation Ainsi, en fonction des besoins, le système d'exploitation découpe l'ordinateur physique en un ensemble de mini-ordinateurs logiques (ou virtuels) (1), chacun disposant en exclusivité d'un certain nombre de pages de mémoire, d'un certain nombre de canaux de lecture et d'écriture vers les périphériques et d'un certain temps de calcul. Chacune de ces machines se voit confier l'exécution d'un processus donné. Lorsque le processus est terminé, le système d'exploitation récupère les ressources pour les attribuer en tout ou en partie à une autre machine virtuelle qui exécutera un autre processus. - La sécurisation des applications En faisant exécuter tous les processus sur des machines virtuelles indépendantes qui disposent de leurs propres ressources, le système d'exploitation peut facilement contrôler si l'une d'elle tente d'écrire dans la zone de mémoire attribuée à une autre. Il peut aussi régler les conflits engendrés entre deux processus qui tenteraient d'accéder simultanément à un même fichier du disque dur. Il réduit ainsi considérablement les risques de plantage du système. Evidemment, dans certains cas, des applications différentes doivent pouvoir échanger des informations. Pensons simplement au copier/coller d'une image entre un outil de dessin et un traitement de texte. Cette tâche sera réalisée en toute sécurité par un processus tiers fourni par le système d'exploitation. 2.2.3. Fournir une interface ergonomique L'interface est, par définition, l'élément du système d'exploitation que l'utilisateur perçoit en premier lieu.. Bien souvent, l'utilisateur est plus intéressé par les caractéristiques de l'interface que par les performances rélles du système d'exploitation. C'est notamment ce qui explique la popularité de Windows comparée à celle de Linux. L'interface utilisateur compte plusieurs composants, parmi lesquels : - l'interpréteur de commande, qui permet de donner des ordres au système, l'explorateur du système de fichiers, qui permet de retrouver les documents composés par l'utilisateur et d'organiser le contenu du disque dur, l'aide en ligne. Aujourd'hui, l'utilisateur attend de l'interface qu'il soit graphique et ergonomique (ang.: Graphical User Interface ou GUI) : il doit permettre de lancer les applications en les pointant à l'aide d'une souris et non en tapant une ligne de commande. De plus, l'interface doit lui permettre de gérer non seulement sa propre machine, mais aussi de nombreux processus qui s'exécutent sur des ensembles d'ordinateurs mis en réseaux. 2.2.4. Autres fonctions A côté de ces fonctions de base, l'utilisateur attend aussi du système d'exploitation : 1 Il ne s'agit pas encore de machines virtuelles telles que celle crées à l'aide de logiciels de virtualisation tels que VMware ou VirtualBox car celles dont on parle ici ne sont accessibles que par le SE. H. Schyns 1.3 Systèmes d'exploitation - 2 - Définition et rôles d'un système d'exploitation qu'il permette de partager les ressources matérielle entre plusieurs logiciels et plusieurs utilisateurs qu'il permette de partager des données entre utilisateurs qu'il permette de planifier l'exécution de certaines tâches, qu'il assure la sécurité des informations et empêche les utilisateurs et les logiciels d'interférer les une avec les autres, qu'il soit capable de résister aux erreurs de se remettre en état si une erreur survient, qu'il permette de contrôler l'utilisation des ressources, Et de plus, qu'il accomplisse discrètement ces diverses tâches en se faisant oublier. H. Schyns 1.4 Systèmes d'exploitation 3. 3 - Types de système d'exploitation Types de système d'exploitation 3.1. Position du problème La conception d'un système d'exploitation dépend : - du type de tâche qu'on désire lui confier du processeur pour lequel il est créé du système de fichiers qu'il gère Rien que dans le monde des PC, il en existe des dizaines, chacun ayant ses avantages et ses inconvénients. Citons en vrac Linux, OS2, OS9, Paradox… Les gros systèmes (ang.: mainframes) utilisés dans les grosses sociétés ont eux aussi leurs systèmes d'exploitation : Unix, VMS (IBM), MVS (VAX), HP2000 (HP), etc. Ils permettent notamment de faire du traitement par lots (ang.: batch) et de gérer des files d'attente (ang.: queues) pour de multiples utilisateurs. Citons aussi l'informatique industrielle qui utilise encore d'autres systèmes d'exploitation optimisés pour le suivi des installations et la conduite de robots. Enfin, les petits appareils "embarqués" tels que téléphones portables (GSM), agendas électroniques (PDA), et autres systèmes d'aides à la navigation (GPS) fonctionnent aussi grâce à un système d'exploitation très léger. Par contre les petits ordinateurs qui équipent les ascenseurs, les fours à micro– ondes, les machines à lessiver et autre electr-ménager "blanc", en sont parfois encore dépourvus. Commençons par classer tout ce petit monde. 3.2. Monotâche Un système d'exploitation est monotâche lorsqu'il n'autorise qu'un seul utilisateur et que celui-ci ne peut y exécuter qu'un seul programme à la fois. Cette restriction n'est pas sans poser de problèmes puisque le système d'exploitation doit aussi gérer les périphériques. Dès lors, un SE monotâche travaille en mode réel (ang.: real mode) : il permet aux applications d'activer librement n'importe quelle requête d'interruption matérielle ou logicielle (ang.: interrupt request ou IRQ). Il leur permet également d'accéder librement - et sans aucune protection - à n'importe quelle zone de mémoire. Lorsqu'une application doit accéder à une ressource telle qu'imprimer un document ou écrire sur le disque dur, elle s'arrête jusqu'à ce que cette tâche soit terminée. Exemples : MS-DOS 3.3. Multitâche Le système d'exploitation est multitâche (ang.: multitasking) s'il permet à l'ordinateur d'exécuter simultanément plusieurs programmes. En fait, la simultanéité n'est qu'apparente. Le système d'exploitation attribue à tour de rôle à chaque processus un court laps de temps pour qu'il s'exécute partiellement. Cette méthode, aussi appelée multiprogrammation ou temps H. Schyns 3.1 Systèmes d'exploitation 3 - Types de système d'exploitation partagé (ang.: time sharing) donne l'impression que tous ces programmes s'exécutent simultanément. L'vantage de cette technique est de maximiser l'occupation du processeur. Dès qu'un programme s'interrompt pour attendre la réalisation d'une fonction plus lente, telle qu'une opération d'entrées/sortie, le processeur passe la main à un autre processus. Le multitâche se décline en plusieurs variantes énumérées ci-dessous. 3.3.1. Multitâche coopératif Chaque application dispose des ressources du système puis les libère pour permettre à l'application qui la suit dans une file d'attente d'en disposer à son tour. L'activation d'une tâche est confiée à la tâche qui prècède, un peu comme dans une chaîne de montage automobile. Chaque tâche dépend des autres pour exécution : si une des tâches est bloquée, c'est l'ensemble du système qui s'arrête. Exemples : Windows 3.1, 95, 98, Millénium 3.3.2. Multitâche préemptif Chaque application dispose du processeur et des ressources pendant un laps de temps déterminé à l'avance ou jusqu'à ce qu'une autre application ait une priorité supérieure à l'application en cours. Un processus spécial, nommé ordonnanceur (ang.: scheduler), fixe l'ordre d'éxécution des processus et le temps qui leur est attribué. C'est lui qui provoque le basculement d'un processus à un autre. Les ta^ches ne dépendent donc plus les unes des autres. Si l'une d'elles est bloquée ou provoque une erreur, elle est mise de côté sans bloquer le système. Exemples : Unix - Linux - Windows NT - 2000 – XP 3.3.3. Multiutilisateur Naguère, seuls les gros systèmes nommés ordinateurs centraux (ang.: mainframes) permettaient à plusieurs utilisateurs de travailler simultanément en se servant de terminaux passifs. Le temps processeur est non seulement réparti entre plusieurs tâches mais aussi partagé entre plusieurs utilisateurs qui opèrent depuis les terminaux. Aujourd'hui, ce mode de fonctionnement se retrouve dans les serveurs (ang.: servers) notamment ceux gérés par les systèmes Unix et Windows Terminal Server. Pour se connecter au Terminal Server, les postes clients, qui sont des PC de faible puissance, utilisent une application appelée "Client Terminal Server" 3.3.4. Multithreading Une application multithread est un logiciel qui dès sa conception a été partagé en différentes sous-applications appelées fils d'exécution (ang.: threads). Leur exécution est confiée au système d’exploitation. A l'inverse de ce qui se passe dans le cadre du multitâche, où chaque processus dispose d’une partie distincte de la mémoire pour s’exécuter indépendamment des H. Schyns 3.2 Systèmes d'exploitation 3 - Types de système d'exploitation autres, les threads issus d'une même application partagent un même espace mémoire. De nombreux jeux vidéo utilisent le multithreading. 3.3.5. Synthèse OS Multitâche Multiutilisateur DOS Non Non Unix Oui Oui Windows 95 - 98 - millénium Coopératif Non Windows NT - 2000 - XP - etc Préemptif Non idem + terminal server Préemptif Oui 3.4. Multiprocesseur Comme le nom l'indique, un système multiprocesseur rassemble plusieurs CPU sur un même ordinateur, voire sur une même carte mère, ou un même au sein du chip du processeur (1). Ces différents processeurs ont accès à la même mémoire et aux mêmes ressources. Notons qu'un système d'entrée/sortie avancé, tel qu'une carte graphique pourvue d'un processeur dédicacé (GPU), ne constitue pas un système mutli processeur car ce n'est pas le processeur graphique qui exécute et contrôle l'application de l'utilisateur. Dès les années 1960, époque à laquelle les ordinateurs occupaient une salle entière, il est apparu qu'ajouter un deuxième CPU au système revenait bien moins cher que l'achat d'un deuxième ordinateur. Il existe deux manières de gérer un système multiprocesseur : - le multiprocessing asymétrique (AMP) le multiprocessing symétrique (SMP) Dans le cas du multiprocessing asymétrique, l'un des processeurs est réservé au système d'exploitation tandis que les autres exécutent les applications. C'est la solution qui a été adoptée à l'époque des premiers systèmes bi-processeurs. En effet, les systèmes d'exploitation de l'époque avaient été développés pour gérer un seul processeur. En gérer deux de manière efficace allait demander une refonte complète des systèmes d'exploitation. Une solution plus rapide était de créer un lien maître-esclave entre les deux CPU : le système d'exploitation fonctionnant uniquement sur le CPU primaire (ang.: foreground) tandis que le processeur secondaire (ang.: background) exécutait les applications de l'utilisateur. Ainsi, sur l'ordinateur Burroughs B5000, le processeur secondaire ne disposait d'aucune connexion aux périphériques mais il partageait néanmoins la mémoire avec le processeur primaire (fig. 3.1). Quand une application s'exécutant sur le processeur secondaire devait accéder à un périphérique (disque, bande, imprimante, etc), ce processeur envoyait une demande au processeur primaire puis s'arretait en attendant que le système d'exploitation, focntionnant sur le processeur primaire, exécute le service demandé. 1 Dans ce dernier cas, on parle plutôt de "multi-cœur" (ang.: multicore) H. Schyns 3.3 Systèmes d'exploitation 3 - Types de système d'exploitation CPU Secondaire CPU Primaire Périphériques Bus RAM fig. 3.1 Système multiprocesseur asymétrique Dans le cas du multiprocessing symétrique, tous les processeurs sont identiques et sont considérés sur le même pied. Le système d'exploitation et les applications se partagent les processeurs, la mémoire et les périphériques (fig. 3.2). Les processeurs sont contrôlés par un seul exemplaire du système d'exploitation. CPU 1 CPU 2 Périphériques Bus Arbitrage BUS CPU 3 CPU 4 RAM fig. 3.2 Système multiprocesseur symétrique Les processeurs peuvent exécuter des programmes différents et travailler sur des données différentes. Ils peuvent aussi partager les ressources comme des zones de mémoires, le système d'interruptions, etc. Une des limitations du système est la bande passante du bus et son usage doit faire l'objet d'un arbitrage, exactement comme dans le cas d'un réseau. 3.5. Multiordinateur Un système informatique distribué (ang.: clustering) est une collection d'ordinateurs autonomes interconnectés en réseau qui coopèrent pour réaliser uen tâche donnée. Ici, contrairement au système multiprocesseur, chaque ordinateur possède sa propre mémoire et son propre système d'exploitation. La caractéristique d'un tel système est d'être très hétérogène, tant sur le plan du matériel que sur celui des sysèmes d'exploitation.(Windows, Linux, MacOS, etc) Pour être exécutée sur un tel système, l'application doit être découpée en séquences de calcul indépendantes. La coordination est assurée par un intergiciel (ang.: middelware) qui assure le dialogue entre les machines. H. Schyns 3.4 Systèmes d'exploitation 4. 4 - Historique Historique 4.1. Premiers essais À l’époque des premiers ordinateurs, à la fin des années 1940, ceux-ci ne possédaient de mémoire permanente (ROM, disque dur). Dès lors, leur procédure de démarrage devait être exécutée manuellement. Après la mise sous tension, le processeur se mettait en état d’attente. L'opérateur positionnait un certain nombre d'interrupteurs ou clés pour écrire en binaire le contenu de la première instruction (fig. 4.1). Puis, il l'envoyait dans la mémoire RAM en activant un autre clé. Il repositionnait ensuite les clés pour encoder la deuxième instruction qu'il expédiait dans la RAM de la même manière, et ainsi de suite. fig. 4.1 Vue du clavier de démarrage de l'ordinateur Data General Eclipse S/130 (1) Une fois le programme de démarrage codé, un commutateur permettait de libérer le processeur de son état d'attente. Il exécutait alors le code de démarrage, ce qui lui permettait d’accéder aux périphériques. L’invention des langages symboliques, puis d’autres niveaux de méta-langages tels le FORTRAN, allait simplifier les opérations de rédaction proprement dite du programme ; mais il fallait aussi faire des progrès sur la façon d’introduire programmes et données dans la machine et d’en extraire les résultats. L’introduction manuelle des adresses était une perte de temps : Nathaniel Rochester, un collaborateur de Gene Amdahl qui fut l'un des plus fameux architectes d’ordinateurs, imagina au début des années 1950 d'enregistrer les adresses au préalable sur bande magnétique. Le premier ordinateur qui les utilisa fut l’IBM 701 (1953) du Department of Defense (DoD) américain (2). Ce système reste d'actualité puisque ce n'est rien d'autre que la séquence de boot encodée aujourd'hui dans la ROM du BIOS. L'utilisation des bandes magnétiques connut un nouveau développement avec l’IBM 704 (1955). Sur cette machine conçue par Gene Amdahl, l’ingénieur de General Motors Bob Patrick écrivit un programme qui enchaînait automatiquement entrée 1 Source : http://www.chookfest.net/computers/s130.html 2 De nombreux progrès informatiques, dont l'émergence d'Internet, sont dûs à l'impulsion des militaires. Aujourd'hui, il s'agit plutôt des financiers. H. Schyns 4.1 Systèmes d'exploitation 4 - Historique des données, calcul, impression des résultats, entrée des données, etc. L’IBM 704 fut d’ailleurs le support d’un nombre considérable d’innovations capitales. Assez vite une constatation se fit jour : l’impression des résultats, à la cadence d’un télétype capable d’imprimer dix caractères par seconde, voire même leur écriture sur bande magnétique, pouvait prendre un temps aussi long que le calcul proprement dit, ce qui immobilisait la coûteuse unité centrale pour une tâche somme toute subalterne. Il aurait été possible de réduire la perte de temps due à l’impression des résultats en les écrivant provisoirement sur une mémoire auxiliaire électromagnétique (disque, bande, tambour...) beaucoup plus rapide qu’une imprimante, puis en les imprimant plus tard, pendant que l’unité centrale effectuerait d’autres calculs. Cela semblait possible parce que la tâche d’impression, ralentie par les opérations mécaniques de l’imprimante, n’utilisait les circuits de l’unité arithmétique et logique que fort peu, voire pas du tout si l’on avait pris soin d’enregistrer avec les résultats proprement dits des codes de commande destinés à l’électronique (rudimentaire) de l’imprimante pour indiquer les sauts de ligne, de page, etc. La réalisation de cet objectif apparemment modeste nécessitait encore un peu de programmation : à la fin du programme de calcul il fallait qu’un programme déclenche d’une part le démarrage du programme d’impression (destiné à vivre sa vie indépendamment), d’autre part le démarrage du programme de calcul suivant. Avant de lancer le programme d’impression il fallait aussi vérifier que l’impression des résultats précédents était bien terminée. Pendant qu’on y était, on procéderait à une optimisation analogue en autorisant le recouvrement entre le temps de calcul et le temps de lecture des données nécessaires au calcul suivant. Il apparut vite assez logique de confier cette mission, organiser le recouvrement dans le temps de plusieurs activités, à un « métaprogramme », nommé moniteur, chargé de déclencher à l’instant convenable l’exécution des programmes d’application, qui pourraient être considérés comme ses sous-programmes. Cet ancêtre des systèmes d’exploitation est né en 1955. (à suivre…) H. Schyns 4.2 Systèmes d'exploitation 5. 5 - Sources Sources 5.1. - Internet Write Your Own Operating System Tutorial J. Gompert http://www.cse.unl.edu/~jgompert/OS/TableOfContents.htm - Operating Systems Lecture Notes R. Muhammad http://www.personal.kent.edu/~rmuhamma/OpSystems/os.html - How Operating Systems Work Dave Coustan, Curt Franklin http://www.howstuffworks.com/operating-system.htm - How BIOS Works Jeff Tyson http://computer.howstuffworks.com/bios.htm - Système et réseau : histoire et technique Laurent Bloch http://www.laurent-bloch.org/spip.php?article13 - Cours de Systèmes et de Réseaux Sacha Krakowiak http://krakowiak.developpez.com/cours/systeme-reseau/ - Les systèmes informatiques, Vision cohérente et utilisation Christian Carrez Professeur des Universités au CNAM deptinfo.cnam.fr/Enseignement/CycleA/.../cours_systeme.pdf 5.2. - Autres Cours de structure des ordinateurs (et références y incluses) H. Schyns www.notesdecours.info H. Schyns 5.1