Cap5_Intreruperi

download Cap5_Intreruperi

of 22

Transcript of Cap5_Intreruperi

  • 7/24/2019 Cap5_Intreruperi

    1/22

    CAP.5

    INTRERUPERI

  • 7/24/2019 Cap5_Intreruperi

    2/22

    O ntrerupere este o aciune a microprocesorului prin care acesta anun apariia unuieveniment. Mai concret, ntreruperea este un semnal electric transmis sistemului de calcul (SC)prin care acesta este anunat de apariia unui eveniment particular.

    Aciunile pe care le efectueaz sistemul de calcul la apariia unei ntreruperi sunt:

    . suspendarea pro!ramului n curs de desf"urare# $. lansarea n e%ecuie a unei rutine specializate, numit Rutin de Tratare a ntreruperii (RTI)

    sau Handler de ntrerupere, care deserve"te ntreruperea# &. eventual, reluarea e%ecuiei pro!ramului suspendat (depinz'nd de tipul de ntrerupere).

    Cauzele apariiei acestor evenimente pot fi de $ tipuri: a). externe(apsarea unor cominaii de taste, iniierea sau terminarea unor operaii de *O)# ). interne(mprirea la +, tentativa de adresare a unei zone de memorie ine%istente, tentativa

    de e%ecuie a unei instruciuni av'nd un cod ine%istent, dep"irea capacitii de reprezentare aunui rezultat).

    e oicei, dup tratarea unei ntreruperi e%terne pro!ramul se reia, dup o ntrerupere internnu-

    a apariia unei ntreruperi, SC treuie, n ordine: ) s determine tipul evenimentului care a !enerat ntreruperea (intern, e%tern)# $) s afle care este cauza ntreruperii# &) s determine adresa /0 (rutinei de tratare a ntreruperii)# 1%ist & cate!orii de rutine de tratare a ntreruperilor (/0):

    furnizate odat cu sistemul de calcul# scrise de proiectanii sistemului de operare (SO)# scrise de utilizatori#

  • 7/24/2019 Cap5_Intreruperi

    3/22

    2entru localizarea rapid a /0 se folose"te vectorizarea ntreruperilor:asocierea fiecrei ntreruperi cu o locaie de memorie dulucuv'nt cu adresfi%, unde se va memora adresa far a /0 corespunztoare ntreruperii.

    0aela /0 (vectorul de ntreruperi) se afl n memorie la adresa ++++:++++.

    2rimii $34 % 5 6 +$5 octei conin aceste adrese (zona se nume"te tabelavectorilor de ntrerupere7 08). 2entru 90 , adresa /0() se !se"te laadresa ++++ : ;5.

    Acest talou cu adrese se iniializeaz n momentul ncrcrii sistemului deoperare.

  • 7/24/2019 Cap5_Intreruperi

    4/22

    5.2. CLASIFICAREA NTRERUPERILOR

    a nivelul =+%=4 apar trei tipuri de evenimente numite n documentaii ntreruperi:

    a). ntreruperi hardware> ntreruperi !enerate n mod automat ca rspuns la apariiaunor cauze de tip e%tern (semnalele de la periferice, in'nd de *O s?stem) "i fiindastfel ntreruperi @OS (Basic Input Output S?stem). /0 corespunztoare sunt

    ncrcate n memorie la pornirea sistemului de calcul din fi"ierele /OM7@OS.

    ). excepii7 ntreruperi !enerate n mod automat, ca rspuns la apariia unor cauzede tip intern (mprire prin +, ncercarea de e%ecuie a unui cod de instruciuneine%istent, accesarea unei zone de memorie interzise 7 memory protection fault).

    c). ntreruperi oftware (oftware interrupt sautrap)> acestea presupun un transferde control al e%ecuiei, iniiat de pro!ramator ctre o rutin special (andler). MiBloculprin care pro!ramatorul iniiaz o astfel de aciune este instruciunea 90. Aceste

    ntreruperi se numesc ntreruperi softare tocmai pentru c ele sunt invocate softprintr7o instruciune specificat e%plicit de ctre pro!ramator.

    atorit acestui specific putem da o definiie alternativ acestui tip de ntreruperi:acele ntreruperi ce pot fi iniiate numai de ctre pro!ramator prin 90 sunt ntreruperioft.

  • 7/24/2019 Cap5_Intreruperi

    5/22

    5.2.1. ntreruperi hardware ntel =$3EA). 1%emple.: /D + 6 90 = , /D 690 E etc. etalii despre funcionarea acestui dispozitiv precum "i despre ntreruperile ard !sim

    la: ttp:**.delorie.com*dB!pp*doc*u!*interrupts*intandlers.tml. Cele mai cunoscute "i frecvent utilizate (emise) ntreruperi ardare: INT este ntreruperea ard de ceas (ytem timer). 1ste recunoscut prin /D +.

    INT !este ntreruperea de tastatur (%eyboard interrupt). 1ste recunoscut prin /D .Aceast ntrerupere este !enerat de tastatur, la fiecare apsare "i elierare a uneitaste. Aciunile concrete ale /0 corespunztoare sunt n esen: @OS7ul rspunde princitirea scan7codului (cod asociat unei taste n funcie de poziia ei pe tastatur)corespunztor tastei, convertirea sa la codul ASC corespunztor (a se vedea perecilecorespunztoare Scan code*ASC code n documentaii), urmat de memorarea acesteipereci de atriute n ufferul de tastatur, acesta fiind localizat la adresa ++++:+5C.

  • 7/24/2019 Cap5_Intreruperi

    6/22

    INT "Bh(/D &) "i INT "Ch(/D 5) > ntreruperi ce deservesc porturileseriale.

    INT "#h"i INT "Fh7 ntreruperi ce deservesc porturile paralele. niial,ntreruperile 90 + (/D 3) "i 90 +G (/D H) au fost proiectate pentru adeservi porturile paralele 20, 20$ (&ine "rinter), ns imediat dupaceasta, @M a proiectat o interfa pentru imprimant (printer interfacecard) care nu este compatiil cu aceste ntreruperi- Ca urmare, astzi elenu mai sunt utilizate pentru imprimante ci preponderent pentru plci SCS "iplci de sunet.

    INT "EhI ntreruperea de discet (/D 47 'i%ette 'rive interrupt)

    INT $%hI ntreruperea de ard7dis (/D 57 Hard 'i% $ontroller)

    INT $"h 7 0e /eal70ime Cloc nterrupt (/D =). Aceast ntrerupere este

    activat de CMOS de +$5 ori*secund n vederea asi!urrii uneifuncionri a ceasului real al sistemului.

    INT $5h 7 ntreruperea de unitate n vir!ul flotant (" Interrupt7 /D&) este o ntrerupere !enerat de coprocesorul matematic la orice situaiede e%cepie de tip vir!ul flotant (floatin#*point exception).

  • 7/24/2019 Cap5_Intreruperi

    7/22

    5.2.2. Excepii

    Datorit faptului c i acestea sunt ntreruperi BIOS sunt clasificri care ncadreazexcepiile la ntreruperi hard (care sunt i ele BIOS). Nu este ns corect pentru c duptratarea unei ntreruperi hard prora!ul se reia" n ti!p ce dup tratarea excepiilor" deo#icei prora!ul N$ se reia%

    INT 0 & ntreruperea !pririi la zero (Zero Divide interrupt). 'ntreruperea esteenerat de fiecare dat cnd apare o aa nu!it condiie de mprire la zero. IN* poate fi e!is n trei situaii distincte+

    i). depirea rezultatului (ctului) la !prire atunci cnd utiliz! DI, sau IDI,-

    !o ax"/!o #h"0(i) di #h- se efectueaz ax1#h" cu ctul n 23 i restul n 24

    5tul ar tre#ui s fie 6 i s fie o#inut n 23" ns aloarea 6 nu ncape pe 7 octetn 23. 5a ur!are" se a e!ite IN* cu !esa8ul de eroare 9Divide by zero:. 'ntr&unastfel de caz se reco!and efectuarea unei conersii prin lrire care s asiure

    efectuarea corect a !pririi indiferent de alorile considerate+

    !o ax"/!o dx" - sau c;d dac se face conersie cu se!n!o #x"0di #x - se efectueaz dx+ax1#x" cu ctul n 2< i restul n Der!ite citirea fizic de pe disc de la o anu!it locaie de !e!orie" ncepnd cu un anu!it sector" ntr&oanu!it locaie de !e!orie.26h>er!ite scrierea fizic pe disc dintr&o anu!it locaie de !e!orie" ncepnd cu un anu!it sector.

    27h*er!in execuia prora!ului curent lsnd rezident n !e!orie o parte sau ntre prora!ul" astfelnct aceast zon de !e!orie s nu fie suprascris de un alt prora!.2h'ntrerupere DOS nedocumentatpentru parta8area ti!pului.2Eh(nedocu!entat). ?xecut o co!and DOS ca i cnd ar fi dat de la pro!pter.2!h@unciile acestei ntreruperi se ocup cu+ !ultiplexarea resurselor siste!ului" estiunea !e!orieiextinse (rincipala ntrerupere DOS este 2%h. In!aazineaz ntreaa co!ponent BDOS a SO DOS.!uncii &e 'estiune a (e()riei:#h 2loc un #loc de !e!orie i returneaz un pointer spre nceputul su.#*h ?li#ereaz o zon de !e!orie pentru a o face disponi#il altor prora!e.#ah 28usteaz spaiul de !e!orie alocat.!uncii &e 'estiune a pr)cesel)r:#+h 'ncarc un prora! pentru a fi executat su# controlul unui prora! existent. 3a ter!inarea execuiei

    prora!ului apelat" controlul se ntoarce n prora!ul apelant.#,h *er!in execuia unui prora! ntorcndu&se n co!!and.co! sau n rutina apelant" cu un anu!itcod de retur (error leel) setat n 23."%h *er!in execuia unui prora! lsndu&l rezident n !e!orie. >rin inter!ediul lui 23 se a trans!itecodul de retur.#Dh 2ceast funcie este folosit pentru o#inerea codului de retur al unui proces fiu lansat de ctre unprora! prin apelul funciei EBh.26h 5opiaz >S>&ul prora!ului curent la o anu!it adres n !e!orie" apoi actualizeaz noul >S> pentru afi folosit de ctre un nou prora!.62h O#ine adresa de nceput a >S>&ului n !e!orie.

  • 7/24/2019 Cap5_Intreruperi

    12/22

    Fun+/ii (pe+i*i+e di(+u,ui 1!h /eturneaz codul (+6A, 6@, ...) discului implicit. &&h /eturneaz codul (numrul) discului folosit la ncrcarea SO. 1Bh Gurnizeaz informaii despre taela de alocare a fi"ierelor (GA0).

    Fun+/ii (pe+i*i+e dire+t)are,)r 0i *i0iere,)r &!hCreeaz un nou director folosind discul "i calea specificat. &Ahter!e un director specific'nd calea spre acesta. &h Scim directorul curent n cel specificat. '$hOine un strin! ASCT reprezent'nd calea spre directorul curent. 5%hScimarea numelui unui f i"ier. 'EhCaut primul nume de fi"ier care se potrive"te cu o specificare !eneric. '1h ter!e un fi"ier din directorul specificat sau din cel curent.

    &FhCite"te un anumit numr de octei dintr7un fi"ier descis cu succes. '"hScrie un anumit numr de octei ntr7un fi"ier descis cu succes.

    Intrri 3 ie0iri +u peri*eri+e de tip +ara+ter "1hCite"te un caracter de la intrarea standard "i l afi"eaz la ie"irea standard. "2hAfi"eaz un caracter la ie"irea standard. "!h0ipre"te un "ir de caractere la ie"irea standard.

    "AhCite"te de la intrarea standard un "ir de caractere p'n la tastarea lui 2nter.

    #i4er(e a,te *un+/ii &5hOine adresa unui andler de ntrerupere, su forma adres de se!ment:offset 25hModific adresa unui andler de ntrerupere. ''hAnsamlu de funcii destinat lucrului la nivel f izic cu diverse tipuri de periferice. &'h/eturneaz numrul proceselor curente active (nedocumentat). 52hAtriuie valori unor variaile OS (nedocumentat).

  • 7/24/2019 Cap5_Intreruperi

    13/22

    OBS. ASUPRA NTRERUPERILOR 8086

    Fun+/ii,e #OS a,e -ntreruperii 21h ee+ut une,e (ar+ini pe +are ,e ee+ut 0i a,te -ntreruperi .(e%: funcia 5c a ntreruperii $ 7 terminarea unui pro!ram, este realizat "i de ctre ntreruperea$+)

    6and,ere a+ti4ate prin e4eni7ente7 care deservesc apariia unui eveniment neoi"nuit, intern

    sau e%tern.6and,ere a+ti4ate prin in(tru+/iuni (pe+ia,e de ape, de -ntreruperi 7 ofer acelea"i servicii ca oiliotec de supro!rame, apelaile de ctre pro!ramele utilizator

    Intreruperi ned)+u7entate7 rezervate spre folosire doar de ctre proiectanii OS

    Uunele sunt efectiv rezervate

    Ualtele au o serie de sarcini intermediare pentru alte ntreruperi

    Ualtele au roluri mai mult sau mai puin VoscureV pentru muritorii de r'nd

    pr)ie+tan/ii (i(te7u,ui de )perare -0i re8er4 dreptu, de a *),)(i a+e(te -ntreruperi pentrude84),tri u,teri)are.

    O (erie de nu7ere de -ntreruperi (unt -n pre8ent ne)+upate. 1le pot fi ocupate de ctreutilizatori prin andlere proprii

  • 7/24/2019 Cap5_Intreruperi

    14/22

    5.'. INSTRUC9IUNI SPECIFICE LUCRULUI CU NTRERUPERI nstruciunea INT provoac activarea andlerului corespunztor ntreruperii cu numrul n. 7 pune n stiv fla!urile# 7 pune n stiv adresa GA/ de revenire# 7 pune + n fla!urile 0G "i G# 7 apeleaz andlerul asociat ntreruperii.

    Ad/0 dd ... #2resupunem c conine adresa GA/ a andlerului 7 7 7 7 7 7 7 7 pusf #epune fla!urile n stiv pus cs #Se!mentul adresei de revenire lea a%,/18 pus a% #Offsetul adresei de revenire

    %or a%,a% pus a% #Se anuleaz toate fla!urile pentru a anula "i 0G "i G popf Bmp Ad/0 #Salt indirect la andler /18: 7 7 7 7 7 7 7 7 nstruciunea INTOare efectul: 7 dac OG 6 , atunci este ecivalent cu 90 5 (se apeleaz andlerul)# 7 dac OG 6 +, atunci este ecivalent cu 9O2 Orice instruciune care ar putea provoca dep"ire este indicat a se pro!rama astfel: add a%, into # este depasire W...

  • 7/24/2019 Cap5_Intreruperi

    15/22

    Instruciunea ,-I(5lear Interrupt) interzice procesorului s recunoasc apariia reuneintreruperi. 2pare de o#icei la nceputul unui handler pentru a interzice pertur#areaactiitii acestuia.

    Instruciunea STI (Set Interrupt) per!ite procesorului s recunoasc apariia uneintreruperi. 2re rolul de a anula efectul instruciunii 53I.

    'ntreruperile nemascabilenu in cont de flaul I@%

    Instruciunea IET(care nu are operanzi)" prooac reenirea dintr o ntrerupere. ?aeste ulti!a instruciune executat n cadrul handlerului. ?fectul ei este iners instruciuniiIN*" adic+

    & reface flaurile din sti-& reine la instruciunea a crei adres @2A se afl n rful stiei.

    De !ulte ori" n aplicaii este util si!ularea acestei instruciuni sau a unei pri din ea.Iat o secen care realizeaz si!ularea ei.

    2dAe dd F ->streaz te!porar adresa de reenire.& & & & & & & & & & & &

    popf -Aeface flaurilepop ;ord ptr 2dAe -Depune offsetul de reenirepop ;ord ptr 2dAeG0 -Depune se!entul de reenire

    8!p 2dAe -Salt indirect pentru reenire

  • 7/24/2019 Cap5_Intreruperi

    16/22

    Deplasament Lungime Semnificaie

    00h 2 Codul instruciunii INT 20h - terminare program

    02h 2 Adresa de sfrit a memoriei ocupate de program

    04h 1 e!er"at

    0#h 1 Codul instruciunii INT 21h $ funcii %&'

    0(h 2 )emoria disponi*il+ ,num+r octei .n cadrul segmentului

    0/h 2 e!er"at

    0Ah 4 Adresa A a TI 22h $ aceasta furni!ea!+ adresa de re"enire din programul curent

    0h 4 Adresa A a TI 2h - se utili!ea!+ pentru restaurarea "echiului handler dac+programul curent a deturnat cum"a .ntreruperea 2h ,CTRL+Break

    12h 4 Adresa A a TI 24h - pt restaurarea "echiului handler dac+ programul curent adeturnat cum"a .ntreruperea 24h ,Critical error interrupt handler

    1(h 22 e!er"at

    2Ch 2 Adresa de segment a mediului %&'3 unde se g+sesc "aria*ilele de sistem )'-%&'

    2h 4( e!er"at#Ch 2 C1 i C23 cte 1( octei pentru accesarea fiierelor standard de intrare i ieire

    ,se e"ita utili!area lor la momentul actual $ p+strai pentru compati*ilitate

    5Ch 4 e!er"at

    /0h 1 6ungimea co!ii liniei de comand+

    /1h 125 Coada liniei de comand+ - astfel se pot accesa din lim*a7 de asam*lare parametrii

    transmii .n linia de comand+ la lansarea .n e8ecuie a programului

    Structura >S> (>rora! Se!ent >refix) H in !e!orie %%

  • 7/24/2019 Cap5_Intreruperi

    17/22

    5.5.2. Structura unui pr)'ra( E/E$n prora! de tip ?

  • 7/24/2019 Cap5_Intreruperi

    18/22

    Antetul 1X1 (pe disc-)n acela"i pro!ram, n format 1X1 are dimensiuni mult mai mari dec't ecivalentul lui n format COM. Acest faptse petrece deoarece fiecare fi"ier 1X1 ncepe cu un antet disc. Acesta este necesar pentru a se putea manipulamai multe se!mente ale pro!ramului 1X1, pentru a fi fi%ate valorile implicite ale re!i"trilor la intrare, a se definise!mentele curente la lansarea n e%ecuie etc. Structura antetului 1X1 pe disc este urmatoarea:

    Deplasament Lungime Semnificaie

    00h 2 'emn+tura :9 #A4%h ,codul ;)

  • 7/24/2019 Cap5_Intreruperi

    19/22

    Operatia de relocare

    E,e7ente re,)+ai,e 4a,)ri3)peran8i +are (pe+i*i+a adre(e de (e:7ent? e

    mo" a83 data sau mo" *83seg a

    Edit)ru, de ,e:aturi p,a(ea8a in +)du, in(tru+tiunii =7)4> 4a,)area +are ,)+a,i8ea8a(e:7entu, re(pe+ti4

    In ur7a in+ar+arii (e:7ente,)r in 7e7)rie; 4a,)ri,e prin +are (e identi*i+a

    (e:7ente treuie 7arite +u 4a,)area StartSe:

    Operatia de re,)+are < a+tua,i8area 4a,)ri,)r =)peran8i,)r> de tip adre(a de (e:7enta(t*e, in+at (a re*ere +)re+t (e:7entu, din 7e7)rie

    Pentru e*e+tuarea )peratiei de re,)+are in antetu, E@E a4e7 ,a )**(et "%h nu7aru, adre(e,)r re,)+ai,e ,a )**(et 1h adre(a tae,ei de re,)+are =+ate ) adre(a FAR pt *ie+are +itare de

    nu7e de (e:7ent>

  • 7/24/2019 Cap5_Intreruperi

    20/22

    >S>7h

    StartSe

    2A

    2hGStartSe ..

    2A2h

    ..

    I!ainea pe disc

    I!ainea n !e!orie

    >rocesul de ncrcare n !e!orie a unui prora! ?

  • 7/24/2019 Cap5_Intreruperi

    21/22

    >S>

    5odGDateGStia

    SSKDSK?SK5S 5S + h

    5S + I> K 5S + 7h

    SS + S> K SS + @@@?h

    SS + @@@@h

    5.5.". Structura unui pr)'ra( ,O

    $n fiier de tip 5O= are o structur si!pl. ?l conine i!ainea (#inar) aconinutului ce a fi ncrcat n !e!orie dup >S> pentru a o#ine un prora!lansa#il n execuie. $n prora! 5O= nu are antet pe disc% Nu!ai prora!ele?

  • 7/24/2019 Cap5_Intreruperi

    22/22

    2entru ca un pro!ram scris n limaB de asamlare s fie de tip COM treuie ndeplinite urmtoarelecerine:

    . 2ro!ramul treuie s conin un sin!ur se!ment (toate referirile la cod, date "i stiv se facn cadrul aceluia"i se!ment)# n consecin directiva assume este de forma:

    assume cs:PnumeR,ds:PnumeR

    unde PnumeR este acela"i at't pentru CS c't "i pentru S. $. mediat dup declaraia de se!ment treuie sa apar o directiv:

    O/Y ++ indic'nd faptul c instruciunile "i datele ncep de la adresa ++. up O/Y urmeaz o instruciune

    eticetat care treuie s fie prima instruciune e%ecutail. 9umele acestei eticete treuie sapar n linia 19 a pro!ramului.

    &. atele pot fi plasate oriunde ntre instruciuni, sin!ura condiie (dependent numai depro!ramator) este s nu interfereze datele cu instruciunile. 2entru aceasta pro!ramatorul treuie s

    izoleze zonele de date prin instruciuni de salt corespunztoare. 5. /e!i"trii de se!ment sunt iniializai automat, deci utilizatorul nu mai treuie s i ncarce cu

    valori iniiale. 3.