Creeaza.com - informatii profesionale despre


Simplitatea lucrurilor complicate - Referate profesionale unice
Acasa » referate » informatica » calculatoare
SISTEMUL DE INTRERUPERI AL UNUI CALCULATOR

SISTEMUL DE INTRERUPERI AL UNUI CALCULATOR


SISTEMUL DE INTRERUPERI AL UNUI CALCULATOR

1. Generalitati

Prin intrerupere se intelege oprirea asincrona a executiei programului, datorita necesitatii tratarii preferentiale a unui anumit fenomen.

Oprirea rularii programului se poate realiza prin activarea unor linii externe microprocesorului, sau generarea unor semnale interne. Daca cererea de intrerupere este acceptata, atunci microprocesorul termina instructiunea curenta, dupa care, prin intermediul unui vector de intrerupere ajunge la rutina de tratare a intreruperii respective.

Functie de zona ce genereaza cererea, intreruperile pot fi:



Intreruperi externe, ce sunt generate din exteriorul microprocesorului;

Intreruperi interne, care la randul lor se inpart in:

Intreruperi generate intern de microprocesor, ca urmare a unor evenimente aparute in timpul functionarii (ex. : inpartirea prin zero).

Intreruperi "software", care sunt intreruperi generate in urma executiei unor instructiuni cum ar fi: INT sau INTO.

Functie de modul in care o intrerupere poate fi luata in consideratie sau nu, intreruperile pot fi:

Mascabile, in cazul in care prin intermediul unor celule (bistabili) interne, intreruperea poate fi luata in consideratie sau nu.

Nemascabile, in cazul in care intreruperea este intotdeauna liuata in consideratie. Ea indica aparitia unor evenimente care trebuie neaparat tratate (ex.:oprirea alimentarii, sau orice intrerupere interna, cu exceptia intreruperii pas cu pas).

In Fig. 1, sunt prezentate modurile cum pot fi generate intreruperileintr-un sistem cu microprocesor.

Fig. 1. Modul de generare a intreruperilor intr-un sistem cu microprocesor

Tipuri de intreruperi

Microprocesorul poate gestiona 256 de tipuri de intreruperi, fiecarui tip de intrerupere fiindu-i asociat un numar "N"cuprins de la 0 la 255. Acest lucru inseamnaca el poate gasi 256 de subrutine care sa trateze 256 de cauze de intrerupere.

Primele cinci tipuri de intrerupere sunt atribuite (dedicate) unor evenimente interne si unei intreruperi externe. Aceste prime cinci tipuri sunt definite in tabelul de mai jos.

Urmatoarele 27 de tipuri sunt rezervate de firma INTEL iar restul tipurilor (de la 32 la 255) sunt la dispozitia utilizatorilor.

Observatie: Unii producatori de echipamente destinate PC-urilor, au neglijat restrictia inpusa de INTEL asupra intreruperilor (5 31) si ca urmare au aparut situatii de conflict. Spre exemplu tipul 5 de intrerupere a fost utilizat de IBM pentru functia "Print Screen". Ulterior, INTEL a folosit acelasi tip de intrerupere pentru a rezolva niste conflicte interne la procesoarele mai noi. Softul trebuie sa deosebeasca de unde provine tipul de intrerupere (intrerupere interna "hard", sau intrerupere "soft").

TIPUL

INTR

EVENIMENTUL ASOCIAT

Inpartire cu zero (Divide Error Exception)

Pas cu pas (Single Step Interrupt)

NMI-intrerupere externa nemascabila (Non Mascable Interrupt-NMI)

Intreruperea "Break Point"

Intrerupere de depasire (overflow exception)

Indiferent de tipul intreruperii, modul in care sistemul raspunde la o cerere de intrerupere este cam acelasi, calculatorul executand ce mai sunt cunoscuti si sub denumirea de "secventa de intrerupere" (interrupt sequence). Ca principiu, aceasta "secventa de intrerupere", poate fi descrisa astfel:

