Gestion des Périphériques Année 2006 - 2007 (Transparents de F. Dromard) PERI 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 PERI 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 PERI 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 Mémoire Processeur demande ADM demande Périphérique réponse réponse données données données PERI 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 Mémoire Processeur demande ADM Périph. 1 Périph. 2 demande1 réponse réponse 1 PERI 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 PERI 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 PERI 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 PERI 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 PERI Master ACSI
Accès en mode programmé 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é 18h Adresse de base des registres Cmd-Block secondaire 1Ch Adresse de base des registres Contrôle 20h PERI Master ACSI
Mode accès direct mémoire 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 d’état Registre de commande primaire 04h Adresse PRD Table Mode accès direct mémoire 08h Registre d’état Registre de commande secondaire 0Ch Adresse PRD Table PERI 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 Adresse physique de la région en mémoire EOT Nombre d’octets 1 : indique la fin de la table PERI 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 PERI 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 PERI 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 Structures de données ADMA Pont hôte D0 fifo Bus PCI PERI 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 PERI 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 PERI Master ACSI
adresse du prochain APRD 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 PERI 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 PERI 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) PERI Master ACSI
Pilotes de Périphériques Rappels sur le système Unix Appels systèmes exécution en mode utilisateur utilisateur1 utilisateur2 utilisateur3 services système exécution en mode noyau PERI 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 PERI Master ACSI
Pilotes de Périphériques Organisation du noyau Unix Appels systèmes utilisateurs Interface des appels système noyau sous-système de fichiers sous-système de contrôle des processus communications interprocessus Cache E/S ordonnanceur gestion mémoire Pilotes de périphériques périphériques mémoire matériel PERI 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, ... PERI 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) PERI 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 . . . . PERI 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 PERI 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 PERI 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 PERI 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 PERI Master ACSI
Pilotes de Périphériques Organisation read(), write(), ioctl(), close() utilisateurs noyau gestion des fichiers gestion des entrées/sorties non spécifiques open read close intr gestion des entrées/sorties spécifiques Pilote de périphérique périphériques matériel PERI 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 PERI Master ACSI
Pilotes de Périphériques Procédures du pilote Autres procédures xxxxstrategy xxxxinit xxxxintr Exécutées dans contexte inconnu PERI Master ACSI
Pilotes de Périphériques Appels système <--> procédures du pilote Table pour les périphériques blocs majeur @ open @ close @ strategy @ dskopen @ dskclose @ dskstrategy 1 @ dsk1open @ dsk1close @ dsk1strategy 2 3 @ scsibopen @ scsibclose @ scsibstrategy 4 PERI Master ACSI
Pilotes de Périphériques Appels système <--> procédures du pilote Table pour les périphériques caractères majeur @ open @ close @ read @ write @ ioctl @ conopen @ conclose @ conread @ conwrite @ conioctl 1 @ sysopen @ sysclose @ sysread @ syswrite @ sysioctl 2 @ scsiopen @ scsiclose @ scsiread @ scsiwrite @ scsioctl 3 @ ttyopen @ ttyclose @ ttyread @ ttywrite @ ttyioctl 4 PERI Master ACSI
Pilotes de Périphériques Appels système <--> procédures du pilote Cas de linux : blk_devs , char_devs pointeur sur le nom pointeur sur la structure file_operation majeur * name * file_operation 1 * name * file_operation 2 3 * name * file_operation 4 PERI 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 PERI Master ACSI
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 unité 1 unité 2 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) PERI 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 PERI 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 » PERI 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() PERI 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) PERI 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 PERI 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 PERI 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 PERI 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 PERI 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) PERI 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 PERI Master ACSI
Pilotes de Périphériques Appel utilisateur ioctl : paramètre arg Exemple 1 arg nombre d’octets Zone de données PERI 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 PERI Master ACSI