Il Sistema delle Interruzioni
Introduzione
o
Il concetto di Interruzione è legato alla capacità di
gestire l’occorrenza di eventi esterni
o
Non esiste una nomenclatura precisa relativa ai
differenti tipi di eventi ma essi possono essere
raggruppati in categorie:
2
Eventi:
Sincroni o Asincroni
Mascherabili o non mascherabili
Interni o esterni all’istruzione
Terminali o non terminali
Alcuni esempi
o Richiesta da un dispositivo di I/O
o Chiamata del Sistema Operativo da un programma utente
o Esecuzione passo-passo delle istruzioni
o Punto di controllo
o Overflow o underflow aritmetico
o Mancanza di pagina (non in MC)
o Accesso disallineato alla memoria
o Violazione dei diritti di accesso alla memoria
o Uso di codici operativi non definiti
o Guasto fisico
E una loro categorizzazione
4 Sincrona utente o automatica Mascherabile Interna istruzione Ripristinabile
Richiesta di I/O No Automatica no No si
Chiamata del Sistema Operativo Si Utente no No si passo-passo si Utente si no si Punto di controllo si Utente si si si Overflow underflow si Automatica si si no Mancanza di pagina si Automatica si si si Accesso disallineato alla memoria si Automatica no si no Violazione dei diritti di accesso
alla memoria si Automatica si si no
Uso di codici operativi non
definiti si Automatica no si no
Guasto fisico no Automatica no si no
Caduta di
tensione no Automatica no si no
Tanto per avere un
’
idea
Evento Intervallo di tempo tra
due eventi
Interruzione da I/O 2,7 ms
Interruzione periodica 10 ms
Interruzione software 1,5 ms
Interruzione generica 0,9 ms
Alcune Definizioni
o “Interruzione”: un
evento che modifica il flusso di controllo senza essere una diramazione
o Da un altro punto di
vista il meccanismo
delle Interruzioni può
essere visto come l’unico in grado di gestire EVENTI ASINCRONI
o Nota: a parte nei casi di
malfunzionamento hardware gli eventi
asincroni provengono da dispositivi diversi da CPU e MC 6
ISR
ISR
S.O.
Abort del programmaINT
ripristinabile
INT
terminale
Flusso principale di controllo Flusso principale di controllo Flusso principale di controlloCiclo del Processore
o Per gestire il concetto di interruzione dobbiamo modificare il
nostro modello del ciclo del processore centrale
fetch Operand Assembly execute fetch Operand Assembly execute INT no si
isr
Tipologie d
’
uso
Principali usi delle Interruzioni:
n
Gestione I/O
n
Gestione errori e malfunzionamenti
n
Gestione Miss della Cache
Alcune considerazioni
o Il problema cruciale rimane
quello dello stato della
computazione
o Lo stato della computazione è
formato dalle info visibili nel modello di programmazione
della macchina (->registri)
o Il passaggio STATO1 ->
STATO2 viene chiamato switch di contesto
o Con il modello proposto di ciclo
del processore non si possono gestire INT “interne”
all’istruzione
ISR
Flusso principale di controllo Flusso principale di controllo lo stato qui deve essere = allo stato quiDisabilitazione delle Interruzioni
o Il livello di complessità delle operazioni precedenti dipende molto dalle
necessità o meno di gestire INT innestate
Il Sistema delle Interruzioni 10
ISR1
ISR2La presenza di INT innestate costringe a gestire le operazioni di salvataggio dello stato con una logica a STACK
In ogni caso, per
evitare il CAOS, ci sono dei momenti nei quali la macchina
NON PUO’
ACCETTARE INT
Introduciamo allora il concetto di ABILITAZIONE GENERALE DELLE
INT INT INTFF AG Flip-Flop di Abilitazione Generale al processore centrale
Gestione di cause di INT multiple
R1 R2
Rn
REGISTRO delle INT
M1 M2
Mn
MASCHERA delle INT
Introduciamo il concetto di registro delle interruzioni e di registro maschera delle interruzioni
il registro delle interruzioni consente di tener conto di
interruzioni multiple e di introdurre un concetto di INT a diversa
priorità il registro maschera consente di abilitare/ disabilitare individualmente le cause di INT L’introduzione di un
registro delle INT ci
consente anche di
comprendere il concetto di
Servizio di una INT: HW vs SW
Il concetto di servizio di una INT implica dunque:
n Salvataggio dello stato
n Riconoscimento della
causa
n Esecuzione delle
azioni connesse alla causa
Il Sistema delle Interruzioni 12
In generale si parla di Interrupt Service Routine (ISR) in riferimento alle routine software che si
occupano dell’esecuzione delle azioni corrispondenti alla causa di interruzione
Queste azioni possono ovviamente variare in dipendenza delle modifiche hardware che vengono introdotte nel sistema.
Conseguentemente occorre stabilire un
opportuno compromesso fra quanto viene svolto mediante l’uso di hardware specifico e quanto viene fatto in software dalla ISR.
1
2
Servizio di una INT: HW minimo
o
Il minimo di hw
ipotizzabile deve
consentire:
n Il salvataggio automatico del PC n Il passaggio delcontrollo ad una ISR di tipo generale che provvede al
salvataggio dello stato della computazione
n E durante questo
salvataggio la
disabilitazione delle INT
Introduciamo allora un apposito registro SAVE_PC e ipotizziamo che la ISR generale venga memorizzata in una posizione fissa di memoria (per esempio a partire dall’indirizzo 0), dunque: PC -> SAVE_PC AG <- 0 PC <- 0 qt. viene fatto in HW! Chiamiamolo “passa il controllo alla ISR”
Ritorno al normale ciclo di esecuzione delle istruzioni per
Servizio di una INT: HW minimo (2)
Cosa deve fare la ISR?
Hp 1(Situazione semplice ): INT non interrompibili
passa controllo a ISR (PC -> SAVE_PC, AG = 0, PC = 0)
n AG = 0 (disabilita riconoscimento INT)
n Salva lo stato
n Individua le cause di INT (leggi Registro INT)
n Seleziona la causa prioritaria
n Servi causa
n se ci sono altre cause da servire torna a (1)
n Ripristina stato
n AG = 1 (riabilita riconoscimento INT)
restituisci il controllo (PC <- SAVE_PC)
Il Sistema delle Interruzioni 14
Servizio di una INT: HW minimo (3)
Hp 2 (situazione complessa): INT interrompibili
passa controllo a ISR (PC -> SAVE_PC, AG = 0, PC = 0)
Salva lo stato in uno stack
acquisisci cause di INT e unisci con le cause in attesa Seleziona la causa prioritaria
Se la priorità della nuova INT è più bassa della priorità corrente ripristina stato
altrimenti
salva priorità corrente nello stack
aggiorna priorità corrente (diventa quella della nuova INT prioritaria)
AG = 1
Prosegui servizio INT, se sopraggiungono altre INT torna a (1) terminato servizio INT corrente poni AG = 0
ripristina priorità corrente ripristina stato
se ci sono ancora INT da servire torna a (2)
altrimenti
restituisci controllo (PC <- SAVE_PC)
(2) Registri 1 Registri 2 Registri i prior_int1 prior_int2 prior_inti (1)
HW minimo vs Efficienza
o Nello schema appena visto si evidenzia un notevole problema
di efficienza
o Perché il tutto funzioni occorre che la frequenza delle INT sia
inferiore al tempo di servizio medio
o Con l’approccio hw minimo sono costretto a gestire in sw
anche l’individuazione della causa di interruzione e la valutazione della sua priorità
o In breve: mi interrompo anche quando non dovrei (il
programma in corso viene interrotto anche da INT a priorità più
bassa) e tengo disabilitato il sistema delle INT troppo spesso e troppo a lungo
quindi
o L’ipotesi di HW minimo DEVE MORIRE
16 Il Sistema delle Interruzioni
Salvataggio dello stato via HW
o
Possiamo pensare di introdurre una duplicazione
completa dei registri componenti lo stato e di affidare
all’HW il riconoscimento del livello di priorità anche
mentre AG = 1
o
Introduciamo un registro
L
ivello di
P
riorità
C
orrente
Il Sistema delle Interruzioni 18
Questo schema evidenzia in che modo l’HW calcola e tiene conto della priorità nell’HP di salvataggio completo dello stato via HW
Due Ipotesi fondamentali:
1) Non esiste più una sola ISR ma tante ISR associate alle diverse cause
2) la priorità delle ISR viene associata al loro INDIRIZZO R1 R2 Rn M1 M2 Mn INTFF AG al processore centrale LPC Rete di Priorità α BUS indirizzi Indirizzo ISR comparatore Registro LivelloPriorità Corrente
Cosa rimane da fare in SW?
o Con le modifiche introdotte abbiamo sostanzialmente creato
una ISR a molteplici entry-point
o Il generico ramo di questa ISRi dovrà effettuare le seguenti
operazioni:
Push LPC salva priorità corrente
SET LPC istituisci nuova priorità
AG =1 abilita INT
servi causa_i 1
servi causa_i 2 servi la specifica causa
…
servi causa_i n
AG = 0; Ri = 0 disabilita INT; INT i servita
Pop LPC ripristina priorità
Un metodo diverse soluzioni
20
Tutto quanto detto può essere realizzato in una logica aggiuntiva del processore o mediante apposite interfacce di gestione delle INT
Approccio Intel
Approccio Motorola
Sviluppo un Chipset di supporto che svolge le funzioni in questione
Integro le funzioni all’interno del microprocessore
Un metodo, diverse soluzioni: l
’
8086
o L’8086 dispone di 3 piedini per governare il processo delle INT e
distingue tra:
n INT Interruzioni mascherabili
n NMI Interruzioni NON mascherabili
n INTA Interrupt Acknoledge
o Inoltre nella Program Status Word del processore vi sono due bit di flag
(IF - Interrupt Flag e TF - Trap flag) che consentono di distinguere tra INT interne ed INT esterne
o In ogni caso le azioni che conseguono ad una INT sono le stesse:
n Push PSW, CS, IP n Stabilisci il tipo di INT n Resetta TF ed IF
n IP <- MEM[4*N]; CS <- MEM[4*N+2] con N compreso in [0, 255]
o Le due parole a 16 bit contenenti IP e CS vengono dette Puntatore di INT o Vettore di INT ed il sistema delle INT si dice “vettorizzato”
Un metodo, diverse soluzioni: l
’
8086(2)
o IF Interrupt flag
n controlla gli eventi esterni di
tipo mascherabile o TF Trap flag
n Controlla i single-step interrupt
o Istruzioni per la gestione delle INT software
n INT (sottointeso type 3)
n INT0 (solo per Overflow)
n INT Type (vettore delle INT
4*Type)
o Gli Interrupt software non sono filtrati dal bit IF
Il Sistema delle Interruzioni 22
IP per tipo 0 CS per tipo 0 IP per tipo 1 CS per tipo 1 IP per tipo 2 CS per tipo 2 00000 00004 00008 Vettore 0 Vettore 1 Vettore 2
Riservato per errori di divisione
Riservato per TRAP
Riservato per NMI
00400 0000C
000010 00014
Riservato per INT Type ed eventi esterni
mascherabili Riservato per INT senza tipo
Riservato per Overflow
Nota:
Osserviamo che per gestire gli eventi esterni l’approccio Intel costringe ad utilizzare dispositivi esterni per gestire i livelli di priorità
Un metodo, diverse soluzioni: l
’
8259A
BUS
CPU
ISR Priority IRR
ICW 1 (chip control) ICW 2 (type)
ICW 3 (slave control) ICW 4 (mode) OCW 1 (IMR) OCW 2 OCW 3 Cas 0 Cas 1 Cas 2 IR 0 IR 1 IR 2 IR 3 IR 4 IR 5 IR 6 IR 7 SP/EN D7-D0 Address decoder A0 CS ICW: Initialization Command Word OCW: Operation Command Word
Questo chip consente di gestire
direttamente fino a 8 richieste oppure può pilotare in cascata fino ad 8 8259A per un totale di 64 Interrupt requests
INTA IORC IOWC
Un metodo, diverse soluzioni: il 68000
o La soluzione Motorola prevede
invece di dotare il
microprocessore di un Interrupt
Request Bus
o Il processore accetta la richiesta
solo se l’IPL applicato è maggiore del PPL corrente
o Anche stavolta c’è una Interrupt
Sequence:
1) Salva il PC e SR sullo stack di supervisore
2) PPL <- IPL 3) S <- 1
4) PC <- f(IPL) vettore delle INT
24 CPU Motorola 68000 IPL 2 IPL 1 IPL 0 I2 I1 I0 PPL
Processor Priority Level
IPL
Interrupt-request Priority Level SR - Status Register
Il punto 4 merita qualche chiarimento
Un metodo, diverse soluzioni:il 68000 (2)
o Nel General Mode la CPU legge un vettore di interruzione dal suo bus dati
o Nell’Autovector Mode la CPU genera internamente il vettore delle INT
o Quindi l’Autovector consente di gestire in maniera semplice 7 differenti interrupt vettorizzati con
l’aggiunta di un HW veramente banale
o Anche il 68000 possiede il concetto di interrupt sw con l’istruzione TRAP #N (N compreso [0, 15])
CPU Motorola 68000
IPL
Interrupt Selection Logic
8 bit Latch VPA D0 … D7 Priority Encoder 1 2 … 7 1 2 … … 192 3 bit Latch Interrupt ACK Interrupt Request (general mode) Interrupt Request (Autovector mode) IPL = 0 -> No INT IPL = 7 -> NMI Nota: a causa dell’assenza di un PIN apposito la gestione dell’NMI deve essere edge-triggered pena il malfunzionamento