Systèmes d’exploitation Introduction: shell, noyau, syscalls Guillaume Salagnac Insa de Lyon – Informatique 2016–2017 IF-3-SYS: Systèmes d’Exploitation Équipe pédagogique • Guillaume Beslon, Florent de Dinechin, Stefan Duffner, Lionel Morel, Mohammad Rmayti, Guillaume Salagnac Objectifs • Comprendre les «concepts clés» des systèmes d’exploitation • quel est le problème ? pourquoi se pose-t-il ? • quelle est la solution ? pourquoi ça marche ? • Pratiquer leur usage • TP de programmation C sous linux (6×2h) • TD sur papier (2×2h) Ressources • http://moodle.insa-lyon.fr > Informatique > IF3 • transparents de cours ; sujets de TD et de TP 2/44 S O RT e Fre Contiki RIOT Vous avez dit «Système d’exploitation» ? Android s Ub un tu w ux o d Lin n i / W U Linux GNMacOS Debian X iOS User Application Operating System OS Tiny Hardware 3/44 Quelques définitions Utilisateur = l’humain devant la machine • suivant le contexte: utilisateur final, ou développeur • interagit directement... avec le matériel ! Applications = les logiciels avec lesquels veut interagir l’utilisateur final Applications Operating System • messagerie, traitement de texte, lecteur de musique, etc Hardware Matériel = la machine physique Et donc: Operating System = tout le reste • logiciel d’infrastructure: «noyau», «pilotes», User «services», etc • «entre le matériel et les applications» 4/44 Rôle de l’OS: les deux fonctions essentielles et largement interdépendantes ! Machine virtuelle • cacher la complexité sous une interface «plus jolie» • fournir certains services de base aux applications • IHM, stockage persistant, accès internet, gestion du temps • permettre la portabilité des programmes • faculté d’exécuter un même binaire sur des architectures (plus ou moins) différentes Gestionnaire de ressources • partager chaque ressource entre les applications • exploiter «au mieux» les ressources disponibles • assurer la protection des applications (et du système) 5/44 Plan 1. Introduction: définition du terme «Système d’exploitation» 2. Interface entre OS et utilisateur: le shell 3. Interface entre logiciel et matériel: l’architecture 4. Isolation entre noyau et applications: les syscalls 5. Quelques syscalls UNIX incontournables 6/44 Interface entre OS et utilisateur: le shell Les services offerts par un shell: • exécution de programmes • charger un programme en mémoire, le lancer, l’arrêter • choisir quel programme est au premier-plan • exploration et administration des espaces de stockage • naviguer dans les fichiers, copier, supprimer • confort et ergonomie • presse-papiers, drag-and-drop, corbeille • ... 7/44 Différents types de shell: l’interpréteur de commandes Attention: terminal (ou émulateur de terminal) 6= shell ! Interface textuelle = Command-Line Interface = CLI exemples: Bourne shell (1977), bash, zsh... 8/44 Différents types de shell: le bureau graphique Interface graphique = Graphical User Interface = GUI exemples: Gnome, bureau de Windows, Aqua (Mac OSX)... 9/44 et encore: l’écran d’accueil du smartphone exemples: Android Launcher, Google Now, Facebook home... 10/44 Conclusion: le shell différents types de shell: CLI vs GUI à souris vs GUI tactile I fonctionnalités similaires I pour l’OS: une «application» comme les autres ! votre OS contient volontiers des applications pré-installées... • shell, navigateur web, explorateur de fichiers, messagerie, lecteur multimedia, app store, etc ... et aussi plein de «programmes système»: • développement: compilateur, assembleur, linker, etc • sécurité: antivirus, pare-feu, sauvegarde • maintenance: mise à jour OS, panneau de configuration • services réseau: web, base de données, accès distant Remarque: dorénavant je vais appeler tous ces programmes des applications 11/44 Positionnement de l’OS Application 1 Application 2 OS Kernel Hardware Définition: Noyau, ou en VO kernel Le noyau c’est la partie de l’OS qui n’est pas une application 12/44 Plan 1. Introduction: définition du terme «Système d’exploitation» 2. Interface entre OS et utilisateur: le shell 3. Interface entre logiciel et matériel: l’architecture 4. Isolation entre noyau et applications: les syscalls 5. Quelques syscalls UNIX incontournables 13/44 Vous avez dit «une interface plus jolie» ? et c’est vraiment cette formule qui est donnée dans les livres: source: Tanenbaum. Modern Operating Systems (4th ed, 2014). page 5 14/44 L’architecture de von Neumann CPU memory principe de fonctionnement: le cycle de Von Neumann while True do: charger une instruction depuis la «mémoire» décoder ses bits: quelle opération, quelles opérandes, etc exécuter l’opération et enregistrer le résultat repeat 15/44 Architecture d’une machine typique CPU1 CPU2 CPU3 System bus main memory I/O bridge I/O bus USB bus USB controller mouse keyboard disk controller disk network adapter network L’architecture d’une machine est définie par: • son jeu d’instructions: MSP430, x86, ARMv8... • son organisation mémoire: addresse ↔ coupleur • sa structure de bus: AMBA, PCIe, SATA, USB... 16/44 Zoom sur: le processeur register file ALU / FPU PC SR ... cache memory bus interface System bus À l’intérieur d’un CPU, on trouve: • des registres génériques interchangeables: R1..Rn • des registres spécialisés uniques: • Program Counter, Instruction Register, Status Register • une unité de calcul: addition, soustraction... • une interface mémoire connectée au monde extérieur • et à une mémoire interne rapide: le cache 17/44 Le processeur: remarques Cycle de von Neumann = fetch / decode / execute • se déroule de part et d’autre du trait pointillé • exécution d’une instruction = atomique (indivisible) I pas d’état intermédiaire visible depuis l’extérieur • fréquence d’horloge = cadence (maximum) de ce cycle • vitesse de pointe 6= vitesse de croisière Rôle du composant «bus interface»: • communiquer avec les mémoires: cache, mem principale • faire attendre le processeur lorsque nécessaire • recevoir les requêtes d’interruption (mais on y reviendra) • servir de MMU/TLB (on y reviendra mais un autre jour) 18/44 Zoom sur: les bus Pourquoi une telle hiérarchie de bus ? • compatibilité historique • accumulation des standards • différences de vitesse • pb de la cohabitation • distance à parcourir • c ≈ 30cm / nanosec I débit ≤ latence • temps d’accès • taille des messages I communications asynchrones • le CPU doit parfois attendre l’arrivée d’une donnée (ou d’une instruction) 19/44 La hiérarchie «mémoire» Plus on s’éloigne, plus le temps d’accès augmente ×103 cache memory (SRAM) main memory (DRAM) t bi ×103 CPU registers er ×106 te la ×10 p st co ce ac ss y nc fast storage (SSD) large storage (disk) Compromis technologique: temps d’accès VS capacité VS coût 20/44 Zoom sur: les périphériques ou en VO périphérique 6= coupleur 6= pilote device 6= device controller 6= device driver Interaction logiciel I matériel • instructions spéciales dédiées aux entrées-sorties • port-mapped input/output = PMIO • écriture «mémoire» aux adresses du coupleur • memory-mapped input/output = MMIO Interaction matériel I logiciel • scrutation constante des registres du coupleur • ou en VO polling • inefficace à l’exécution, et compliqué à programmer • interruption de l’exécution par les évènements extérieurs • il faut le support ad hoc dans le processeur • tous les processeurs ont ce mécanisme 21/44 Un processeur avec support des interruptions Le cycle de Von Neumann avec support des interruptions while True do: charger une instruction depuis la mémoire décoder ses bits: quelle opération, quelles opérandes, etc exécuter l’opération et enregistrer le résultat if interruption demandée then: sauvegarder les registres du processeur: PC, SR, etc déterminer l’adresse de la routine de traitement sauter à la routine = charger cette adresse dans PC endif repeat 22/44 Mécanisme d’interruptions: déroulement Programme principal requête d’interruption Routine de traitement d’interruption sauvegarder les registres charger dans PC l’adresse de début de la routine ISR: ... ... ... ... ... RETI restauration des registres instruction ”retour d’interruption” 23/44 Mécanisme d’interruptions: vocabulaire • IRQ = Interrupt Request • un «message» envoyé au processeur • ISR = Interrupt Service Routine • un programme (= séquence d’instructions en mémoire) • placé à une adresse «bien connue» • termine toujours par une instruction RETI • notion de masquage des interruptions • interruptions masquées ⇔ le CPU ignore les IRQ • nouvelles IRQ reçues sont mises en attente • implémentation: drapeau (booléen) dans le registre d’état • les IRQ sont automatiquement masquées pendant une ISR • permet au programmeur d’être «seul au monde» • instruction RETI démasque les interruptions Définition: Noyau, ou en VO kernel Le noyau c’est (seulement) l’ensemble des ISR de la machine 24/44 Différentes sources d’interruptions • Minuteur système, ou en VO System Timer • interruptions périodiques, typiquement 100Hz ou 1000Hz • permet à l’OS de percevoir le passage du temps • permet au noyau de reprendre la main sur les applications • Périphériques d’entrées-sorties • clavier, souris, disque, réseau, etc • Pannes matérielles • température excessive, coupure de courant, etc • Évènements logiciels exceptionnels • erreurs fatales: division par zéro, instruction invalide, etc • trappes volontaires: (mais on y reviendra plus tard) 25/44 Plan 1. Introduction: définition du terme «Système d’exploitation» 2. Interface entre OS et utilisateur: le shell 3. Interface entre logiciel et matériel: l’architecture 4. Isolation entre noyau et applications: les syscalls 5. Quelques syscalls UNIX incontournables 26/44 Interruptions et jeu d’instructions Pour intégrer les interruptions dans le cycle de von neumann, on a été obligé d’ajouter des instructions spécifiques: • RETI: retourner au programme interrompu (x86: IRET) • DINT: masquer (=désactiver) les interruptions (x86: CLI) • EINT: démasquer (=activer) les interruptions (x86: STI) Problème Comment empêcher une application de faire des bêtises avec ? exemple: main: ... ... DINT loop: JMP loop ... 27/44 Solution: “dual-mode operation” un processeur moderne offre deux modes d’exécution : supervisor mode = ring 0 = master mode = kernel mode • accès direct au matériel: machine réelle • mode par défaut au démarrage de la machine • nécessaire lorsqu’on exécute du code OS VS user mode = ring 3 = slave mode • architecture restreinte: machine virtuelle • certaines instructions interdites: EINT/DINT, RETI... • utile pour exécuter sereinement du code applicatif implémentation: un drapeau (booléen) dans le registre d’état I ce bit de mode conditionne le comportement du CPU bien sûr: changer ce drapeau est une instruction privilégiée ! 28/44 user mode 6= userland Les applications sont exécutées sur la «VM userland»: • jeu d’instructions restreint (CPU en mode utilisateur) • pas de mécanisme d’interruptions • accès interdit à certaines adresses • ex: code et données du noyau, périphériques matériels • implémentation: dans le composant «Bus interface» (c’est magique pour l’instant mais on y reviendra) Sandboxing: une instance de cette VM par application • CPU virtuel, mémoire virtuelle • périphériques: accessibles seulement au travers de l’OS I c’est la notion de processus (ou en VO process) Système d’exploitation = illustioniste (VM) + sous-traitant (HW) 29/44 Changement de mode d’exécution: interruptions Problème: les ISR ont besoin de pouvoir accéder au matériel Solution: le processeur change de mode lors du saut Le cycle de Von Neumann, le retour while True do: fetch, decode, execute if (IRQ reçue) and (interruptions non masquées) then: sauvegarder les registres déterminer l’adresse de l’ISR passer en mode superviseur sauter à la routine = charger cette adresse dans PC endif repeat Remarque: RETI repasse le processeur en mode utilisateur 30/44 Changement de mode d’exécution: trappes Problème: comment une application peut-elle invoquer une méthode du noyau ? Mauvaise solution: autoriser les applications à sauter vers les fonctions situées dans le noyau • destination arbitraire = failles de sécurité • passage en mode superviseur: quand ? comment ? Solution: se donner une instruction spécialisée pour cet usage • noms variés: TRAP (68k), SYSENTER (x86), SVC (ARM) • interruption logicielle = trappe = exception • fonctionnement: similaire aux autres types d’interruption • sauvegarde du contexte CPU • bascule en mode superviseur • branchement à une adresse bien connue, dans le noyau 31/44 Appel système: principe Appel système, ou en VO system call = syscall (Unique) interface avec le noyau pour les programmes userland Côté utilisateur: • l’appel est invoqué avec une instruction TRAP • indifférent au langage de programmation utilisé • encapsulation dans des fonctions de bibliothèque (ex: libc) Côté noyau: • on passe à chaque fois par l’ISR de TRAP • qui appelle la bonne fonction dans le noyau, • puis qui rend la main à l’application avec RETI Exemples: • read(), write(), fork(), gettimeofday()... • plusieurs centaines en tout sous Linux 32/44 Appel système: déroulement Application Bibliothèque C ”syscall printf("hello world") wrapper” ”syscall interface” write(1,"hello world",11) TRAP emballage des arguments et du numéro de syscall Noyau ”syscall dispatcher” déballage des arguments décodage du numéro de syscall réemballage des arguments ISR TRAP: appel de la bonne procédure ... ... ... sys write(1,"hello world",11) ”syscall implementation” RET RETI RET RET 33/44 Une courte page de publicité: ltrace et strace à faire chez vous: hello.c #include <stdio.h> void main() { printf("hello linux world !\n"); } • gcc -o ./hello ./hello.c • ltrace ./hello • strace ./hello et ensuite: man ltrace et man strace 34/44 Positionnement de l’OS Application 1 Application 2 VM1 VM2 OS Kernel Architecture Hardware • chaque application qui s’exécute est un processus userland • le noyau virtualise et arbitre les accès au matériel 35/44 Plan 1. Introduction: définition du terme «Système d’exploitation» 2. Interface entre OS et utilisateur: le shell 3. Interface entre logiciel et matériel: l’architecture 4. Isolation entre noyau et applications: les syscalls 5. Quelques syscalls UNIX incontournables 36/44 Appels système: exemples source: Silberschatz. Operating Systems Concepts Essentials (2011). p 59 37/44 Une fonction qui cache un syscall: gettimeofday() 38/44 Appels système: Remarques system call 6= library call • un même nom de fonction peut avoir des implémentations différentes sur différentes plates-formes • Windows vs Linux vs OSX vs etc RTFM: man gettimeofday = man 2 gettimeofday Sections des pages de manuel: 1 commandes shell 2 appels système 3 fonctions de bibliothèque 4 fichiers spéciaux et drivers ... etc 39/44 Une fonction qui cache un syscall: exit() 40/44 Une fonction qui cache un appel système: fork() 41/44 Appel système fork: remarques Unique interface permettant de créer un processus Unix • duplique le processus appelant Paradigme «Call once, return twice» • dans le nouveau processus fork() retourne 0 • dans le processus appelant fork() retourne le pid du fils 42/44 Plan 1. Introduction: définition du terme «Système d’exploitation» 2. Interface entre OS et utilisateur: le shell 3. Interface entre logiciel et matériel: l’architecture 4. Isolation entre noyau et applications: les syscalls 5. Quelques syscalls UNIX incontournables 43/44 À retenir Architecture • cycle de Von Neumann avec interruptions • dual-mode operation: supervisor mode vs slave mode • instruction TRAP pour lever une interruption Noyau • l’ensemble des routines de traitement d’interruption (ISR) • y compris le syscall dispatcher Userland • «machine virtuelle» offerte aux applications • vue simplifiée et restreinte de l’architecture Appels système • interface entre les applications et le noyau • accessibles via des fonctions de bibliothèque OS = noyau + bibliothèques + programmes système 44/44