Système Exploitation Après avoir vu les machines, nous voyons comment le système d’exploitation les exploite. Plan des systèmes d’exploitation Processus, ordonnancement Commutation de contexte Gestion Fichiers Utilitaires Système répartis Présentation Windows NT
Introduction Un « Ordinateur » ne peut fonctionner qu’avec un Système d’exploitation : son rôle. Gestion de l’information : stockage, rechercher, communication Exploitation des programmes : lancer, arrêter, gérer,.. L'exécution des commandes d'entrée/sortie : Pas d’accès direct au matériel. la gestion de la mémoire, y compris la virtuelle. la gestion des fichiers la multi-programmation (« multi-tâche ») :
Questions Comment exécuter plusieurs programmes à la fois ? Et si ces programmes veulent tous accéder à l 'imprimante en même temps ? Et s'ils doivent échanger des informations Comment exécuter un seul programme avec plusieurs processeurs ? la sécurité (gestion des accès,...)
Tâches d’un Système Exploitation Exécution des commandes, avec un langages Gestion de la mémoire Gestion des fichiers Multi programmation Plusieurs programmes à la fois Accéder plusieurs à la fois sur la même ressource La sécurité
le rôle d’un système d’exploitation Offre aux utilisateurs une machine virtuelle plus simple d’emploi que la machine réelle (appels systèmes). Il gère et contrôle le matériel Gérer les “périphériques” Interface avec les moniteurs de ces équipements
Que doit faire l’OS ? Assurer le chargement du programme en mémoire “Chargeur”, ou “loader” Fourniture de la mémoire “Gérer” le programme chargé en mémoire Permettre son interruption, son redémarrage… Enchaînement des travaux Exemple : compilation, édition de liens, chargement et exécution
En supplément du SE Un langage de commande Divers utilitaires (compilateurs, éditeurs, outils, communication, gestion fichiers, sauvegardes, ...) Une interface graphique pour l'utilisateur
Quelques SE
Caractéristiques de l’ordinateur nu Matériel : processeur, mémoire, périphériques Gestion de ces éléments Un périphérique tel qu’un disque est extrêmement compliqué à gérer Imprimante pour plusieurs machines Ligne de connexion à distance… Il faut disposer au minimum d’un ensemble de “sous- programmes” sachant prendre en charge ces tâches fastidieuses et répétitives
Qu’est-ce qu’un “équipement” ? Un accessoire de la périphérie d’un ordinateur disque imprimante modem… Une carte, avec des circuits spécialisés pour la gestion de l’équipement, des circuits de communication avec l’ordinateur principal, et un “moniteur” gérant un micro- processeur Moniteur ou driver
Moniteur Un moniteur a une vocation déterminée Service bien défini et toujours le même Programme chargé de contrôler un équipement ROM : contient le programme sous une forme inaltérable RAM : mémoire de travail Fournit une interface “standard” du point de vue logiciel Le matériel est “propriétaire” L’interface répond à une spécification “universelle” Exemples : disque à la norme SCSI, IDE imprimante “postscript”
Difficulté de réaliser les entrées/sorties sur la machine nue Appel de sous-programmes utilitaires liés avec le programme principal Chargement à chaque exécution, taille importante des applications Exemple : printf Appel de sous-programmes “systèmes” toujours présents “Noyau” [kernel] du système d’exploitation méthodes “spéciales” d’appel : “appel système” une instruction spécifique génère une interruption (trap)
Appel système Similaire à un appel de sous-programme : Passer des paramètres Réaliser une fonction Obtenir un résultat [code de retour] Différence : “changement de mode” Passage du “mode utilisateur” au “mode système”
Modes kernel ou “mode système” Permet l’utilisation d’instructions “privilégiées” interdites en mode programme et provoquent une erreur [exception] permet l’accès à toutes les ressources de la machine gestion des périphériques ensemble de la mémoire L’accès aux matériel oblige de passer par le mode Noyau ce qui protège la machine.
Gestion du changement de mode Sauvegarder l’état du programme courant Registres Indicateurs d’état : PSW “Program Status Word” Passer en “mode système” Décoder la raison d’être du changement Décoder les paramètres
Passage en “mode système” Évènements synchrones Instruction spéciale Requête au système Erreur du programme : “exception” Instruction illégale Écriture dans une zone de mémoire protégée Évènements asynchrones Interruption “extérieure” Provoquée par l’utilisateur [bouton reset] Provoquée par un moniteur gérant un périphérique externe
Comment fonctionne une interruption ? Une interruption arrive “n’importe quand” Provoquée par le moniteur, ou le contrôleur d’une carte périphérique Changement de niveau électrique sur une/+ pattes du processeur Matériel : la “nature”, ou le “niveau” sont pris en compte Ensemble d’adresses de sous-programmes spécialisés pour chaque type d’interruption : le “vecteur d’interruption” Instruction de “retour” d’interruption
Gérer l’interruption Être complètement transparente au programme en cours - au moins pour une E/S Attente de la fin de l’instruction en cours Sauvegarde : registres, pile, indicateurs d’état, pointeur d’instruction Un code spécifique gère l’interruption Peut-on interrompre ce code ? Masquage/démasquage des interruptions Différents niveaux d’interruptions : priorités relatives des interruptions
Les interruptions du 80x86 16 interruptions et exceptions prédéfinies “vecteurs” 0 à 8, 10 à 14, 16, 18 224 “interruptions” définissables par l’utilisateur 0 Division par zéro 1 Debug 2 Interruption Externe non masquable 3 Breakpoint [INT 3] 4 Overflow 6 Code opération illégal 7 Processeur mathématique absent 13 Protection mémoire 19-31 Réservé
Vision applicative du 80x86 Registres et mémoire visibles par le programmeur Mémoire 4 Go EIP
Un exemple : le BIOS du PC “Basic Input/Output System” A quoi sert le BIOS ? Mise en œuvre du PC au démarrage “POST” : Power-On Self Test Charger des programmes depuis une disquette ou un disque dur Charger le DOS - Système d’opération du PC Assurer une gestion élémentaire des périphériques Clavier, Écran, Ports d’E/S, cartes vidéo, etc...
Sous quelle forme se présente le BIOS En général, une ROM Utilise une partie de la RAM Gère une mémoire CMOS rémanente Décrit la “configuration” du système Tous les BIOS sont différents : cartes mères, périphériques, bus, constructeur…
Système Exploitation : Le DOS “Disk Operating System” MS-DOS Conçu par Microsoft à la demande d’IBM Première version : 1980 But : Gestion de plus haut niveau des périphériques Gestion du système de fichiers Enchaînement des tâches
Les services du DOS S’obtiennent à travers l’instruction INT 21h Paramètres dans des registres Un certain registre (ah) contient un numéro de fonction Autres paramètres éventuels dans des registres MS-DOS préserve les valeurs des registres (sauf s’il fournit des résultats dans certains d’entre eux)
Autres types de fonctions Gestion de l’heure / date Lire, écrire les informations concernant l’heure et la date Maintenues par un mécanisme spécifique : RTC, “real time clock” Gestion de la mémoire Allouer un bloc de mémoire Libérer un bloc de mémoire Modifier la taille d’un bloc de mémoire Possibilité d’influer sur les stratégies d’allocation
Gestion du système de fichiers Fonctions de haut niveau Ouverture de fichiers Nom du fichier, nature de l’accès [lecture, écriture, màj] Création de fichiers Fermeture de fichiers Effacement, renommage de fichiers Lecture, écriture, déplacement de pointeur, etc... Traitement des anomalies, comptes-rendus
Résumé : BIOS et DOS BIOS : un “moniteur résident” qui offre des fonctions de bas niveau, et permet le chargement de DOS Fournit à DOS une vision “standard” de la machine DOS : un système d’exploitation qui : Assure l’enchaînement & la gestion des tâches Fournit aux programmes des services de haut niveau : gestion de la mémoire gestion des périphériques en particulier, système de fichiers
Notion de “Tâche” DOS ne permet qu’un “travail” à la fois : Le programme de l’utilisateur, ...ou DOS lui-même, réalisant une opération pour le compte de ce programme Système monotâche Avantages : simplicité de conception, taille raisonnable, etc. Inconvénient : utilisation médiocre des ressources de la machine
Système Multitâches Partage les ressources entre plusieurs processus Ressources : mémoire, processeur, périphériques… Processus : un programme en cours d’exécution Caractéristiques : Système plus complexe Nécessite des ordinateurs disposant de plus de ressources Permet une meilleure utilisation des caractéristiques de la machine Exemple : programmes réalisant des E/S
Système Multi-utilisateurs Notion d’utilisateur : Personne “autorisée” à utiliser la machine Mécanisme d’authentification Notions de droits relatifs à une ressource [ex: fichier] Problèmes de protection et de partage des ressources. Peu de différences avec un système multi-tâches
Que partager : L’unité centrale Plusieurs programmes peuvent s’exécuter en même temps Une seule CPU, mais... un programme réalise des E/S, pendant lesquelles la CPU est “inactive” un autre programme peut utiliser la CPU pendant ces attentes Comment s’assurer d’un partage de temps équitable Permettre à tous les programmes de progresser régulièrement pouvoir interrompre un programme, par exemple à intervalles de temps fixes : les horloges, “timers” Utiliser au mieux la CPU
Que partager : La mémoire centrale Plusieurs programmes peuvent cohabiter en mémoire “bonne programmation” mécanismes de protection mutuelle système de gestion matérielle de la mémoire Comment fournir aux programmes la mémoire dont ils ont besoin, au moment où ils en ont besoin ? gestion de la mémoire Les périphériques Les périphériques physiques Imprimante :queues d’impression, ou “spool” Disques :systèmes de gestion de fichiers
Comment partager : File d’attente Imprimante, requêtes disque Les données à imprimer sont conservées dans une file d’attente espace mémoire, espace disque, priorités, etc... Les requêtes passent par l’intermédiaire de “tampons” une suite d’écritures de petite taille sur un fichier est transformée en une seule écriture d’élément de taille plus importante
Périphériques Non directement connectés au bus Grande variété des équipements La CPU ne peut “connaître” tous les types/modèles de périphériques : commandes très variées Débits non compatibles avec celui du bus Différentes représentations des données Module(s) d’entrée/sortie Assurer l’interface entre : CPU & Mémoire Équipement
Module d’entrée/sortie Interface processeur/équipement Vision “standard” d’une catégorie d’équipement disque, imprimante, etc Réalise une partie de la “gestion” du périphérique libère la CPU pour d’autres tâches Interface fournissant : Contrôle État Données
Mémoire : les besoins L’informatique a toujours besoin de plus de mémoire Programmes plus ambitieux Programmes plus gourmands en mémoire A l’échelle d’une machine : plus de mémoire = plus de ressources, meilleure utilisation de celles-ci A l’échelle d’un programme : plus de mémoire = plus de “puissance individuelle” besoins multipliés par 1.7 chaque année
Mémoire : les besoins de l’OS De la mémoire, encore plus de mémoire Besoins propres du système : TSM [1976] : 8 ko. Solaris 2.4 [1996] : 14 Mo. Besoins “auxiliaires” du système : Outils divers [mail, serveurs ftp, http, gestionnaire de fenêtres…] Répondre aux besoins des utilisateurs Les applications deviennent de plus en plus grosses, tout comme les données manipulées Le multi-tâche encourage à exécuter plusieurs applications simultanément
Mémoire : les besoins des programmes Mémoire Globale Variables et tableaux : toujours plus Mémoire locale Allocation automatique [connue du compilateur] Allocation dans la pile [alloca] Mémoire dynamique Allocation dynamique sous contrôle du programme new/delete, malloc/free Allocation “transparente” [sous-programmes système, E/S, fenêtres…]
La vision “utilisateur” Gestion dynamique de la mémoire C : malloc, free C++ : new, delete Comment : l’allocateur de mémoire Procédures qui : reçoivent les requêtes de l’application gèrent de la mémoire, statique ou demandée au système divisent les gros blocs pour répondre à des demandes fines rassemblent les petits blocs libres si possible
malloc(), free() Allocation dynamique de mémoire dans le tas Fournir un bloc de mémoire de la taille demandée, situé à une adresse mémoire “convenable” void * malloc(size_t size); Prise en compte des particularités d’adressage du processeur Libérer un bloc de mémoire void free(void * ptr); ptr doit être null ou l’adresse d’un bloc fourni par malloc
new, delete() Vision C++ Création d’un objet = allocation de mémoire + initialisation Destruction d’un objet = gestion de la destruction + libération de la mémoire Primitives de “haut niveau” On peut utiliser new, delete, malloc et free dans un même programme Les objets créés par new doivent être libérés par delete La mémoire allouée par malloc doit être libérée par free
Gestion de mémoire par chaînage Informations de contrôle zone libre après deux allocations après une libération après une troisième allocation après une quatrième allocation La mémoire devient fragmentée. Une nouvelle demande de mémoire peut échouer car il ne reste plus de bloc de mémoire contiguë de taille suffisante
Aspects Type d’allocation First fit : le premier rencontré en partant du début de la liste Next fit : un first fit où l’on explore à partir de la position courante Best fit : on parcourt toute la liste pour trouver le “meilleur” libre Worst fit : on parcourt tout et on choisit le plus gros… Curieux ? Fragmentation de la mémoire Beaucoup de petits morceaux ne remplacent pas un gros bloc On ne peut, en général, pas déplacer les blocs de manière “transparente” aux programmes Influer sur l’algorithme d’allocation n’est qu’un pis-aller
Améliorations possibles Caractéristiques du chaînage Simple : allocation/désallocation plus rapide Double : réunification des blocs plus simple Séparer la liste des blocs libres et des blocs utilisés Listes multiples On maintient les blocs libres dans différentes listes, en fonction de leur “classe” de taille allocation plus rapide libération plus complexe
Bugs typiques dans les programmes Utiliser de la mémoire qui n'est pas/plus allouée Fournir en résultat d’une fonction l’adresse d’une variable locale Oublier de désallouer une zone allouée par malloc() Désallouer deux fois une zone allouée par malloc() Déborder d’une zone allouée par malloc() Ne pas tester le résultat de malloc() Utiliser alloca() sans en comprendre le fonctionnement Mélanger les allocations de haut et de bas niveau malloc/free et new/delete etc…
Commande de procédés industriels. Temps réel Un ordinateur qui contrôle un procédé industriel doit veiller sur un ensemble de paramètres physiques et engager des actions en fonction de leurs valeurs. Les délais de réponse peuvent être très courts et doivent être toujours garantis Les informations doivent être acquises sur les différents dispositifs d'entrés périodiquement. Le traitement de ces informations est effectué en un temps maximum T. Les fonctions de sécurité sont prioritaires avec un outil de gestion des priorités.
Systèmes transactionnels Gérer un ensemble d'informations structurées de grande dimension (Go), appelé base de données . Ces informations sont consultées, modifiées simultanément à partir d'un grand nombre de points d'accès, terminaux ou micro-ordinateurs. En cas d'interruption du service il faut pouvoir redémarrer les nombreuses activités parallèles de façon cohérente sans perte d'information, dans l'état exact où était le système avant cette interruption. On mesure les performances en nombre de transactions par secondes (TPS)
Systèmes en temps partagé Donner aux utilisateurs l'impression qu'ils sont chacun seul en face de la machine. Il faut donc ajouter les services adéquats pour tenir compte de l’utilisation par un grand nombre de personnes. Exemple : 90% du temps est utilisé pour la réflexion, soit 10% d’utilisateurs actifs. Si le SE alloue des tranches de temps de 50 ms à chacun temps d'attente moyen = 0,5s pour 10 utilisateurs
Donner un exemple de SE pour chaque type Ordinateur individuel DOS, Windows 95, 98 ,Millénium, Linux Temps réel MVS, RTE, … Systèmes transactionnels Gros Système, VMS Systèmes en temps partagé Les UNIX, Windows NT Server, W2000, XP à voir?