Unité A8 : Interruptions et directives. Unité A8 : Interruptions et directives

Documents pareils
Ordinateurs, Structure et Applications

Structure d un programme

Programmation assembleur : aperçu

Architecture des ordinateurs

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Concept de machine virtuelle

4. Initiation à l'assembleur

Matériel & Logiciels (Hardware & Software)

Le langage C. Séance n 4

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

MODULE I1. Plan. Introduction. Introduction. Historique. Historique avant R&T 1ère année. Sylvain MERCHEZ

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155)

Réalisation d un OS 32 bits pour PC(x86)

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Java Licence Professionnelle CISII,

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Conception de circuits numériques et architecture des ordinateurs

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Logiciel de base. Première année ENSIMAG

ACTIVITÉ DE PROGRAMMATION

SRS DAY: Problématique liée à la virtualisation

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Ordinateurs, Structure et Applications

Exécution des instructions machine

Initiation à la sécurité

Temps Réel. Jérôme Pouiller Septembre 2011

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

Rappels d architecture

Master d'informatique 1ère année Réseaux et protocoles. Couche physique

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE

CSI351 Systèmes d exploitation Instructions pour rouler Linux avec Virtual PC dans la salle de labo 2052

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Programmation C++ (débutant)/instructions for, while et do...while


Architecture des ordinateurs

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

IV- Comment fonctionne un ordinateur?

Procédure de mise à niveau de Windows Mobile version 6.1 du SGH-i616

Service Informatique et Télématique (SITEL), Emile-Argand 11, 2009 Neuchâtel, Tél ,

Conventions d écriture et outils de mise au point

Sélection du contrôleur

Plan du cours. Historique du langage Nouveautés de Java 7

LANDPARK NETWORK IP LANDPARK NETWORK IP VOUS PERMET D'INVENTORIER FACILEMENT VOS POSTES EN RÉSEAU

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Principe de fonctionnement des périphériques des ordinateurs en vue de la programmation. Patrick Cégielski

Examen Médian - 1 heure 30

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Éléments d'architecture des ordinateurs

Cours Informatique 1. Monsieur SADOUNI Salheddine

Installation d un serveur virtuel : DSL_G624M

LE MICRO ORDINATEUR. Introduction Architecture Les supports amovibles Les composants Le système d exploitation Les portables

Conception et développement d'un périphérique USB pour le simulateur de vol Microsoft Flight Simulator

Fiche technique CPU 314SC/DPM (314-6CG13)

WINDOWS SERVER 2003 Maintenance d'active directory V1.0

Playing with ptrace() for fun and profit

CONTROLEUR D'IMPRESSION FIERY

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Compilation (INF 564)

Configuration automatique

Windows 2000: W2K: Architecture. Introduction. W2K: amélioration du noyau. Gamme windows W2K pro: configuration.

WebSpy Analyzer Giga 2.1 Guide de démarrage

HP Data Protector Express Software - Tutoriel 3. Réalisation de votre première sauvegarde et restauration de disque

CH.3 SYSTÈMES D'EXPLOITATION

Livre blanc Mesure des performances sous Windows Embedded Standard 7

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

La programmation des PIC en C. Les fonctions, les interruptions.

HP Data Protector Express Software - Tutoriel 4. Utilisation de Quick Access Control (Windows uniquement)

Logiciel Enterprise Guide Version 1.3 Windows

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Guide pour l Installation des Disques Durs SATA et la Configuration RAID

Manuel de l utilitaire Computer Setup (F10) HP Compaq Business Desktops Modèles d220 et d230

Débuter avec PsoC ou PsoC niveau 0

PARAGON Disk Wiper. Guide de l utilisateur. Paragon Technology GmbH, System Programmierung. Copyright Paragon Technology GmbH

Exécutif temps réel Pierre-Yves Duval (cppm)

Proce dure Installation Cluster de basculement SQL Server 2005

Procédure d Installation et de mise à jour du client CAN-8 32 bits

Guide d'utilisation EasyMP Monitor Ver.4.31

Structure du format BMP, sa lecture, sa construction et son écriture

Tutoriel Création d une source Cydia et compilation des packages sous Linux

PIC : COURS ASSEMBLEUR

THEME 1 : L ORDINATEUR ET SON ENVIRONNEMENT. Objectifs

