Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
461
Programmation système
IFT-17584 Semaine 07 Programmation système @Pierre Marchand, 2001
462
Plan de la présentation
Présentation du corrigé du travail pratique 1 Retour sur la semaine précédente Présentation du travail pratique 2 Codage des instructions Interruptions Exceptions Matière pour le premier examen @Pierre Marchand, 2001
463
Présentation du corrigé du TP 1
@Pierre Marchand, 2001
464
La semaine dernière Programmation SIMD Extension SIMD 2
Mode de fonctionnement du processeur Mémoire virtuelle Segmentation Pagination @Pierre Marchand, 2001
465
Présentation du TP 2 @Pierre Marchand, 2001
466
Format des instructions
Mod R/M SIB = Scale-Index-Base Préfixes 0 à 4 Opcode 1 ou 2 Mode d’adressage SIB 0 ou 1 Déplacement 0, 1, 2 ou 4 Immédiat 0, 1, 2 ou 4 7 6 5 3 2 7 6 5 3 2 Mod Reg/ Opcode R/M Scale Index Base @Pierre Marchand, 2001
467
Préfixes Lock and repeat F0 = préfixe LOCK F2 = préfixe REPNE/REPNZ
F3 = préfixe REPE/REPZ 0F = préfixe des nouvelles instructions (depuis le 386) telles que rdtsc, cmpxchg, cpuid, lmsw, lgdt, etc. @Pierre Marchand, 2001
468
Préfixes Préfixes Segment override 2E = préfixe CS segment override
36 = préfixe SS segment override 3E = préfixe DS segment override 64 = préfixe FS segment override 65 = préfixe GS segment override Normalement, une adresse mémoire a un segment par défaut : [BX], [DI], [SI] ont comme défaut DS [BP], [SP] ont comme défaut SS [IP] a comme défaut CS @Pierre Marchand, 2001
469
Préfixes Préfixes 67 = préfixe Address-size override
66 = préfixe Operand-size override 67 = préfixe Address-size override En mode protégé, le bit D du descripteur d’un segment exécutable détermine l’attribut par défaut pour la taille de l’adresse et la taille des opérandes : 0 = 16 bits, 1 = 32 bits. Les préfixes 66 et 67 permettent de déroger à cette valeur par défaut pour l’instruction qui les suit. @Pierre Marchand, 2001
470
Codage des instructions
Opcode 1 ou 2 octets + 3 bits dans le champ Mod R/M ModR/M et SIB Le champ Mod se combine avec le champ R/M pour former 32 combinaisons possibles : 8 registres et 24 modes d’adressage. Le champ Reg/Opcode indique soit un numéro de registre soit trois bits supplémentaires de l’opcode. En mode 32 bits, on a pour le champ Reg : eax = 000 ecx = 001 edx = 010 ebx = 011 esp = 100 ebp = 101 esi = 110 edi = 111 @Pierre Marchand, 2001
471
Codage des instructions
R/M Le champ R/M peut, soit spécifier un registre comme opérande, soit être combiné avec le champ Mod pour encoder un mode d’adressage. Pour coder une instruction, on utilise les tables de l’appendice B du volume 2 d’Intel. @Pierre Marchand, 2001
472
Codage des instructions
Exemple mov eax, edx Selon la page B11 de l’appendice, il y a deux possibilités : Mov - Move Data register1 to register2 : w : 11 reg1 reg2 32 bits : w = 1, reg1 = edx, reg2 = eax -> Ce qui donne 89 D0. On a aussi : register2 to register 1: w : 11 reg1 reg2 32 bits ; w = 1, reg1 = eax, reg2 = edx -> Ce qui donne 8B C2. @Pierre Marchand, 2001
473
Codage des instructions
Exemple mov eax, edx -> 89 D0 opcode = 89 (MOV r/m32, r32, p ) ModR/M = D0 (Mod 11: R/M = Reg, Reg = EDX, R/M = EAX, p. 2-5) 7 6 5 3 2 1 1 010 000 Mod Reg EDX R/M EAX @Pierre Marchand, 2001
474
Codage des instructions
Exemple mov edx, eax -> 89 C2 opcode = 89 (MOV r/m32, r32, p ) ModR/M = C2 (Mod = 11: R/M = Reg, Reg = EAX, R/M = EDX, p. 2-6) 7 6 5 3 2 1 1 000 010 Mod Reg EAX R/M EDX @Pierre Marchand, 2001
475
Codage des instructions
Exemple mov al, dl Selon la page B11 de l’appendice, il y a deux possibilités : Mov - Move Data register1 to register2 : w : 11 reg1 reg2 8 bits : w = 0, reg1 = dl, reg2 = al -> Ce qui donne 88 D0. On a aussi : register2 to register 1: w : 11 reg1 reg2 8 bits ; w = 0, reg1 = al, reg2 = dl -> Ce qui donne 8A C2. @Pierre Marchand, 2001
476
Codage des instructions
Exemple mov ax, dx Comme nous sommes en mode 32 bits, il faut un préfixe de dérogation de taille d’opérande, 66h. Ensuite, selon la page B11 de l’appendice, il y a deux possibilités : Mov - Move Data register1 to register2 : w : 11 reg1 reg2 16 bits : w = 1, reg1 = dx, reg2 = ax -> Ce qui donne D0. On a aussi : register2 to register 1: w : 11 reg1 reg2 16 bits ; w = 1, reg1 = ax, reg2 = dx -> Ce qui donne 66 8B C2. @Pierre Marchand, 2001
477
Codage des instructions
Exemple mov eax, 0 -> B opcode = B8 (MOV r32, imm32, p ou B11) déplacement = xor eax, eax -> 31 C0 opcode = 31 (XOR r/m32, r32, p ou B18) ModR/M = C0 (Mod = 11: R/M = Reg, Reg = EAX, R/M = EAX) 7 6 5 3 2 1 1 000 000 Mod Reg EAX R/M EAX @Pierre Marchand, 2001
478
Codage des instructions
Exemple mov eax, [edi] -> 8B 07 opcode 8B (MOV r32, r/m32, p ). ModR/M = 07 (Mod = 00 : R/M = [Reg] ou [...][...], Reg = EAX, R/M = [EDI], p. 2-6) mov [edi], eax -> 89 07 opcode 89 (MOV r/m32, r32, p ) ModR/M = 07 comme ci-haut. 7 6 5 3 2 00 000 111 Mod Reg EAX R/M [EDI] @Pierre Marchand, 2001
479
Codage des instructions
Exemple mov ax, [edi] -> 66 8B 07 mov al, [edi] -> 8A 07 @Pierre Marchand, 2001
480
Codage des instructions
Exemple mov eax, [edx+ecx*4] -> 8B 04 8A opcode = 8B (MOV r32, r/m32, p ) ModR/M = 04 (Mod = 00: R/M = [Reg] ou [...][...], Reg = EAX, R/M = [...][...], p. 2-6) SIB = 8A (Scale = 4, Index = ECX, Base = EDX, p. 2-6) 7 6 5 3 2 00 000 100 Mod Reg EAX R/M [...][…] 7 6 5 3 2 10 001 010 Scale 4 Index ECX Base EDX @Pierre Marchand, 2001
481
Codage des instructions
Exemple add al, [esi+ebx*4+8] -> E 08 opcode = 02 (ADD r8, r/m8, p. 3-21) ModR/M = 44 (Mod=01:[…]+d8, Reg = AL, R/M = [...][...] , p. 2-6) SIB = 9E (Scale = 4, Index = ECX, Base = esi) déplacement = 08 7 6 5 3 2 7 6 5 3 2 01 000 100 10 011 110 Mod Reg AL R/M [...][…] Scale 4 Index EBX Base ESI @Pierre Marchand, 2001
482
Codage des instructions
Exemple mov eax, [edx+ecx*4] -> 8B 04 8A opcode = 8B (MOV r32,r/m32, p ) ModR/M = 04 (Mod = 00: R/M = [Reg] ou [...][...], Reg = EAX, R/M = [...][...], p. 2-6) SIB = 8A (Scale = 4, Index = ECX, Base = EDX, p. 2-6) 7 6 5 3 2 00 000 100 Mod Reg EAX R/M [...][…] 7 6 5 3 2 10 001 010 Scale 4 Index ECX Base EDX @Pierre Marchand, 2001
483
Codage des instructions
Exemple add al, [esi+ebx*4+8] -> E 08 opcode = 02 (ADD r8, r/m8, p ou B6) ModR/M = 44 (Mod=01:[]+d8, Reg = AL, R/M = [...][...] , p. 2-5) SIB = 9E (Scale = 4, Index = ECX, Base = esi) déplacement = 08 7 6 5 3 2 7 6 5 3 2 01 000 100 10 011 110 Mod Reg AL R/M [...][…] Scale 4 Index EBX Base ESI @Pierre Marchand, 2001
484
Codage des instructions
Exemple add [esi+ebx*4+0x ],0x opcode = 81 (ADD r/m32, imm32, p ou B6) ModR/M = 84 (Mod = 10: disp32[...][...]) SIB = 9E (Scale = 4, Base = ESI, Index = EBX) déplacement = 0x imm = 0x -> E 7 6 5 3 2 7 6 5 3 2 10 000 100 10 011 110 Mod Reg AL R/M [...][…] Scale 4 Index EBX Base ESI @Pierre Marchand, 2001
485
Codage des instructions
Exemple rep movsb préfixe = F2 opcode = A4 jmp etiquette opcode = EB + offset signé de 8 bits par rapport à l’instruction suivante (EIP) opcode = E9 + offset signé de 32 bits par rapport à EIP @Pierre Marchand, 2001
486
Codage des instructions
Virgule flottante Les instructions de virgule flottante commencent toutes par et sont toujours d’au moins 2 octets. Il y a 5 formats différents (Intel vol. 2, p. B-46). @Pierre Marchand, 2001
487
Décodage des instructions
• Éliminer les préfixes • Est-ce l'opcode commence par 11011? Si oui, c'est de la virgule flottante. • Décoder opcode • Décoder ModR/M. Si c’est 100, il y aura un SIB. • Décoder le SIB s'il y a lieu. • Lire offset, puis opérande immédiat s'il y a lieu. @Pierre Marchand, 2001
488
Interruptions et exceptions
Sortes d’interruptions Il y a deux types d’interruption. Les interruptions logicielles et les interruptions matérielles. Les interruptions matérielles sont provoquées par des signaux électriques appliqués sur des broches du processeur destinées à cet effet, par exemple IRQ ou RESET. Les interruptions logicielles peuvent être le résultat d’instructions spécifiques telles que int ou into, ou le résultat d’erreurs décelées par le processeur, par exemple la division par 0, une lecture dans une adresse où il n’y a pas de mémoire, une exception de virgule flottante. @Pierre Marchand, 2001
489
Interruptions et exceptions
Sortes d’interruptions Le mot interruption est un terme qui définit une variété de transferts de contrôle dans le Pentium. Les items spécifiques impliquées par ce terme sont les véritables interruptions, et les exceptions, qu’on peut subdiviser en trappes, fautes et arrêts. Interruptions matérielles Les interruptions sont causées par le matériel extérieur au processeur. Des signaux sur les broches NMI et INTR du Pentium provoquent le déclenchement d’un traitement d’interruption. @Pierre Marchand, 2001
490
Interruptions et exceptions
La ligne NMI provoque une interruption non masquable, qui ne peut être empêchée par logiciel. La ligne INTR provoque une interruption seulement si le bit IF du registre EFLAGS est 1. Si ce bit est 0, on dit que l’interruption est masquée. Lorsque le processeur répond à une telle interruption, il déclenche un cycle de reconnaissance d’interruption (interrupt acknowledge) et le périphérique interrupteur doit répondre par un numéro d’interruption compris entre 32 et 255. @Pierre Marchand, 2001
491
Interruptions et exceptions
Le processeur réagit aux interruptions et aux exceptions essentiellement de la même façon. Quand une interruption ou une exception est signalée, le processeur arrête l’exécution du programme ou de la tâche en cours et passe à une procédure de traitement (ISR ou Interrupt Service Routine) spécifique pour l’interruption ou l’exception en cause. Le processeur accède à cette procédure de traitement via une entrée dans la table de descripteurs d’interruption (IDT). Quand la procédure de traitement a terminé son travail, le processeur retourne à l’exécution du programme interrompu. @Pierre Marchand, 2001
492
Interrupt Descriptor Table
Registres d’adresses système Interrupt Descriptor Table Register IDTR (48 bits) 47 IDTR @Pierre Marchand, 2001
493
IDTR • La partie accessible de IDTR comporte 48 bits :
• Le champ limit donne la taille de la table, tandis que le champ base donne son adresse. 47 15 base limit @Pierre Marchand, 2001
494
Interrupt Descriptor Table
Interrupt Descriptor Table (IDT) La table de descripteurs d’interruptions contient les descripteurs qui pointent sur l’adresse de 32 à 256 routines de traitement d’interruption. Cette table ne peut contenir que des trap gates, des task gates et des interrupt gates. Elle doit avoir au moins 256 octets, pour pouvoir contenir des descripteurs pour les 32 interruptions réservées par Intel. Toute interruption utilisée par le système doit avoir une entrée dans la IDT. @Pierre Marchand, 2001
495
« Interrupt Gate » et « Trap Gate »
16 bits 1 2 5 3 5 Offset P DPL 0D11? 000 Reserved Segment selector Offset 15..0 16 bits 16 bits @Pierre Marchand, 2001
496
Interruptions et exceptions
2. Lecture du vecteur (descripteur) IDT 3. Exécution de la Routine de traitement ISR 1.Interruption CODE 4. Retour au programme interrompu @Pierre Marchand, 2001
497
Interruptions et exceptions
• Trappes Une trappe, aussi appelée interruption logicielle ou déroute-ment, est causée par une instruction spéciale telle que INT ou INTO. La procédure qui veut utiliser ces instructions doit avoir un niveau de privilège lui permettant d’accéder au descripteur d’interruption de la table IDT pour le numéro de trappe en question. Ainsi, si une application de niveau 3 veut exécuter INT 47, il faut que le descripteur à IDT(47) ait DPL=3. @Pierre Marchand, 2001
498
Interruptions et exceptions
Fautes Une faute se produit quand le processeur détecte une erreur durant le traitement d’une instruction. Par exemple, division par 0, opcode invalide, etc. @Pierre Marchand, 2001
499
Interruptions et exceptions
INT Interrupt Génère une interruption logicielle. Une constante de 8 bits (0-255) spécifie la procédure d’interruption à appeler. Ce nombre est un index dans la table IVT qui débute à l’offset 0 du segment 0. En mode réel, la IVT contient des pointeurs de 32 bits vers les procédures d’interruption. En mode privilégié, le processeur accède à la procédure au moyen d’un descripteur de 8 octets appelé Trap Gate dans la table des descripteurs d’interruption IDT. Les indicateurs IF et TF sont mis à 0, ce qui interdit les interruptions pendant l’exécution de la ISR. Exemple: INT 21h @Pierre Marchand, 2001
500
Interruption et appels système
Nous verrons, après le premier examen, comment les systèmes d’exploitation utilisent cette instruction pour permettre aux application d’appeler des fonctions du noyau de manière sécuritaire. @Pierre Marchand, 2001
501
Interruptions et exceptions
INTO Interrupt on Overflow Génère l’interruption logicielle no. 4 si l’indicateur OF est 1. En mode réel, l’entrée 4 de la IVT contient un pointeur de 32 bits vers la procédure de traitement de l’interruption INTO En mode privilégié, le processeur accède à la procédure au moyen d’un descripteur de 8 octets appelé Trap Gate dans la table des descripteurs d’interruption IDT. Exemple: INTO @Pierre Marchand, 2001
502
Interruptions et exceptions
Sortes d’interruptions Normalement, les interruptions ne peuvent être traitées qu’au niveau du noyau (niveau de privilège 0). Il y a toutefois quelques mécanismes permettant de traiter les interruptions logicielles ou exceptions dans les langages de haut niveau au niveau application (niveau de privilège 3). @Pierre Marchand, 2001
503
Exceptions Macros standard pour Signal sous Windows
SIGINT Signal d’interruption interactif (par exemple CTRL-C). SIGFPE Signal d’exception de virgule flottante. SIGILL Signal d’exception d’instruction illégale. SIGTERM Signal de terminaison. Termine le programme appelant en appelant la fonction exit( ). SIGABRT Signal d’arrêt. Appelé par la fonction abort( ). SIGSEGV Violation de segment. @Pierre Marchand, 2001
504
Exceptions Macros standard pour Signal sous Linux
Il y en a au moins 26. Voici les principales : SIGINT Signal d’interruption interactif (par exemple CTRL-C). SIGFPE Signal d’exception de virgule flottante. SIGILL Signal d’exception d’instruction illégale. SIGTERM Signal de terminaison. Termine le programme appelant en appelant la fonction exit( ). Peut être capturé ou ignoré. SIGABRT Signal d’arrêt. Appelé par la fonction abort( ). SIGALRM Généré par l’appel système alarm() à l’expiration du délai programmé. SIGSEGV Violation de segment. SIGBUS Référence à une adresse mémoire invalide. SIGCHLD Avertit un processus qu’un fils vient de se terminer ou d’être stoppé. @Pierre Marchand, 2001
505
Exceptions Macros standard pour Signal sous Linux SIGIO
SIGKILL Tue un processus. Ne peut être ni capturé ni ignoré. SIGPIPE Émis par le noyau quand un processus tente d’écrire dans un tube (pipe) qui n’a pas de lecteur. SIGQUIT Émis par le pilote de terminal lors de la réception de la touche CTRL-\. SIGSTOP (19) Ne peut être ni capturé ni ignoré. Le processus passe au mode stoppé. SIGCONT Redémarre un processus stoppé. SIGTRAP Émis par le noyau lorsque le processus a atteint un point d’arrêt. @Pierre Marchand, 2001
506
Exceptions Mécanisme sigaction
Le gestionnaire reçoit plus d’information qu’avec le mécanisme signal. Il peut être de la forme : void gestionnaire (int numero, struct siginfo * info, void * inutile); Ce mécanisme offre une plus grande flexibilité de paramétrage grâce à l’utilisation de la structure sigaction lors de la mise en place de sigaction: int sigaction( int numero, const struct sigaction * nouvelle, struct sigaction * ancienne); @Pierre Marchand, 2001
507
Exceptions Mécanisme sigaction
struct sigaction { void ( *sa_handler )( int ); // adresse du gestionnaire sigset_t sa_mask; // liste des signaux bloqués pendant // l’exécution du gestionnaire int sa_flags; // constantes permettant de configurer // le comportement du gestionnaire void ( *sa_restorer )( void ); // } ; @Pierre Marchand, 2001
508
Exceptions Mécanisme sigaction La structure siginfo :
typedef struct siginfo { int si_signo; int si_errno int si_code union { int _pad[ SI_PAD_SIZE ]; struct { pid_t _pid; uid_t _uid } _kill; @Pierre Marchand, 2001
509
Exceptions Mécanisme sigaction La structure siginfo : struct {
unsigned int _timer1; unsigned int _timer2; } _timer; pid_t _pid; // sender’s pid uid_t _uid; // sender’s uid sigval_t _sigval; } _rt; @Pierre Marchand, 2001
510
Exceptions Mécanisme sigaction La structure siginfo : struct {
pid_t _pid; // which child uid_t _uid; // sender’s uid int _status; clock_t _utime; clock_t _stime; } _sigchld; @Pierre Marchand, 2001
511
Exceptions Mécanisme sigaction La structure siginfo : struct {
void * _addr; } _sigfault; int _band; int _fd; } _sigpoll; } _sigfields; } siginfo_t; @Pierre Marchand, 2001
512
Matière pour le premier examen
Semaine 01 Histoire de l’architecture IA-32 Architecture générale du Pentium 4 @Pierre Marchand, 2001
513
Matière pour le premier examen
Semaine 02 Assembleur « inline » Masm32 Directives Programme mixte assembleur et C Directives spécifiques @Pierre Marchand, 2001
514
Matière pour le premier examen
Semaine 03 Types de données Placement des données en mémoire Mode d’adressage Gestion de la piles Passage des arguments Variables locales « Stack frame » @Pierre Marchand, 2001
515
Matière pour le premier examen
Semaine 04 Comparaisons Branchements Non conditionnel Conditionnel Structures de contrôles If For While Switch Instructions logiques Instructions arithmétiques @Pierre Marchand, 2001
516
Matière pour le premier examen
Semaine 05 Programmation virgule flottante Programmation MMX @Pierre Marchand, 2001
517
Matière pour le premier examen
Semaine 06 Programmation SIMD Extension SIMD2 Mémoire virtuelle Segmentation Pagination @Pierre Marchand, 2001
518
Matière pour le premier examen
Semaine 07 Interruptions Exceptions @Pierre Marchand, 2001
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.