Page préc.
Echanges de données entre processus |
Fin de page |
Page suiv.
Les modèles de coopération entre processus |
Entrées/Sorties : goulots d'étranglement
Pour remédier à cet inconvénient ont été inventées les entrées/sorties tamponnées. Le principe consiste à charger (si possible) par anticipation les données à lire, et à stocker provisoirement les résultats sur un support mémoire d'accès rapide, dans un tampon (buffer). Le support mémoire le plus rapide est la mémoire principale, dont le coût limite cependant la taille. Le support disque, moins rapide, est aussi beaucoup moins onéreux, et permet l'utilisation de tampons de très grandes tailles. Nous allons analyser ici le principe d'une sortie tamponnée sur disque :
Entrées/Sorties tamponnées
Elle met en œuvre différentes activités parallèles et indépendantes, qui doivent cependant être synchronisées.
Supposons que l'utilisateur dispose dans son langage de programmation d'une procédure Imprimer permettant d'envoyer UneLigne (suite de caractères soit de longueur fixe, soit terminée par un "drapeau") sur une imprimante.
En fait, cette procédure appelle une fonction du système d'exploitation (SVC) qui stocke provisoirement le contenu de la mémoire à partir de l'adresse UneLigne dans un tampon en mémoire principale, que nous appellerons TamponEcrit.
Dès que possible (les transferts entre la mémoire et le disque sont plus lents que les écritures en mémoire), l'activité 1 transfère les données sur disque, dans le tampon.
A l'autre extrémité de la chaîne, l'activité 3 transfère les données du tampon TamponImprim vers l'imprimante, au rythme de celle-ci.
Dès que de la place a été libérée dans ce tampon, l'activité 2 le recharge à partir du disque.
Les trois activités 1, 2 et 3 transfèrent en parallèle des données entre la mémoire, le disque et l'imprimante au moyen de canaux de commande.
Un canal de commande est un processeur indépendant piloté par un programme de canal situé en mémoire principale.
Le système d'exploitation initialise une opération d'entrée/sortie en envoyant une commande spéciale au canal de commande qui lui indique où se trouve le programme de canal et qui en lance l'exécution.
La suite du transfert des données est effectuée par le canal, indépendamment du processeur central qui peut reprendre une autre activité.
La fin d'un transfert est signalée par le canal au moyen d'une interruption, qui provoque le déclenchement du traitant d'interruption.
Les trois activités sont appelées respectivement EcritureDisque, LectureDisque et EcritureImprimante.
Le prédicat Actif(Activite) indique l'état de l'Activite passée en paramètre.
Les prédicats Plein(UnTampon) et Vide(UnTampon) indiquent l'état de UnTampon passé en paramètre.
On peut donner de la fonction système Imprimer(UneLigne) la description suivante :
procedure Imprimer (UneLigne);
debut
Copier (UneLigne, TamponEcrit); si non Actif (EcritureDisque)
fin Imprimer; |
Cet algorithme mérite plusieurs commentaires :
procedure TraiterInterruptionEcritureDisque; // signale
fin de(1)
debut si non Vide (TamponEcrit) et non Plein (TamponDisque) alors PreparerEcritureDisque; // relancer (1) finsi; si non Plein (TamponImprim) et non Actif (LectureDisque) alors PreparerLectureDisque; // relancer (2) finsi; si Attente
|
procedure TraiterInterruptionLectureDisque; // signale fin
de (2)
debut si non Actif (EcritureImprimante) alors LancerImpressionLigne; // relancer (3) finsi; si non Plein (TamponImprim) et non Vide (TamponDisque)
si non Vide (TamponEcrit) et non Actif (EcritureDisque)
fin TraiterInterruptionLectureDisque; |
Enfin, la procédure TraiterInterruptionEcritureImprimante ci-dessous, correspond au traitement d'une interruption en provenance du pilote de l'imprimante, lorsque le buffer TamponImprim a été vidé.
procedure TraiterInterruptionEcritureImprimante // fin de
(3)
debut si non Actif (LectureDisque) et non Vide (TamponDisque) alors PreparerLectureDisque; // relancer (2) finsi; si non Vide (TamponImprim)
fin TraiterInterruptionEcritureImprimante; |
Page préc.
Echanges de données entre processus |
Début de page |
Page suiv.
Les modèles de coopération entre processus |