Les vulnérabilités du noyau. LECORNET Olivier LEGROS Bruno VIGIER Nicolas Promo 2005

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

hager Logiciel PC pour configurateur Radio Tebis TX 100 Manuel d utilisation 6T7266

Manuel du logiciel PrestaTest.

Programmation impérative

Annexe : La Programmation Informatique

Oracle Database SQL Developer Guide D'Installation Release 4.0 E

Microsoft Windows NT Server

Spécifications du logiciel. Mise à jour : 24 février 2011 Nombre total de pages : 7

Licences Windows Server 2012 R2 dans le cadre de la virtualisation

Systèmes d exploitation

Plan de la conférence. Virtualization. Définition. Historique. Technique. Abstraction matérielle

Bootkit REvisited. Samuel Chevet Sogeti ESEC

Transcription:

On peut distinguer deux sortes d'interruptions. Les interruptions matérielles et les interruptions logicielles. Les deux sont traitées de la même façon. La différence tient à ce que les interruptions matérielles peuvent se produire n'importe quand, tandis que les interruptions logicielles se produisent à un endroit précis du code où se trouve une des instructions int ou into. De plus, les interruptions matérielles peuvent être masquées (interdites ou autorisées) à l'aide de l'indicateur IF. Pierre Marchand, 2001 262 11.1 Interruptions logicielles Les interruptions logicielles, sont aussi appelées trappes ou déroutements. Elles incluent aussi les fautes et les arrêts. 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. Quand une erreur est grave au point qu une partie du contexte d exécution est perdue, le résultat est un arrêt. Pierre Marchand, 2001 263 1

