Sunteți pe pagina 1din 7

SISTEMUL DE NTRERUPERI PENTRU PUG

Conceptul de ntrerupere
Posibilitatea ntreruperii execuiei unui program este impus de necesitatea sincronizrii
UCP cu evenimente interne sau externe. De exemplu, executarea unor transferuri I/O din
iniiativa UCP este convenabil atunci cnd funcionarea dispozitivelor periferice este
previzibil i regulat. Din contr, aceast tehnic este total inadecvat dac comportarea
perifericelor este aleatoare sau are un caracter de urgen. n aceste situaii este mai indicat ca
iniiativa executrii transferului s aparin dispozitivelor periferice, care trebuie s poat
ntrerupe execuia programului n curs pentru a fora UCP s ia n considerare imediat cererile
acestora. Sistemul de ntreruperi este, de asemenea, necesar pentru gestionarea unor periferice
(ca imprimante, tastaturi, etc.) a cror vitez de operare este mult inferioar vitezei procesorului.
ntreruperea (Interrupt) reprezint suspendarea execuiei programului n curs i
executarea unui program specific evenimentului care a generat-o, denumit program pentru
gestionarea ntreruperilor (interrupt handler). Dup servirea ntreruperii, microprocesorul
reconstituie starea programului ntrerupt i reia execuia acestuia.
Toate tipurile de microprocesoare au un sistem propriu de ntrerupere constituit dintr-un
ansamblu de elemente HW i SW prin care UCP realizeaz funciile de ntrerupere.

Se disting urmtoarele tipuri de ntreruperi:
- ntreruperi externe (HW) (external interrupt) iniiate din exteriorul UCP de ctre
dispozitivele fizice (dispozitive periferice care solicit participarea UCP la executarea
unor operaii de transfer I/O, dispozitive HW pentru supravegherea regimului de
funcionare al sistemului, etc.).
La rndul lor ntreruperile externe sunt de dou tipuri:
- ntreruperi nemascabile sunt acele ntreruperi care nu pot fi activate sau
dezactivate prin program. Acestea sunt permanent active, iar cnd apare o cerere de
tip nemascabil, procesorul execut automat ntreruperea. Sunt folosite pentru
prelucrarea unor evenimente asociate cu avariile.
- ntreruperi mascabile sunt acele ntreruperi care pot fi activate sau dezactivate
prin program de ctre utilizator. Cnd sistemul de ntreruperi este activ la primirea
unei cereri de tip mascabil, execut un salt de ntrerupere. Dac sistemul de
ntreruperi este dezactivat, cererea de ntrerupere este ignorat de microprocesor.
- ntreruperi interne (SW) (internal interrupt), declanate fie de execuia unor instruciuni
specifice, fie de anumite condiii anormale care apar n funcionarea UCP (depiri de
scal la executarea operaiilor aritmetice, executarea accesrii unor segmente de memorie
nerezidente n memoria central, tentativa de execuie a unui cod inexistent, etc.).

