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