-In momentul in care microprocesorul primeste o intrerupere, el cauta sa afle tipul acesteia (numarul "N").

-Se salveaza in stiva continutul registrului de stare (PSW - Program Status Word), al registrului CS (Code Segment) si al registrului IP (Instruction Pointer), in aceasta ordine.

-Se sterg indicatorii IF (Interrupt enable Flag) si TF (Trap Flag), din structura lui PSW (Program Status Word).

Odata aflat numarul "N" ce reprezinta tipul intreruperii, acesta este multiplicat cu 4 si numarul obtinut reprezinta adresa din memoria RAM unde se afla adresa la care se gaseste subrutina ce deserveste intreruperea respectiva. Aceasta adresa se numeste "vector" de intrerupere sau "interrupt pointer".

Zona de memorie in care se afla aceste adrese este numita tabela vectorilor de intrerupere" si ocupa primul Koctet de memorie RAM (1024 locati).

Datorita inmultirii cu 4, fiecarui vector ii este asociata o zona de patru octeti. Initial la 8086 (Fig.1.22), primii 2 octeti erau transferati in CS (Code Segment) si urmatorii in IP (Instruction Pointer), iar subrutina se afla la adresa fizica ce rezulta din sumarea lui IP cu registrul CS decalat cu patru pozitii la stanga Fig. 2).

Fig. 2. Formarea adresei la care se afla subrutina

de tratarea unei intreruperi (pentru microprocesorul 8086)

Modul cum intra microprocesorul in posesia vectorului de intrerupere, depinde de tipul intreruperii, iar modul in care microprocesorul gestioneaza intreruperile este dependent si de starea in care se afla unii bistabili din PSW (Program Status Word).

Structura registrului de stare - PSW (Program Status Word)

La microprocesorul 8086 (care este luat ca referinta si in cazul structurarii sistemului de intreruperi al unui PC), PSW contine 6 biti (celule) de stare si 3 biti (celule) de control. Structura acestui registru este prezentata in Fig.

Unele caracteristici ale rezultatului unei operatii aritmetice sau logice pot fi identificate prin intermediul bitilor de stare care pot fi utilizati pentru selectia anumitor ramuri de program. Acesti bistabili sunt:

Fig.   Structura PSW (Program Status Word)

AF (Auxiliar Carry Flag - Indicator Transport Auxiliar). Pozitionarea pe 1 logic a acestui bistabil indica un transport dinspre bitul 7 spre bitul 8 (se opereaza pe 16 biti). Indicatorul poate fi utilizat in cazul operarii cu numere zecimale.

CF (Carry Flag - Indicator de transport). Pozitionarea pe 1 logic arata existenta unui transport sau un inprumut catre cel mai semnificativ bit al rezultatului, in cazul unei operatii de adunare respectiv scadere.

OF (Overflow Flag - Indicator de depasire). Acest indicator este pozitionat pe 1 logic, in situatia in care in urma unei operatii aritmetice a aparut o depasire a formatului rezultatului. In aceasta situatie, cel mai semnificativ bit al rezultatului se pierde.

SF (Sign Flag - Indicator de semn). Pozitionarea pe 1 logic a acestui indicator se face atunci cand cel mai semnificativ bit al rezultatului este negativ si ca urmare a utilizarii complementului fata de 2 in reprezentarea numerelor, cel mai semnificativ bit al rezultatului este 1. Pentru numere pozitive (mai mici ca 216), indicatorul SF este 0.

PF (Parity Flag - Indicator de paritate). Indicatorul este pozitionat pe 1 atunci cand rezultatul are un numar par de biti pozitionati pe 1 logic.

ZF (Zero Flag - Indicator de zero). Daca acest este 1, inseamna ca rezultatul ultimei operatii efectuate de unitatea centrala este 0.


Bitii (indicatorii sau celulele) de control sunt indicatori ce pot fi modificati prin program pentru a influienta comportarea microprocesorului in anumite situatii. Acesti indicatori sunt:

