mc cap 5
TRANSCRIPT
Microcontrolere - Capitolul 5 Corneliu BURILEANU ©
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 ©
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
•Excepţii: - capcane - “trap” (întreruperi soft)- greşeli – “faults”- greşeli fatale – “aborts”
Microcontrolere - Capitolul 5 Corneliu BURILEANU ©
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
3. 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
Microcontrolere - Capitolul 5 Corneliu BURILEANU ©
4
4. Greşeli:
- 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ă
5. 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.)
Microcontrolere - Capitolul 5 Corneliu BURILEANU ©
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. porţi de proces2. porţi pentru întreruperi3. porţi pentru “capcane”
Microcontrolere - Capitolul 5 Corneliu BURILEANU ©
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 ©
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:
- poarta conţine adresa virtuală a rutinei de deservire a întreruperii (indiferent de adresa virtualăasociată instrucţiunii)
- 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
Accesul la o poartă e posibil numai dacă Regula 1 a privilegiilor multi-nivel este respectată
Microcontrolere - Capitolul 5 Corneliu BURILEANU ©
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 oLDT
- 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 ©
9
5.4. Exemple de folosire a întreruperilor în modul virtual – IA16 / IA32
TIP Variantade
întrerupereSemnificaţie Adresa de revenire Restar-
tabilCod
eroare
0 greşeală Împărţire la 0 Primul octet al instrucţiunii curente DA NU
1 greşeală/capcană Funcţionare “pas cu pas” Instruc ţiunea următoare NU NU
2 întrerupere hard Întrerupere nemascabilă DA NU
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 sauWAIT NU NU
17 greşeală Eroare de aliniere a datelor Primul octet al instrucţiunii curente DA NU
18-31 rezervate
32-255 pentru utilizator
Microcontrolere - Capitolul 5 Corneliu BURILEANU ©
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 cazurilorcând se transferă mai mulţi octeţi în/din stivă: PUSHA şi POPA
Microcontrolere - Capitolul 5 Corneliu BURILEANU ©
11
Depanarea
1. Fanionul „capcană” TF din registrul de fanioane
- 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
2. Bitul „capcană” pentru schimbarea procesului –T din TSS
- 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 cuINT 1
4. 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ă