Skip to content

4.2 Système d'Exploitation

Pré-requis Architecture des ordinateurs, Prog Python

Objectifs du module

Comprendre les systèmes d'exploitation permet d'aborder notamment la problématique de l'usage des ressources.

Plan du module

4.2 Système d'Exploitation ch1. Qu'est ce qu'un système d'exploitation

L'objectif de ce premier chapitre est de faire une présentation générale du rôle et des fonctionnalités principales d'un système d'exploitation. Nous commencerons par nous demander quel est le rôle d'un système d’exploitation ? Suivra une présentation générale d’un système d’exploitation avec ensuite un focus sur différentes fonctionnalités : * L’ordonnanceur * La gestion de la mémoire * Le système de fichiers * La gestion des droits d’accès * Le démarrage du système * Les interfaces utilisateur

(CLIC) Commençons par étudier pourquoi les systèmes informatiques utilisent un système d'exploitation.

(CLIC)

1.

diapo 3 Pourquoi un système d'exploitation ?

On considère ici un four avec quelques fonctions numériques : affichage digital, boutons, minuteries. Le système informatique du four, construit autour d'un microcontrôleur, lit l'état des boutons, configure le timer, affiche le temps restant sur l'afficheur et contrôle le dispositif de chauffage. On peut envisager sereinement le programme s'exécutant directement sur le microcontrôleur pour assurer ces fonctions. Le fabricant du four a certainement à la fois conçu l'électronique et développé le programme. Nul besoin de système d'exploitation, on parle de système bare metal (qu'on peut traduire par metal brut).

diapo 4 Pourquoi un système d'exploitation ? Intéressons-nous maintenant à un système informatique plus complexe, un smartphone. Sur son trajet, l'utilisateur utilise une application de navigation, une application de streaming et communique par sms de temps à autre. Il reçoit un appel téléphonique.

Sont donc actives sur son téléphone les applications de : * Navigation GPS * Streaming de musique * Communication par SMS * Réception d’un appel téléphonique

Ces applications ont été développées par des entreprises différentes, parfois concurrentes, et fonctionnent sur les smartphones de différents fabricants, et même devront fonctionner sur les smartphones pas encore conçus.

Ces applications utilisent les ressources matérielles du smartphone * Toutes utilisent le processeur, la mémoire, l’écran et la dalle tactile, * Le haut-parleur est utilisé principalement par l'application de streaming, mais doit transmettre également les notifications des autres applications. * La réception GPS n'est utilisée que par l'application de navigation, alors que la communication 4G achemine les données de toutes.

Notons enfin que l'appel téléphonique est prioritaire sur les autres applications. L'arrivée de l'appel doit interrompre le streaming musical et les instructions audio de la navigation.

diapo 5 Pourquoi un système d'exploitation ? On retrouve ici sous forme d'un schéma les interactions entre les applications et les composants matériels du smartphone.

De cette forêt d'interactions ressortent 2 problématiques principales : (CLIC) Comment faire en sorte que les éditeurs de logiciels puissent développer des applications compatibles avec l'électronique de tous les téléphones ? (CLIC) Comment faire en sorte que les applications se partagent les ressources matérielles de manière équitable ? et cela de manière harmonieuse, en évitant que la navigation ne demande de tourner à gauche lorsque l'on est au téléphone ou que les différentes applications écrivent en même temps au même endroit sur l'écran.

La solution est l'utilisation d'une couche logicielle entre le matériel (hardware) et les logiciels applicatifs (software). (CLIC) Cette couche se trouvant au milieu, elle fait partie des middlewares. On la nomme système d'exploitation, Operating System ou OS en anglais. En faisant l'intermédiaire entre les applications, le CPU, les mémoires et les périphériques matériels (CLIC), le système d'exploitation offre des fonctionnalités standardisées. Cette couche d'abstraction permet aux éditeurs de logiciels de développer pour un OS et non pour un matériel. En allouant les ressources processeur et mémoire et en protégeant l'écran d'accès désordonnés par les applications, le système d'exploitation permet à celles-ci de fonctionner en parallèle, sans avoir connaissance les unes des autres.

diapo 6 Pres OS intro La même introduction pourrait bien sûr être menée avec un PC. Généralisons à un système informatique.

diapo 7 Présentation d'un système d'exploitation

Tout système informatique ayant plus d'une dizaine de ko de mémoire programme peut accueillir un système d'exploitation.

Côté Hardware, on peut classer les différentes ressources matérielles en 5 catégories : * le ou les processeurs, * la mémoire de travail ou mémoire primaire, * la mémoire de stockage ou mémoire secondaire, * les entrées/sorties du système (clavier, souris, écran) et * les interfaces de communication avec d'autres systèmes (Ethernet par exemple).

Le système d'exploitation est proche du matériel, il est conçu pour des architectures spécifiques. Le système d'exploitation Windows ne tourne pas sur un petit processeur ARM et inversement le système d'exploitation temps réel FreeRTOS n'a pas de distribution pour les architectures AMD_64. Les processeurs récents ont au moins deux modes de fonctionnement : un mode superviseur et un mode utilisateur. Le système d’exploitation fonctionne en mode superviseur et peut ainsi contrôler les accès aux ressources de la machine. (CLIC) Les fabricants des périphériques matériels fournissent des drivers pour que le système d'exploitation puisse dialoguer avec eux. (CLIC)

Côté Software, les applications fonctionnent en mode utilisateur et ne vont donc pouvoir interagir avec le matériel qu'à travers le système d'exploitation. Celui-ci ordonnance les exécutions pour partager le processeur, il alloue de l'espace mémoire, il protège les ressources d'accès simultanés par des applications et offre des services de timers, de messagerie, de système de fichiers. Il gère les droits des différents utilisateurs.

Le système d'exploitation permet ainsi de sécuriser le système en évitant que les applications n'accèdent à des zones interdites ou configurent mal des périphériques, comme cela pourrait être le cas sur un système bare metal.

(CLIC) Les ordinateurs utilisent essentiellement Windows, macOS et Linux, sous une de ses nombreuses distribution : Ubuntu, Debian, Fedora, etc... Notons que depuis 1999, macOS est un système dérivé de UNIX comme Linux. Unix est né dans les années 70s au tout début de l'informatique. Rapidement réécrit dans un langage dit haut niveau créé pour l'occasion, le langage C, il était porté sur les différentes architectures de l'époque. Avec un code ouvert à ses débuts, il a lancé le mouvement du logiciel open-source et posé des bases adoptées par de nombreux systèmes d'exploitation : BSD, Linux et macOS notamment. Linux est le système d'exploitation le plus populaire sur les serveurs, y compris certains serveurs de Microsoft Azure.

(CLIC) Les smartphones utilisent quasi exclusivement Google Android ou iOS, le premier utilise un noyau linux optimisé pour les smartphones et le second dérive de macOS donc de UNIX. Enfin, les systèmes embarqués, très économes en énergie et aux ressources limitées utilisent des OS spécifiques : FreeRTOS ou QNX par exemple. Nous y reviendrons un peu plus loin.

Ce cours s'appuie principalement sur Linux. Gratuit et Open-Source, il est beaucoup mieux documenté et ainsi plus adapté pour expliquer les concepts des systèmes d'exploitation.

diapo 8 Présentation d'un système d'exploitation 2 (CLIC) Le système d'exploitation entre dans la catégorie middleware. Dans certains cas, d'autres logiciels interviennent entre le système d'exploitation et les applications et entrent dans cette catégorie: l'interpréteur python ou la machine java par exemple.

Le système d'exploitation est composé de plusieurs programmes. (CLIC) Le principal, nommé le noyau, est le coeur du système d'exploitation. Il alloue les ressources. Rappelons que les accès à la mémoire ou aux périphériques passent pour la grande majorité par le processeur. Le couple {noyau-processeur} est donc le centre de tout le système. (CLIC) Pour la gestion de la mémoire, le système d'exploitation utilise le composant de management de la mémoire du processeur : MMU. (CLIC) L'OS peut exécuter des instructions en mode Supeviseur. Les applications passent par le noyau pour obtenir des ressources en mémoire, via des appels systèmes. (CLIC). Une fois ces ressources obtenues, elles peuvent exécuter des instructions en mode utilisateur directement sur le processeur dans le temps qui leur est alloué. (CLIC)

(CLIC) D'autres programmes du système d'exploitation sont des services fonctionnant en mode Utilisateur, comme des applications. Ils font appel au noyau pour leurs ressources. Sous linux, les services de l'OS fonctionnant en arrière plan sont appelés daemon. Les appels système, interface entre les applications et le noyau seront présentés dans la partie 8 de ce chapitre.

(CLIC) L'interface graphique est l'interface entre l'utilisateur et le système d'exploitation. Il est aussi possible pour l'utilisateur de dialoguer avec le système d'exploitation via une simple console. Plus de détails seront apportés, là encore, dans la partie 8 de ce chapitre.

(CLIC) Ainsi, un traitement de texte utilisera le service d'interface graphique de l'OS pour afficher de jolies fenêtres et le service d'impression pour ses sorties papiers.

(CLIC) Le navigateur web quant à lui utilisera les services de communication de l'OS, eux-même utilisant le driver de la carte réseau, et l'interface physique Ethernet du PC, pour communiquer avec l'extérieur.

(CLIC) Au démarrage, le système d'exploitation est lancé par un petit logiciel, BIOS ou UEFI.

Rappelons que les systèmes d'exploitation d'ordinateurs proposent aussi un système de gestion de fichiers sont multi-utilisateur et gèrent les droits de ces utilisateurs sur les applications et les fichiers. Nous expliquerons dans la suite, plus en détails ces différentes fonctions de l'OS : La gestion des processus, de la mémoire, des fichiers et des entrées/sorties

diapo 9 intro La gestion des processus

diapo 10 La gestion des processus Qu'est-ce qu'un processus ? Un processus est l'instance d'exécution d'un programme. Le noyau alloue un numéro d'identification unique PID (Process Identifier) et des ressources, mémoire et processeur à chaque processus. Comme nous l'avons vu dans la vidéo précédente, le système d'exploitation a lui aussi ses processus, en plus du noyau. (CLIC) Par exemple, le serveur d'impression cups qui utilise ici 0,3% des ressources CPU Les processus peuvent aussi être des applications lancées par l'utilisateur. (CLIC) Par exemple, lorsque je lance la lecture d'une vidéo, un processus VLC est créé. Si je lance la lecture d'une seconde vidéo, un 2nd processus est créé, avec un autre PID. Chacun utilise ici 43% du processeur, pour la décompression essentiellement. On note que le processus serveur d'impression appartient à root, le système, et que le processus vlc appartient à l'utilisateur ajuton. (CLIC) Les ressources matérielles étant limitées, le noyau doit les partager entre les processus. Un processus doit donc alterner des états d'exécution et des états d'attente.

diapo 11 La gestion des processus Les états d'un processus Voyons en détail les différents états du processus. Lors du lancement de l'application, ou à la demande du système d'exploitation, un processus est créé. (CLIC) Un espace mémoire lui est alloué, jusqu'à sa destruction.

Une fois qu'il a installé ses éléments en mémoire, il est prêt (CLIC) et attend que le noyau lui alloue un processeur. (CLIC) En effet, autant il est possible d'allouer un espace mémoire pour toute la durée de vie du processus, autant il n'est pas possible de lui allouer un processeur. La mémoire est partagée dans l'espace et le processeur est partagé dans le temps. Le processus alterne donc les états exécution et prêt (CLIC), le noyau lui retirant le processeur pour le partager avec d'autres processus. (CLIC) L'arrêt de l'exécution du processus par le noyau s'appelle la préemption.

Le processus peut aussi faire un appel système un peu long (une demande de lecture sur le disque dur) ou se mettre en sommeil de lui-même (un client de messagerie par exemple ne vérifie la présence de mails sur le serveur que toutes les 5 mn). Le processus passe alors en mode bloqué (CLIC). A l'arrivée de la donnée demandée ou après l'écoulement des 5 mn cité dans notre exemple, le processus est débloqué et repasse en mode "prêt", dans l'attente de ressources processeur. (CLIC)

Enfin, (CLIC) lorsque l'utilisateur ferme l'application, ou en cas d'erreur fatale, le processus est terminé et l'espace mémoire qu'il utilisait est normalement rendu disponible de nouveau. Sinon, un processus terminé non détruit est dit zombie.

(CLIC) Un processus en état prêt ou exécution est dit actif

L'élément du noyau qui détermine quel processus prêt passe en exécution est l'ordonnanceur (scheduler en anglais)

diapo 12 La gestion des processus Le partage du temps Décrivons comment se fait le partage du temps à partir d'un exemple simplifié, sur un processeur mono-coeur, avec 3 processus seulement.

//Description de l'ordonnancement. Notons que à chaque changement de processus, l'ordonnanceur s'est lancé et a utilisé le processeur. Nous voyons également que les interruptions matérielles (par exemple l'appui sur une touche du clavier peuvent déclencher l'ordonnanceur avant la fin du quanta de temps)

diapo 13 La gestion des processus Le partage du temps 2 De cet exemple, on voit que... //lecture de la diapo

Le quanta de temps doit être choisit judicieusement. En effet, la préemption d'un processus demande de sauvegarder tout le contexte du processeur (les valeurs de ses registres, program counter et statut compris) et de charger le contexte de l'autre processus. L'ordonnanceur aussi a besoin du processeur pour s'exécuter et demande un changement de contexte. Un quanta de temps trop petit ferait alors que le temps alloué à l'ordonnancement et aux changements de contexte ne serait pas négligeable. Un quanta de temps trop grand ferait que les processus actifs resteraient non exécutés pendant un temps important (plusieurs quanta de temps) et la réactivité du système en patirait. A l'échelle humaine, si l'ordonnancement commute suffisamment rapidement, l'utilisateur a l'impression que les processus fonctionnent en parallèle, d'où le terme utilisé parfois de système d'exploitation multi-tâche.

(CLIC) Linux stocke les informations sur l'ordonnanceur dans le dossier système kernel. On y voit notamment que le quanta de temps est variable, entre 3 et 24 ms. Il dépend du nombre de processus actifs.

(CLIC) Sur un processeur multi-coeur, la charge des processus est répartie sur les différents processeurs. En lançant la gourmande décompression/lecture de 9 vidéos sous VLC, la fonction top permet de voir à quel coeur chaque processus VLC est affecté.

La mise en oeuvre des processus et des processus légers sera expliquée en détail dans les chapitres 2 et 3.

diapo 14 La gestion des processus Les systèmes temps réels

//commentaire de la diapo, ne pas oublié la priorité des tâches critiques

Les systèmes d'exploitation à usage général ne sont pas temps réel. En effet, accepter que l'utilisateur lance un nombre non connu à l'avance et non limité de processus empêche de garantir des échéances. L'algortihme d'ordonnancement nommé Round Robn ou tourniquet attribue le même quantum à tous les processus. Xenomai est un système d'exploitation temps réel optimisé pour faire tourner Linux de manière non prioritaire en parallèle des tâches prioritaires. Cela permet ainsi d'obtenir en quelque sorte un Linux temps réel. On peut évoquer aussi les processeurs double-coeur STM32MP1 souvent utilisés avec 2 OS : un coeur sous Linux pour l'affichage et le traitement d'image et un coeur sous FreeRTOS pour les tâches de contrôle/commande par exemple. Il n'y a pas de système d'exploitation universel, mais des systèmes d'exploitation adaptés à des applications.

diapo 15 La gestion de la mémoire Introduction Nous avons vu comment le noyau répartissait le temps processeur entre les processus. Chaque processus a également besoin de mémoire, voyons comment le noyau gère la répartion de celle-ci.

diapo 16 La gestion de la mémoire Architecture des mémoires d'un ordinateurs Avant de présenter comment le processeur alloue la mémoire aux processus, rappelons, comme exposé dans le module architecture, les 4 types de mémoires que l'on trouve sur un ordinateur.

  • Les registres de la CPU sont accessibles en 1 cycle instructions, SRAM. 15 registres pour la CPU et des registres pour les périphériques SIMD, FPU, etc...

  • La mémoire principale ou mémoire de travail est constituée de 4 à 16 Go de SDRAM, beaucoup moins chère que la SRAM, sur les ordinateurs, beaucoup plus sur certains serveurs. Les vitesses des mémoires n'ont pas suivi l'évolution des processeurs. Il faut 10 ns, plus d'une centaine de cycles processeurs pour accéder à une donnée dans la mémoire.

  • Pour que la mémoire principale ne ralentisse pas le processeur, les concepteurs de processeur ont ajouté de la mémoire SRAM rapide très proche de la CPU, sur le même circuit intégré. Cette mémoire cache sert de tampon entre la CPU et la mémoire de travail. Elle est complètement gérée par le processeur pour limiter les accès à la mémoire RAM et est invisible pour le système d'exploitation. La suite de cette présentation ne parlera donc pas de mémoire cache.

  • La mémoire de stockage, ou mémoire secondaire, permet le stockage persistant de très grandes quantité de données à bas coût, mais au prix d'un temps d'accès aux données important. 100 µs pour accéder à une information sur un disque SSD, 2ms pour un disque magnétique.

Clic La mémoire de stockage n'est pas directement utilisable par les processus. Il faut donc charger en mémoire RAM les programmes et données stockées sur le disque. Le disque étant lent, la CPU délègue la copie à un périphérique dédié, le DMA pour Direct Memory Access. Une fois configuré et lancé par la CPU, le DMA recopie une zone mémoire du disque dur en mémoire RAM ou vice versa et indique à la CPU quand l'opération est terminée. Le processus ayant fait la demande est bloqué pendant l'attente du travail du DMA et libère ainsi la CPU.

diapo 17 La gestion de la mémoire Les besoins des processus

Chaque processus, lors de sa création se voit recevoir un large espace mémoire de plusieurs Go, dans lequel on trouve * les instructions du programme, * une zone pour les données statique du programme * un tas pour les allocations de mémoire dynamique * une zone pour les bibliothèques. Cette zone peut être partagée avec d'autres processus utilisant les mêmes bibliothèques * de l'autre côte de l'espace mémoire, une zone réservée à des fonctions d'optimisation. * et la pile dans laquelle sont stockés les contexte des appels de fonctions et les variables de ces fonctions. Cette pile augmente de taille à chaque appel de fonction et diminue à chaque retour d'une fonction.

( Clic ) En plus de cela, dans la zone mémoire du noyau est créée une structure de quelques centaines d'octets de description du processus. On y trouve * l'identifiant du processus PID * le statut du processus (prêt, exécuté, bloqué, etc) * un pointeur indiquant l'adresse de l'espace mémoire décrit juste avant * l'identifiant de l'utilisateur propriétaire de ce processus * et enfin, la sauvegarde du contexte. En effet, au moment où un processus va passer du mode exécuté au mode bloqué ou prêt, le noyau sauvegarde le contexte du processeur. Le contexte comprend notamment l'état des registres de la CPU, du pointeur vers l'instruction en cours, du pointeur de pile, le résultat de la dernière opération ou du dernier test. Juste avant le passage du processus à nouveau en mode exécuté, le noyau recopie son contexte dans le processeur pour que le processus retrouve celui-ci dans l'état exact où il l'avait quitté.

Cette structure nommée process descriptor est un élément de la table des processus, liste doublement chaînée, présente dans la zone mémoire du noyau et permettant donc à celui-ci d'y accéder rapidement pour l'ordonnancement et pour les changements de contexte.

Sous linux, le plan mémoire d'un processus est disponible dans le fichier map du dossier associé au processus. ( Clic ) Ici est affiché une partie du plan mémoire du processus d'un simple programme python. On peut voir la taille de plus de 100 Go de cet espace mémoire, avec les zones de code, le tas, les bibliothèques, la pile et l'espace réservé au noyau.

On peut noter également que la plus petite division dans l'espace mémoire virtuelle est 0x1000 ce qui correspond à 4 ko.

Evidemment le système ne possède pas suffisamment de mémoire pour affecter plusieurs Go à chaque processus.

diapo 18 La gestion de la mémoire Allocation dynamique de mémoire

Lors de la création d'un processus, le process descriptor est créé et un espace de mémoire virtuelle est alloué au processus.

Le gestionnaire de mémoire du processeurs (MMU pour Memory Management Unit), contrôlé par le noyau du système d'exploitation fait la correspondance entre cet espace mémoire virtuel et des zones libres de la mémoire de travail. La translation d'adresses par la MMU vers la mémoire physique se fait par page de 4 ko.

Un processus peut demander un supplément de mémoire pour le tas. Il obtient alors un supplément de mémoire contigu dans son espace virtuelle alors que physiquement cette extenson du tas est situé à un autre endroit de la mémoire.

Lors de la création d'un second processus, un second espace de mémoire virtuel est crée qui peut partager la zone de mémoire de certaines bibliothèques avec le premier.

Si la mémoire physique est pleine, le MMU peut libérer de la mémoire en stockant provisoirement sur le disque, dans une zone nomméee swap, les pages correspondant à l'espace adressable d'un processus prêt ou bloqué.

( Clic ) La fonction top dont le résultat est affiché dessous permet d'afficher des informations du process descriptor : En plus du PID et de l'utilisateur propriétaire du processus, en ko sont affichés L'occupation de la mémoire virtuelle (100 Mo), de la mémoire physique (23 Mo) et de la mémoire partagée (8 Mo), la statut du process (S comme suspendu, ou bloqué en attente de l'écoulement d'un délai)

A travers cette courte animation, on voit le rôle du gestionnaire de mémoire, configuré par le système d'exploitation : * maintenir à jour une table indiquant la localisation physique des pages des espaces adressables des processus ; * gérer les pages mémoires partagées entre plusieurs processus * allouer des pages libres lors des créations de processus ou des demandes d'extension du tas ou de la pile et les libérer lors des destructions de processus ou des libérations de mémoire, * gérer le swap (parfois nommé va-et-vient en français) entre mémoire de travail et mémoire de stockage. * Protéger les pages mémoire d'un processus contre une écriture par un autre processus mal programmé ou malveillant.

Par ailleurs, la pagination de l'espace mémoire facilite l'existence de la mémoire virtuelle en traduisant les zones de mémoire par page de 4 ko. La pagination évite aussi après la création / destruction de nombreux processus d'avoir une mémoire physique trop fragmentée avec de multiples petites zones libres.

La gestion de mémoire est un exemple supplémentaire du lien étroit entre le matériel et le système d'exploitation.

Notons que les systèmes d'exploitation temps réel, toujours dans l'objectif de maitriser les temps d'accès aux processus, proposent de choisir une allocation statique des espaces mémoire allouées aux tâches.

diapo 19 Le système de fichiers Introduction

Nous avons vu dans la vidéo précédente que le processeur et le noyau s'associent pour optimiser au mieux l'usage de la mémoire principale, grâce aux espaces de mémoire virtuelle alloués aux processus. Cependant cette mémoire est de taille limitée, ne conserve pas son état lors d'une coupure de l'alimentation et ne peut être relue par un autre système, qui n'aurait pas la table de correspondance entre ces espaces virtuels et la mémoire physique.

Pour répondre à ces besoins, le système d'exploitation propose à l'utilisateur et aux processus un système de fichiers.

diapo 20 Le système de fichiers Fichiers et système de fichiers

Un fichier est une zone mémoire physique de taille limitée stockant des données de manière persistante. Cette mémoire dite mémoire secondaire, mémoire de stockage ou mémoire de masse peut être un disque dur, un disque SSD, une carte mémoire SD, etc.

Des données stockées sous forme de fichier sur un tel support doivent pouvoir être relue une fois la mémoire RAM et la table des translations d'adresse effacée par exemple. On peut aussi vouloir déplacer un disque et l'utiliser sur un système d'exploitation qui n'a aucune information a priori sur le contenu de ce disque.

Une fois le système éteint, le stockage des fichiers doit donc être non dépendant du système informatique qui l'a créé.

Notons que la zone de swap est un ensemble temporaire de recopies de pages de la mémoire principale, pas sous forme de fichiers.

Les applications ont besoin de fichiers pour stocker leur programme et pour sauvegarder des données (par exemple ce diaporama et cette vidéo)

On peut distinguer 2 tyes de fichiers : Les fichiers texte écrits en ascii ou UTF-8 : chaque octet ou chaque mot 16 bits correspond à un caractère. Très pratique pour des codes de programme, des fichiers de configuration, ce type de fichier peut être lu sur tout ordinateur, même non équipé du logiciel associé. Les fichiers binaires (tous les autres) : le fichier n'est qu'une liste de nombre sans sens si on ne connaît pas le format et le logiciel associé. Ce format est annoncé par une extension, obligatoire sous windows, facultative sous Linux.

Chaque fichier a : * un nom (dont une extension) * des données * des métadonnées, (taille, dates de création et/ou de modification,propriétaire, droits d’accès, adresses sur le disque)

Le système de fichier gère la structuration, le nommage, l’accès, la protection et l’implantation de ces fichiers. Plusieurs systèmes de fichiers co-existent, avec les OS associés, notamment FAT32 et NTFS pour Windows, ext4 pour Linux Notons que ces 3 systèmes de fichiers relativement modernes ont un mécanisme de préparation de l'écriture d'un bloc de données permettant d'éviter de rendre des blocs défectueux en cas de panne d'alimentation pendant une écriture. Linux accepte les disques utilisant un système de fichier FAT32 et NTFS mais Windows n'accepte pas un disque au format ext4.

diapo 21 Le système de fichiers Les fichiers sous Linux

Comme le Process Descriptor pour le processus, à chaque fichier sous linux est attribué une structure avec ses métadonnées. Cette structure héritée d'unix se nomme inode.

Un i-node est une structure de quelques dizaines d’octets qui contient généralement les champs suivants : * le type du fichier (fichier ordinaire, spécial, répertoire,...). * les droits d’accès (écriture, lecture, exécution pour l'utilisateur, le groupe, tous) ... * UID : l'utilisateur créateur du fichier ... * Taille du fichier. * Atime : date de la dernière lecture. * Mtime : date de la dernière modification. * Ctime : date de la dernière connexion. * Adresses du fichier.

(clic) Les adresses indiquent l'emplacement physique des blocs de données sur le disque (clic) Les dernières adresses, dites indirectes, envoient vers un bloc contenant des adresses de blocs de données. Le fichier est dit fragmenté si les blocs ne sont pas contigus.

Les blocs de données sont de 512 octets par défaut.

(clic) La struture inode est stockée également sur le disque, en début de partition. Sur ce début de partition appelé parfois superbloc, on trouve aussi les informations sur le système de fichier, sur les fichiers présents, avec leurs inodes et sur l'état, libre ou occupé des blocs. Le disque peut donc être lu ailleurs, il comporte toutes les informations nécessaires à la compréhension de son système de fichiers.

Le système d'exploitation vérifie les droits d'accès en lecture/écriture/exécution. Il peut verrouiller tout ou partie d'un fichier, l'accès simultané en écriture à un même fichier par deux processus pouvant corrompre ce fichier. Pour accéder rapidement à des éléments de fichiers, la Memory Management Unit permet, à la manière de la mémoire cache du processeur, de copier le fichier ou les parties potentiellement intéressantes du fichier en RAM.

diapo 22 Le système de fichiers Les fichiers sous Linux 2

Regardons la composition du disque dur vu par le système d'exploitation.

GPT signifie GUID partition table, cela indique le type de description des partitions. Cette description est inscrite au début de l'espace mémoire du disque.

(clic) Le disque est séparé en 4 partitions, avec des systèmes de fichiers différents. Les partitions permettent de juxtaposer plusieurs systèmes de fichier sur un même disque.

(clic) Regardons maintenant la description des fichiers d'un dossier. On y trouve les informations stockées dans les inodes (numéro d'inode, protections...)

diapo 23 Le système de fichiers Organisation des fichiers

Pour accélérer l'accès au fichier, plutôt qu'une longue liste plate, Linux, comme Windows, utilise une arborescence de dossiers, nommés aussi répertoire.

Pour accéder à un fichier, il faut donc indiquer l'arborescence : le chemin.

Un dossier est un simple fichier avec la liste des dossiers et fichiers qu'il contient.

L’opération appelé « montage » consiste à associer à un répertoire d’un système de fichier, un autre système de fichier. Cela se fait à chaque fois que l'on connecte une clé USB sur un PC, pour voir apparaître cette clé dans l'arborescence du PC.

diapo 24 Le système de fichiers Catégories de fichiers sous Linux

Il existe 4 catégories de fichiers sous linux :

Les fichiers normaux sont les fichiers textes, sources de programmes ou fichiers binaires...

Les fichiers répertoires : (directories en Anglais) sont des fichiers conteneurs qui contiennent des références à d'autres fichiers. Ils permettent d'organiser les fichiers par catégories.

Les fichiers spéciaux, situés dans le dossier /dev, ce sont les points d'accès préparés par le système aux périphériques.

Les fichiers liens symboliques sont des fichiers qui ne contiennent qu'une référence (un pointeur) à un autre fichier. Cela permet d'utiliser un même fichier sous plusieurs noms et à plusieurs emplacement sans avoir à le dupliquer sur le disque. Sous Windows, les liens symboliques sont simulés par les raccourcis.

diapo 25 Le système de fichiers L'arborescence de Linux

L'arborescence des fichiers linux définit un dossier pour chaque usage. En plus des dossiers contenant les programmes de l'OS, les données utilisateurs, les configurations ou les journaux, ( clic ) on trouve 2 dossiers contenant pour /dev des fichiers virtuels vers les périphériques et pour /proc des fichiers virtuelles vers les données des processus.

Les processus n'ont pas un accès direct aux fichiers. ils doivent passer par des appels système à l'OS. Cette manipulation des fichiers par les processus sera présentée dans le chapitre consacré aux processus. La lecture / écriture dans un fichier est l'interface abstraite retenue par Linux pour les lectures / écritures des entrées / sorties du système. Ce sera l'objet de la vidéo suivante.

diapo 26 La gestion des entrées / sorties Intro

Comme expliqué dans la vidéo précédente, la gestion des entrées sorties se fait par des fichiers spéciaux. Cette gestion d'entrées/sorties demande de plus au système d'exploitation des protocoles de dialogue particulier, que nous verrons dans cette partie.

diapo 27 La gestion des entrées / sorties Les entrées/sorties

Les périphériques matériels (écran, clavier, imprimante, serveurs web via Internet), sont connectés à des contrôleurs hardware du système informatique (SATA, USB, carte graphique, carte réseau). A chaque contrôleur hardware est associé dans le système d'exploitation un driver (pilote en français) (clic), écrit soit par le fabricant, soit en s'appuyant sur la documentation farbicant du contrôleur. Le driver est l'interface du système d'exploitation avec le périphérique. Pour une imprimante USB se superposent même 2 drivers : celui de l'USB et celui de l'imprimante.

Mise à part la carte vidéo, connectée sur un bus PCI Express très rapide, et la carte réseau, les périphériques sont beaucoup plus lents que le processeur. Le système d'exploitation propose donc différents modes de dialogue avec ces périphériques pour ne pas ralentir le système.

Le système d'exploitation doit lire ou écrire sur ces périphériques d'entrées / sorties, en gérant un temps d'accès important par rapport aux constantes de temps de la CPU. Cela ressemble fort aux problématiques des accès à la mémoire de stockage présentées dans la vidéo précédente. Ainsi, Linux associe à ces périphériques des fichiers virtuels.

Ils permettront aux applications de dialoguer avec les périphériques comme avec des fichiers.

diapo 28 La gestion des entrées / sorties Les fichiers virtuels

La diapositive présente un extrait des fichiers virtuels associés aux périphériques que l'on trouve dans le dossier /dev de linux.

La première lettre indique le mode d'accès au périphérique, octet par octet ou bloc par bloc, par socket ou si c'est un lien symbolique vers un autre fichier.

(clic) On y trouve la console et le clavier (stdin), accessible caractère par caractère. stdin est un lien symbolique vers le fichier du périphérique, accessible par caractère.

(clic) On y trouve aussi les disques durs, accessibles par bloc.

(clic) On y trouve enfin le dossier avec les périphériques accessibles par l'usb et tty, la liaison série.

L'interaction des processus avec les périphériques d'entrées / sorties sous forme de fichier sera mise en oeuvre dans le chapitre 2 sur les processus.

diapo 29 La gestion des entrées / sorties Intercations entre la CPU et les périphériques

Plusieurs modes d'interactions sont possibles entre la CPU (exécutant les processus des drivers de périphériques) et les périphériques d'entrées/sorties.

(clic) Attente active : La CPU émet une commande au contrôleur d'entrées/sortie pour lancer une opération de lecture par exemple. Le processus entre dans une boucle vérifiant si l’opération est achevé, c'est-à-dire si les données demandées sont disponibles. Ce n'est pas envisageable pour des périphériques lents, la CPU restant non productive pendant cette attente dite active.

(clic) La scrutation : La CPU émet une commande au contrôleur d'entrées/sortie pour lancer une opération de lecture de nouveau. Ensuite, elle devient disponible exécuter les processus du système. De manière périodique, le processus du driver est lancé pour que la CPU fasse une scrutation du périphérique, pour voir si l'opération est achevée. Ce mode d'accès est plus efficace que le précédent mais peu satisfaisant car demandant de nombreux changements de contexte.

(clic) Interruption : Une autre méthode est d'exploiter au mieux le matériel : La CPU émet une commande au contrôleur d'entrées/sortie pour lancer une opération de lecture là encore, puis se rend disponible pour les autres processus. Une fois les données disponibles, c'est le périphérique d’E/S qui envoie un signal électrique, nommé interruption, pour en informer le processeur. C'est plus efficace et très utilisé. Cela demande à l'OS de bien exploiter les ressources matérielles du processeur.

(clic) Accès direct à la mémoire

Une solution pour éviter d'accaparer trop la CPU pour copier de larges blocs ou pour des dialogues lents, déjà évoquée dans la partie précédente sur les systèmes de fichiers est le DMA, Direct Memory Access. (clic) Lorsque de nombreux blocs de données sont à envoyer vers un contrôleur lent, ils sont copiés d'abord dans la mémoire RAM puis la CPU configure le DMA pour lancer la recopie du contenu de cette zone mémoire dans le périphérique. L'inverse est également possible. Pendant la copie, la CPU est libérée et peut être dédié à l'exécution d'autres application.

Pour réduire le temps consacrés aux dialogues, il est aussi possible d'ajouter des mémoires caches au niveau des contrôleurs ou des périphériques. (clic) Les disques durs notamment utilisent des mémoires cache pour absorber le plus rapidement possible les données envoyées par le DMA.

diapo 30 La gestion des entrées / sorties Les services de l'OS Le dialogue avec les périphériques autres qu'un clavier et une console reste complexe, malgré la présence des drivers et des systèmes de fichiers virtuels. C'est particulièrement le cas pour les communications réseau, aux nombreuses couches de protocoles. C'est pourquoi le système d'exploitation propose des services haut niveau.

(clic) La gestion des couches TCP/IP est un de ces services. (clic) Pour faciliter encore l'interaction entre l'application et la couche de transport des réseaux TCP/IP, le système d'exploitation propose une interface nommée socket. Cette interface sera détaillée et mise en oeuvre dans le chapitre 4.

(clic) Toujours pour simplifier l'accès aux ressources des applications, le serveur d'impression propose une interface unique pour envoyer des tâches aux imprimantes USB comme internet. Le serveur gère alors les demandes multiples à l'imprimante, périphérique d'accès exclusif, avec par exemple une politique de FIFO des tâches d'impression.

diapo 31 Le démarrage du système Intro Le système d'exploitation est sur le disque dur. L'ordinateur dispose donc d'un micro-programme lancé au démarrage capable de monter la partition du système d'exploitation et de lancer son premier processus.

diapo 32 Le démarrage du système UEFI l'UEFI (Unified Extensible Firmware Interface) est le micro-logiciel présent sur l'ordinateur. Il succède au BIOS et en améliore la sécurité. Il est stocké sur une mémoire flash de la carte mère, avec d'éventuelles extensions sur la première partition du disque dur. On peut accéder à sa configuration au démarrage via une touche fonction. Cette configuration permet notamment de configurer le mode de démarrage du PC, sur disque dur ou en réseau. Voyons comment l'UEFI charge l'OS en mémoire et démarre le premier processus du système d'exploitation.

diapo 33 Le démarrage du système initialisation du noyau, premiers processus A la mise sous tension de l'ordinateur, l'UEFI ou le BIOS charge une configuration minimale : disque dur, carte réseau pour un éventuel démarrage depuis le réseau, écran/clavier/souris.

Si le démarrage n'est pas paramétré depuis le réseau, l'UEFI accède alors à la petite partition EFI du disque dur et ainsi à des applications et drivers complémentaires.

Si il n'y a pas de configuration, l'UEFI lance le bootloader.

Celui-ci peut proposer le choix entre plusieurs systèmes d'exploitation, présents sur plusieurs partitions.

Une fois le choix effectué, si il y a, le Bootloader charge le noyau en mémoire et lance son exécution start_kernel() crée le processus de PID0, le noyau. Ce processus lance alors kernel_init() de PID1 pour monter le système de fichier et passer en mode utilisateur. Kthread() de PID2 est lancé ensuite pour gérer les processus du noyau Le processus init de PID 1 poursuit parallèlement son action en terminant de démarrer complètement le système d'exploitation.