Files
Yggdrasil/infotro/SEm/INT.md
T

7.4 KiB
Raw Blame History

Intérruptions

Principe d’une interruption

Une interruption est un signal envoyé par un périphérique au processeur pour lui indiquer qu’il a besoin de son attention. Le processeur interrompt alors le programme en cours d’exécution pour traiter l’interruption. Une fois l’interruption traitée, le processeur reprend l’exécution du programme interrompu.

Mécanisme d'une interruption

mecanisme_interruption.png

IRQ : Interrupt ReQuest
INTA : INTerrupt Acknowledge

Process

process_bloc.png

  1. Interruption
  2. Sauvegarde du contexte (Registres et position du programme)
  3. Run du programme d'interruption
  4. Retour du programme d'interruption
  5. Restauration du contexte (Registres et position du programme)

Etat du processeur définit par :

  • Programme Counter (R_{15})
  • Status Register
  • R_0 \to R_4

process_seq_time.png

  1. IRQ synchronization
    • IRQ asynchrone => synchronisation à l'aide d'une bascule D
  2. Finalisation de l'instruction en cours
  3. Hardware context
    • Sauvegarde du PC (Programme Counter) et SR (Status Register)
    • Jump à l'adresse de l'interruption
  4. Software context
    • Sauvegarde des registres R_0 \to R_4
  5. Traitement de l'interruption
    • Fetch de l'instruction

Table des vecteurs

La table des vecteurs d'interruption est une table qui contient les adresses des routines de traitement des interruptions. Elle est située à une adresse fixe dans la mémoire. Lorsqu’une interruption survient, le processeur utilise le numéro de l’interruption pour accéder à la table des vecteurs et obtenir l’adresse de la routine de traitement correspondante.

IVR : Interrupt Vector Register Le IVR est un registre du processeur qui contient l’adresse de la table des vecteurs d’interruption.

Priorité des interruptions

FIQ : Fast Interrupt reQuest - Interruption de plus haute priorité IRQ : Interrupt ReQuest - Interruption de priorité basse

Mécanisme d'une interruption

Le traitement d'une interruption (exceptions en ARM), nécessite les mécanismes suivants :

  • Registre d'états
  • Gestion des exceptions
  • Plusieurs piles
  • Table des vecteurs
  • Gestion des priorités

Registre d'états

Le registre d'états (CPSR) contient les informations suivantes :

cpsr.png

M[4..0] Mode Notation
10000 User _usr
10001 FIQ _fiq
10010 IRQ _irq
10011 Supervisor _svc
10111 Abort _abt
11011 Undefined _und
11111 System _sys

Gestion des exceptions

Les exceptions sont des événements qui interrompent le flux d’exécution normal du processeur. Les exceptions peuvent être de plusieurs types :

Exception Mode Description
Reset _svc Survient lorsque la broche RESET du processeur est activée. A l’enclenchement du système (power-up) ou à la mise sous tension du processeur
Undefined instruction _und Survient lorsque ni le processeur ni les coprocesseurs associés ne reconnaissent l’instruction courante
Software interrupt (SWI) _svc Définie par l’utilisateur, cette instruction d’interruption synchrone permet à un programme en mode utilisateur (user) d’accéder à des opérations privilégiées qui ne s’exécutent qu’en mode superviseur (supervisor)
Prefetch abort _abt Survient lorsque le processeur tente d’exécuter une instruction qui provient d’une adresse mémoire illégale
Data abort _abt Survient lorsque le processeur tente de lire ou d’écrire une donnée à une adresse mémoire illégale
IRQ _irq Survient lorsqu’une interruption extérieure au processeur est activée et que le bit I du registre d’états CPRS est mis à 0
FIQ _fiq Survient lorsqu’une interruption rapide extérieure au processeur est activée et que le bit F du registre d’états CPRS est mis à 0

Piles

Le processeur ARM possède plusieurs piles pour gérer les interruptions. Chaque mode d’exécution possède sa propre pile et donc surtout son propre pointeur de pile.

registers.png

Table des vecteurs

La table des vecteurs d’interruption est une table qui contient les adresses des routines de traitement des interruptions. Elle est située à une adresse fixe dans la mémoire à l'adresse 0x00000000. Lorsqu’une interruption survient, le processeur utilise le numéro de l’interruption pour accéder à la table des vecteurs et obtenir l’adresse de la routine de traitement correspondante.

Vector address Exception type Exception mode Priority (1 high, 6 low)
0x00000000 Reset supervisor 1
0x00000004 Undefined instruction undef 6
0x00000008 Software interrupt (SWI) supervisor 6
0x0000000C Prefetch abort abort 5
0x00000010 Data abort abort 2
0x00000014 Reserved Not applicable Not applicable
0x00000018 Interrupt (IRQ) irq 4
0x0000001C Fast Interupt (FIQ) fiq 3

Entrées / Sorties d'une interruption

L'entrée d'une interruption se fait par la broche IRQ ou FIQ du processeur :

  1. Termine l'instruction en cours
  2. Sauvegarde du contexte : PC, CPSR
  3. Met le bit du type d'interruption et le nouveau mode à jour
  4. Sauvegarde l'addresse de retour (PC - 4) dans le LR du mode
  5. Saute à l'adresse de la routine d'interruption qui se trouve dans la table des vecteurs
  6. Sauvegarde les registres de travail
  7. Exécute la routine d'interruption

La sortie d'une interruption :

  1. Restaure les registres de travail
  2. Restaure le SPSR du mode dans le CPSR et simultanément met à jour le PC
  3. Reprend l'exécution du programme interrompu