ntreruperile externe acioneaz ntr-un mod asincron n raport cu funcionarea
microprocesorului, n timp ce ntreruperile interne sunt asociate n general unor evenimente
sincrone. Aceast diferen fundamental are o consecin important i anume: datorit naturii
sincrone a ntreruperilor interne este inutil de a stabili o prioritate a acestora ntruct la un
moment dat se poate produce doar un singur eveniment de acest tip.
Pentru ntreruperile interne se folosete att termenul de excepie, ct i termenul de
capcan (trap).
Excepiile sunt evenimente ntreruptoare (care cer tratare) care sunt generate de
instruciunile programului n curs de execuie. Ele sunt sincrone cu programul ce va fi ntrerupt.
Dup modul de manifestare i tratare a excepiilor, firma Intel mparte excepiile n urmtoarele
categorii:
- DEVIERI (traps). O deviere poate fi recunoscut doar dup terminarea ciclului
instruciune curent. Dup tratare devierile produc reluarea programului ntrerupt, ncepnd cu
instruciunea urmtoare.
- ERORI (faults) sunt excepii ce sunt detectate fie nainte de nceputul execuiei
instruciunii, fie n timpul execuiei acestora. Dac erorile se detecteaz n timpul execuiei unei
instruciuni, dup tratarea erorii reluarea programului se va face ncepnd cu instruciunea
ntrerupt (un exemplu tipic este accesarea unei pagini sau a unui segment din spaiul adreselor
virtuale care nu se afl n memoria principal.).
- EECURI (abort) produc abandonarea procesului. Sunt utilizate pentru a trata erori
severe cum sunt valorile variabile din tabelele sistemului sau erorile de hardware (exemple:
scrierea unui cod al instruciunii eronat sau o violare a proteciei memoriei).
Capcana este un mecanism care produce apelarea automat a unei proceduri. Spre
deosebire de o ntrerupere, capcana este activat, explicit sau implicit, de ctre o aciune
efectuat de programul aflat n execuie (din aceast cauz se numesc i ntreruperi software).
Capcanele sunt utilizate pentru tratarea unor condiii de excepie, adesea anormale, care apar n
cursul existenei unui program, sau pentru activarea unor proceduri speciale, cum ar fi rutine ale
sistemului de operare.
Exist mai multe tipuri de capcane:
1. capcane activate ntotdeauna;
2. capcane activate/dezactivate prin program;
3. capcane solicitate explicit prin program.

1. Sunt capcane asociate unor evenimente tip eroare, indiferent de operaia executat de
UCP; de aceea nu exist mijloace de dezactivare a acestui tip de capcan (exemple:
tentativa de a executa o instruciune inexistent sau de a executa ntr-un regim
neprivilegiat o instruciune rezervat regimului privilegiat (adic se execut naintea
altuia mai puin privilegiat), capcanele care lucreaz n conjuncie cu gestiunea memoriei
externe).
2. n aceast categorie sunt cuprinse evenimentele care reprezint sau nu reprezint o
condiie de excepie sau condiie anormal n funcie de aciunile specifice efectuate de
ctre program, cum ar fi capcanele folosite pentru a detecta tentativa de execuie a unei
operaii cu operanzi n virgul mobil n absena unitii aritmetice dedicat acestui scop.
n acest caz capcana se dezactiveaz cnd configuraia hardware include procesorul
matematic. Deci, capcanele pot fi activate/dezactivate de programul nsui, dup cum este
necesar sau nu a detecta aceste situaii.
3. Acest tip de capcan nu se folosete, n mod obinuit, pentru detectarea condiiilor
anormale, dar reprezint un mijloc de activare a execuiei unor rutine speciale, de cele
mai multe ori acestea fiind funcii ale sistemului de operare. Sunt organizate astfel nct
s fie posibil activarea lor la apariia unor capcane. Operaiei i sunt dedicate instruciuni
speciale, numite apeluri de sistem (system-call instructions), dat fiind funcia lor
principal de activare a rutinelor sistemului de operare. Cnd se execut o astfel de
instruciune se activeaz capcana corespunztoare. Prin asocierea unui parametru, aceeai
instruciune poate activa capcane diferite.

Exemple de surse de ntrerupere:
1. Defecte ale sistemului:
- oprirea sistemului;
- detectarea cderii iminente a alimentrii;
- condiii de eroare ale UCP.
n cazul excepiilor:
- eroare n codul operaiei;
- violarea proteciei memoriei;
- accesul la un bloc care nu este prezent n memoria principal;
- eroare de calcul: depiri de scal, mprire la zero, etc.;
- funcionarea pas cu pas a UCP.
n cazul ntreruperilor logice:
- instruciuni capcan (TRAP) sau de apelare a sistemului de operare.

2. Cereri din partea unor dispozitive externe (contor de timp, consol, alte procesoare, ca de
exemplu, un coprocesor aritmetic) care nu fac parte din subsistemul de I/O.

3. ntreruperi I/O:
- operaie de I/O terminat;
- eroare n sistemul I/O;
- sistemul de I/O ocupat.