11.1 Interruptions logicielles En mode réel, quand le processeur rencontre une instruction telle que int immed8, il va lire la table des vecteurs d'interruption IVT (Interrupt Vector Table). Cette table de 1 Ko est située à l'adresse 0000:0000. Chaque entrée de la table contient le numéro de segment de 16 bits et l'offset de 16 bits pour l'adresse d'un sousprogramme de traitement d'interruption (Interrupt Service Routine ou ISR). Immed8 est utilisé comme indice dans cette table (on doit le multiplier par 4 pour avoir l'adresse physique correspondante). De plus, les indicateurs, CS et IP sont empilés dans cet ordre exact, puis les indicateurs TF et IF sont mis à 0. Le sousprogramme d'interruption devra se terminer par l'instruction iret, pour dépiler correctement ces paramètres. Pierre Marchand, 2001 264 11.1 Interruptions logicielles L'exécution se poursuit ensuite à l'adresse contenue dans la table. Par exemple, int 8 ira lire le vecteur situé à l'adresse 32 (0x20) et branchera à l'adresse qui y est contenue. À cette adresse doit débuter un sous-programme de traitement d'interruption. Certaines ISR font partie du système d'exploitation et sont déjà définies, comme celles qui correspondent aux INT 0x21 de MS-DOS. Cette trappe y sert de mécanisme d'appel au système d'exploitation. Si vous voulez définir votre propre sous-programme de traitement d'interruption, il suffit d'aller écrire son adresse à l'endroit approprié dans la table des vecteurs d'interruption avant de l'utiliser. Pierre Marchand, 2001 265 2

11.1 Interruptions logicielles IVT 0 2. Lecture du vecteur 1.Interruption ISR CODE int 3. Exécution de la Routine de traitement 4. Retour au programme interrompu Pierre Marchand, 2001 266 11.1 Interruptions logicielles Adresse 0000 0004 0008 000C 0010 IP CS IP CS IP CS IP CS IP CS Interruption INT 00 Division par 0 INT 01 Exécution pas à pas INT 02 NMI INT 03 Point d'arrêt INT 04 Débordement de capacité (INTO) 03FF IP CS INT FF Pierre Marchand, 2001 267 3

11.1 Interruptions logicielles En mode protégé, le processeur va plutôt lire la table des descripteurs d'interruption IDT (Interrupt Descriptor Table). L'adresse de cette table est contenue dans le registre IDTR. Elle contient des descripteurs de 64 bits pour les sous-programmes de traitement d'interruption. Ces descripteurs sont appelés Trap Gates dans le cas d'interruptions logicielles. 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 268 11.1 Interruptions logicielles Dans un système d'exploitation tel que Windows NT, la IDT se trouve en mémoire protégée, de sorte qu'il ne vous est pas possible d'aller écrire un descripteur directement dans la IDT. Windows NT ne supporte pas non plus les INT 0x21 de MS-DOS. Toutefois, vous pouvez les essayer en écrivant un programme assembleur et en l'exécutant dans la fenêtre «Invite de commande» (DOS prompt). Vous trouverez sur le site Web du cours un document décrivant un très grand nombre d'interruptions logicielles de MS-DOS. En particulier, si vous désirez implanter votre propre sous-programme de traitement d'interruption logicielle, l'appel système int 21h (33) fonction 25 vous permet de le faire facilement. Pierre Marchand, 2001 269 4

Les interruptions matérielles sont générées par les périphériques : souris, clavier, disque, horloge temps réel, etc. À la différence des interruptions logicielles, elles peuvent être autorisées ou interdites au moyen de l'indicateur IF du registre EFLAGS. Comme le Pentium n'a que deux entrées d'interruption matérielle, NMI et INTR, on doit lui adjoindre un contrôleur d'interruptions programmable afin de pouvoir disposer de plusieurs sources d'interruption avec une gestion de priorité. C'est le PIC (Programmable Interrupt Controler 8259A). Pierre Marchand, 2001 270 Vcc A0 INTA IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 INT SP CAS2 PIC 8259A CS WR RD D7 D6 D5 D4 D3 D2 D1 D0 CAS0 CAS1 GND Pierre Marchand, 2001 271 5

Data D0-D7 Buffer INTA INT Control logic R0 WR A0 CS CAS0 CAS1 CAS2 Read/Write logic Cascading logic In Service Register ISR Priority Analysis Interrupt Request Register IRR IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 SP Interrupt Mask Register IMR Pierre Marchand, 2001 272 INTR CPU INT 8259 Maître INTA IR2 CAS0 CAS1 CAS2 IRQ0 IRQ1 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 INT IR0 8259 Esclave IR7 CAS0 CAS1 CAS2 INTA IRQ8 IRQ9 IRQ10 IRQ11 IRQ12 IRQ13 IRQ14 IRQ15 INTA Pierre Marchand, 2001 273 6

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. Pierre Marchand, 2001 274 Si oui, il affirme la ligne INT, qui est connectée à l entrée INTR (Interrupt Request) du CPU. Si le CPU est prêt à accepter l interruption, il répond au PIC via la ligne INTA (Interrupt Acknowledge). 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. Pierre Marchand, 2001 275 7

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. Pierre Marchand, 2001 276 Les interruptions matérielles servent à une gestion efficace des périphériques d'entrée /sortie. Reportez-vous à la section 10.6 du livre de Zanella et Ligier. Dans un ordinateur moderne, il y a continuellement des interruptions matérielles. Le temporisateur, l'horloge temps réel, les touches du clavier, les mouvements et les clics de la souris, le modem, l'imprimante, les disques durs et souples, le cédérom, sont tous des sources d'interruptions. Pierre Marchand, 2001 277 8

Les circuits contrôleurs de périphériques contiennent plusieurs registres d'interface avec le CPU. Il y a habituellement un registre de contrôle, un registre d'état, et un ou plusieurs registres de données. Pour connaître l'état d'un périphérique, le CPU peut interroger le registre d'état. L' approche des drapeaux, mentionnée à la p 264 du livre, appelée encore scrutation ou «polling», consiste à interroger de façon répétitive le registre d'état, pour savoir où le périphérique est rendu dans le transfert des données. A-t-il reçu une nouvelle donnée? a-t-il terminé la transmission de la dernière donnée envoyée? etc. Cette approche consomme trop de temps de la part du processeur. Pierre Marchand, 2001 278 Bus de données IRQ R/W Choix du registre Donnée reçue Donnée à transmettre Registre d'état Vecteur Configuration Bus externe Pierre Marchand, 2001 279 9

L'approche interruption est beaucoup plus performante. Le périphérique envoie une interruption matérielle au processeur quand il a quelque chose à signaler. Le processeur interrompt alors la tâche en cours, enregistre en mémoire l'état de la machine, et vient interroger le registre d'état du périphérique, pour connaître la cause de l'interruption. Il effectue ensuite le traitement approprié et élimine la source de l'interruption Ce traitement consiste, par exemple, à lire la donnée reçue dans le registre de réception et à l'inscrire en mémoire, ou à lire en mémoire la prochaine donnée à transmettre et à l'inscrire dans le registre de transmission du périphérique. Le processeur retourne ensuite à la tâche interrompue après avoir restauré l'état de la machine qu'il avait enregistré au moment de l'interruption. Pierre Marchand, 2001 280 Le sous-programme de traitement a donc 4 tâches à exécuter : Sauvegarder l'état de la machine en empilant les registres susceptibles d'être modifiés dans le sous-programme de traitement d'interruption (ISR). Ceci inclut EFLAGS. Interroger le registre d'état du périphérique pour savoir quelle opération effectuer. Éliminer la source de l'interruption en effectuant l'opération d'entrée-sortie. Restaurer l'état de la machine et retourner à la tâche interrompue en dépilant les registres empilés. Pierre Marchand, 2001 281 10

Comme Windows NT, que nous utilisons dans nos laboratoires, est un système d'exploitation pleinement protégé, les applications en mode utilisateur ne peuvent accéder au matériel directement et doivent passer par un pilote de périphérique fonctionnant en mode noyau. C'est la couche HAL (Hardware Abstraction Layer) de NT qui gère les interruptions. La réalisation de tels pilotes de périphériques dépasse toutefois le cadre de ce cours. Pierre Marchand, 2001 282 Toutefois, les VDD (Virtual Device Drivers) émulent les applications de 16 bits de MS-DOS. Ils piègent ce que l'application MS- DOS croit être des références à des ports d'entrée-sortie et les traduisent en fonctions natives d'entrée-sortie Win32. L'application intitulée «Invite de commande» ou, en anglais, «DOS prompt», est un tel VDD. On peut y exécuter la plupart des programmes écrits pour MS-DOS, y compris certains qui utilisent des interruptions matérielles. C'est le cas pour les exemples qui suivent que vous pouvez compiler avec un assembleur tel que A86, MASM ou TASM. Pierre Marchand, 2001 283 11

11.1 Interruptions logicielles Vous pouvez aussi créer des programmes résidents (Terminate process and Stay Resident ou TSR) grâce à l'appel système int 21h fonction 31. Exemple d interruption logicielle pour écrire une chaîne à l écran : mov ah,09 mov dx, offset string int 33 où on a défini la chaîne de caractères string comme suit : string db 'Toto','$' Pierre Marchand, 2001 284 Exemple d interruption logicielle : Lecture de l'horloge système. L'horloge système interrompt le processeur 18,2 fois par seconde si l'indicateur d'interruption IF est 1 (interruption matérielle 08). Chaque fois, le compteur de 32 bits situé aux adresses 0040:006C et 0040:006E est incrémenté de 1. Pour lire ce compteur, on peut utiliser l'interruption logicielle int 0x1A (26). mov ah, 0 ; mode lecture de l'horloge int 26 ; appel à l'interruption d'horloge de MS-DOS Pierre Marchand, 2001 285 12

Après l'instruction int 26, cx = TIMER_HIGH = mot de poids fort du compteur dx = TIMER_LOW = mot de poids faible du compteur Si al = 0, on n'a pas dépassé 24h depuis la dernière lecture Si al > 0, on a dépassé 24h. depuis la dernière lecture. Pierre Marchand, 2001 286 Programme résident et déviation de l'interruption d'horloge temps réel Voici un exemple d'un programme résident qui utilise l'horloge temps réel et émet un bip chaque 10 sec. La procédure de traitement de l'interruption 8 est déviée pour exécuter notre sousprogramme, puis continue avec l'ancienne procédure. Cette technique s'appelle un «hook». Pierre Marchand, 2001 287 13

start segment org 100h main: jmp short install oldint8 dd? ; espace pour ancien vecteur counter dw 182 ; 182 * 54,94 ms = 10 sec. newint8 proc ; nouvel ISR pour interruption 8 dec cs:counter ; décrémenter compteur jnz done ; on ne fait rien tant que count > 0 Pierre Marchand, 2001 288 mov cs:counter, 182 ; réinitialiser compteur mov ah, 0Eh ; émettre un bip mov al, 7 int 10h done: jmp cs:oldint8 ; continuer dans l'ancien vecteur newint8 endp Pierre Marchand, 2001 289 14

; la partie suivante ne sera exécutée qu'une fois, lors de l'installation install proc near mov ah, 35h ; charger CS:IP pour interruption 08 mov al, 08h ; IP va dans BX et CS dans ES int 21h mov word ptr oldint8, bx ; enregistrer dans espace prévu mov word ptr oldint8+2, es mov dx, offset newint8 ; ou lea dx, newint8 mov ah, 25h ; définir CS:IP pour nouvelle mov al, 08h ; interruption 8 int 21h ; DX = IP, DS = CS par défaut Pierre Marchand, 2001 290 install start mov dx, (offset install - offset start) ; taille du progr. résident add dx, 15 ; arrondir à multiple de 16 shr dx, 4 ; division par 16 mov ah, 31h ; rendre résident int 21h endp ends end main Pierre Marchand, 2001 291 15

Les assembleurs normaux comportent un bon nombre de directives ou pseudo-instructions pour contrôler le processus d'assemblage. Ils comportent aussi des directives d'assemblage conditionnel, et souvent des directives pour créer des structures de contrôle if, while, etc. automatiquement, ainsi que des commandes permettant de créer des macros. Pierre Marchand, 2001 292 Classification des directives Type de processeur :.386,.486,.586, etc. Type de programme : model flat, stdcall pour la programmation 32 bits Déclaration de variables :.data octet db 0 octets db 8 dup(0) chaine db Bonjour,0 mot dw 7FFFh doublemots dd 2 dup(0ffffffffh) quadruplemot dq 0FFFFFFFFFFh Pierre Marchand, 2001 293 16

Déclaration de variables non initialisées.data? Mot dw? ; mot de 16 bits Octets db 8 dup(?) ; tableau de 8 octets Définition de constantes ; LENGTH equ 20 dix equ 10 Bloc de code.code Directives d assemblage conditionnel if, ifdef, elseif, else, endif Pierre Marchand, 2001 294 Classification des directives Directives pour structure de contrôle et programmation structurée.if.elseif.else.endif.while.endwhile.repeat.until.untilcxz Exemple :.if x == 3 ou encore.if (sdword ptr [esi+4] < 0).else.endif Pierre Marchand, 2001 295 17

Classification des directives Création de fonctions : mafonction proc uses esi edi, a:dword, b:word LOCAL i:byte LOCAL x:dword mov i, 1 mov esi, a...... mafonction endp Pierre Marchand, 2001 296 Classification des directives Appel de fonctions invoke mafonction, a, b Macros MACRO... ENDM Pierre Marchand, 2001 297 18

Exemple :.586.model flat, stdcall include \masm32\include\windows.inc mafonction PROTO :DWORD, :DWORD ; Prototype.data ; Définit bloc de données DlgName db MyDialog,0 ; Définit une chaîne hedit1 dd? ; Définit un double non initialisé mytext1 db 50 dup(?) ; Définit 50 octets non initialisés Bidon dw 0 ; Définit un short initialisé à 0 IDC_EDIT1 equ 3000 ; Définit une constante Pierre Marchand, 2001 298 Exemple :.code ; Définit bloc de code start: invoke DialogBoxParam, hinstance, ADDR DlgName, NULL, addr DLgProc, NULL.if umsg == WM_INITDIALOG invoke GetDlgItem, hwind, IDC_EDIT1 mov hedit1, eax ; Résultat d une fonction dans eax.elseif umsg == WM_CLOSE....endif invoke mafonction ADDR mytext1, ADDR mytext2 Pierre Marchand, 2001 299 19

Exemple : DlgProc endp mafonction proc src:dword, dst:dword ; Définition de mafonction mafonction endp end start Pierre Marchand, 2001 300 Macro simple return MACRO arg mov eax, arg ret ENDM Appel : return 0 Sera traduit par : moveax, 0 ret Pierre Marchand, 2001 301 20

Macro simple sztext MACRO Nom, Text : VARARG LOCAL lbl jmp lbl Nom db Text, 0 lbl: ENDM Exemple : sztext Titre, MonProgramme sztext Msg, Quitter? invoke MessageBox, NULL, addr Msg, addr Titre, MB_OK Pierre Marchand, 2001 302 12.2 Assembleurs standards TASM de Borland, dispendieux. MASM de Microsoft. Discontinué. NASM MASM32, gratuit, autonome. Débogueurs : Intel Enhanced Debugger version 4.5 Microsoft WinDbg version 5.1 Pierre Marchand, 2001 303 21