Mc cap 5
- 1. 5. ÎNTRERUPERI I EXCEP II
Ş
5.1. Defini ii
Variant de transfer al controlului
ă
Procedura general de r spuns la o cerere de întrerupere:
ă
ă
1.
se salveaz în stiv loca ia curent a programului – adresa virtual (CS) ↑ (EIP)
2.
se salveaz în stiv registrul de fanioane (EF)
3.
[ se reseteaz fanionul IF ]
4.
se salveaz în stiv codurile de eroare
5.
se transfer controlul la rutina de deservire a întreruperii (“Interrupt Handler”) prin
mecanismul adres rii indirecte, folosind o “tabel cu descriptori de întrerupere”
ă
ă
ă
ă
ă
ă
ă
ă
ă
Microcontrolere - Capitolul 5
Corneliu BURILEANU ©
1
ă
ă
ă
- 2. Observa ii:
- La Intel, pentru compatibilitate cu modul real, exist 256 de tipuri de întreruperi
i deci 256 de posibile rutine de deservire a întreruperilor
- O parte dintre tipurile de întreruperi sunt rezervate
ă
ş
Variante de întreruperi:
•Întreruperi propriu-zise (“hard”): - nemascabile
- mascabile
- capcane - “trap” (întreruperi soft)
- gre eli – “faults”
- gre eli fatale – “aborts”
ş
ş
•Excep ii:
Microcontrolere - Capitolul 5
Corneliu BURILEANU ©
2
- 3. Detaliere pentru IA16 i IA32
ş
1.
Întreruperile hard nemascabile:
- terminal dedicat (“NMI”)
- se asociaz cu TIP 2
ă
2.
Întreruperile hard mascabile:
- terminal dedicat (“INTR”)
- condi ia ca (IF)=1
- se utilizeaz numai tipurile 32 ÷ 255
ă
Capcane:
- toate întreruperile soft sunt considerate “capcane”
- se genereaz la apari ia erorilor dup efectuarea unei instruc iuni
ă
- exemplu: INTO
ă
- la revenirea din rutina de deservire a întreruperii se trece la instruc iunea imediat urm toare
celei care a generat întreruperea soft
ă
- se aplic mecanismul privilegiilor multi-nivel pentru protec ie
ă
3.
Microcontrolere - Capitolul 5
Corneliu BURILEANU ©
3
- 4. Gre eli:
ş
4.
- se genereaz la apari ia erorilor în timpul efectu rii unei instruc iuni
ă
ă
- exemplu: încercarea de acces într-o pagin non-prezent
ă
ă
- se refer la erori corectabile: revenirea din rutina de deservire a întreruperii se face chiar la
ă
instruc iunea care a generat întreruperea astfel încât sistemul de operare, dup ce a corectat
ă
eroarea, permite reluarea instruc iunii curente
- se aloc un tip specific fiec rei întreruperi tip gre eal
ă
ş
ă
ă
Gre eli fatale:
ş
- se genereaz la apari ia erorilor în timpul efectu rii unei instruc iuni
ă
ă
- eroarea este atât de sever încât revenirea la execu ia instruc iunii curente nu mai este posibil
ă
ă
- func ionarea procesorului se opre te (“halt”, “shut-down” etc.)
ş
5.
Microcontrolere - Capitolul 5
Corneliu BURILEANU ©
4
- 5. 5.2. Întreruperi în modul virtual
Rutinele de deservire a întreruperilor sunt în segmente din memoria virtual
ă
Se aplic mecanismele de protec ie
ă
Tabela cu vectori de întrerupere → Tabel cu descriptori de întrerupere (IDT)
ă
Exist o singur IDT a a cum exist o singur GDT
ă
ă
ş
ă
ă
Ca i pentru GDT, exist (la Intel) un registru dedicat pentru localizarea tabelei:
ă
ş
(IDTR) = BAZA_IDT ↑ LIMITA_IDT
IDT con ine:
1.
2.
3.
por i de proces
por i pentru întreruperi
por i pentru “capcane”
Microcontrolere - Capitolul 5
Corneliu BURILEANU ©
5
- 6. 5.3. Por i pentru întreruperi
Sunt descriptori de tip b3 – asem n toare por ilor de apelare
ă ă
tip
0110
Poart de întrerupere pentru 286
tip
1110
Poart de întrerupere pentru 386/486/Pentium
tip
0111
Poart de “trap” pentru 286
tip
1111
Poart de “trap” pentru 386/486/Pentium
ă
ă
ă
ă
Microcontrolere - Capitolul 5
Corneliu BURILEANU ©
6
- 7. Modul de apelare a rutinelor pentru deservirea întreruperilor:
1.
Întreruperile propriu-zise sunt vectorizate c tre por i de proces din IDT
2.
Excep iile utilizeaz în mod normal por i pentru capcane:
ă
ă
ă
ă
- procedura de r spuns las nemodificat fanionul IF
ă
ă
3.
Excep iile pot utiliza por i pentru întreruperi numai pentru compatibilitate cu modul real:
- poarta con ine adresa virtual a rutinei de deservire a întreruperii
ă
- procedura de r spuns reseteaz fanionul IF exact ca în modul real
ă
ă
Microcontrolere - Capitolul 5
Corneliu BURILEANU ©
ă
ă
Accesul la o poart e posibil numai dac Regula 1 a privilegiilor multi-nivel este respectat
7
ă
- poarta con ine adresa virtual a rutinei de deservire a întreruperii (indiferent de adresa virtual
asociat instruc iunii)
ă
- 8. Se folosesc “coduri de eroare” – informa ii adi ionale trimise în stiv înainte de transferarea controlului
la rutina de deservire a întreruperii
ă
Coduri de eroare
- INDEX i TI sunt luate din selectorul asociat segmentului în care a ap rut excep ia
ă
ş
- I = 1 indic faptul c INDEX se refer la IDT i nu “direct” la GDT sau la o LDT
ş
ă
ă
ă
- EXT = 1 indic faptul c instruc iunea curent nu e responsabil pentru generarea excep iei
(de exemplu, referin a la un segment non-prezent)
ă
ă
Microcontrolere - Capitolul 5
Corneliu BURILEANU ©
8
ă
ă
- 9. 5.4. Exemple de folosire a întreruperilor în modul virtual – IA16 / IA32
TIP
Varianta
de
întrerupere
Adresa de revenire
Restartabil
Cod
eroare
Împ r ire la 0
Primul octet al instruc iunii curente
DA
NU
Func ionare “pas cu pas”
Instruc iunea urm toare
NU
NU
DA
NU
Semnifica ie
0
gre eal
1
gre eal /capcan
2
întrerupere hard
Întrerupere nemascabil
3
capcan
“Breakpoint”
Instruc iunea urm toare
DA
NU
4
capcan
INTO
Instruc iunea urm toare
DA
NU
5
gre eal
Dep ire limit tablou de date
Primul octet al instruc iunii curente
DA
NU
6
gre eal
Cod instruc iune non-valid
Primul octet al instruc iunii curente
DA
NU
7
gre eal
Coprocesor non-disponibil
Primul octet al instruc iunii curente
DA
NU
8
gre eal fatal
Dubl gre eal
Primul octet al instruc iunii curente
NU
DA
9
gre eal fatal
Eroare coprocesor
Impredictibil
NU
NU
10
gre eal
TSS non-valid
Primul octet al instruc iunii curente
DA
DA
11
gre eal
P = 0 – segment non-prezent
Primul octet al instruc iunii curente
DA
DA
12
gre eal
Eroare legat de stiv
Primul octet al instruc iunii curente
NU
DA
13
gre eal
Violare de protec ie
Primul octet al instruc iunii curente
NU
DA
14
gre eal
Eroare de paginare
Primul octet al instruc iunii curente
DA
NU
15
rezervat
16
gre eal
Eroare coprocesor
Urm torul ESC sau WAIT
NU
NU
17
gre eal
Eroare de aliniere a datelor
Primul octet al instruc iunii curente
DA
NU
ă
ă
ă
ă
ă
ă
ă
ă
ă
ă
ă
şă
ă
ă
ă
ş
ă
ă
ă
ă
ă
ă
ă
ă
ă
ă
ă
ă
ă
ă
ă
ă
ş
ş
ş
ş
ş
ş
ş
ş
ş
ş
ş
ş
ş
ş
32-255
ă
18-31
rezervate
pentru utilizator
Microcontrolere - Capitolul 5
Corneliu BURILEANU ©
9
- 10. “Restartabil”: dup înl turarea cauzei erorii, programul continu prin re-executarea instruc iunii
ă
ă
ă
- Exemplu tipic: tipul 0
- Contra-exemplu: ADC care vizeaz s înscrie rezultatul într-un segment RO
ă ă
- Cazul segmentelor non-prezente: tipul 11
Eroare legat de stiv :
ă
ă
- segment de stiv non-prezent
ă
- dep irea limitei segmentului de stiv ; ar putea fi reluat programul cu excep ia cazurilor
când se transfer mai mul i octe i în/din stiv : PUSHA i POPA
ş
ă
ă
Microcontrolere - Capitolul 5
Corneliu BURILEANU ©
10
ă
şă
- 11. Depanarea
Fanionul „capcan ” TF din registrul de fanioane
ă
1.
- genereaz întrerupere de tip 1
ă
- se invoc o rutin ce permite func ionarea “pas cu pas”
ă
ă
- folosirea por ii de apelare nu permite trecerea “pas cu pas” la programe mai privilegiate
Bitul „capcan ” pentru schimbarea procesului – T din TSS
ă
2.
- când T=1, schimbarea procesului invoc INT 1
ă
- întreruperea apare dup înc rcarea noului TSS i execu ia primei instruc iuni din noul proces
ş
ă
ă
3.
Registre “breakpoint”: la Intel DR0 – DR7
- con in adrese la care execu ia programului poate fi oprit
ă
- oprirea execu iei se face tot cu INT 1
Folosirea instruc iunii INT 3
- format pe un octet
- pentru repornire, octetul de cod se înlocuie te cu cel al instruc iunii originale, iar EIP
se decrementeaz
ş
ă
4.
Microcontrolere - Capitolul 5
Corneliu BURILEANU ©
11