Observaii:
1. ntreruperile de I/O sunt cerute de dispozitive aparinnd sistemului de I/O (controlere
I/O, periferice, etc.), care solicit intervenia UCP.
2. n cazul defectelor sistemului, cererilor din partea unor dispozitive externe i al
ntreruperilor I/O avem ntreruperi de tip extern, iar n cazul excepiilor i
instruciunilor logice ntreruperile sunt de tip intern.


Controlul ntreruperilor
Pentru comanda ntreruperilor externe microprocesoarele posed linii de comand
speciale al cror numr este variabil n funcie de tipul particular al microprocesorului. Comanda
poate fi executat prin nivel logic (0 sau 1) cu meninerea strii de ntrerupere un timp specificat,
dup care cererea poate fi dezactivat; la transferul 01 sau 10 cererea fiind memorat ntr-un
bistabil intern.
Posibilitatea de control a cererilor de ntrerupere permite UCP tratarea diferenial a
surselor de ntrerupere mascabile. Aceasta se realizeaz prin software i presupune activarea sau
dezactivarea sursei de ntrerupere. Procesoarele dispun de instruciuni speciale pentru controlul
ntreruperilor, cum ar fi:
- instruciuni pentru activarea ntreruperilor (EI = Enable Interrupt (activarea ntreruperii),
STI= Set Interrupt (setarea ntreruperii), etc.);
- instruciuni pentru dezactivarea ntreruperilor (DI= Disable Interrupt (dezactivarea
ntreruperii), CLI= Clear Interrupt (tergerea ntreruperii)).
Practic, starea de activare/dezactivare a ntreruperilor se nscrie n registrul de stare al
procesorului n indicatorul de ntrerupere (IF=Interrupt Flag - indicator de validare a
ntreruperii). Dac IF=0 procesorul nu accept cererea de ntrerupere mascabil.

Funcionarea UCP n prezena unei cereri de ntrerupere:
Principiul de funcionare va fi abordat considernd cazul simplu al unui singur periferic
conectat la procesor, ca n figura urmtoare:




Figura 1 Sistem simplu de ntrerupere

Pentru comanda activitilor cerute de ntreruperi sunt folosite dou linii de comand: linia
pentru comanda ntreruperilor (Interrupt Request INT. REQ), respectiv linia pentru
confirmarea acceptrii ntreruperii (Interrupt Acknowledge INT. ACK). Dispozitivul
periferic solicit deservirea sa de ctre UCP prin activarea liniei INT. REQ. Dup ce
microprocesorul finalizeaz execuia instruciunii n curs, testeaz existena cererilor de
ntrerupere. Dac ntreruperea cerut este de tip nemascabil, cererea este acceptat necondiionat
de UCP, iar dac este de tip mascabil cererea este acceptat numai dac IF (indicatorul pentru
validarea ntreruperilor) este activat. Dup acceptarea cererii de ntrerupere, microprocesorul
suspend execuia programului n curs i execut urmtoarea secven de activiti pentru
gestionarea ntreruperilor:
1. confirm prin semnalul de rspuns acceptarea cererii de ntrerupere i identific
perifericul care a cerut ntreruperea;
2. salveaz n stiv automat contextul minim al programului ntrerupt (PC i, eventual,
indicatori condiionali ai microprocesorului);
3. transfer execuia programului la subrutina de servire a ntreruperii (care este programul
de lucru cu perifericul care a cerut ntreruperea);
4. dup ncheierea programului de servire a ntreruperii procesorul restabilete contextul
programului ntrerupt dup execuia subrutinei de servire;
5. reia execuia programului ntrerupt.
n cadrul subrutinei de ntrerupere pot fi executate prin SW salvri suplimentare a
coninutului registrelor interne, reprezentnd contextul programului ntrerupt, modificate n
Cerere de ntrerupere
INT.REQ.


Microprocesor


