Programmation système IFT-17584 Semaine 09 Programmation système @Pierre Marchand et Martin Dubois, 2002
Cette semaine Retour sur la semaine précédente Interruptions matérielles Bus PCI Port d’entré / sortie Adressage mémoire Périphérique « Polling » vs « Interrupt » Port série Port parallèle Linux Appel système Pilote de périphérique Présentation du TP3 @Pierre Marchand et Martin Dubois, 2002
La semaine dernière Premier examen Question 2.6 Question 2.9 @Pierre Marchand et Martin Dubois, 2002
Interruptions matérielles Contrôleur d’interruptions programmable 8259A Vcc A0 INTA IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 INT SP CAS2 CS WR RD D7 D6 D5 D4 D3 D2 D1 D0 CAS0 CAS1 GND PIC 8259A @Pierre Marchand et Martin Dubois, 2002
Interruptions matérielles Registres internes du 8259A INTA INT Data Buffer D0-D7 Control logic R0 WR A0 CS Read/Write logic In Service Register ISR Priority Analysis IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 Interrupt Request Register IRR CAS0 CAS1 CAS2 SP Cascading logic Interrupt Mask Register IMR @Pierre Marchand et Martin Dubois, 2002
Interruptions matérielles Le 8259A Le 8259A peut accepter les interruptions de 8 sources externes, et on peut gérer jusqu’à 64 sources différentes en cascadant plusieurs 8259A. Il gère la priorité entre les interruptions simultanées, interrompt le processeur et lui passe un code pour identifier la source d’interruption. Une source d’interruption est connectée à chacune des 8 entrées IR0 à IR7. Selon sa priorité, et s’il n’y a pas d’autre interruption en cours, le PIC décide s’il peut transmettre l’interruption au CPU. Si oui, il affirme la ligne INT, qui est connectée à l’entrée INTR du CPU. Si le CPU est prêt à accepter l’interruption, il répond au PIC via la ligne INTA. @Pierre Marchand et Martin Dubois, 2002
Interruptions matérielles Le 8259A Le PIC répond à son tour en envoyant le numéro d’interruption sur les lignes D0 à D7. Ce numéro est un index dans la table des vecteurs d’interruption. Le CPU est maintenant prêt à appeler le sous-programme de traitement d’interruption approprié. Quand le sous-programme de traitement d’interruption a terminé son exécution, il en avertit le PIC pour qu ’il puisse permettre à d’autres interruptions d ’atteindre le CPU : mov al, 0x20 out 0x20, al @Pierre Marchand et Martin Dubois, 2002
Interruptions matérielles Le 8259A Le PIC comporte deux sortes de commandes : les commandes d’initialisation (ICW) et les commandes opérationnelles (OCW). Ces commandes sont appliquées à deux registres internes, situés respectivement aux adresses 0x20 et 0x21 dans l’espace mémoire d’entrée/ sortie. @Pierre Marchand et Martin Dubois, 2002
Interruptions Vecteurs d’interruption Vecteur Mném. Description 0 #DE Division par 0 1 #DB Déboguage 2 NMI 3 #BP Point d’arrêt (break point) 4 #OF Dépassement de capacité 5 #BR Dépassement d’une limite (instruc. BOUND) 6 #UD Opcode invalide 7 #NM Coprocesseur non disponible 8 #DF Double faute 9 Réservée 10 #TS TSS invalide 11 #NP Segment pas présent @Pierre Marchand et Martin Dubois, 2002
Interruptions Vecteurs d’interruption Vecteur Mném. Description 12 #SS Défaut de segment de pile 13 #GP Protection générale 14 #PF Besoin de page 15 Réservée 16 #MF Erreur de virgule flottante 17 #AC Vérification d’alignement 18 #MC Vérification du processeur 19-31 Réservées par Intel 32-255 Interruptions masquables @Pierre Marchand et Martin Dubois, 2002
Bus PCI Bus d’entrée/sortie. Système PCI CPU BUS PCI PCI PCI PCI Contrôleur de cache et pont PCI CPU Mémoire BUS PCI PCI PCI PCI @Pierre Marchand et Martin Dubois, 2002
Port d’entré sortie Zone d’adressage complètement séparer des adresses mémoires Adresse de 0x0000 à 0xFFFF (en théorie) Instruction spéciale du processeur pour accéder à cette zone d’adressage Invention Intel pour facilité le décodage d’adresse Normalement utilisé pour les périphérique ne comportant que peu de registres Port série Port parallèle Port clavier ou souris @Pierre Marchand et Martin Dubois, 2002
Accès mémoires Même zone d’adressage que la mémoire Simplifie le travail du programmeur Complique celle de l’ingénieur électronique Généralement utilisé pour les périphériques nécessitant une grande espace d’adressage Carte vidéo Carte réseau esclave @Pierre Marchand et Martin Dubois, 2002
Maître vs Esclave Toute les carte PCI sont des cartes esclave Une carte est dite esclave quand le processeur accède ses registre ou sa mémoire Exemple de carte PCI slave Modem interne Certaines carte PCI peuvent aussi être Maître Une carte est dite maître lorsqu’elle prends le contrôle du bus et accède elle même la mémoire centrale de l’ordinateur Exemple de carte PCI maître Carte graphique accélératrice Carte réseau avancé Carte de son Carte d’acquisition d’image Contrôleur de disques @Pierre Marchand et Martin Dubois, 2002
Périphériques Pour accéder à un périphérique, il faut savoir : • Comment utiliser ses registres de contrôle, de données et d’état • Ce qui cause la génération d’une interruption • Comment il transfère ses données • S’il utilise de la mémoire dédiée • S’il peut se configurer automatiquement S’il peut, et dans quel condition il devient maître du BUS @Pierre Marchand et Martin Dubois, 2002
Périphériques Schéma général d ’une interface de périphérique Bus de Caractère reçu données IRQ Caractère à transmettre Bus R/W Registre d'état externe Choix du Vecteur registre Configuration @Pierre Marchand et Martin Dubois, 2002
Périphériques Modes de fonctionnement Mode Scrutation (polling) Pour l’envoi d’une donnée, le CPU vérifie dans le registre d’état si le périphérique est disponible. Si oui, il place la donnée dans le registre de transmission du périphérique. Sinon, il attend que le périphérique soit prêt. Pour la réception d’une donnée, le CPU interroge le registre d’état pour savoir s’il a une donnée disponible. Si oui, il la lit dans le registre de réception. Si non, il attend et interroge le registre d’état de nouveau un peu plus tard. @Pierre Marchand et Martin Dubois, 2002
Périphériques Mode Interruption Lorsque le périphérique reçoit une donnée, il active IRQ pour avertir le CPU. Le CPU interroge alors le registre d’état du périphérique pour savoir si c’est lui qui l’a interrompu et s’il s’agit d’une interruption de réception ou de transmission. Réception S’il s’agit d’une interruption de réception, le CPU lit la donnée dans le registre de réception du périphérique. @Pierre Marchand et Martin Dubois, 2002
Périphériques Mode interruption Transmission S’il s’agit d’une interruption de transmission, le CPU place une nouvelle donnée à transmettre dans le registre de transmis-sion du périphérique. S’il n ’a plus de données à transmettre, il doit désactiver l’interruption en transmission, sinon il sera interrompu immédiatement par la même interruption. @Pierre Marchand et Martin Dubois, 2002
Interface série Interface série 16550/165552 @Pierre Marchand et Martin Dubois, 2002
Interface série Interface série 16550/165552 Cette interface, appelée UART (Universal Asynchronous Receiver Transmitter), assure la communication série avec l’extérieur via les ports COM1 à COM4 : modem, imprimante série, etc. @Pierre Marchand et Martin Dubois, 2002
Interface parallèle Port parallèle Control = Base + 2 Data = Base + 0 IRQ enable Port parallèle 7 6 5 4 3 2 1 0 Control = Base + 2 7 6 5 4 3 2 1 0 1 Strobe Data = Base + 0 14 DO 0 2 15 DO 1 3 16 4 17 5 18 DI 0 6 19 7 20 8 21 9 22 IRQ Ack DO 7 10 23 Busy 11 24 12 25 DI 7 13 Status = Base +1 7 6 5 4 3 2 1 0 @Pierre Marchand et Martin Dubois, 2002
Interface parallèle Les registres Data Out Base + 0 Écriture Status In Base + 1 Lecture Contrôl Out Base + 2 Écriture Data Feedback Base + 0 Lecture Control Feedback Base + 2 Lecture @Pierre Marchand et Martin Dubois, 2002
Interface parallèle Registres « Data Out » Les valeurs placé dans ce registre se retrouve directement sur les pins 2 à 9 du connecteur. Un 1 dans le registre correspond à une tension de 5 Volt par rapport à la masse sur la pin correspondante Un 0 dans le registre correspond à une tension de 0 Volt par rapport à la masse sur la pin correspondante @Pierre Marchand et Martin Dubois, 2002
Interface parallèle Registre « Status In » Bit 0 Bit 1 Bit 2 Bit 3 Pin 15 « Error » Bit 4 Pin 13 « Select In » Bit 5 Pin 12 « Paper End » Bit 6 Pin 10 (inversé) « Acknowledge » Bit 7 Pin 11 (inversé) « Busy » @Pierre Marchand et Martin Dubois, 2002
Interface parallèle Registre « Control Out » Bit 0 Pin 1 « Strobe » Bit 1 Pin 14 « Auto Feed » Bit 2 Pin 16 (inversé) « Init » Bit 3 Pin 17 « Select » Bit 4 « Interrupt enable » Bit 5 Bit 6 Bit 7 @Pierre Marchand et Martin Dubois, 2002
Programmes d’utilisateurs et applications Linux Programmes d’utilisateurs et applications Niveau Application Niveau Noyau Gestion Processus Gestion Mémoire Systèmes de Fichiers Contrôle de Dispositifs Réseautage Parties du Noyau Concurrence Multitâche TTYs & Accès aux Dispositifs Mémoire Virtuelle Fichiers & Répertoires Capacités implémentées Connectivité Code dépendant de l’archi- tecture Gestion de mémoire Types de SF Dispositifs en mode caractère Sous-système réseau Support logiciel Contrôle du matériel Dispositifs par blocs Pilotes IF CPU RAM Disques & CD Console, Ports série Cartes spéciales Interfaces Réseau @Pierre Marchand et Martin Dubois, 2002
Linux / bin boot dev etc home lib usr var include lib gtk gnu kde @Pierre Marchand et Martin Dubois, 2002
Linux Principales commandes du shell cd change directory, home si aucun paramètre ls -l -al liste : répertoire -l affiche aussi permissions -al affiche aussi fichiers invisibles ps -aux -ealf processes pwd répertoire courant cp copy mv move : déplace ou renomme un fichier rm -r -i remove mkdir make directory rmdir remove directory chmod u o g a ±r ±w ±x : chmod a+w toto.c @Pierre Marchand et Martin Dubois, 2002
Linux Principales commandes du shell find Trouve : find / -name Toto.c grep Trouve à l’intérieur de fichiers grep toto *.h clear Efface l’écran date Affiche la date file Propriétés d’un fichier kill -term -kill Arrêter un processus cat Afficher le contenu d’un fichier texte less more man Afficher la documentation d’une commande passwd Changer mot de passe tar -xf Décompresser un fichier .tar who Liste des utilisateurs @Pierre Marchand et Martin Dubois, 2002
Linux Principales commandes du shell pico Petit éditeur vi Éditeur par défaut mail Pour envoyer un courriel. @Pierre Marchand et Martin Dubois, 2002
Appels système Sous Linux, les appels système s’effectuent au moyen de l’interruption logicielle int 0x80. Sous DOS, ils s’effectuent au moyen des interruptions 0x21, 0x25, 0x26 et autres, tandis que sous Windows, ils s’effectuent au moyen de l’interruption logicielle int 0x2E. Ces appels système couvrent toute une gamme de fonctions offertes par le système d’exploitation. Sous Linux, eax contient le numéro de la fonction désirée, et les paramètres sont passés dans ebx, ecx, edx, esi, edi dans l’ordre. @Pierre Marchand et Martin Dubois, 2002
Exemples d’appels système : 3 sys_read int fd, char *buf, int count 4 sys_write int fd, char *buf, int count 5 sys_open char *name, int flag, int mode 6 sys_close int fd 12 sys_chdir char *path 20 sys_getpid 24 sys_getuid 37 sys_kill int pid, int sig 39 sys_mkdir char *name, int mode 40 sys_rmdir char *name 48 sys_signal int numero, void(*handler)(int) Une liste complète est disponible sur le site du cours à la page Documentation. @Pierre Marchand et Martin Dubois, 2002
Appels système Peu importe le système d’exploitation, un appel système implique un passage du mode d’exécution « application » (03) vers le mode d’exécution « privilégié » (00) La sécurité du « Noyau » dépends entièrement de la technique utilisé pour effectuer ce passage. Le déclenchement d’un interruption logiciel provoque le changement de niveau d’exécution et provoque l’exécution d’une routine de traitement de l’interruption résidant dans le « noyau ». Cette routine et responsable de vérifier les droits de l’utilisateur avant de poursuivre le traitement demandé. @Pierre Marchand et Martin Dubois, 2002
Pilotes de périphériques Classes de périphériques Dispositifs en mode caractère Dispositifs qui peuvent être traités comme des fichiers avec des appels système open, close, read et write. Exemples : la console, le port parallèle, etc. Dispositifs en mode bloc Dispositifs tels que des disques, qui peuvent héberger un système de fichiers. Dans la plupart des systèmes Unix, on ne peut transférer qu’un nombre d’octets multiple d’un bloc. La taille d’un bloc est 1 Ko ou 4 Ko dépendant du système. Sous Linux, on peut lire ou écrire dans un dispositif en mode bloc comme s’il s’agissait d’un dispositif en mode caractère. La différence réside seulement dans la façon dont les données sont gérées par le noyau. @Pierre Marchand et Martin Dubois, 2002
Pilotes de périphériques Classes de périphériques Interfaces réseau Peut être matérielle ou logicielle. Une interface réseau est responsable de transmettre et de recevoir des paquets de données, et est contrôlée par le sous-système réseau du noyau. Elle effectue des transactions sans connaître le rôle de chaque paquet dans les échanges effectués. Pour elle, il n’y a pas de différence entre un paquet de données Telnet ou un paquet ftp. @Pierre Marchand et Martin Dubois, 2002
Pilotes de périphériques Mode utilisateur Avantages On dispose de toutes les librairies C. On peut utiliser un débogueur conventionnel. En cas de panne, on peut simplement tuer le processus. La mémoire utilisateur peut être paginée, de sorte qu’un programme peu utilisé voit son espace mémoire attribué à d’autres processus. @Pierre Marchand et Martin Dubois, 2002
Pilotes de périphériques Mode utilisateur Inconvénients N’a pas accès aux interruptions. L’accès direct à la mémoire nécessite privilège noyau. N’a pas accès aux ports d’entrée sortie. Le temps de réponse est plus lent à cause des changements de contexte nécessités par le transfert d’informations ou d’actions entre le client et le matériel Si jamais le pilote était paginé sur disque, le temps de réponse deviendrait inacceptable Les dispositifs les plus importants ne peuvent pas être traités en mode utilisateur, en particulier les interfaces réseau et les dispositifs par blocs. @Pierre Marchand et Martin Dubois, 2002
Pilotes de périphériques Modules Sous Linux, un module est une extension du noyau. Les pilotes de périphériques peuvent être des modules. Chaque module est du code objet qui peut être lié dynamiquement au noyau pendant son fonctionnement avec la commande insmod et être délié avec la commande rmmod. Un module fonctionne en mode privilégié. Seul un utilisateur root peut installer un module. Habituellement chaque module n’implémente qu’un pilote. On peut donc les classifier comme modules par caractères, modules par blocs, etc. @Pierre Marchand et Martin Dubois, 2002
Pilotes de périphériques Modules Module hello.c #define MODULE #include <linux/module.h> int init_module(void) { printk(“<1>Bonjour le monde!\n”); return 0; } void cleanup_module(void) printk(“<1>Adieu, monde cruel!\n”); @Pierre Marchand et Martin Dubois, 2002
Pilotes de périphériques Modules root# gcc -c hello.c root# insmod hello.o root# rmmod hello root# @Pierre Marchand et Martin Dubois, 2002
Pilotes de périphériques Différences entre un module et une application Un module fonctionne dans l’espace mémoire du noyau tandis qu’une application fonctionne dans l’espace mémoire utilisateur (paginé). Un module a accès aux interruptions. Un module a accès aux entrées/sorties. @Pierre Marchand et Martin Dubois, 2002
TP3 Lien de communication entre deux ordinateur Série Synchrone « Full duplex » Lent, très lent @Pierre Marchand et Martin Dubois, 2002
TP3 La recette pour charger votre pilote de périphérique cd $HOME chmod 711 $HOME mkdir ift-17584 chmod 711 ift-17584 Placer votre module tp3.o dans ~/ift-17584 chmod 611 ift-17584/tp3.o sudo insmod $HOME/ift-17584/tp3.o @Pierre Marchand et Martin Dubois, 2002
TP3 Deux moyen de visualiser le journal système sudo tail –f /var/log/syslog sudo tail –n 100 /var/log/syslog @Pierre Marchand et Martin Dubois, 2002
TP3 Pour retirer votre module du noyau sudo rmmod tp3 Pour éviter au utilisateur suivant des problèmes causés par un noyau corrompu, nous vous demandons de toujours redémarrer l’ordinateur après avoir utilisé ces recettes. Aussi, les commande effectué en utilisant sudo sont noter dans un journal de sécurité. @Pierre Marchand et Martin Dubois, 2002