DF (Direction Flag - Indicator de directie). In cazul in care se opereaza cu siruri de caractere, indicatorul DF stabileste autoincrementarea (DF=0), sau autodecrementarea (DF=1) registrilor SI (Source Index) si DI (Destination Index) (Fig.1.22) care contin offset-ul adreselor sursa si respectiv destinatie. Acesti registrii interni se utilizeaza in cazul operatiilor de transfer.

IF (Interrupt enable Flag - Indicator de validare a intreruperii). Acest indicator valideaza (IF=1) sau invalideaza (IF=0) cererile de intrerupere externe mascabile. Indicatorul nu are nici un efect asupra intreruperii externe nemascabile (NMI) sau asupra intreruperilor generate intern de procesor.

TF (Trap Flag - Indicator "capcana"). Atunci cand acest indicator este pozitionat pe 1 logic, microprocesorul intra in modul de "operare pas cu pas". In aceasta situatie microprocesorul va genera automat o intrerupere avand tipul 1, dupa executia fiecarei instructiuni.

Instructiunile cu ajutorul carora se poate actiona direct asupra indicatorilor dim PSW precum si denumirile in limba engleza ale acestora, sunt prezentate in tabelul urmator.

DENUMIRE INSTRUCTIUNE

MEMONICA

DESCRIERE INSTRUCTIUNE

Clear carry (sterge CF)

CLC

CF

Complement carry (complementeaza CF)

CMC

Set carry (activeaza CF)

STC

CF

Clear direction (sterge DF)

CLD

DF

Set direction (activeaza DF)

STD

DF

Clear interrupt (sterge IF)

CLI

IF

Set interrupt (activeaza IF)

STI

IF

Load AH from flags

(incarca AH cu continutul indicatorilor)

LAHF

