Programare i securitate la nivelul arhitecturii x 86

  • Slides: 23
Download presentation
Programare și securitate la nivelul arhitecturii x 86 Cursul 4 Intreruperi si exceptii

Programare și securitate la nivelul arhitecturii x 86 Cursul 4 Intreruperi si exceptii

Definitii n Intrerupere – oprirea temporara a executiei unei secvente de program ca urmare

Definitii n Intrerupere – oprirea temporara a executiei unei secvente de program ca urmare a aparitiei unui eveniment extern sau intern procesorului n n Solutionarea unei intreruperi – prin executia unei Rutine de tratare a intreruperii (ISR – Interrupt Service Routine) Dupa executarea rutinei de intrerupere se reia executia programului intrerupt Sunt permise intreruperi imbricate – intreruperi care apar in timpul tratarii unei alte intreruperi Tipuri de intrerupere: n n Asincrone – apar din cauze externe procesorului si nu au legatura directa cu programul executat – denumite simplu Intreruperi Sincrone – apar datorita unor cauze interne procesorului si au legatura cu programul executat – denumite Exceptii

Intreruperi multiple (imbricate)

Intreruperi multiple (imbricate)

Intreruperi n n n Denumite uneori intreruperi hardware pentru ca sunt generate prin activarea

Intreruperi n n n Denumite uneori intreruperi hardware pentru ca sunt generate prin activarea unui semnal de intrerupere catre procesor Indica aparitia unor evenimente in afara procesorului, dar de care trebuie sa ia cunostinta Intreruperile – folosite ca mijloc de sincronizare intre procesor si dispozitive periferice n n Modalitate de control al transferului de date intre o interfata si procesor – solutioneaza partea de sincronizare a fluxului de date Cauze pentru intreruperi n Intreruperi generate de diferite interfete: n n tastatura, mouse, disc, retea, contor de timp-real Intreruperi generate de anumite defecte in sistem: n caderea tensiunii de alimentare, eroare de paritate pe magistrala, etc.

Exceptii n Exceptii detectate de procesor: n Erori (Faults) — corectabile; instructiunea afectata este

Exceptii n Exceptii detectate de procesor: n Erori (Faults) — corectabile; instructiunea afectata este reluata n Capcane (Traps) — adesea folosite pentru depanare; instructiunea nu este reluata n n Abandonuri (Aborts) — erori majore (defecte hardware necorectabile) Exceptii programate: n n n intreruperi generate prin executarea unor instructiuni de intrerupere – denumite Intreruperi software Se folosesc ca si apeluri de proceduri ale sistemului de operare (System calls) Instructiuni de intrerupere: n n INT n – genereaza o intrerupere de nivel “n” INTO - intrerupere in caz de depasire de calacitate

Erori (Faults) n Cauzate de imposibilitatea de a executa o anumita instructiune; exemple: n

Erori (Faults) n Cauzate de imposibilitatea de a executa o anumita instructiune; exemple: n n n Uneori cauza erorii poate fi remediata n n Tentativa de a scrie intr-un segment marcat ca fiind ‘read-only’ Tentativa de a citi dintr-un segment inexistent (aflat pe disc, in memoria virtuala) Tentativa de a executa o instructiune “privilegiata” (ex. IN/OUT in modul protejat de catre un program utilizator) Tentativa de a imparti cu 0 Instructiune inexistenta Daca problema se poate rezolva atunci se reia executia instructiunii in cauza (ex. incarcarea segmentului lipsa din memoria virtuala) Cand eroarea nu se poate remedia, de obicei se genereaza catre SO o comanda de oprire a procesului curent (in care s-a produs eroarea)

Capcane (traps) n n n Se forteaza intrerupere dupa fiecare instructiune a programului utilizator

Capcane (traps) n n n Se forteaza intrerupere dupa fiecare instructiune a programului utilizator in vederea depanarii acestuia Ca raspuns la intrerupere se intra intr-un program de depanare (Debug) La procesoarele Intel x 86 acest lucru se poate provoca prin setarea indicativului TF (Trace/Trap Flag) din cadrul registrului de stare program - PSW

Sistemul de intreruperi la procesoarele Intel x 86 n n Procesoarele din familia Intel

