3IS - Système d'exploitation 2010 – David Picard Contributions de : Arnaud Revel, Mickaël Maillard [email protected] ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS 1. Introduction ● Fonctionnement simplifié d'un ordinateur ● Rôle d'un système d'exploitation – – Gestion du matériel Gestion de tâches ● Types d'OS ● Caractéristiques – – ● multitâches/multiutilisateur portabilité Historique d'UNIX et Linux ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Un ordinateur très simple CPU ● ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Un processeur Un ordinateur très simple CPU ● Un processeur ● De la mémoire Mémoire ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Un ordinateur très simple CPU Périphériques (disque dur) Périphériques (clavier) ● Un processeur ● De la mémoire ● Périphériques (écran) Mémoire Périphériques (autres) ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Quelques périphériques variés Mémoire CPU Périphériques programmes ● Mémoire : – Programmes ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Mémoire programmes ● CPU Périphériques données Mémoire : – – Programmes Données ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Mémoire programmes ● données Périphériques données, interactions Mémoire : – – ● CPU Programmes Données Périphériques : – – Données Interaction avec l'utilisateur (données prioritaires) ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Un programme int main(int argc char ** argv) { int a, b, c ; float *A, *B ; /* check input */ if(argc < 3) { printf("usage : dotprod <a> <b>\n") ; return ­1 ; } /* read a from args */ a = atoi(argv[1]); b = atoi(argv[2]) ; ... ● Suite d'instructions ● Ensemble de données ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Un programme int main(int argc char ** argv) { int a, b, c ; float *A, *B ; /* check input */ if(argc < 3) { printf("usage : dotprod <a> <b>\n") ; return ­1 ; } /* read a from args */ a = atoi(argv[1]); b = atoi(argv[2]) ; ... ● Suite d'instructions ● Ensemble de données ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Mémoire données instructions Exécution d'un programme ● CPU EIP … 0xAD00 : 0x1D04 : 0xAD08 : 0xAD0C : ... Lecture de l'instruction contenue à l'adresse du registre EIP dans la mémoire instruction 1 instruction 2 instruction 3 instruction 4 Mémoire ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Exécution d'un programme ● CPU EIP … 0xAD00 : 0x1D04 : 0xAD08 : 0xAD0C : ... instruction 1 instruction 2 instruction 3 instruction 4 ● Lecture de l'instruction contenue à l'adresse du registre EIP dans la mémoire Exécution Mémoire ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Exécution d'un programme ● CPU EIP++ … 0xAD00 : 0x1D04 : 0xAD08 : 0xAD0C : ... instruction 1 instruction 2 instruction 3 instruction 4 Lecture de l'instruction contenue à l'adresse du registre EIP dans la mémoire ● Exécution ● Incrémentation EIP Mémoire ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Exécution d'un programme ● CPU EIP … 0xAD00 : 0x1D04 : 0xAD08 : 0xAD0C : ... instruction 1 instruction 2 instruction 3 instruction 4 Mémoire Lecture de l'instruction contenue à l'adresse du registre EIP dans la mémoire ● Exécution ● Incrémentation EIP ● Itération suivante... ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Interaction entre programmes, mémoire et périphériques ● Mémoire : – – – – – Lire des données en mémoire Écrire des données en mémoire En fonction des données en mémoire, exécuter certaines instructions Lancer d'autres programmes stockés en mémoire ... ● Périphériques – – – – Lire des données sur un périphérique (ex. clavier) Écrire des données sur un périphérique (ex. écran) Réagir lorsqu'un périphérique est sollicité (ex. bouton power) ... ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Rôle d'un système d'exploitation ● Gérer l'exécution des programmes – – – ● Gérer la mémoire – ● Lancement, terminaison, etc Intégrité des programmes, sécurité des données Servir d'interface entre les différents programmes en cours d'exécution Allocation, droits d'accès, etc Gérer l'accès au matériel – – Servir d'interface entre les programmes et le matériel Répondre aux demandes du métériel (interruptions par exemple) ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Gestion du matériel ● Accès à une ressource matérielle – – Le programme peut vouloir lire sur le disque, récupérer ce qui est tapé au clavier, récupérer les données d'un scanner, afficher quelque chose à l'écran, imprimer un document ou encore communiquer avec d'autres programmes à travers un réseau. Le système d'exploitation se charge de réaliser les accès aux différents périphériques en proposant une unique interface. Les périphériques sont variés et ont différentes méthodologie d'utilisation. En proposant une interface, le système d'exploitation simplifie le développement des programmes. ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Gestion du matériel ● Gestion des interruptions – Certains matériels peuvent imposer un changement de comportement, voire la suspension, des programmes en cours (bouton stop sur une chaîne de montage par exemple). ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Gestion du matériel ● Sécurisation des ressources critiques – Si deux programmes veulent accéder en même temps à une ressource matérielle unique (l'imprimante, par exemple), c'est le rôle du système d'exploitation de faire en sorte que l'utilisation du matériel est correct et que le résultat correspond à celui qui est attendu (on ne veut pas que deux documents soient imprimés entremêlés sur la même feuille par exemple). ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Gestion des tâches ● Contexte d'exécution – Lorsqu'un programme s'exécute, le système d'exploitation se charge d'assurer la bonne mise en place de son contexte d'exécution (registre matériels comme le pointeur de pile, mais aussi charger le code des différentes bibliothèques utilisée, etc). ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Gestion des tâches ● Commutation de processus – – Sur certains OS, plusieurs programmes peuvent être en cours d'exécution en même temps. Le rôle de l'OS est de s'assurer que chaque programme peut s'exécuter correctement (en mettant à jour son contexte, par exemple le pointeur de pile), et que chaque programme en cours est bien exécuté (ordonnancement) La sécurité des données propres à chaque programme (par exemple interdiction à un programme de modifier les données d'un autre programme) est aussi réalisée par le système d'exploitation. ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Gestion des tâches ● Communication entre programmes – Certains programmes ont besoin de communiquer entre eux (échange de données, attente de fin, etc). L'OS se charge de proposer une interface unifiée de communication (ce que l'on appelle les IPC – InterProcess Communication). ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Anatomie d'un système d'exploitation libc Noyau Système d'exploitation applications Gestion Des Processus toolkit Gestion De la Mémoire Gestion Du Matériel hardware ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Types de systèmes d'exploitation ● Usages : – – – Grand public : réactifs, plein de programmes variés, peu de contraintes (matérielles et temporelles) Temps réel : comportement prédictible, répondant à des contraintes temporelles fixes Embarqués : peu de programmes, connus à l'avance, mais forte contraintes matérielles (peu de mémoire, etc) ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Types de noyaux ● Noyau : ● ● Monolithique : Tout est inclu dans le noyau, gestion de processus, gestion de mémoire, pilotes de périphériques, protocoles de communication, IPC, etc. (ex Linux, Solaris) Micronoyau : Le strict minimum est inclu dans le noyau : gestion de processus, gestion de la mémoire et IPC très complexes. Le reste est délégué à des applications spécifiques appelées services. (ex Mach, L4) ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Comparaison entre noyaux monolithiques et micronoyaux ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Noyaux modulaires ● Noyaux monolithiques mais – – ● Possibilité d'ajouter et de retirer des fonctionnalités au noyau en cours d'exécution Plus petit (car un nombre limité de pilotes est chargé en mémoire, les suivants pouvant être chargés à la demande si besoin) Ex : Linux ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Caractéristiques de Systèmes d'exploitation ● Multi-tâches : – ● Multi-utilisateurs : – ● Plusieurs programmes peuvent s'exécuter en même temps Plusieurs utilisateurs peuvent utiliser l'ordinateur en même temps Multi-plateforme : – Le système peut être installé sur des machines très variées ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Multi-tâches ● Plusieurs programmes peuvent s'exécuter en même temps : – – Gerer la création et la suppression de tâches Veiller à ce que chaque tâche ait accès aux ressources demandées en un temps raisonnable : ● ● – Ordonnancement Ressources critiques Veiller à l'intégrité des données de chaque tâches (gestion de droits) ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Multi-utilisateur ● Plusieurs utilisateurs sur la machine : – – – Gérer l'accès aux ressources critiques Veiller à l'intégrité des données de chaque utilisateur Permettre un système de communication entre les utilisateurs ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Multi-plateforme ● Le système peut s'installer sur différents types d'environnements : – – Offrir une interface indépendante de l'architecture matérielle aux programmes Gérer plusieurs architecture matérielles différentes ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Historique ● 69 : Thomson et Ritchie ● mise au point de la première version UNIX ● PDP7/9; noyau 16Ko; Process 8Ko, Fichier 64Ko ● 72 : Kernighan et Ritchie : langage C ● 73 : Réécriture du noyau UNIX en C ● Gestion des processus ● Gestion des fichiers ● Banalisation des E/S ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Historique ● 75 : Premier portage d ’UNIX ● 76 : microprocesseurs 8/16 bits ● 77 : Thomson à l ’université de Berkeley ● 500 installations ● 79 : Portage sur VAX et IBM ● 82 : Commercialisation par ATT ● Unix-based et Unix-like (100 000 install.) ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Historique ● 84 : Efforts de normalisation ● DEC (Ultrix) ● Gould (UTX) ● HP (HP-UX) ● 85 : MINIX par A. Tanenbaum ● 88 : standard sur les stations de travail ● SUN/BULL/IBM… ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Historique ● 89 : Premier BSD libre ● Sept 91 : Linux 0.01 (inspiré par Minix) ● Oct 91 : Linux 0.03 (bash et gcc) ● ● ● Dec 91 : Linux 0.10 (premières contributions externes) Jan 92 : Linux 0.12 (mémoire virtuelle, licence GPL) Mars 92 : linux 0.95 (init/login, X) ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Historique ● ● ● ● ● 93 : NetBSD et FreeBSD Mars 94 : Linux 1.0 (stable en production, fournit des services comparables à UNIX) Mars 95 : Linux 1.2 (nombreuses architectures, modules chargeables) Juillet 96 : Linux 2.0 (multiprocesseur, mascotte Tux) Janvier 99 : Linux 2.2 ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Historique ● 99 : MacOSX (noyau hybride) ● 01 : Linux 2.4 ● 03 : Linux 2.6 (noyau préemptible) ● 07 : Linux 2.6.23 (ordonnanceur CFS) ● 08 : Linux 2.6.26 (Kgdb) ● 21 Juillet 2011 : Linux 3.0.0 (13M lignes de code) ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Caractéristiques de Linux ● ● Noyau monolithique : comme la plupart des Unices Modules : des fonctionnalités peuvent être activées ou désactivées (seuls SVR4.2 et Solaris peuvent le faire aussi) ● Threads du noyau : certaines fonctionnalités sont indépendantes ● Support multithread natif ● Noyau préemptif : un processus peut être interrompu même en mode noyau ● Système multiprocesseur ● Nombreux systèmes de fichiers ● Nombreuse architectures supportées ● Petit et compact ● Performant ● libre ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Distributions ● Système d'exploitation complet basé sur Linux : – – – – – – – Le noyaux Linux Une libc et un compilateur C (souvent gcc) Un gestionnaire de boot pour charger le noyau (grub, lilo, ...) Un système d'initialisation pour lancer les processus offrant les services standards (réseau, impression, interface graphique, …) Un shell (bash, dash, ksh, …) Un gestionnaire de packages (apt, rpm, portage, …) Un dépôt de logiciels préparés en packages (et vérifiés pour bien fonctionner avec le reste du système) ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Familles de distributions ● Deb : Debian, ubuntu, et dérivée – – ● RPM : RedHat, SuSE, Mandriva, et dérivée – – ● Gestionnaire de paquets *.rpm RedHat : serveur, Mandriva : desktop Slackware – ● Gestionnaire de paquets *.deb Debian : serveur, Ubuntu : desktop plus vieille distribution (paquets *.tgz) Distributions sources : gentoo, sourcemage, ... – – Recompiler tous les logiciels (paquets sources, donc) Gentoo : gestionnaire de paquets portage très puissant ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Concepts fondamentaux ● Modes d'utilisation : – Mode utilisateur : routine du programme en cours d'exécution ● ● ● – Espace mémoire réservé Contexte matériel particulier (pointeurs de pile, de programme, etc) Droits restreints Mode noyau : routines du noyau ● ● ● ● Espace mémoire total Contexte matériel particulier Droit d'accès totaux On y accède par une interruption (soit matérielle, soit logicielle) ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Concepts fondamentaux ● ● ● ● Processus : instance d'un programme en cours d' exécution et son contexte Fichiers : tout est fichier, les périphériques, les documents, etc Droits : les fichiers ont différents niveaux de droits (user, group, other) Réentrant : plusieurs processus peuvent simultanément s'exécuter en mode noyau ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Contexte user/kernel ● L'utilisation de la machine est divisée en deux mode d'exécution : – – ● Le mode noyau (kernel mode) Le mode utilisateur (user mode) Le mode utilisateur est le mode d'utilisation des utilisateurs : – – – root Les services (serveur de fichier, web, imprimante, …) Les vrais usagers ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Droits et mode ● La mémoire est réservée à un mode d'utilisation – Les applications en mode user ne peuvent pas accéder ● ● ● ● À l'espace mémoire du mode kernel À l'espace mémoire des autres applications À certains périphérique Pour gérer les droits, les processeurs dispose de plusieurs mode d'exécution – – Un mode protégé correspondant au mode user, dans lequel tout n'est pas accessible Un mode privilégié correspondant au mode kernel dans lequel on peut tout modifier ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Accès au mode noyau ● Les zones de mémoire contenant le code du noyau sont en mode privilégié – – – – – On ne peut pas y accéder en mode user On y accède par une interruption Le système passe en mode privilégié Le noyau traite l'interruption Retour en mode user et poursuite du programme ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Passage en mode noyau ● Le passage en mode noyau se fait – Lors d'une interruption matérielle ● – Lors d'une anomalie ● – Le système passe en mode privilégié et exécute alors le code du noyau prévu pour cette interruption Le système lève alors une exception, passe en mode privilégié et exécute le code prévu pour cette exception Lors d'une demande de service au noyau via un appel système ● ● Il s'agit d'un interruption logicielle voulue par l'application appelante Le système passe en mode privilégié et exécute le code du noyau correspondant à l'appel système ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Interruptions ● C'est un signal déclenché soit – Par un périphérique matériel ● ● – Par une demande logicielle ● ● ● Elle peut survenir à n'importe quel moment Le code permettant de traiter l'interruption est appelé pilote Instruction spéciale déclenchant une interruption logicielle Le code à exécuter lors du déclenchement d'une interruption est installé à l'initialisation du système Ce code fait parti du noyau ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Exceptions ● Ce sont les réponse du processeur à une instruction incorrecte lors de l'exécution d'un programme – – – C'est une interruption générée par le processeur Elles permettent de signaler les erreurs dans le code (faute de droits, par exemple) Elles permettent la récupération des anomalie par le noyau ● Par exemple, allouer des ressources aux programmes qui demandent des ressources inexistantes ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Traitement des interruptions ● Lors d'une interruption, le processeur exécute une routine du noyau mise en place lors de l'initialisation du système User mode Kernel mode Programme 1 Appel système Routine du noyau Programme 1 Retour d'interruption interruption horloge Routine du noyau ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Programme 2 Retour d'interruption Appels systèmes ● Ce sont des fonctions dont : – – – ● L'appel se fait dans un programme en user mode L'exécution se fait en mode kernel Le retour se fait dans le programme appelant en user mode L'appel se fait par une interruption logicielle unique (0x80) – – – Cette interruption permet de passer en mode noyau Les appels systèmes sont numérotés Une table permet de faire la correspondance entre le numéro de l'appel et la fonction du noyau à appeler ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Linux 0.01 ● Les appels systèmes sont disponibles dans la glibc #define _syscall0(type,name) \ type name(void) \ { \ type __res; \ __asm__ volatile ("int $0x80" \ : "=a" (__res) \ : "0" (__NR_##name)); \ if (__res >= 0) \ return __res; \ errno = ­__res; \ return ­1; \ } ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS Chemin de contrôle du noyau ● ● Un chemin de contrôle du noyau (kernel control path) est la séquence d'instruction exécutée par le noyau pour répondre à une interruption Plusieurs chemin de contrôle peuvent être entrelacés – – ● Un processus demande une ressource non disponible immédiatement, et un autre processus est exécuté à la place Une interruption est levée pendant l'exécution d'un chemin de contrôle Noyau réentrant obligatoire ÉCOLE NATIONALE SUPÉRIEURE DE L'ÉLECTRONIQUE ET DE SES APPLICATIONS