(AH (octetul inferior al PSW)

Store AH to flags

(incarca indicatorii cu continutul lui AH)

SAHF

(octetul inferior al PSW) (AH)

Tabela vectorilor de intrerupere

Primele 1024 de adrese de memorie RAM sunt alocate asa numitei tabele a vectorilor de intrerupere (Fig. 4). Aceasta zona de memorie se imparte in 256 de sectiuni a cate 4 octeti, in care sunt inscrise doua cuvinte a cate 16 biti, reprezentand noul continut al registrilor IP (Instruction Pointer) si respectiv CS (Code Segment).

Adresa de inceput a fiecarei sectiuni de 4 octeti se determina inmultind tipul intreruperii cu 4, dupa care se formeaza adresa rutinei ce trateaza intreruperea respectiva, asa cum este prezentat in Fig. 2.

Din Fig. 4, se observa ca la 8086, numai primele 5 tipuri de intreruperi corespund unor evenimente predefinite. Modul in care se comporta microprocesorul la aparitia acestor intreruperi este prezentet mai jos.

Tipul "0" . Vectorul de intrerupere (continutul registrilor IP si CS), se afla la adresele 0000h si respectiv 00002h.

Acest tip de intrerupere poate apare in urma unei instructiuni DIV sau IDIV

DIV_sursa (DIVide). Instructiunea executa o inpartire fara semn a registrului AX la un numar specificat de "sursa".

Ex:

DIV CL

DIV BX

Daca operatorul sursa este un octet (ex. in registrul CL), atunci catul este returnat in AL si restul in AH.Daca operandul sursa este un cuvant (ex. in registrul BX), catul este returnat in AX iar restul in DX.

Daca catul depaseste capacitatea registrului destinatie (FFh pentru un octet sau FFFFh pentru un cuvant), atunci este generata o intrerupere de tip "0".

IDIV_sursa (Integer DIVide). Instructiunea realizeaza o impartire cu semn a acumulatorului la operandul "sursa".

Ex:

IDIV BL

IDIV CX

Fig.4. Tabela vectorilor de intrerupere

Daca operandul "sursa" este un octet (BL), catul se va gasi in AL si restul in AH, iar daca operandul este este un cuvant (CX), catul se va afla in AX si restul in DX. Intreruperea apare daca catul se afla in afara valorilor -127 (81h) si +127 (7Fh), in cazul inpartirii la un octet, sau -32767 (8001h) si +32767 (7FFFh) in cazul inpartirii la un cuvant.

Tipul "1". Vectorul de intrerupere (IP si CS) se afla la adresele 00004h respectiv 00006h.

Acesta intrerupere (single step trap - intrerupere dupa un pas), apare dupa fiecare instructiune daca indicatirul TF din structura PSW (Program Status Word) este pozitionat pe 1 logic. Rutina ce trateaza aceasta intrerupere poate afisa continutul registrilor microprocesorului, variabilele semnificative, etc., urmarind in acest mod cum se comporta sistemul fata de programul ce este rulat.

Deoarece conform secventei de intrerupere, dupa ce registrii PSW, CS si IP au fost salvati in stiva, indicatorii TF si IF se sterg, rutina ce deserveste intreruperea de tip 1 poate rula fara a apare intreruperi de acelasi tip (tip 1) dupa fiecare instructiune. La intoarcerea din subrutina se utilizeaza instructiunea IRET (Return from Interrupt). Modul de operare al acestei instructiuni este urmatorul:

(IP) ((SP)+1 : (SP)) se incarca registrul IP cu octetii aflati la adresele

(SP)+1 si (SP)

(SP) (SP)+2 se incrementeaza cu 2 (SP)

(CS) ((SP)+1 : (SP)) se incarca registrul CS cu octetii aflati la adresele

(SP)+1 si (SP)

(SP) (SP)+2 se incrementeaza cu 2 (SP)

(PSW) ((SP)+1 : (SP)) se incarca registrul PSW cu octetii aflati la adresele

(SP)+1 si (SP)

(SP) (SP)+2 se incrementeaza (SP) cu 2

Din modul de operare a instructiunii IRET, se observa ca dupa terminarea subrutinei se reface registrul PSW si in acest mod se repozitioneaza pe 1 logic indicatorul TF.

Nu exista instructiuni care sa modifice direct valoarea indicatorului TF. Din acest motiv, schimbarea valorii logice a acestui indicator se face prin intermediul stivei, in modul urmator:

PUSHF se salveaza PSW in stiva

POP AX se incarca AX cu cei doi octeti din varful stivei

(adica cu continutul lui PSW)

OR AX, 0100 se pozitioneaza pe 1 logic bitul corespunzator

indicatorului TF

PUSH AX se salveaza in stiva AX

POP AX se reface PSW cu TF=1

Stergerea indicatorului TF se face similar:

PUSHF se salveaza PSW in stiva

POP AX se incarca AX cu cei doi octeti din varful stivei

(adica cu continutul lui PSW)

AND AX, FEFF se pozitioneaza pe 0 logic bitul corespunzator

indicatorului TF

PUSH AX se salveaza in stiva AX

POP AX se reface PSW cu TF=1

In aceasta situatie "SI" logic intre continutul lui AX si FEFF (11101111) asigura inscrierea unui '0' logic in pozitia corespunzatoare indicatorului TF.

Tipul "2". Vectorul de intrerupere (IP si CS) se afla la adresele 00008h respectiv 0000Ah. Acest vector corespunde unei intreruperi externe nemascabile (NMI - Non Maskable Interrupt).

Ceilalti vectori de intrerupere corespund fie unor intreruperi generate de semnale externe la terminalul 'INTR' al procesorului (intreruperi externe - external interrupts), fie ca urmare a executiei unor instructiuni specifice (intreruperi soft - software interrupts).

Instructiunile utilizate pentru generarea unei intreruperi soft sunt: INT, INT N, INTO, unde N

Numarul 'N' reprezinta tipul intreruperii. Instructiunea INT N, este o instructiune pe 2 octeti si genereaza urmatoarea secventa de intrerupere:

(SP) (SP)-2 decrementeaza stiva

((SP)+1 (SP)) (PSW) se salveaza PSW in stiva

(SP) (SP)-2 se decrementeaza stiva

((SP)+1 SP)) (CS) se salveaza CS in stiva