Sistemul de intreruperi la procesoarele Intel x 86 n n Procesoarele din familia Intel x 86 accepta 256 de tipuri (nivele) de intrerupere, numerotate de la 0 la 255 Tipuri de intrerupere: n Erori – datorita unor anomalii detectate in interiorul procesorului n n Hardware – generate de un semnal de intrerupere catre procesor n n n Impartire cu 0, instructiune inexistenta NMI (non-maskable interrupt) – intrerupere nemaskabila (nu se poate bloca) INTR (interrupt) – semnal de intrerupere maskabil (blocabil) Software – generate prin executarea unor instructiuni de intrerupere: n n n INTR n - interrupt of level “n INTO - interrupt on overflow INT 3 - break-point

Intreruperi predefinite la Intel X 86 n Anumite intreruperi (exceptiile) au pozitii predefinite in

Intreruperi predefinite la Intel X 86 n Anumite intreruperi (exceptiile) au pozitii predefinite in lista de intreruperi: n n n n n 0: Divide by 0 1: Trap 2: NMI 3 Break-point 4 Overflow 5: Bounds 6: Undefined Opcode 7: Coprocessor Not Available 8: Double fault 9: Coprocessor segment overrun A: Invalid TSS B: Segment-Not-Present fault C: Stack fault D: General Protection Exception E: Page-Fault Exception F: Rezervat 10: Math fault 11: Alignment check 12: machine chack 13: SIMD floating point exception

Sistemul de intreruperi la procesoarele Intel x 86 n Tratarea intreruperilor externe maskabile (INTR):

Sistemul de intreruperi la procesoarele Intel x 86 n Tratarea intreruperilor externe maskabile (INTR): n Prin circuit specializat – controlor de intreruperi: n n PIC – Programmable Interrupt Controller – I 8259 A APIC – Advanced PIC µP INTR INTA IRQ 0 I/O I 8259 A IRQ 7 I/O

Controlorul de intreruperi I 8259 A n n Trateaza pana la 8 cereri externe

Controlorul de intreruperi I 8259 A n n Trateaza pana la 8 cereri externe de intrerupere (IRQ 0 -IRQ 7) Daca sunt mai multe intreruperi externe se pot pune mai multe controloare conectate in cascada; unul este master iar restul slave n n Se programeaza pentru a trata intreruperile in diferite moduri folosind: n n n La calculatoarele IBM-PC At sunt 2 controloare Cuvinte de control pentru initializare - ICW Cuvinte de control pentru operare – OCW Prin programare se definesc următorii parametri de funcţionare: n n n modul de lucru 8080 sau 8086 modul de detecţie a întreruperilor: pe front (la tranziţia din 0 în 1) sau pe nivel modul de imbricare a întreruperilor: normală sau specială (imbricare=deservirea unei alte întreruperi în timpul execuţiei unei rutine de întrerupere) tipul de prioritate: fixă sau rotativă poziţia întreruperilor deservite în tabela de întreruperi (adresa de bază)

Controlorul de intreruperi I 8259 A

Controlorul de intreruperi I 8259 A

Secventa de deservire a unei intreruperi 1. 2. 3. 4. 5. 6. 7. 8.

Secventa de deservire a unei intreruperi 1. 2. 3. 4. 5. 6. 7. 8. 9. Interfata genereaza o intrerupere prin activarea unui semnal IRQi catre controlor Controlorul verifica daca intreruperea este permisa si nu este alta mai prioritara in curs de deservire Daca intreruperea este permisa se genereaza o intrerupere catre procesor prin activarea semnalului INTR Dupa terminarea instructiunii curente, Procesorul genereaza doua cicluri INTA pt. identificarea sursei de intrerupere Pe al doilea ciclu controlorul pune pe liniile de date ale magistralei vectorul intreruperii curente Procesorul foloseste vectorul ca index in Tabela de intreruperi pentru a citi adresa Rutinei de intrerupere Procesorul salveaza pe stiva adresa de revenire si starea dupa care face un salt la Rutina de intrerupere La sfarsitul rutinei de intrerupere procesorul da o comanda catre controlor pentru incheierea intreruperii curente (EOI) La executia instructiuni IRET (revenire din rutina de intrerupere) procesorul ia de pe stiva adresa de revenire si face salt la aceasta adresa, continuind programul intrerupt