PERIFERIC
Magistrala de
date/adrese
Semnale de acceptare a
ntreruperii - INT. ACK
cursul execuiei ntreruperii, operaii executate cu instruciunile de lucru cu stiva (PUSH, POP).
Aceste operaii constituie o parte a subrutinei de servire a ntreruperii i asigur posibilitatea
relurii programului ntrerupt. n continuare subrutina de servire execut secvena de instruciuni
corespunztoare prelucrrilor cerute de periferic. Dup ncheierea acestei faze subrutina de
ntrerupere restabilete contextul, ncrcnd registrele procesorului cu valorile iniiale salvate n
stiv, n cadrul subrutinei. Ultima instruciune din subrutina de servire este cea de revenire
(RETURN, RETI, RETN, RET) prin execuia creia se restabilete coninutul PC (i al
registrului de stare) salvat automat n stiv la apelarea subrutinei.
Folosirea practic a sistemului de ntrerupere, mai ales n sistemele industriale, ridic
anumite probleme n privina timpului de rspuns al sistemului la o cerere de ntrerupere. Acest
timp de rspuns este denumit timp de laten, care este determinat de:
a) timpul consumat pentru salvarea i restaurarea coninutului registrelor;
b) timpul necesar pentru identificarea sursei de ntrerupere.
n ceea ce privete punctul a) remarcm existena a dou variante: salvarea sistematic a
coninutului tuturor registrelor la fiecare ntrerupere, respectiv salvarea selectiv numai a
registrelor al cror coninut este modificat de ctre subrutina de ntrerupere.

Definiie: Timpul de laten este timpul cerut de servirea unei cereri de ntrerupere i depinde
de operaiile cerute de evenimentul extern care a cauzat ntreruperea, precum i de ntrzierea
ntre activarea cererii i nceputul activitii rutinei de testare.
Pentru a putea evalua timpul de laten al unui microprocesor trebuie examinat secvena
de operaii necesare pentru comutarea de la programul ntrerupt la rutina de servire a ntreruperii.
Operaiile necesare n acest scop sunt:
- salvarea n stiv a contorului programului i a indicatorilor de condiie;
- execuia ciclului de confirmare a acceptrii cererii de ntrerupere;

Prioriti privind tratarea ntreruperilor multiple
n sistemele cu mai multe surse de ntrerupere apare n mod inerent situaia unor cereri
active simultan. Se impune o ierarhizare a acestora dup prioriti i servirea la un moment dat a
cererii de ntrerupere de prioritate maxim. n acest sens fiecrei surse i se asigur un nivel de
prioritate. Problema stabilirii la un moment dat a celei mai prioritare dintre sursele active este o
problem de arbitraj. Rezolvarea acestei probleme poate fi fcut n dou moduri:
1. prin arbitraj de tip centralizat n care logica de arbitraj este inclus n UCP sau ntr-un
controller HW;
2. prin arbitraj de tip descentralizat n care logica de arbitraj este distribuit la nivelul
fiecrui dispozitiv ntreruptor.
1. Arbitrajul centralizat, de ctre UCP se face:
a) prin HW, n cazul n care UCP are prevzute mai multe intrri de ntrerupere.
Aceasta necesit o logic suplimentar n UCP, dar elimin logica extern, deci
are un timp de rspuns minim.
b) prin SW de ctre UCP, cu ajutorul unui program scris de utilizator pentru alocarea
i analiza prioritilor i a unei logici simple pentru identificarea ntreruptorului.
Soluia este aplicabil pentru sisteme simple i are un timp de laten mai mare,
dect cel prin HW.
c) cu un controller de ntrerupere, iar n acest caz are urmtoarele avantaje:
- elibereaz UCP de sarcinile de arbitraj;
- asigur un timp de rspuns mic;
- flexibilitate a modului de tratare (datorit caracteristicilor programabile ale acestora).
2. Arbitrajul descentralizat implic existena la nivelul fiecrui dispozitiv periferic a unei
logici capabile s asigure realizarea protocolului de tratare.
Regulile privind tratarea ntreruperilor ierarhizate sunt:
- ntreruperile nemascabile au prioritate maxim;
- o cerere de ntrerupere cu un anumit nivel de prioritate poate s ntrerup o subrutin de
servire a unei ntreruperi cu prioritate inferioar, dar nu poate s ntrerup sisteme de
ntreruperi cu prioritate mai mare.
- dup terminarea servirii unei cereri de ntreruperi la un anumit nivel se revine la nivelul
ultimului program ntrerupt.
3. Arbitrajul centralizat de ctre controlerul de ntrerupere a ntreruperilor multiple
Controlerul de ntrerupere este un circuit specializat care preia, n principiu, sarcinile
rezolvate la arbitrajul SW de ctre UCP, respectiv:
- accept cererea de ntrerupere de la mai multe surse;
- stabilete dac exist o cerere de ntrerupere superioar celei ce a generat programul
curent;
- n caz afirmativ, genereaz ctre UCP o cerere de ntrerupere i transfer pe magistrala de
date, vectorul de ntrerupere asociat ntreruperii celei mai prioritare.
Uzual, controlerele de ntrerupere sunt realizate sub form de circuite integrate
programabile. De exemplu: Intel folosete 8259A, Z80 folosete PIC, etc.