(SP) (SP)-2 decrementarea stivei

((SP)+1 (SP)) (IP) salveaza in stiva registrul IP

(IP) (N*4) incarcarea in IP a cuvantului ce incepe la adresa 4*N

(CS) (N*4+2) incarcarea in CS a cuvantului ce incepe la adresa 4*N+2

Instructiunea INT este pe un octet si este similara cu instructiunea INT 3 . Aceasta instructiune se foloseste doar in cazul tipului 3 de intrerupere.

Tipul "3". Vectorul de intrerupere (IP si CS) se afla la adresele 000Ch si respectiv 000Eh. Acest vector corespunde unei soft, generate de catre instructiunea INT si se mai numeste si "breakpoint".

In procesul de depanare al unui program, in anumite puncte este utila cunoasterea unor variabile, a starii unor registri interni, etc.. De obicei, in aceste puncte (breakpoints) rularea programului se opreste si se executa niste rutine care afiseaza valorile de interes. Lansarea rutinelor se poate face cu ajutorul unor intreruperi soft. Daca in fiecare punct de oprire a programului principal (breakpoint) se doreste efectuarea unor operatii diferite (ex. se afiseaza valorile unor variabile diferite, in puncte de oprire diferite) atunci trebuie utilizate intreruperi diferite (ex.: N= 5; 6; 7.), asa cum este prezentat in Fig. 5.

Intreruperea INT 5 asigura afisarea unor variabile, intreruperea INT 6 asigura afisarea altor variabile si asa mai departe. In situatia in care ceea ce se doreste a fi executat in punctele de oprire control a programului principal nu difera, se poate utiliza o singura rutina de intrerupere, deci un singur tip de intrerupere.

Fig.5. Modul de utilizare a intreruperilor pentru depanarea unui program

Acesta poate fi tipul 3 (N=3) si si se lanseaza prin intermediul instructiunii INT, care este pe un octet.

Tipul "4". Vectorul de intrerupere (IP si CS) se afla la adresele 0010h si respectiv 0012h.

Acest tip de intrerupere poate apare daca in urma unei instructiuni aritmetice, indicatorul OF (Overflow Flag) devine 1. Acest lucru indica, ca in urma operatiei aritmetice, a aparut o depasire a formatulu rezultatului (s-a pierdut cel mai semnificativ bit).

Spre deosebire de intreruperea corespunzatoare tipului "0" (impartire prin zero), care este lansata automat ce a avut loc o depasire a formatului (in urma unei instructiuni DIV sau IDIV), in situatia corespunzatoare tipului "4", lansarea intreruperii se face cu ajutorul instructiunii INTO (INTerupt on Overflow).

Daca indicatorul OF=1, aceasta instructiune genereaza urmatoarea secventa:

(SP) (SP)

((SP)+1:(SP)) (PSW)

(SP) (SP)

((SP)+1: SP)) (CS)

(SP) (SP)

((SP)+1: SP)) (IP)

(IP) (10H)

(CS) (12H)

Un exemplu de utilizare a instructiunii INTO este prezentat in Fig.6.

Fig.6 Exemplu de utilizare a instructiunii INTO

Se observa ca in structura rutinei de tratare a intreruperii nu se salveaza in stiva registrul PSW, deoarece acesta este automat salvat si apoi refacut de instructiunile INTO si respectiv IRET.

Instructiunea IRET (Return from interrupt - intoarcere din subrutina), este ultima instructiune dintr-o rutina de intrerupere si realizeaza urmatoarea secventa:

(IP) ((SP)+1: (SP))

(SP) (SP)+2

(CS) ((SP)+1: (SP))

(SP) (SP)+2

(PSW) ((SP)+1: (SP))

(SP) (SP)+2

