Chapitre 3 Les entrées
Transcription
Chapitre 3 Les entrées
Chapitre 3 Les entrées-sorties 3.1 Introduction Le contrôle des périphériques d’E/S (Entrées-Sorties) est l’une des tâches les plus importantes d’un système d’exploitation. Le système doit envoyer des commandes aux périphériques (imprimer une page) intercepter les interruptions (plus de papier) et gérer les erreurs (bourrage). Il doit également fournir une interface entre périphériques et utilisateurs qui doit être de préférence la même pour tous les périphériques. cat < entree > sortie Notre exemple doit fonctionner, que l’entrée et la sortie soient sur disque, sur disquette, ou sur terminal. 3.2 Les principes généraux 3.2.1 Périphériques physiques et périphériques logiques Les types de périphériques sont très nombreux. Parmi ceux-ci on trouve : console, lecteur CD, disque, lecteur de bandes, scanner, souris. Chaque type existe en plusieurs modèles ayant chacun leur spécificité. Chaque périphérique peut être vu comme un matériel physique ou comme un matériel acceptant des commandes et signalant des erreurs. C’est à cette partie du périphérique que nous nous intéresserons. On distingue principalement deux types d’E/S qui sont : les E/S mode blocs dans lesquels des blocs de données peuvent être lu ou écrits indépendamment les uns des autres. Parmi ceuxci on trouve les disques. Le deuxième type regroupe les E/S mode caractères, qui acceptent un flot de caractères sans se soucier de la structure (terminaux, souris, . . .). Certains périphériques n’appartiennent pas vraiment à l’une de ces deux catégories. C’est le cas des horloges qui ne font que générer des interruptions. 45 3.2.2 Périphériques et contrôleurs On peut distinguer le périphérique qui est la partie mécanique, du contrôleur, qui est la partie électronique. Le système d’exploitation communique avec le contrôleur (IDE, SCSI, . . .), contrôleur qui transcrit les ordres pour le périphérique que le système veut atteindre. Cette notion de contrôleur est importante car elle permet au CPU de se décharger de tâches fastidieuses. C’est le contrôleur qui va lui même envoyer les ordres au périphérique qu’il a en charge et ensuite générer une interruption pour que le CPU vienne récupérer ces informations. Cependant, de nombreux contrôleur ont un accès direct à la mémoire (D. M. A.). Prenons un exemple de fonctionnement sans D.M.A. Le contrôleur lit un bloc jusqu’à ce qu’il soit entièrement dans son tampon, puis il calcule un total de contrôle (checksum) pour vérifier qu’aucune erreur ne s’est produite. Il réquisitionne ensuite le processeur en emettant une interruption. Le processeur effectue alors une boucle de transfert du tampon du contrôleur vers la mémoire. Ce transfert est malheureusement couteux en temps CPU. Dans le cas du D.M.A., c’est le contrôleur qui effectue lui même le transfert vers la mémoire. Pour ce faire, lors de la demande de lecture, un paramètre supplémentaire est passé qui est l’adresse mémoire ou les données devront être copiées. 3.3 Fonctionnement du logiciel d’E/S Le logiciel d’E/S pourra donc être constitué en couches. Les couches basses masquant les particularités du matériel aux couches les plus élevées. Cette structure permet d’intégrer l’idée clé qui est l’indépendance vis-à-vis du matériel. Une commande comme cat < toto > titi doit pouvoir être effectué quelque soit l’entrée ( disque, floppy, clavier,. . .) et quelque soit la sortie. La gestion des erreurs est une autre priorité du logiciel d’E/S. Celle-ci doit pouvoir s’effectuer au niveau le plus bas de manière à être transparent à l’utilisateur. En effet, une erreur passagère due, par exemple à de la poussière sur la tête de lecture doit pouvoir être corrigée directement par le contrôleur. Un point important est la distinction entre transfert synchrone et asynchrone. La plupart des E/S sont asynchrones. Elles s’exécutent pendant que le processeur est occupé à une autre tâche. Il est prévenu que l’E/S est terminée par l’arrivée d’une interruption. Pour les programmes utilisateurs, il est bien plus simple de voir une E/S comme étant synchrone. Pour ce faire, le système endort le processus ayant effectuer sa demande et le réveille lorsque celle-ci est arrivée. L’écriture des programmes est donc simplifiée. Le système devra également prendre en compte la différence de gestion entre périphériques dédiés et périphériques partagés. L’imprimante est par définition un périphérique dédié. En effet plusieurs processus ne peuvent l’obtenir simultanément. Pour gérer ce problème, le principe du spooler est implanté. Seul un processus (démon) peut obtenir l’imprimante. Ce processus lit des fichiers dans un répertoire particulier qu’il envoie ensuite vers l’imprimante. Les processus voulant imprimer envoient leurs données vers ce répertoire particulier. 46 3.3.1 Le traitement en couche Le bon traitement des E/S peut être obtenu grâce à la structuration du logiciel en quatre couches : 1. traitement des interruptions, 2. pilotes de périphériques, 3. logiciel du système d’E/S indépendant des périphériques, 4. logiciel accessible au niveau utilisateur. 1. Le traitement des interruptions Pour que les choses soient le plus simple possible, on bloque tout processus effectuant une demande d’E/S jusqu’à ce qu’une interruption vienne signaler que celle-ci est terminée. On peut ici utiliser un sémaphore binaire ou tout autre méthode de synchronisation. 2. Les pilotes de périphériques Le code dépendant de chacun des périphériques est reporté dans les pilotes de périphériques. Le pilote de périphériques est la seule partie logiciel à connaitre toutes les spécificités du matériel. Le pilote de périphériques traite les requêtes de plus haut niveau emanant de la couche logiciel situé au dessus de lui. Si le pilote est libre, il traite immédiatement la requête, sinon il la met dans une file d’attente. La première étape de traitement va consister en la traduction d’une demande indépendante du type de périphériques en un certain nombre d’ordres pour un périphériques spécifique. Ces ordres sont placés dans les registres spécifiques du contrôleur puis le pilote s’endort attendant d’être réveillé par le périphérique. Il transmet alors ses résultats vers l’appelant ainsi qu’un code de retour spécifiant comment s’est passé l’appel. 3. Le logiciel d’E/S indépendant du matériel Seul une petite partie du logiciel d’E/S est dépendante du matériel. Le rôle principal de cette couche est de donner une interface uniforme (commune à toutes les E/S) au logiciel des utilisateurs. Nous donnons ici une liste des principales fonctions qui doivent être implantées dans cette couche. (a) Adressage des périphériques par leur nom. Cette couche logiciel crée un lien entre les noms symboliques et les périphériques euxmêmes. Sous Unix, le nom symbolique est du type /dev/ph. Dans l’inœud associé à ce nom, on trouve les informations nécessaires pour accéder aux périphériques. (b) Protection des périphériques. La protection dépend souvent de la manière dont les objets sont nommés. On peut distinguer trois cas. Sur les systèmes pour micro-ordinateur (DOS), aucune protection n’est offerte. Dans les gros systèmes (VM/CMS), les utilisateurs ne peuvent accéder directement aux périphériques. Sous Unix, tout dépend des droits placés sur les noms des périphériques. En effet, sous Unix, les périphériques sont régis par la même règle que tous les autres objets (droits rwx). 47 (c) Taille de blocs indépendante du périphérique. Le logiciel doit également masquer les tailles de blocs pour les périphériques. Il peut donc gérer ses propres blocs quitte à ce qu’ils correspondent à plusieurs secteurs. (d) Fourniture de tampons. L’utilisation de tampons permet un nombre de requêtes raisonné aux E/S. l’écriture d’un caractère dans un fichier ne sera pas effective immédiatement, car on peut largement supposer que la lecture des caractères suivants est imminante. De plus, sans tampon, des données pourraient être transmises au système plus vite qu’il ne peut les traiter (tampon clavier). (e) Allocation de l’espace de sauvegarde pour les périphériques blocs. Cette fonction correspond à une gestion des blocs libres pour l’E/S. Le système a besoin d’une liste de blocs libres. La recherche d’un bloc libre est indépendante du périphériques. (f) Allocation et libération pour les périphériques dédiés. Comme nous l’avons vu, un périphérique dédié ne peut être utilisé que par un seul processus à la fois. Le système doit proposer une méthode pour garantir cet usage privatif. Sous Unix, on peut effectuer un open. Si le périphériques n’est pas libre le open échoue. (g) Signalisation des erreurs. Le traitement des erreurs est quasiment intégralement reporté dans les pilotes de périphériques. Si le pilote ne sait pas gérer l’erreur, il en informe alors la couche supérieure (bloc endommagé). 4. Le logiciel d’E/S faisant partie de l’espace utilisateur. Bien que la majeur partie du logiciel d’E/S fasse partie du noyau, une faible partie est constituée de bibliothèques qui sont liées aux programmes des utilisateurs. Toutes les procédures de ces bibliothèques font partie du système d’E/S. En général elles positionnent les paramètres de l’appel-système à certaines adresses mais elles peuvent effectuer un travail plus conséquent. C’est le cas de la primitive printf qui formate une ligne avant de faire un appel à write. La gestion des spools fait également partie de cette couche. Pour pouvoir imprimer, un processus doit créer un fichier d’impression qu’il écrit dans un répertoire particulier (le répertoire de spool). Un démon est ensuite chargé de récupérer les fichiers de ce répertoire et de les envoyer vers l’imprimante. Seul ce démon a un accès au fichier spécial de l’imprimante. 48