Sistemul de întreruperi al calculatoarelor personale compatibile IBM PC AT n 2 controloare de

Sistemul de întreruperi al calculatoarelor personale compatibile IBM PC AT n 2 controloare de intrerupere n n n Intreruperi hardware: n n n n IRQ 0 -7 => INT 8 -15 IRQ 8 -15 => INT 70 h-77 H Timer de ceas Tastatura Canale seriale Interfata de imprimanta Interfata FDD/HDD Interfata de retea Intreruperi software: n n Intreruperi BIOS: tastatura, interfata video, canal serial, interfata de imprimanta, interfata floppy Apeluri sistem (INT 21 h): citire canal standard de intrare, scriere canal de iesire, citire/scriere disc, etc.

Exemplu de redirectare a unei intreruperi software VECT DW 2 DUP(? ) ; aici

Exemplu de redirectare a unei intreruperi software VECT DW 2 DUP(? ) ; aici se salvează vechiul vector de ; întrerupere ; initializare ……. . MOV AH, 35 h ; 35 h-funcţie sistem pentru citirea ; vectorului de întrerupere MOV AL, n ; n – nivelul de întrerupere redirectat INT 21 h ; apelul funcţiei sistem; funcţia returnează ; în ES: BX adresa rutinei de la nivelul n MOV VECT, BX ; salvare adresă offset MOV BX, ES MOV VECT+2, BX ; salvare adresă segment MOV AX, SEG RUT_INT MOV DS, AX ; DS <- adresa de segment a noii rutine de ; tratare a întreruperii MOV DX, OFFSET RUT_INT ; DX <- adresa de offset a noii ; rutine de întrerupere MOV AH, 25 h ; 25 h - funcţia de scriere vector; în ; DS: DX se pune adresa rutinei de întrer. MOV AL, n ; n – nivel de întrerupere INT 21 h ; apelul funcţiei sistem ………. ; program ……… INT n …… ; sfîrşit program MOV AX, VECT+2 ; refacerea adresei MOV DS, AX MOV DX, VECT MOV AH, 25 h ; funcţia de scriere vector MOV AL, n ; n – nivel întrerupere INT 21 h ; înscrierea vechiului vector în ; tabela de intreruperi …….

Continuare ; rutina de tratare a întreruperii RUT_INT PROC FAR PUSH r ; rutinei

Continuare ; rutina de tratare a întreruperii RUT_INT PROC FAR PUSH r ; rutinei (r = AX, BX, …. ) STI ………. . ; corpul rutinei ………. . ; sfîrşitul rutinei POP r IRET RUT_INT ENDP ; noua rutina de tratare a intreruperii ; salvarea registrelor utilizate în cadrul ; validare întrerupere ; refacere registre salvate

Exemplul 2 – programarea unei intreruperi hardware INTA 00 EQU 20 H ; adresa

Exemplul 2 – programarea unei intreruperi hardware INTA 00 EQU 20 H ; adresa portului 0 din controlorul de întreruperi INTA 01 EQU 21 H ; adresa portului 1 din controlorul de întreruperi EOI EQU 20 h ; comanda de incheiere intrerupere MASCA EQU 11011111 B ; mască pentru validarea intrării nr. 5 MASCA 1 EQU 00100000 B ; mască pentru invalidarea intrării nr. 5 ………. . ; initializare întrerupere CLI ; invalidarea întreruperilor mascabile MOV AX, SEG RUT_INT MOV DS, AX MOV DX, OFFSET RUT_INT MOV AH, 25 h ; 25 h - funcţia de scriere vector MOV AL, 5+8 ; 5+8= nivel de întrerupere programat ; adresa de bază a primului controlor de întreruperi este 8 INT 21 h ; apel de funcţie sistem MOV DX, INTA 01 IN AL, DX ; citire registru de mască AND AL, MASCA ; şterge bit mască pt. întreruperea 5 OUT DX, AL ; validare intrare de întrerupere STI ; validare întreruperi mascabile ………. ; program ………

Continuare ; sfîrşit program CLI MOV DX, INTA 01 IN AL, DX ; citire