Intreruperile externe

Intreruperile ce apar in urma aplicarii unor nivele logice corespunzatoare pe liniile NMI (Non Mascable Interrupt) sau INTR (Interrupt) ale unui microprocesor (Fig.1), se numesc intreruperi externe.

Intreruperea nemascabila (NMI) are asociat tipul 2 (N=2) si ii corespunde o singura rutina de intrerupere, in timp ce semnalele care ajung pe linia INTR, pot proveni de la mai multe echipamente ale sistemului si necesita tratari diferite. Ca urmare, functie de echipamentul ce a solicitat intreruperea, se va lansa o anumita rutina care corespunde unui anumit tip de intrerupere (unui anumit N). Teoretic tipul unei intreruperi externe poate fi ales intre 5 si 255. Practic un calculator are alocate 15 linii la care pot fi cuplate echipamente externe microprocesorului. Unele dintre aceste echipamente sunt indispensabile functionarii sistemului (Timer, tastatura, controlor de disc durceas de timp real), alte linii sunt accesibile si utilizatorului, ele fiind disponibile pe diverse linii ale magistralelor sistemului. Tipul fiecarei intreruperi externe este definit printr-un standard si va fi fi prezentat in paragrafele urmatoare. Cererile de intrerupere generate de dispozitivele exterioare microprocesorului, nu ajung direct la acesta, ci printr-un circuit specializat (8259A), care genereaza pe magistrala de date a sistemului si numarul corespunzator tipului intreruperii.

Secventa pe care o executa procesorul la aparitia unei intreruperi externe este aceeasi ca si in cazul intreruperilor soft si anume:

-In momentul in care microprocesorul primeste o intrerupere, el cauta sa afle tipul acesteia (numarul "N").

-Se salveaza in stiva continutul registrului de stare (PSW - Program Status Word), al registrului CS (Code Segment) si al registrului IP (Instruction Pointer), in aceasta ordine.

-Se sterg indicatorii IF (Interrupt enable Flag) si TF (Trap Flag), din structura lui PSW (Program Status Word).

Odata aflat numarul "N" ce reprezinta tipul intreruperii, acesta este multiplicat cu 4 si numarul obtinut reprezinta adresa din memoria RAM unde se afla adresa la care se gaseste subrutina ce deserveste intreruperea respectiva. Aceasta adresa se numeste "vector" de intrerupere sau "interrupt pointer".

Ceea ce diferentiaza intreruperile externe de cele interne (soft), este modul in care se determinatipul intreruperii (punctul 1).

In cazul intreruperilor soft, tipul intreruperii este dat odata cu instructiunea (INT N).

In cazul intreruperii lansate pe linia NMI, tipul este 2 (N=2).

In cazul intreruperii lansate pe linia INTR, tipul instructiunii se citeste de pe magistrala de date a sistemului, algoritmul de functionare al microprocesorului fiind in acord modul de functionare al controlerului de intreruperi (8259A).

Daca IF=0, intreruperile sosite pe linia INTR nu sunt luate in consideratie.

Daca IF=1, intreruperile sosite pe linia INTR sunt luate in consideratie, dar scventa pe care o executa microprocesorul contine si zezactivarea intreruperilor externe ulterioare (IF=TF=0). Daca se doreste ca intreruperile sa fie activate si pe durata subrutinei de intreruperi, este necesar ca in programul subrutinei sa existe si instructiunea STI (Set interrupt - activare intrerupere) ce inscrie valoarea 1 in indicatorul IF din PSW.

Subrutina de intrerupere trebuie sa se termine instructiunea IRET (intoarcere din intrerupere) si nu cu RET (intoarcere din subrutina) deoarece aceasta din urma nu reface si continutul indicatorilor din PSW, care sunt modificati (IF si TF) in secventa de tratare a intreruperii.





Politica de confidentialitate


creeaza logo.com Copyright © 2024 - Toate drepturile rezervate.
Toate documentele au caracter informativ cu scop educational.