mc cap 5

11
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”

Upload: iulian-pavaloiu

Post on 09-Aug-2015

72 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Mc cap 5

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”

Page 2: Mc cap 5

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”

Page 3: Mc cap 5

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

Page 4: Mc cap 5

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.)

Page 5: Mc cap 5

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”

Page 6: Mc cap 5

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

Page 7: Mc cap 5

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ă

Page 8: Mc cap 5

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)

Page 9: Mc cap 5

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

Page 10: Mc cap 5

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

Page 11: Mc cap 5

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ă