@Pierre Marchand et Martin Dubois, 2002 461
IFT-17584
Semaine 09
Programmation système
@Pierre Marchand et Martin Dubois, 2002 462
Cette semaine
• Retour sur la semaine précédente• Interruptions matérielles• Bus PCI
Port d’entré / sortieAdressage mémoire
• Périphérique« Polling » vs « Interrupt »Port sériePort parallèle
• LinuxAppel systèmePilote de périphérique
• Présentation du TP3
@Pierre Marchand et Martin Dubois, 2002 463
La semaine dernière
• Premier examenQuestion 2.6Question 2.9
@Pierre Marchand et Martin Dubois, 2002 464
Interruptions matérielles
Contrôleur d’interruptions programmable 8259A
VccA0INTAIR7IR6IR5IR4IR3IR2IR1IR0INTSPCAS2
CSWRRDD7D6D5D4D3D2D1D0CAS0CAS1GND
PIC8259A
@Pierre Marchand et Martin Dubois, 2002 465
Interruptions matérielles
Registres internes du 8259A
DataBufferD0-D7
InServiceRegister
ISR
PriorityAnalysis
InterruptRequestRegister
IRR
Interrupt Mask RegisterIMR
IR0IR1IR2IR3IR4IR5IR6IR7
Control logic
INTA INT
Read/Writelogic
Cascadinglogic
R0WRA0
CS
CAS0CAS1CAS2
SP
@Pierre Marchand et Martin Dubois, 2002 466
Interruptions matérielles
Le 8259ALe 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 467
Interruptions matérielles
Le 8259ALe 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, 0x20out 0x20, al
@Pierre Marchand et Martin Dubois, 2002 468
Interruptions matérielles
Le 8259ALe 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 469
Interruptions
Vecteurs d’interruptionVecteur Mném. Description0 #DE Division par 01 #DB Déboguage2 NMI3 #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 invalide7 #NM Coprocesseur non disponible8 #DF Double faute9 Réservée10 #TS TSS invalide11 #NP Segment pas présent
@Pierre Marchand et Martin Dubois, 2002 470
Interruptions
Vecteurs d’interruptionVecteur Mném. Description12 #SS Défaut de segment de pile13 #GP Protection générale14 #PF Besoin de page15 Réservée16 #MF Erreur de virgule flottante17 #AC Vérification d’alignement18 #MC Vérification du processeur19-31 Réservées par Intel32-255 Interruptions masquables
@Pierre Marchand et Martin Dubois, 2002 471
Bus PCI
• Bus d’entrée/sortie. Système PCI
CPUContrôleurde cache et
pont PCIMémoire
BUS PCI
PCI PCI PCI
@Pierre Marchand et Martin Dubois, 2002 472
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ériePort parallèlePort clavier ou souris
@Pierre Marchand et Martin Dubois, 2002 473
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’adressageCarte vidéoCarte réseau esclave
@Pierre Marchand et Martin Dubois, 2002 474
Maître vs Esclave
• Toute les carte PCI sont des cartes esclaveUne carte est dite esclave quand le processeur accède ses registre ou sa mémoireExemple de carte PCI slave• Modem interne
• Certaines carte PCI peuvent aussi être MaîtreUne 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’ordinateurExemple 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 475
PériphériquesPour 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 476
Périphériques
Schéma général d ’une interface de périphérique
Caractère reçu
Caractère à transmettre
Registre d'état
Vecteur
Bus dedonnées
IRQBus
externeR/W
Configuration
Choix duregistre
@Pierre Marchand et Martin Dubois, 2002 477
Périphériques
Modes de fonctionnementMode 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 478
Périphériques
Mode InterruptionLorsque 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éceptionS’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 479
Périphériques
Mode interruptionTransmission
S’il s’agit d’une interruption de transmission, le CPU place unenouvelle 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 480
Interface série
• Interface série 16550/165552
Receive Data
Transmit Data
Baud rate LSB*
Interrupt Enable
Baud rate MSB*
Interrupt ID
FIFO Control
Line Control
Modem Control
Line Status
Modem Status
D0-D7
R/W
A0-A15
IRQ
TxD
RxD
Dˇc
odeu
rd'
adre
sses
RS
DTRRTSCTSDSRRSLDRI
@Pierre Marchand et Martin Dubois, 2002 481
Interface série
Interface série 16550/165552Cette 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 482
Interface parallèle
10
11
12
13
7 6 5 4 3 2 1 0
Data = Base + 0
Port parallèle
DO 0
DO 7
1
2
3
4
5
6
7
8
9
14
15
16
17
18
19
20
21
22
23
24
25
DI 0
DI 7
7 6 5 4 3 2 1 0
Control = Base + 2
7 6 5 4 3 2 1 0Status = Base +1
Strobe
AckIRQ
Busy
IRQ enable
DO 1
@Pierre Marchand et Martin Dubois, 2002 483
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 484
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 485
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 486
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 487
Linux
Programmes d’utilisateurs et applicationsProgrammes d’utilisateurs et applications
Gestion ProcessusGestion
ProcessusGestionMémoireGestionMémoire
Systèmesde FichiersSystèmesde Fichiers
Contrôle deDispositifs
Contrôle deDispositifs
RéseautageRéseautage
Codedépendantde l’archi-
tecture
Codedépendantde l’archi-
tecture
Gestion demémoire
Gestion demémoire
CPUCPU RAMRAM Disques& CD
Disques& CD
Console,Ports série
Cartes spéciales
Console,Ports série
Cartes spécialesInterfaces
RéseauInterfaces
Réseau
Dispositifsen modecaractère
Dispositifsen modecaractère
Types de SFTypes de SF Sous-systèmeréseau
Sous-systèmeréseau
PilotesIF
PilotesIF
Dispositifspar blocs
Dispositifspar blocs
Niveau ApplicationNiveau Noyau
ConcurrenceMultitâche
MémoireVirtuelle
Fichiers &Répertoires
TTYs &Accès auxDispositifs
Connectivité
Partiesdu Noyau
Capacitésimplémentées
SupportlogicielContrôle dumatériel
@Pierre Marchand et Martin Dubois, 2002 488
Linux
/
usrdev
include lib
etc
gtk
bin boot home lib var
gnu kde
@Pierre Marchand et Martin Dubois, 2002 489
Linux
Principales commandes du shellcd change directory, home si aucun paramètrels -l -al liste : répertoire
-l affiche aussi permissions-al affiche aussi fichiers invisibles
ps -aux -ealf processespwd répertoire courantcp copymv move : déplace ou renomme un fichierrm -r -i remove mkdir make directoryrmdir remove directorychmod u o g a ±r ±w ±x : chmod a+w toto.c
@Pierre Marchand et Martin Dubois, 2002 490
LinuxPrincipales commandes du shellfind Trouve : find / -name Toto.cgrep Trouve à l’intérieur de fichiers
grep toto *.hclear Efface l’écrandate Affiche la datefile Propriétés d’un fichierkill -term -kill Arrêter un processuscat Afficher le contenu d’un fichier texteless ↑↓moreman Afficher la documentation d’une commandepasswd Changer mot de passetar -xf Décompresser un fichier .tarwho Liste des utilisateurs
@Pierre Marchand et Martin Dubois, 2002 491
LinuxPrincipales commandes du shellpico Petit éditeurvi Éditeur par défautmail Pour envoyer un courriel.
@Pierre Marchand et Martin Dubois, 2002 492
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 493
Appels système
Exemples d’appels système :3 sys_read int fd, char *buf, int count4 sys_write int fd, char *buf, int count5 sys_open char *name, int flag, int mode6 sys_close int fd12 sys_chdir char *path20 sys_getpid24 sys_getuid37 sys_kill int pid, int sig39 sys_mkdir char *name, int mode40 sys_rmdir char *name48 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 494
Appels systèmePeu 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 495
Pilotes de périphériques
Classes de périphériquesDispositifs en mode caractèreDispositifs qui peuvent être traités comme des fichiers avec desappels système open, close, read et write. Exemples : la console, le port parallèle, etc.
Dispositifs en mode blocDispositifs 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 496
Pilotes de périphériques
Classes de périphériquesInterfaces réseauPeut ê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 497
Pilotes de périphériques
Mode utilisateurAvantagesOn 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 498
Pilotes de périphériques
Mode utilisateurInconvénientsN’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’actionsentre le client et le matérielSi jamais le pilote était paginé sur disque, le temps de réponsedeviendrait inacceptableLes 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 499
Pilotes de périphériques
ModulesSous 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 500
Pilotes de périphériques
ModulesModule 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 501
Pilotes de périphériques
Modulesroot# gcc -c hello.croot# insmod hello.oroot# rmmod helloroot#
@Pierre Marchand et Martin Dubois, 2002 502
Pilotes de périphériques
Différences entre un module et une applicationUn 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 503
TP3
Lien de communication entre deux ordinateur • Série• Synchrone• « Full duplex »• Lent, très lent
@Pierre Marchand et Martin Dubois, 2002 504
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 505
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 506
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é.