510 likes | 654 Views
Gestion des Périphériques. Année 2006 - 2007 (Transparents de F. Dromard). Principes généraux des E/S. Modes d’échanges Echanges programmés avec scrutation Echanges programmés sur interruption Echanges par accès direct mémoire. Principes généraux des E/S. Echanges par accès direct mémoire
E N D
Gestion des Périphériques Année 2006 - 2007 (Transparents de F. Dromard) Master ACSI
Principes généraux des E/S Modes d’échanges • Echanges programmés avec scrutation • Echanges programmés sur interruption • Echanges par accès direct mémoire Master ACSI
Principes généraux des E/S Echanges par accès direct mémoire • Transferts : périphérique -- mémoire sans intervention du processeur • Matériel supplémentaire ADM • Accès à la mémoire partagé entre processeur et ADM • Sychronisation par signaux Master ACSI
Principes généraux des E/S Echanges par accès direct mémoire • Cheminement des données pour une opération d’entrée IT demande demande ADM Mémoire Processeur Périphérique réponse réponse données données données Master ACSI
Principes généraux des E/S Echanges par accès direct mémoire • Une paire de signaux « demande-réponse » par périphérique utilisant l’ADM demande 2 réponse 2 IT demande ADM Mémoire Processeur Périph. 1 Périph. 2 demande1 réponse réponse 1 Master ACSI
Principes généraux des E/S Echanges par accès direct mémoire • Le processeur initialise le périph et l’ADM • Echanges directs périphérique - mémoire sous contrôle de l’ADM • Interruption en fin d’opération Master ACSI
Principes généraux des E/S Echanges par accès direct mémoire • Initialisation de l’ADM • Adresse de début zone mémoire • Nombre de transferts • Sens du transfert • A chaque transfert • Incrémentation de l ’adresse • Décrémentation du compte • Fin d’opération lorsque compte = 0 Master ACSI
Principes généraux des E/S Echanges par accès direct mémoire • Transfert mémoire - périphérique demande périph -> adm dem. bus adm -> proc rep. bus libre proc -> adm adresse adm lec mem adm -> mem donnée mem ecr e/s adm -> périph échange Master ACSI
Disques magnétiques Adaptateur hôte : PCI ATA processeur primaire contrôleur contrôleur adaptateur ATA D0 D1 mémoire pont hôte secondaire contrôleur contrôleur Bus PCI D0 D1 Master ACSI
Disques magnétiques Adaptateur hôte : PCI ATA Registres de base E/S 10h Adresse de base des registres Cmd-Block primaire 14h Adresse de base des registres Contrôle Accès en mode programmé Adresse de base des registres Cmd-Block 18h secondaire Adresse de base des registres Contrôle 1Ch 20h Master ACSI
Disques magnétiques Adaptateur hôte : PCI ATA Registres de base E/S Registres de maître de bus 20h Adresse de base des registres Maître de Bus 00h Registre de commande Registre d’état primaire 04h Adresse PRD Table Mode accès direct mémoire Registre de commande Registre d’état 08h secondaire 0Ch Adresse PRD Table Master ACSI
Disques magnétiques Adaptateur hôte : PCI ATA Table de descripteurs Physical Region Descriptor P R D P R D Une requête lecture ou écriture P R D P R D 32 15 0 Adresse physique de la région en mémoire EOT Nombre d’octets 1 : indique la fin de la table Master ACSI
Disques magnétiques Adaptateur hôte : PCI ATA ADM, déroulement des opérations • Créer la table de descripteurs, en mémoire • Initialiser l’adaptateur hôte (adr. table, direction) • Envoyer au disque de la commande avec ADM • Activer la fonction maître du Bus • Transférer sur demande du disque • Interruption de fin de transfert • Vider les tampons en mémoire, répercuter l’IT • Désactiver la fonction maître du Bus Master ACSI
Disques magnétiques Adaptateur hôte : PCI ATA Automatic Direct Memory Access (ADMA) • Utilise des structures de données en mémoire Command Parameter Bloc (CPB) ADMA Physical Region Descriptor (APRD) • Utilise une zone de registres de 256 mots • Exécute une suite de commandes Master ACSI
Disques magnétiques Adaptateur hôte : PCI ATA Automatic Direct Memory Access (ADMA) Proc. Adaptateur ATA primaire reg. base 256 mots mémoire contrôleur automate D0 Pont hôte Structures de données ADMA fifo Bus PCI Master ACSI
Disques magnétiques Adaptateur hôte : PCI ATA Automatic Direct Memory Access (ADMA) registre CPB APRD APRD APRD CPB next address CPB APRD APRD APRD CPB APRD APRD APRD Master ACSI
Disques magnétiques Adaptateur hôte : PCI ATA Command Parameter Bloc CPB longueur flags adresse du prochain CPB adresse du premier APRD initialisation des registres Master ACSI
Disques magnétiques Adaptateur hôte : PCI ATA ADMA Physical Region Descriptor APRD adresse en mémoire Longueur en mémoire flags adresse du prochain APRD Master ACSI
Pilotes de Périphériques Introduction • Programmes spécialisés • Gère des périphériques de même type • Gère ce qui est spécifique au périphérique • Ecriture d’un pilote • Compréhension du périphérique • Connaissance du système • Mécanismes système à utiliser • Règles à respecter Master ACSI
Pilotes de Périphériques Rappels sur le système Unix • Multi-utilisateurs • Multitâches • Mémoire virtuelle • Exécution des programmes • Mode utilisateur • Mode noyau (système) Master ACSI
services système Pilotes de Périphériques Rappels sur le système Unix • Appels systèmes exécution en mode utilisateur utilisateur1 utilisateur2 utilisateur3 exécution en mode noyau Master ACSI
Pilotes de Périphériques Rappels sur le système Unix • Gestion de la mémoire • Adresses virtuelles • Une partie réside en mémoire • Protection des zones mémoire • Le noyau réside en mémoire Master ACSI
Interface des appels système communications interprocessus sous-système de fichiers ordonnanceur Cache E/S Pilotes de périphériques gestion mémoire mémoire périphériques Pilotes de Périphériques Organisation du noyau Unix Appels systèmes utilisateurs noyau sous-système de contrôle des processus matériel Master ACSI
Pilotes de Périphériques Rappels sur le système Unix • Unix est bâti sur la notion de fichiers • Un fichier est une suite d ’octets • Les périphériques sont traités comme des fichiers • Accès avec : open, read, write, ioctl, close, ... Master ACSI
Pilotes de Périphériques Rappels sur le système Unix • Un périphérique est caractérisé par : • Nom (chemin d’accès) • Type : bloc ou caractère • Numéro majeur (major) • Numéro mineur (minor) Master ACSI
Pilotes de Périphériques Appels systèmes (pt de vue utilisateur) • open • Crée les structures de données nécessaires • Initialise le contrôleur • Renvoie le ‘file descriptor ’ fd • Erreur si fd < 0 fd = open(chemin,flags,mode) droits d’accès pour O_CREAT O_RDONLY O_RDWR O_CREAT . . . . Master ACSI
Pilotes de Périphériques Appels systèmes (pt de vue utilisateur) • read, write err = read (fd, buf, count) nombre d’octets adresse des données file descriptor Master ACSI
Pilotes de Périphériques Appels systèmes (pt de vue utilisateur) • ioctl • Envoi de commandes spécifiques à un périphérique • Récupération d’informations spécifiques à un périphérique err = ioctl (fd, cmd, arg) argument commande file descriptor Master ACSI
Pilotes de Périphériques Appels systèmes (pt de vue utilisateur) • close • Supprime la connexion logique avec le périphérique • Désalloue les structures de données err = close (fd) file descriptor Master ACSI
Pilotes de Périphériques Définition • Procédures • Structures de données • Seules procédures accédant directement au matériel • Spécifique du périphérique Master ACSI
gestion des fichiers périphériques Pilotes de Périphériques Organisation read(), write(), ioctl(), close() utilisateurs noyau gestion des entrées/sorties non spécifiques open read close intr gestion des entrées/sorties spécifiques Pilote de périphérique matériel Master ACSI
Pilotes de Périphériques Procédures du pilote • Correspondant aux appels utilisateur • xxxxopen • xxxxread • xxxxwrite • xxxxioctl • xxxxclose • Exécutées dans le contexte du processus appelant Master ACSI
Pilotes de Périphériques Procédures du pilote • Autres procédures • xxxxstrategy • xxxxinit • xxxxintr • Exécutées dans contexte inconnu Master ACSI
2 Pilotes de Périphériques Appels système <--> procédures du pilote • Table pour les périphériques blocs majeur @ open @ close @ strategy 0 @ dskopen @ dskclose @ dskstrategy 1 @ dsk1open @ dsk1close @ dsk1strategy 3 @ scsibopen @ scsibclose @ scsibstrategy 4 Master ACSI
2 Pilotes de Périphériques Appels système <--> procédures du pilote • Table pour les périphériques caractères @ ioctl @ write majeur @ open @ close @ read @ conioctl @ conwrite 0 @ conopen @ conclose @ conread @ sysioctl @ syswrite 1 @ sysopen @ sysclose @ sysread @ scsioctl @ scsiwrite @ scsiopen @ scsiclose @ scsiread 3 @ ttyioctl @ ttywrite @ ttyopen @ ttyclose @ ttyread 4 Master ACSI
2 Pilotes de Périphériques Appels système <--> procédures du pilote • Cas de linux : blk_devs , char_devs pointeur sur la structure file_operation pointeur sur le nom majeur 0 * name * file_operation 1 * name * file_operation 3 * name * file_operation 4 Master ACSI
Pilotes de Périphériques Appels système <--> procédures du pilote • Cas de linux : structure file_operation table char_devs pilote nom structure file_operation 3 read write Master ACSI
unité 0 unité 1 unité 2 Pilotes de Périphériques Exemples : majeur, mineur pilote bloc dsk majeur 0 pilote bloc A majeur 2 pilote caractère B majeur 0 contrôleurs ATA contrôleur SCSI Bus SCSI unité 0 : (0,0) unité 1 : (0,1) unité 2 : (0,2) Accès en mode bloc : (2,0) Accès mode caractère : (0,0) Master ACSI
Pilotes de Périphériques Fonction read du pilote Appel utilisateur read long x_read(struct file*,char*,Ulong,loff_t*) int read(fd,char*,Ulong) struct file adresses de descripteurs f_pos tampon pilote tampon utilisateur Master ACSI
Pilotes de Périphériques Appel utilisateur read : valeur de retour • Si valret = compte : requête terminée • Si valret > 0 et valret < compte : nbre octets transférés. Refaire une ou plusieurs requêtes. • Si valret = 0 : plus de données (end of file) • Si valret < 0 : erreur, code d’erreur dans « errno » Master ACSI
Pilotes de Périphériques Transferts : espace noyau espace utilisateur • Données échangées entre le pilote et l’utilisateur • Exécuté en mode noyau • Utilisation de procédures de transfert du noyau • copyin() • copyout() Master ACSI
Pilotes de Périphériques Transferts : espace noyau espace utilisateur • Cas de Linux • Transfert de blocs • Transfert un élément de 8 bits ou 16 bits ou 32 bits copy_from_user(adr_dest,adr_orig,longueur) copy_to_user(adr_dest,adr_orig,longueur) get_user(nom_variable,adr_orig) put_user(valeur, adr_dest) Master ACSI
Pilotes de Périphériques Vérification des adresses passées en paramètre d’un appel système (linux) • 1 - L’adresse ne doit pas appartenir au noyau • 2 - L’adresse ne doit pas appartenir à d’autres utilisateurs • Espace d ’adressage d’un processus : • De 0 à PAGE_OFFSET - 1, accessible en mode utilisateur et en mode noyau • De PAGE_OFFSET - 1 à 0xFFFF FFFF, accessible en en mode noyau seulement Master ACSI
Pilotes de Périphériques Vérification des adresses passées en paramètre d’un appel système (linux) • Vérification 1 faite lors des appels système read, write mais pas pour ioctl • Procédures de transfert font la vérification 1 • Vérification 2 faite lors de l’utilisation de l’adresse Master ACSI
Pilotes de Périphériques Appel utilisateur ioctl : paramètre cmd • La valeur de cmd doit être unique dans le système • cmd est de type int, représenté sur 32 bits err = ioctl (fd, cmd, arg) argument commande file descriptor Master ACSI
Pilotes de Périphériques Appel utilisateur ioctl : paramètre cmd • type : doit être différent pour chaque pilote • num : numéro d’ordre de la commande • taille : quantité de données échangées • sens : sens des échanges de données, par rapport au programme utilisateur 2b 14b 8b 8b cmd sens taille num type Master ACSI
Pilotes de Périphériques Appel utilisateur ioctl : paramètre cmd • Utilisation de macros pour obtenir cmd • _IO(type,num) • _IOW(type,num,taille) • _IOR(type,num,taille) • _IOWR(type,num,taille) Master ACSI
Pilotes de Périphériques Appel utilisateur ioctl : paramètre arg • de type : unsigned long • Absent si rien à échanger • Toute liberté sur la signification et l’utilisation • Donnée fournie au pilote • Adresse de données fournies au pilote • Adresse à laquelle le pilote renvoie des données • Pointeur sur une structure Master ACSI
Pilotes de Périphériques Appel utilisateur ioctl : paramètre arg • Exemple 1 arg nombre d’octets Zone de données Master ACSI
Pilotes de Périphériques Appel utilisateur ioctl : paramètre arg • Exemple 2 arg nombre d’octets adresse zone Zone de données Master ACSI