Identificarea prin SW a sursei de ntrerupere
Sistemul pentru gestionarea ntreruperilor este unic. El este situat ntr-o zon de memorie
de adres fix sau a crei adres este coninut ntr-un registru special. n cazul al doilea este
posibil gestionarea prin program a ntreruperilor. La un moment dat poate fi activat un singur
program pentru gestionarea ntreruperilor. ntruct evenimentele care pot genera ntreruperi sunt
multiple, sistemul pentru gestionarea ntreruperilor trebuie s nceap prin a identifica cauza
ntreruperii. Aceast parte a programului de gestionare a ntreruperilor este denumit analizor
de ntreruperi. Practic, identificarea sursei de ntrerupere se face prin examinarea succesiv a
valorilor din anumite registre, situate fie n UCP, fie n elemente din subsistemul I/O.
Exemple:
- un registru de autodiagnoz pentru semnalizarea unui defect fizic;
- registre interne ale UCP care conin indicatorii de mprire la zero, depire de scal,
execuie n regim pas cu pas sau indicatori pentru declanarea ntreruperilor SW.
Ordinea n care sunt examinate cauzele posibile de ntrerupere determin prioritatea
acestor ntreruperi. ntreruperea servit prima este cea a crei condiie de servire este cea mai
prioritar. Dup acceptarea unei ntreruperi este necesar s fie oprite toate celelalte ntreruperi
care depind de programul de gestionare pentru a nu perturba execuia ntreruperii n curs.
Aceasta se realizeaz practic prin dezactivarea indicatorilor de control corespunztori. Situaia
este defavorabil la apariia unor cereri de ntrerupere grave, ca de exemplu cele cauzate de o
defeciune HW, care trebuie rezolvat cu prioritate.

Identificarea prin HW a ntreruperilor (vectorizarea ntreruperilor)
Micorarea timpului de laten impune folosirea unor elemente HW pentru analiza
ntreruperilor. O soluie eficace pentru identificarea surselor de ntrerupere externe o constituie
folosirea mecanismului de vectorizare a ntreruperilor. Dup acceptarea cererii de ntrerupere
dispozitivul ntreruptor furnizeaz UCP, n ciclul de acceptare a ntreruperii, un cod propriu
sursei, numit vector de ntrerupere. Pentru ntreruperile externe, vectorul de ntrerupere este
furnizat UCP pe magistrala de date fie direct de ctre periferic, fie de ctre un dispozitiv special,
numit controler de ntrerupere. Folosirea vectorului de ntrerupere variaz n funcie de tipul
microprocesorului.
La unele tipuri de microprocesoare (I-8080, Z 80), vectorul de ntrerupere reprezint
codul unei instruciuni de apel a subrutinei de servire a ntreruperii (CALL, RST). n urma
execuiei acestui cod, PC este ncrcat cu adresa de nceput a subrutinei de servire asociat
dispozitivului periferic care a cerut ntreruperea, dup ce n prealabil este salvat n stiv starea
programului ntrerupt.
La alte tipuri de microprocesoare (I 8086, I 8088, etc.) codul generat de periferic poate fi
utilizat pentru calculul adresei de intrare ntr-un tablou denumit tablou al vectorilor de
ntrerupere. n acest caz microprocesorul extrage din tablou adresa subrutinei de deservire
asociat sursei de ntrerupere.