Continuare ; sfîrşit program CLI MOV DX, INTA 01 IN AL, DX ; citire registru de mască OR AL, MASCA 1 ; setează bitul mască pt. întreruperea 5 OUT DX, AL ; invalidarea intrării de întrerupere STI ……. ; rutina de tratare a întreruperii RUT_INT PROC FAR ; noua rutina de tratare a intreruperii PUSH r ; salvarea registrelor utilizate in cadrul rutinei STI ; validare întreruperi ………. . ; corpul rutinei ………. . ; sfîrşitul rutinei MOV DX, INTA 00 MOV AL, EOI OUT DX, AL ; comandă de sfîrşit întrerupere POP r ; refacere registre salvate IRET RUT_INT ENDP

Intreruperi la sistemele multi-core Multi-CORE CPU 0 CPU 1 LOCAL APIC I/O APIC -

Intreruperi la sistemele multi-core Multi-CORE CPU 0 CPU 1 LOCAL APIC I/O APIC - Advanced Programmable Interrupt Controller – este necesar pentru a directiona cererile de intreruperi catre procesoare (PIC-urile traditionale sunt maskate cand APIC-urile sunt validate)

APIC, IO-APIC, LAPIC n Advanced PIC (APIC) folosit pentru sisteme SMP – Symetric Multi-Procesor

APIC, IO-APIC, LAPIC n Advanced PIC (APIC) folosit pentru sisteme SMP – Symetric Multi-Procesor n n Local APIC (LAPIC) versus “frontend” IO-APIC n n n Folosit in toate sistemele de calcul moderne Intreruperile sunt directionate catre procesor pe magistrala IPI: inter-processor interrupt Dispozitivele conectate la front-end IO-APIC comunica (pe magistrala) cu Local APIC Dirijarea intreruperilor n n Permite dirijarea/directionarea intreruperilor prin broadcast sau selectiv Capacitatea de a distribui incarcarea sarcinilor de intrerupere Dirijeaza catre procesul cel mai putin prioritar n Registru special: Task Priority Register (TPR) Atribuie echitabil (round-robin) daca prioritatile sunt egale

Alocarea semnalelor de intrerupere IRQ n Uneori depinde de configuratia fizica, alte ori se

Alocarea semnalelor de intrerupere IRQ n Uneori depinde de configuratia fizica, alte ori se poate reprograma: n IRQ hardcodate: n n n IRQ reconfigurabile: n n n IRQ 0 - ceas de timp real, IRQ 2 - al doilea controlor de intreruperi Dispozitivele PCI primesc alocari de intreruperi la incarcarea sistemului de operare Dispozitivele USB – primesc intreruperi in mod dinamic in functie de dispozitivul conectat fizic Doua dispozitive pot folosi acelasi semnal IRQ daca nu sunt utilizate simultan (ex. dispozitive conectate pe USB)

IDT - Interrupt Descriptor Table n n Punctul de intrare in rutina de tratare

IDT - Interrupt Descriptor Table n n Punctul de intrare in rutina de tratare a intreruperii este localizata cu ajutorul tabelei de descriptori de intrerupere Interrupt Descriptor Table (IDT) IDT contine descriptori de poarta: “gate descriptors” n n n Selector de Segment + offset-ul rutinei (al handler-ului) Descriptor Privilege Level (DPL) – nivelul de privilegiu al descriptorului Gates (porti - diferite moduri de a intra in kernel) n Task gate: include TSS la care se transfera (nu este folosit in Linux) n Interrupt gate: invalideaza alte intreruperi n Trap gate: alte intreruperi sunt permise

Tratarea intreruperilor n n n n Fiecare intrerupere este tratata de o rutina (handler

Tratarea intreruperilor n n n n Fiecare intrerupere este tratata de o rutina (handler de dispozitiv sau trap) Interrupt Descriptor Table (IDT) are descriptori de poarta pentru fiecare tip de intrerupere Hardware-ul detecteaza locatia descriptorului de poarta pentru o intrerupere si contextul nou de executie a rutinei de tratare Sunt icarcate: un nou stack pointer, program counter si stare memorie , CPU, etc. , Setare “Global interrupt mask” Vechiul program counter, stack pointer, CPU si memory state, etc. , sunt salvate pe noua stiva Rutina (handlerul) adecvat este lansat in executie