Sunteți pe pagina 1din 26

pag.

1
2. TEHNICI DE EXECUIE I COMUNICAIE ......................................................................................................... 2
2.1. MODUL SECVENIAL DE EXECUIE A UNUI PROGRAM ................................................................................................. 2
2.1.1. Noiuni fundamentale ......................................................................................................................................... 2
2.1.2. Starea i contextul procesorului ......................................................................................................................... 5
2.2. NTRERUPERI, DEVIERI, APELAREA SUPERVIZORULUI ................................................................................................. 5
2.2.1. Activiti asincrone ............................................................................................................................................. 5
2.2.2. Mecanisme de comutare a contextului ............................................................................................................... 7
2.2.3. ntreruperi .......................................................................................................................................................... 8
2.2.4. Devieri i apelarea supervizorului ................................................................................................................... 10
2.2.5. Exemple de sisteme de ntreruperi .................................................................................................................... 10
2.3. IMPLEMENTAREA MECANISMELOR DE COMUTARE A CONTEXTULUI.......................................................................... 11
2.3.1. Utilizarea devierilor i apelrii supervizorului ................................................................................................ 11
2.3.2. Exemple de utilizare a ntreruperilor ............................................................................................................... 13
2.3.3. Concluzii ........................................................................................................................................................... 16
2.4. PROGRAMAREA OPERAIILOR DE INTRARE-IEIRE .................................................................................................... 16
2.4.1. Organizarea general....................................................................................................................................... 16
2.4.2. Metode de comand a perifericelor .................................................................................................................. 18
2.4.3. Intrri-ieiri buferizate n memorie .................................................................................................................. 21
2.4.4. ncrcarea iniial ............................................................................................................................................ 25
EXERCIII ........................................................................................................................................................................ 25


pag.2
2. TEHNI CI DE EXECUI E I COMUNI CAI E
Mecanismele, care dau posibilitatea unui calculator s interacioneze cu mediul exterior, pe de o parte, i s
manipuleze mai multe sarcini, pe de alta, formeaz baza oricrui sistem de operare. Cunoaterea detaliat a structurii i
modului de funcionare a acestor mecanisme este obligatorie pentru un specialist n domeniu.
2.1. Modul secvenial de execuie a unui program
Nucleul unui calculator este format dintr-o memorie adresabil, n care sunt pstrate instruciunile i datele
programului, i procesorul, care interpreteaz instruciunile. Instruciunile i datele se afl n segmente distincte, prin
segment nelegnd o mulime de informaii, desemnate i manipulate ca un tot ntreg, care ocup n memorie o suit
contigu de amplasamente. Vom presupune c segmentele care conin programul nu pot fi modificate n timpul execuiei
acestuia.
Execuia instruciunilor, care formeaz un program secvenial, conduce la evoluia strii calculatorului. Evoluia
strii calculatorului poart un caracter discret, starea este observabil doar n momente de timp numite puncte de
observare, care corespund, de obicei, nceputului i sfritului unei instruciuni. Unele instruciuni mai complexe pot
conine puncte observabile intermediare.
Starea calculatorului este definit de starea procesorului i starea memoriei. Starea memoriei este determinat de
coninutul locaiunilor segmentelor ncrcate n memorie. Starea procesorului este definit de coninutul unui set de
registre (programabile i interne), ataate procesorului.
2.1.1. Noiuni fundamentale
Orice program secvenial const dintr-o mulime de proceduri, care se pot apela reciproc. Fiecrei proceduri i este
asociat un segment distinct de procedur. Datele sunt reprezentate de asemenea prin segmente, care pot fi proprii unei
proceduri sau partajate ntre mai multe proceduri.
Numim activitate fenomenul care rezult din execuia nentrerupt a unei proceduri unice. n acest fel, execuia
unui program secvenial const dintr-un lan de activiti.
Numim context al unei activiti mulimea informaiilor accesibile procesorului n cursul acestei activiti.
Contextul activitii este compus din contextul procesorului (registrele programabile i interne) i contextul memoriei
(segmentul procedurii i segmentul datelor). Trecerea de la o activitate la alta este realizat de instruciuni speciale:
apelarea i returul din procedur, care realizeaz comutarea contextului.
Exemplul 2.1. O procedur p (apelant) provoac execuia unei proceduri q (apelate) cu ajutorul unei secvene de apel
care conine urmtoarele etape:
Pregtirea parametrilor, transmii de ctre procedura p procedurii q,
Salvarea parial a contextului lui p, necesar la retur,
nlocuirea contextului procedurii p prin contextul lui q.
La revenire din procedura q avem o schem practic simetric, doar contextul lui q fiind pierdut:
Pregtirea rezultatelor, transmise de ctre procedura q procedurii p,
Restabilirea contextului procedurii p, salvat nainte de apel.
Exemplul 2.2. n cazul funcionrii n corutine (proceduri simetrice, recursie mutual dou proceduri se pot apela
reciproc), procedurile apelant i apelat joac un rol simetric: secvena de retur este identic cu cea de
apel. Activitatea care rezult din apelul unei proceduri p ia n calitate de context iniial contextul salvat la
ultimul apel executat de p. Primul apel al unei proceduri trebuie s specifice valoarea iniial a
contextului su.
Secvena de schimbare a contextului (reluarea) conine urmtoarele etape (p este corutina prsit, q este cea reluat):
Pregtirea parametrilor, transmii de ctre procedura p procedurii q,
Salvarea parial a contextului lui p, care trebuie s fie regsit la reluare,
Restabilirea contextului salvat la ultimul abandon al lui q sau formarea contextului iniial n cazul
primului apel.
2.1.1.1. Mecanisme de execuie secvenial
Vom descrie un mecanism general pentru execuia programelor secveniale, formate dintr-o suit de activiti,
rezultate din execuia unei proceduri sau corutine. Acest mecanism realizeaz funciile urmtoare:
Salvarea i restabilirea contextului la apelare i retur,
Transmiterea parametrilor ntre procedurile apelant i apelat,

pag.3
Administrarea unei zone de lucru proprii fiecrei proceduri, cu permisiunea apelurilor recursive.
Cazul procedurilor.
Structura de date utilizat n acest caz este o stiv de execuie. Sunt utilizate diverse variante, care difer n mod
esenial prin specificarea detaliat a contextului i prin modul de comutare a acestuia la apelare sau retur. Schema
execuiei poate fi programat direct (de exemplu, n limbajul de asamblare) sau determinat de structura mecanismului
de execuie, definit de un limbaj de programare. n ultimul caz prin context nelegem mulimea variabilelor accesibile
conform regulilor de vizibilitate definite n limbaj (structura blocurilor, modulele, etc.). Descriem o organizare foarte
apropiat schemei de execuie din limbajul de programare C, presupunnd respectarea urmtoarelor ipoteze:
Parametrii unei proceduri sunt transmii prin valori; la retur un singur rezultat este returnat,
Procedurile pot fi apelate recursiv (direct sau indirect).
La fiecare apelare a procedurii o structur de date numit regiune a mediului (sau simplu mediul procedurii) este
creat n vrful stivei de execuie, care va dispare la returul respectiv. O procedur apelat recursiv are n stiv attea
medii cte execuii neterminate exist pentru aceast procedur. La un moment concret de timp mediul din top-ul stivei
corespunde procedurii q n curs de execuie (procedura activ), mediul imediat urmtor este al procedurii p, care a apelat
procedura q, etc. Stiva este administrat prin intermediul a doi pointeri (fig.2.1.):
baza pointerul care indic baza mediului procedurii active,
top pointerul care indic primul amplasament liber pentru a crea un nou mediu.









Mediul conine urmtoarele informaii:
a) informaii de salvare i legturile de retur
un pointer la baza contextului procedurii apelante
adresa returului
un amplasament pentru rezultat
b) parametri
n+1 amplasamente, primul coninnd numrul de parametri, iar urmtoarele - valorile acestora
variabilele locale i spaiul de lucru al procedurii.
Aceste informaii, cu excepia spaiului de lucru, sunt pstrate n amplasamente pentru care deplasarea n raport cu
originea mediului este cunoscut i fix, fiind posibil adresarea relativ a lor (fa de baza mediului). Spaiul de lucru
este adresat din vrful stivei.
Operaiile executate la apelarea i returul procedurii sunt urmtoarele:
Apelare
1) alocarea unei zone n stiva de execuie pentru mediul procedurii apelate (dimensiunea acestei zone, cu excepia
spaiului de lucru, este cunoscut anticipat)
temp:=baza
baza:=top
top:=top+dimensiunea mediului
2) salvarea informaiilor de retur
baza_veche:=temp
Stiv
p
Stiv
p
q
top
baza
baza
top
Mediul procedurii
nainte de apelarea procedurii
q de ctre procedura p
Dup apelarea procedurii q
Fig.2.1. Stiva de execuie

pag.4
memorizarea adresei de retur
3) ordonarea parametrilor
4) executarea unei ramificaii la procedura apelat.
Retur
1) salvarea rezultatului ntr-un amplasament stabilit
2) restabilirea informaiilor de retur i eliberarea mediului
temp:=adresa de retur
top:=baza
baza:=baza_veche
3) returul
ramificare *temp ramificare indirect
O eventual salvare i restabilire a registrelor sunt lsate n seama procedurii apelante.
Cazul corutinelor.
Schema precedent este funcional doar pentru cazuri simple de execuie a dou corutine pentru care mediul salvat
se reduce la adresa de retur. Pentru cazuri mai generale, ndeosebi cnd o corutin este ea nsi format din mai multe
proceduri, schema stivei unice nu poate fi aplicat. Fie ca exemplu urmtorul caz:
corutina p corutina q
begin procedura q
1


reluare q; reluare p;

reluare q retur
end q
1
;
end p begin

q
1
;

end q
n momentul n care q execut reluarea lui p stiva conine mediile p, q i q
1
. Mediul care trebuie reluat este cel al lui
p, dar mediile lui q i q
1
trebuiesc pstrate. Soluia este de a avea cte o stiv distinct pentru fiecare corutin (fig.2.2).






Pentru un moment concret de timp stiva curent este stiva corutinei n curs de execuie. O operaie schimb_stiva
permite schimbarea stivei curente, salvnd adresa de reluare n top-ul fostei stive curente:
schimb_stiva (p):
stiva_curent.top:=adresa de reluare;
stiv_urent :=stiva(p)
Secvena de reluare va arta astfel
reluare (p):
schimb_stiva (p);
if prima apelare then
apelare (p) ---- secvena de apel primar
else
stiva lui p
p
stiva lui q
adres
adres
reluare p
reluare q1 q
1

q
Fig.2.2. Schema de execuie pentru corutine

pag.5
temp:=stiva_curent.top;
ordoneaz parametrii n stiva_curent;
ramificare *temp
endif
Rezumat: contextul memoriei unei activiti la un moment curent de timp conine, n afara segmentului procedurii
n curs de execuie i segmentele de date, zona mediului curent din stiva de execuie.
2.1.2. Starea i contextul procesorului
Starea procesorului este determinat de coninutul registrelor acestuia. Registrele pot fi:
adresabile, numite registre generale, manipulate de programe,
registre speciale, de obicei grupate sub forma unor informaii sintetice, numite cuvnt de stare program
sau cuvnt de stare a procesorului (n englez, program status word, PSW).
Cuvntul de stare a procesorului conine informaii, care pot fi clasificate astfel:
1) Informaii referitoare la starea procesorului:
(a) Starea de execuie. Procesorul se poate afla n starea activ n care ndeplinete instrucii, sau n starea
de ateptare, cnd execuia este suspendat. Tranziia activ ateptare se realizeaz prin ncrcarea
cuvntului de stare sau prin executarea unei instruciuni speciale; trecerea invers ateptare activ
este n mod obligator rezultatul unei ntreruperi.
(b) Modul de funcionare. Din considerente de protecie este util s se permit doar programelor
sistemului de operare executarea unor instruciuni anumite (speciale), programele utilizatorilor
neavnd acces la aceste instruciuni. Aceasta poate fi realizat definind dou moduri de funcionare a
calculatorului, care se deosebesc printr-un bit indicator n cuvntul de stare: modul stpn (master,
eng., matre, fr.) sau supervizor i modul sclav (slave, eng., esclave, fr.) sau program. Setul de
instruciuni care pot fi executate n modul program este o submulime a setului corespunztor
modului supervizor. Astfel instruciunile rezervate modului supervizor pot fi numite privilegiate, aici
pot fi gsite instruciunile de intrare-ieire i cele legate de ntreruperi i protecie. Pot exista i alte
moduri speciale.
(c) Masca ntreruperilor.
2) Informaii referitoare la contextul accesibil al memoriei i drepturile de acces asociate: tabele de segmente,
indicatori de protecie a memoriei, etc.
3) Informaii referitoare la derularea activitii curente: codul condiiei, contorul operaiei urmtoare (contor
ordinal). Pentru unele calculatoare contorul, care conine adresa operaiei urmtoare, poate fi un registru distinct
al cuvntului de stare, pentru altele el este un cmp al acestui cuvnt.
2.2. ntreruperi, devieri, apelarea supervizorului
2.2.1. Activiti asincrone
Modelul descris mai sus poate fi folosit doar pentru un singur program, reprezentat printr-o secven de activiti,
executate pe un singur procesor. Unicele mecanisme necesare pentru organizarea comunicrilor ntre activiti sunt
operaiile de apelare i retur pentru proceduri sau reluare pentru corutine.
Pentru cazuri mai generale sunt necesare mecanisme suplimentare, cum ar fi conceptele de asincronism sau de
protecie reciproc ntre activiti.
Prin asincronism nelegem efectul care l pot avea asupra derulrii unei activiti anumite evenimente exterioare.
Numim protecie reciproc ntre activiti o modificare mai profund a contextului, atunci cnd se trece de la o
activitate la alta, n comparaie cu ceea ce are loc n cazul unei simple apelri de procedur.
Un caz tipic de asincronism este executarea intrrilor-ieirilor simultan cu execuia unui program. Trebuie s fie
asigurat posibilitatea informrii programului despre terminarea unui transfer de informaii. O prim posibilitate, care nu
necesit utilizarea unor dispozitive speciale, este cea a ateptrii active, prezentat mai jos.

pag.6
Arhitectura calculatoarelor CDC Cyber 170 coninea un procesor central PC i 10 procesoare periferice identice PP.
Programele sistemului de operare erau executate pe PP: unul dintre acestea, numit PS, avea "grij" de nlnuirea
lucrrilor i alocarea resurselor, celelalte, notate PES(i), erau specializate n operaii de I/E. PC i PP comunicau prin
intermediul unei memorii comune. Schematic, o operaie de I/E se derula n felul urmtor:
1) Presupunem c un program al utilizatorului, executat pe PC, cere o operaie de I/E. Procedura utilizat pentru
aceasta iniializeaz un cuplu de indicatori D (cerere) i F (terminare): D:=1, F:=0. Specificaia precis a
transferului necesar este plasat ntr-un descriptor, adresa cruia este cunoscut de ctre PS.
2) Un program de supraveghere, executat de PS, controleaz periodic indicatorul D. n momentul n care l gsete
pus n 1, acest program alege unul din PES liber, fie PES(i), i-i cere s execute operaia de I/E. Pentru aceasta
sunt utilizai doi indicatori DEX(i) i FEX(i), analogici cu D i F, transmind lui PES(i) adresa descriptorului cu
informaiile necesare operaiei de I/E.
3) Programul de I/E, care este executat pe PES(i), testeaz periodic indicatorul su DEX(i). Atunci cnd acesta este
gsit pus n 1, programul execut transferul informaiilor cerute, utiliznd datele gsite n descriptor. La
terminarea transferului acest eveniment este semnalizat de ctre program prin punerea n 1 a indicatorului
FEX(i).
4) Supervizorul scruteaz periodic FEX(i). Dac acesta este gsit n 1, supervizorul face acelai lucru cu
indicatorul F, care este periodic consultat de ctre programul utilizatorului pentru a afla cnd se termin
transferul.
Algoritmic putem reprezenta toate acestea astfel:
programul utilizatorului programul supervizor programul pentru I/E
<cerere de I/E> ciclu ciclu
D:=1; if D=1 then if DEX(i)=1 then
F:=0; caut PES(i); execut I/E;
DEX(i):=1; <sincron>
FEX(i):=0; FEX(i):=1;
endif endif
<test terminare I/E> endciclu
if F=1 then <test terminare execuie>
if FEX(i)=1 then
F:=1;
endif
endciclu
Pot fi fcute urmtoarele comentarii:
relaiile ntre PC i PS, pe de o parte, i PS i PES, pe de alta, au aceeai schem. Fiecare indicator poate fi pus
n 1 sau consultat de un singur procesor.
procesorul central este n totalitate eliberat de operaiile de I/E. El poate fi ncrcat cu alte lucrri n timpul
acestor operaii. n acelai timp, programul, care cere transferuri de informaii verific n mod explicit
terminarea operaiilor de I/E.
operaiile de I/E sunt ele nsi separate n dou pri: supervizarea (alegerea procesorului de intrare-ieire n
funcie de starea lui PES i urgena operaiei) i transferul propriu-zis al informaiilor, care poate fi realizat ntr-
un mod mai eficient de un procesor eliberat de funciile precedente.
Exemplele care urmeaz sunt chemate s ilustreze limitele metodei de ateptare activ pentru organizarea
comunicrilor ntre activitile asincrone.
Exemplul 2.3. Sistem multiprocesoral. Fie un calculator, arhitectura cruia presupune o memorie comun la care
sunt asociate mai multe procesoare identice (sistem multiprocesoral cu memorie comun), aceste
procesoare nefiind specializate cum a fost n cazul precedent, ci banalizate, adic o activitate poate fi
executat pe oricare procesor.
Comunicarea ntre activitile executate pe diferite procesoare poate fi realizat prin modificarea i
testarea periodic a indicatorilor memoriei comune. ns ateptarea activ conduce n acest caz la
eficien sczut, deoarece consultarea periodic imobilizeaz procesorul.
Exemplul 2.4. Msurarea timpului. n cadrul derulrii unui program adesea este necesar s se ia n consideraie
timpul real (cazul proceselor tehnologice, raionamente de securitate - oprirea unui program care
abuzeaz de procesor din cauza unei bucle infinite, etc.). Deoarece ceasul calculatorului este un

pag.7
dispozitiv extern procesorului, el trebuie periodic consultat de ctre program, soluie costisitoare i
adesea imprecis. Este necesar un mecanism care ar permite ceasului la momente fixe s acioneze
asupra procesorului.
Exemplul 2.5. Intervenii externe. Din mai multe considerente (for major, securitate, etc.) poate fi necesar s
existe posibilitatea ntreruperii derulrii unui program pentru a impune procesorul s execute o
aciune anume. Aceast ntrerupere poate fi declanat de ctre un operator uman, un dispozitiv
automat, etc. Este o situaie analogic cu cea din exemplul precedent; din aceleai considerente nu
este binevenit consultarea periodic a unui indicator. Avem nevoie de un mecanism de acionare
direct n acest caz.
2.2.2. Mecanisme de comutare a contextului
Comutarea contextului unui procesor permite executarea ntr-o manier indivizibil a urmtoarelor dou operaii:
trecerea cuvntului de stare ntr-un amplasament specificat al memoriei,
ncrcarea n cuvntul de stare a coninutului unui alt amplasament specificat al memoriei.
Aceasta se poate ntmpla doar dac procesorul se afl ntr-o stare observabil (de exemplu, ntre execuia a dou
instruciuni) sau de ateptare. Din aceste considerente noiunea de "punct de ntrerupere" este sinonim al noiunii "punct
observabil".
Comutarea contextului poate fi necesar din mai multe cauze distincte. Presupunem c fiecrei cauze i-a fost asociat
un numr de ordine. Pot fi ntlnite dou scheme de comutare a contextului.
1) Salvare n amplasamente fixe. Fiecrei cauze (numrul unei cauze fiind i) i sunt ataate n mod constant o
pereche de amplasamente n memorie adresele crora le vom nota prin csp_vechi[i] i csp_nou[i] (csp
semnificnd cuvnt de stare program). Comutarea se produce dup cum urmeaz:
Mp[csp_vechi[i]]:=<cuvnt de stare program>
<cuvnt de stare program>:= Mp[csp_nou[i]]
n setul de instruciuni exist o instruciune privilegiat schimb_csp(adr) cu urmtorul efect:
<cuvnt de stare program>:= Mp[adr].
2) Salvare ntr-o stiv. Aici avem acelai procedeu n ceea ce const cuvntul de stare nou. ns cuvntul de stare
vechi nu este salvat ntr-un amplasament fix, ci ntr-o stiv special:
ptr :=ptr+1
stiva[ptr] :=<cuvnt de stare program>
<cuvnt de stare program> := Mp[csp_nou[i]]
Instruciunea schimb_csp(adr) este identic celei din 1); exist ns i o instruciune restabilete_csp, care
restabilete cuvntul de stare a procesorului folosind pentru acesta top-ul stivei:
<cuvnt de stare program> :=stiva[ptr]
ptr :=ptr-1
Comutarea contextului, descris mai sus, este declanat sub influena strii unor indicatori din cuvntul de stare
program pe care procesorul i consult la interpretarea fiecrei instruciuni. Conform semnificaiei acestor indicatori i
maniera n care ei sunt modificai, pot fi evideniate trei mecanisme de comutare, descrise n tabelul de mai jos:
Tabelul 2.1. Mecanisme de comutare a contextului
Denumirea mecanismului Cauza Utilizarea
ntrerupere Exterioar derulrii instruciunii
curente
Reacionare la un eveniment asincron
extern
Deviere (excepie) Legat de derularea instruciunii
curente
Tratarea unei erori sau situaii
excepionale
Apelarea supervizorului Comutare explicit Apelarea unei funcii a S.O.
Adesea toate aceste trei denumiri sunt nlocuite cu una singur - ntrerupere.

pag.8
2.2.3. ntreruperi
O ntrerupere este comutarea contextului procesorului declanat de o cauz extern derulrii instruciunii curente.
Fizic, ntreruperea nseamn trimiterea unui semnal procesorului, acest semnal provocnd schimbarea strii unuia dintre
indicatorii, consultai n cursul executrii fiecrei instruciuni. Semnalul poate proveni de la alt procesor, de la un organ
de I/E, de la un dispozitiv extern, i n genere, de la orice proces fizic, extern procesorului ntrerupt. O ntrerupere
permite s cerem procesorului s suspende executarea programului curent, din primul punct ntreruptibil, i s treac la
execuia unui program predefinit. Acesta din urm este numit program de tratare a ntreruperii (interrupt handler,
eng., traitant de l'interruption, fr.). Programul de tratare a ntreruperii este executat ntr-un context diferit de cel al
programului ntrerupt, diferena fiind legat de modul de tratare, protecie, informaiile accesibile, etc.
Nivele de prioritate. Cauzele care duc la necesitatea ntreruperii unui procesor sunt diferite, drept rezultat i
programele predefinite, care trateaz ntreruperile difer. Mecanismul ntreruperilor trebuie s poat deosebi aceste
cauze. Dou scheme de baz sunt utilizate n acest scop:
Exist un indicator unic pentru toate ntreruperile i acestui indicator i este asociat un program unic de tratare a
ntreruperilor. O informaie suplimentar (codul ntreruperii), care se conine n cuvntul de stare sau ntr-un
amplasament de memorie, d posibilitatea de a deosebi cauzele. Prima obligaie a programului de tratare a
ntreruperilor este de a consulta codul ntreruperii pentru a stabili originea acesteia, doar apoi se va trece la
tratarea propriu-zis.
Fiecrei cauze este ataat un indicator, se mai spune c fiecare cauz este ataat unui nivel de ntrerupere.
Fiecrui nivel i corespunde un program distinct de tratare a ntreruperii, activat n mod automat de ctre
mecanismul de comutare a contextului.























Fig.2.3. Strile unui nivel de ntrerupere
Dezarmat
[ Punct de ntrerupere ]
Armat
Ateptare
Activ
Armare
Declanare
programat
ntrerupere Dezarmare
[Nivel nemascat]
[Nu exist nivel activ cu o prioritate mai mare]
Achitare

pag.9
Prioriti i mascarea ntreruperilor. Atunci cnd exist mai multe nivele de ntrerupere este posibil necesitatea
modificrii simultane a doi indicatori, legai de dou cauze diferite. Conflictul poate fi reglat stabilind o ordine de
prioritate n cadrul nivelelor de ntrerupere. Aceast ordine poate fi fixat odat pentru totdeauna sau modificabil prin
microprogramare.
Adesea este util protejarea, contra unor ntreruperi anume, a execuiei unei suite de instruciuni (de exemplu, poate
fi interzis ntreruperea unui program de tratare a ntreruperii). Aceasta ar nsemna ntrzierea comutrii contextului,
comutare, provocat de sosirea unui semnal asociat unui nivel oarecare de ntrerupere. Se zice atunci, c nivelul este
mascat sau inhibat (ntrerupere mascat). Ridicarea inhibrii ("demascarea") va autoriza schimbarea ulterioar a
contextului. Informaiile asociate mascrii ntreruperilor se afl n cuvntul de stare a procesorului.
Pentru unele nivele de ntrerupere efectul sosirii semnalului de ntrerupere poate fi suprimat (nu doar ntrziat). Totul
se va petrece n acest caz ca i cum nsi cauza ntreruperii a fost suprimat: nivelul ntreruperii este dezarmat. Un nivel
dezarmat poate fi rearmat, adic repus n serviciu.
Declanare programat. Pentru unele calculatoare, ndeosebi cele utilizate n controlul proceselor, exist o
instruciune de declanare programat care permite modificarea indicatorului, asociat unui nivel de ntrerupere, din
interiorul unui program. n acest fel este posibil simularea apariiei unei cauze externe de ntrerupere.
Atunci cnd toate condiiile necesare pentru ca o ntrerupere s fie luat n consideraie sunt prezente, nivelul se
numete activ. Aceast stare corespunde executrii programului de tratare a ntreruperii. Notm, c aceast execuie
poate fi suspendat pentru a permite tratarea unei ntreruperi cu o prioritate mai nalt. Ieirea din starea activ se face
prin achitarea ntreruperii. Achitarea este realizat folosind instruciunea schimb_csp, care termin tratarea
schimbnd contextul.
Operaiile de armare, dezarmare, mascare, demascare i declanare a ntreruperilor sunt totdeauna realizate prin
intermediul unor instruciuni privilegiate.
Figura 2.3 prezint schematic tranziiile de stare pentru un nivel de ntrerupere.
Schema unui program de ntrerupere. O ntrerupere foreaz procesorul s reacioneze la un eveniment.
Executarea programului curent este suspendat, comanda fiind transmis programului de tratare a ntreruperii. Programul
reluat de ctre procesor dup tratarea ntreruperii nu este n mod obligator programul ntrerupt (ntreruperea putea avea
drept scop realocarea procesorului). Schema general de tratare a unei ntreruperi este prezentat n fig.2.4.

















Tratarea ntreruperii
Salvarea contextului
programului P
Comutarea cuvntului de stare
Programul ntrerupt P
Tratarea specific ntreruperii, care
presupune determinarea programului Q
pentru lansare (poate fi chiar P sau altul)
Restabilirea contextului programului Q
ncrcarea cuvntului de stare a lui Q
Instruciunea schimb_csp (achitare)
Programul nou Q
Fig.2.4. Schema general a tratrii unei ntreruperi

pag.10
2.2.4. Devieri i apelarea supervizorului
Spre deosebire de o ntrerupere, o deviere sau un apel al supervizorului sunt provocate de o cauz legat direct de
derularea instruciunii curente.
O deviere (trap, exeption, eng., droutement, exeption, fr.) semnalizeaz o anomalie n derularea unei instruciuni,
care prohibiteaz executarea instruciunii. Originile pot fi diverse:
date incorecte, care conduc la imposibilitatea execuiei corecte a instruciunii (mprirea la zero, de exemplu),
tentativa executrii unei operaii interzise de mecanismul de protecie (violarea proteciei memoriei, executarea
unei instruciuni privilegiate n modul program, etc.),
instruciune neexecutabil (cod neautorizat de operaie, adres n afara memoriei existente, utilizarea unui
dispozitiv opional, care este lips n configuraia dat, .a.).
Devierile pot fi clasificate, ca i ntreruperile, conform cauzelor care le genereaz. Efectul unor cauze poate fi
suprimat (de exemplu devierile legate de operaiile aritmetice, erorile fiind semnalate doar de valoarea codului condiiei).
Natura unei devieri nu permite aplicarea noiunii de masc. O deviere poate fi suprimat, dar nici intr-un caz
retardat.
Un apel al supervizorului (supervisor call, prescurtat SVC, eng., appel au superviseur, fr.) este o instruciune
chemat s provoace o comutare a contextului procesorului. Acest efect este analogic apelrii unei proceduri, ns
modificarea contextului este mai profund, fiindc ea afecteaz ntreg cuvntul de stare i nu numai contorul ordinal.
Destinaia unui apel al supervizorului este de a permite apelarea unei proceduri a sistemului de operare, pretinznd la
drepturi mai mari (modul master, ntreruperi mascate, drepturi de acces, etc.), direct din programul utilizatorului.
Mecanismul comutrii contextului permite asigurarea proteciei, impunnd condiiile de intrare procedurii apelate. Ca
rezultat:
contextul nou (modul, masca, etc.,) este specificat n noul cuvnt de stare, amplasat intr-o zon de memorie
inaccesibil utilizatorilor,
programul de tratare a apelului supervizorului ncepe cu o secven de verificare a drepturilor utilizatorului de a
executa acest apel i stabilirea validitii parametrilor transmii.
Parametrii sunt transmii ca i n cazul apelului unei proceduri obinuite. Returul n programul apelant se face prin
restabilirea cuvntului de stare salvat la apelare.
Alegerea procedurii accesibile n cazul unui apel al supervizorului este determinat de un parametru suplimentar,
aflat ntr-un registru sau n partea de adres a instruciunii de apelare. Putem considera, c mulimea procedurilor
accesibile utilizatorului n acest mod constituie o extensie a setului de instruciuni, formnd astfel o "main" nou.
Operaiile de accesare a fiierelor i de intrare-ieire sunt disponibile utilizatorilor sub forma apelrii supervizorului.
Figura 2.4, care descrie schematic ntreruperile, este aplicabil i pentru cazul devierilor sau a apelrii
supervizorului.
2.2.5. Exemple de sisteme de ntreruperi
Funcionarea sistemelor de ntrerupere este ilustrat prin dou exemple reprezentative, unul pentru un calculator
mare, altul pentru calculatoarele personale.
Exemplul 2.6. IBM 370.
Cuvntul de stare (64 bii) conine urmtoarele cmpuri:
<0-7> masca ntreruperii <16-31> codul ntreruperii
<8-11> cheie de protecie <32-33> lungimea instruciunii
<12> codul caracterelor <34-35> codul condiiei
<13> masca ntreruperii <36-39> suprimarea devierii
<14> 1 - ateptare, 0 - activ <40-63> contor ordinal
<15> 0 - stpn, 1 - sclav.
Sistemul de ntreruperi are 5 nivele (n ordinea de descretere a prioritilor): eroare hardware, deviere, apelare
supervizor, extern i intrare-ieire. Fiecrui nivel i corespunde n memoria operativ un cuplu de amplasamente
rezervate cuvintelor de stare vechi i nou. Fiecare nivel conine mai multe cauze de ntrerupere. Pentru a face o deosebire
a acestor cauze este utilizat un cod al ntreruperii format din biii 16 - 31 ai cuvntului de stare. Acest cod este n mod

pag.11
automat pus la zi n cazul unei ntreruperi. De exemplu, pentru o ntrerupere de intrare-ieire el va conine adresa
canalului i a perifericului care au provocat ntreruperea; pentru o ntrerupere extern acest cod permite s se stabileasc
originea - ceasul, apel al operatorului, adresare a unui organ extern, etc. Biii 0 - 7 i 13 ai cuvntului de stare permit
introducerea mtii ntreruperii. Ei permit mascarea nivelelor de ntrerupere extern, eroare hardware i, selectiv,
ntreruperile de intrare-ieire, care provin de la diferite canale. Biii 36 - 39 permit inhibarea a 4 cauze de deviere.
Observm, c devierile i apelrile supervizorului sunt tratate ca i ntreruperi particulare.
Exemplul 2.7. IBM PC. Este propus ca exerciiu.
2.3. Implementarea mecanismelor de comutare a contextului
Implementarea mecanismelor descrise mai sus este ilustrat printr-o serie de exemple, legate de utilizarea lor.
Vom preciza notaia utilizat n schemele programelor:
coninutul unui cuvnt de stare este reprezentat prin notaia <activitate, mod, mascare, contor ordinal>.
Primele trei cmpuri pot lua, respectiv, valorile: ateptare/activ, master/slave, mascat/demascat. Dac csp
desemneaz un cuvnt de stare, cmpurile sale vor fi desemnate de csp.act, csp.mod, csp.masc i csp.co.
operatorul adr aplicat unui identificator de variabil sau de procedur, desemneaz adresa amplasamentului
unde se afl variabila sau prima instruciune a procedurii,
notaia Mp[adr] desemneaz coninutul amplasamentului cu adresa adr.
Notaiile svc_vechi, dev_vechi, intr_x_vechi, svc_nou, dev_nou, intr_x_nou desemneaz amplasamentele
unde sunt plasate i de unde sunt ncrcate cuvintele de stare.
Vom mai presupune c
apelarea supervizorului este de forma SVC <cod>, unde <cod> reprezint un numr care permite
identificarea funciei cerute,
un indicator <cauz> permite stabilirea cauzei care provoac o deviere.
Schemele prezentate conin un program de iniializare, executat la prima ncrcare a sistemului. Funcia acestui
program este de a iniializa cuvntul de stare asociat tratrii ntreruperilor, devierilor i apelurilor supervizorului.
2.3.1. Utilizarea devierilor i apelrii supervizorului
Simularea instruciunilor lips. Unele instruciuni din setul de baz de instruciuni ale procesorului pot fi opionale
i, deci, pot lipsi n unele configuraii ale calculatorului. Tentativa executrii unei instruciuni opionale lips genereaz o
drivere de tipul instruciune inexistent. Mecanismul devierilor poate fi utilizat pentru a realiza prin program
instruciunea inexistent n setul de baz. De exemplu, pentru o configuraie n care operaiile aritmetice n virgul
mobil nu sunt disponibile ele pot fi simulate prin apelarea procedurilor corespunztoare. Aceste proceduri trebuie
executate n mod slave pentru a permite tratarea explicit a erorilor: ele sunt apelate prin ncrcarea cuvntului de stare
respectiv. O adres de retur trebuie s fie pregtit de ctre programul de tratare a devierii n top-ul stivei pentru a
asigura returul la instruciunea care urmeaz instruciunii de operaie aritmetic simulat.
Realizarea prin program:
procedura iniializare;
dev_nou:=<activ,master,mascat, adr tratare_deviere>;
csp[ADD_FL]:= <activ,slave,demascat, adr ADD_FL>;

csp [DIV_FL]:= <activ,slave,demascat, adr DIV_FL>;
procedura tratare deviere;
begin
save(zon);
case cauz of

instruciune inexistent:
cod_op:=Mp[dev_vechi.co].cod_operaie;
case cod_op of

ADD_FL: determinarea operanzilor;

pag.12
introdu_n_stiv(stiv_utilizator,dev_vechi.co+1);
ncarc_csp(csp[ADD_FL])

else -- caz de eroare
<tratarea erorii>
end;
end;
restabilire(zon);
ncarc_csp(dev_vechi)
end
Operanzii vor fi determinai prin analiza coninutului instruciunii, care conine adresele lor; returul rezultatelor
utilizeaz conveniile proprii instruciunii n cauz (plasarea ntr-un registru, etc.).
Msurarea capacitii memoriei. Un sistem de operare presupune a fi utilizat pentru diverse configuraii ale
calculatorului. Capacitatea memoriei, numrul i natura dispozitivelor periferice, etc., pot fi diferite. Sistemul de operare
trebuie s se adapteze configuraiei concrete, ca i condiiilor particulare de utilizare (numr de utilizatori, prioriti, etc.).
Crearea unei asemenea versiuni specifice se numete generarea sistemului de operare. Pentru a reduce frecvena
generrilor S.O. unii parametri de configurare pot fi determinai n mod automat la iniializare.
Astfel, poate fi determinat capacitatea memoriei operative utiliznd o deviere pentru adresa amplasamentului de
memorie inexistent. Memoria const dintr-un numr n
bloc
de blocuri (care trebuie determinat), fiecare bloc coninnd p
cuvinte. Un program executat la iniializarea sistemului ncearc s acceseze ciclic primul cuvnt al fiecrui bloc;
tentativa de accesare a primului bloc inexistent n configuraia curent provoac, prin deviere, prsirea buclei. Numrul
de blocuri este egal cu numrul primului bloc neimplantat (blocurile fiind numerotate ncepnd cu 0).
Realizarea prin program:
program principal:
begin
dev_nou:= <activ,master,mascat, adr msurare>;
i:=1;
ciclu
<accesare cuvnt cu adresa i.p>;
i:=i+1;
endciclu;
ieire ciclu: nbloc:=i;
dev_nou := <activ,master,mascat, adr tratare_deviere>;
end
procedura msurare; -- apelare prin deviere
if cauz = adres n afara memoriei then
csplucrare:= <activ,master,mascat, adr ieire ciclu>;
ncarc_csp(csplucrare)
endif
La ieirea din programul de msurare a capacitii memoriei se va restabili tratarea normal a devierilor (procedura
tratare_deviere).
Gestionarea devierilor de ctre utilizatorul sistemului. Reacia standard la o deviere care are loc n timpul
execuiei unui program utilizator este apelarea unei proceduri de sistem, care provoac emiterea unui mesaj de eroare,
oprirea programului curent i trecerea la programul urmtor.
Este de dorit ca fiecare utilizator s aib posibilitatea s asocieze fiecrei cauze distincte de deviere i o procedur
proprie, tratarea creia ar nlocui reacia standard. Pentru a evita o bucl infinit, o deviere din aceeai cauz i n
interiorul acestei proceduri trebuie s apeleze procedura standard.
Asocierea unei proceduri proc de reluare a cauzei i de deviere se face cu ajutorul unui apel al supervizorului (SVC
asociere_deviere) cu parametrii i i proc.
Pentru trecerea la programul urmtor se va apela o procedur a sistemului de operare, apel realizat prin ncrcarea
unui cuvnt de stare, numit schimbare.

pag.13
Realizarea prin program:
const ndev=<numrul de cauze de deviere>;
var C: array[0..ndev-1] of boolean;
adrtratare: array[0..ndev-1] of adres;
procedura iniializare;
begin
svc_nou:=<activ,master,mascat, adr tratare_svc >;
for i:=0 to ndev-1 do -- tratare standard
C[i]:=false;
endfor;
dev_nou:=<activ,master,mascat, adr tratare_dev >;
end
procedura tratare_svc;
begin
save(zon);
case cod of

asociere_deviere: -- parametrii i, proc
C[i]:=true;
adrtratare[i]:=adr proc;
restabilire(zon);
ncarc_csp(svc_vechi)

endcase
end
procedura tratare_dev(i);
begin
save(zon);
if C[i] then
C[i]:=false; -- restabilire tratare standard
introdu_n_stiv(stiv_utilizator,dev_vechi.co); -- pentru retur
dev_vechi.co:= adrtratare[i];
restabilire(zon);
ncarc_csp(dev_vechi);
else
<tratare standard[i]>;
ncarc_csp(schimbare); -- programul urmtor
endif
end
Programul de tratare a devierii, specificat de ctre utilizator se va executa n modul slave, iar returul se va face cu
ajutorul mecanismului standard de retur dintr-o procedur, deoarece adresa de retur a fost pus n vrful stivei de
execuie.
2.3.2. Exemple de utilizare a ntreruperilor
Principala utilizare a ntreruperilor este msurarea timpului i administrarea operaiilor de intrare-ieire. Prezentm
mai jos cteva exemple de utilizare a ceasului calculatorului.
Un ceas de calculator este realizat cu ajutorul unui oscilator cu cuar, care emite impulsuri periodice. Perioada de
emitere, de obicei poate fi aleas dintr-o plaj de valori prestabilit, de exemplu de la 0.1 pn la 100 microsecunde.
Aceste impulsuri sunt utilizate pentru a decrementa valoarea unui contor, coninut ntr-un registru special sau ntr-un
cuvnt de memorie, rezervat acestui scop. Cnd acest contor trece prin zero este declanat o ntrerupere, numit
ntrerupere de ceas, care corespunde unui nivel rezervat acestui efect.
Pentru aplicaiile care urmeaz vom presupune, c fiecare impuls decrementeaz cu 1 coninutul unei locaiuni de
memorie, notat ceas.

pag.14
Limitarea timpului de execuie a unei proceduri. Este necesar s fie executat o procedur p astfel, nct dac dup
un interval de timp prestabilit q, numit timeout, executarea nu se va termina, ea va fi ntrerupt i o procedur specificat
tratare_eroare este apelat.
Realizarea prin program:
procedura iniializare;
intr_ceas_nou:=<activ,master,mascat,adr intr_ceas>;
svc_nou :=<activ,master,mascat,adr tratare_svc >;
dezarmare(intr_ceas);
procedura tratare_svc;
save(zon);
case cod of

apel_lim_timp_ex: -- parametrii p, q, tratare_eroare
ceas:=q;
cspretur:=svc_vechi; -- salvare pentru retur
csplucrare:= <activ,slave,demascat,adr p>;
csperoare:= <activ,slave,demascat,adr tratare_eroare>;
armare(intr_ceas);
restabilete(zon);
ncarc_csp(csplucrare);

retur: -- datorat terminrii procedurii p
dezarmare(intr_ceas);
ncarc_csp(cspretur);

endcase
procedura intr_ceas; -- expirarea timpului limit
dezarmare(intr_ceas);
ncarc_csp(csperoare);
Primul eveniment, care va avea loc (expirarea timpului q, rezervat executrii, sau returul din p), dezarmeaz ceasul
i activeaz procedura adecvat pasndu-i contextul curent. Returul din p trebuie s se fac prin apelarea supervizorului
i nu printr-o instruciune obinuit de retur. La fel se va proceda i cu returul din tratare_eroare, dac se cere revenirea
la contextul apelrii iniiale a procedurii p.
Culegerea unor date de msurare. Un calculator are obligaiunea s preia periodic datele unor msurri legate de o
instalaie industrial. Perioada ceasului este de 5 s. Datele trebuie culese fiecare 100 ms (perioada de eantionare).
Deoarece timpul necesar culegerii datelor este cu mult inferior perioadei de eantionare, calculatorul poate executa alte
lucrri n regim de fond.
Realizarea prin program:
const q = 20000 -- 100ms/5s
procedura iniializare;
begin
intr_ceas_nou:=<activ,master,mascat,adr intr_ceas>;
csplucrare:= <activ,slave,demascat,adr fond>;
cspmsurare:= <activ,slave,demascat,adr msurare>;
ceas:=q;
ncarc_csp(cspdev)
end
procedura intr_ceas;
begin
save(zon); salvarea contextului de fond
cspsave:=intr_ceas_vechi; salvarea cuvntului de stare pentru fundal
ceas:=q;
ncarc_csp(cspmsurare) programul de culegere a datelor
end

pag.15
Programul de msurare trebuie s se termine printr-o apelare a supervizorului SVC retur efectul creia este de a
restabili contextul lucrului n fond. Acest apel execut secvena:
restabilete (zon);
ncarc_csp(cspsave);
Schema de mai jos ilustreaz funcionarea sistemului descris:




Remarc. Putem include procedura msurare direct n programul de tratare a ntreruperii, care ar fi avut n forma
save(zon);
ceas:=q;
msurare;
restabilete(zon);
ncarc_csp(intr_ceas_vechi)
Dar n acest caz programul de msurare va trebui s fie executat n modul master i ntreruperile s fie mascate, ceea
ce nu ar permite modificarea sau nlocuirea lui de ctre un utilizator neprivilegiat. Aceast remarc ilustreaz un
principiu general, care cere ndeplinirea independent (decuplat) a programelor de tratare a ntreruperilor (secvene de
scurt durat, executate cu privilegii nalte) i programele activate de ctre procedurile de tratare a ntreruperilor i
apelate prin ncrcarea unui cuvnt de stare (tratare primar i secundar a ntreruperii).
Administrarea lucrrilor n timp partajat. O mulime de programe sau lucrri trebuiesc executate pe un calculator,
utiliznd procesorul n regim de partajare a timpului: procesorul este alocat succesiv lucrrilor ntr-o ordine prestabilit,
pentru trane de timp de durat fix q (cuanta de timp). Dac o lucrare este ncheiat nainte de expirarea cuantei q,
procesorul este imediat alocat lucrrii urmtoare.
Lucrrile sunt numerotate de la 0 la n-1. Este definit o zon de amplasare a cuvntului de stare a procesorului csp[i]
pentru fiecare lucrare i i o alt zon reg[i] pentru registrele acesteia. Aceste zone permit salvarea contextului
procesorului de fiecare dat cnd o lucrare este ntrerupt pentru a permite reluarea ulterioar a lucrrii ntrerupte.
Realizarea prin program:
Pentru nceput, presupunem c lucrrile nu se vor termina niciodat. Vom utiliza un fir circular de lucrri, notat
fir_lucr i gestionat de trei proceduri intrare, ieire i urm.
procedura iniializare;
begin
for i:=0 to n-1 do
csp[i] := <activ,slave,demascat,adr lucrare[i]>;
intrare(i, fir_lucr);
endfor
intr_ceas_nou:=<activ,master,mascat,adr intr_ceas>;
svc_nou:=<activ,master,mascat,adr trattare_svc>;
lucr_ales:=0; -- ncepem cu lucrarea 0
ncarc_csp(csp[lucr_ales]);
end
procedura intr_ceas;
begin
csp[lucr_ales]:=intr_ceas_vechi;
save_registre(reg[lucr_ales]);
lucr_ales:=urm(lucr_ales);
ceas:=q;
ncarc_registre(reg[lucr_ales]);
ncarc_csp(csp[lucr_ales]);
end
Msurare
Fond
Msurare
Fond
Msurare
Fond
Msurare
Fond
100 ms 100 ms 100 ms 100 ms
Iniializare
100 ms

pag.16
Pentru a lua n consideraie terminarea lucrrilor, fiecare lucrare trebuie s ntiineze sistemul atunci cnd execuia
sa a luat sfrit printr-un apel al supervizorului SVC end dup cum este prezentat mai jos.
procedura tratare_svc;

case cod of

term:
suc:=urm(lucr_ales);
ieire(lucr_ales, fir_lucr);
lucr_ales:=suc;
ceas:=q;
ncarc_registre(reg[lucr_ales]);
ncarc_csp(csp[lucr_ales]);
endcase
Am presupus c firul de lucrri nu va deveni niciodat vid. n practic aceasta poate fi obinut prin trecerea la o
lucrare de fond, care poate eventual fi redus la o bucl.
2.3.3. Concluzii
Exemplele precedente ilustreaz modurile elementare de comunicare dintre programele unui sistem de operare i
mediul exterior. Programele sistemului sunt activate:
1) fie de ctre programul utilizatorului, care semnaleaz o anomalie (deviere) sau cere achitarea unui serviciu
(apelarea supervizorului),
2) fie de ctre un dispozitiv extern (ceas, proces comandat, organ periferic sau linie de comunicaii), care
semnaleaz producerea unui eveniment i care cere o reacie imediat a sistemului.
Ca i rezultat putem afirma c un sistem de operare este pilotat de evenimente (event-driven, eng.). Notm de
asemenea, c pentru comunicarea intern ntre programele unui sistem se folosete apelarea supervizorului dac un
anumit tip de protecie trebuie s fie activat (program executat n modul slave, de exemplu) i apelarea unei proceduri
obinuite n caz contrar. O secven de execuie a unui program de sistem se termin prin ncrcarea unui cuvnt de stare
a procesorului care permite controlul total al contextului restabilit.
2.4. Programarea operaiilor de intrare-ieire
Prin noiunea de intrare-ieire (prescurtat I/E; eng. input/output, I/O; fr. entre-sortie, E/S) numim orice transfer de
informaii din sau spre nucleul calculatorului. Operaiile de I/E semnific:
transferurile de informaii dintre diferite nivele ierarhice ale memoriei,
transferurile de informaii din sau spre mediul exterior (organe periferice locale sau la distan, captoare sau
dispozitive de acionare, alte calculatoare, etc.).
2.4.1. Organizarea general
2.4.1.1. Periferice, controlere, canale
Un organ de intrare-ieire este un dispozitiv capabil s transfere informaii ntre procesorul sau memoria
calculatorului i un suport extern de informaie. Acest transfer este comandat de ctre procesorul central. n cel mai
simplu caz, o instruciune special a procesorului permite transferarea informaiei ntre suportul extern i un registru al
procesorului, care va fi deci ocupat pe toat perioad transferului informaiei. Odat cu evoluia calculatoarelor, n scopul
unei mai bune utilizri a procesorului s-a ajuns la necesitatea acordrii unei autonomii organelor de intrare-ieire
ncredinndu-le funcii tot mai complicate de nlnuire i comand, procesorului central lsndu-i-se doar iniiativa de
lansare i de control a operaiilor. Din considerente economice mai apoi s-a trecut la separarea dispozitivelor de comand
a perifericelor de perifericele propriu-zise, pentru ca dispozitivele de comand s poat fi partajate ntre mai multe
periferice.
Cteva scheme de organizare a perifericelor sunt prezentate n fig.2.5. Schema (c) este proprie unui calculator de
putere mare, (a) i (b) corespund configuraiilor calculatoarelor de putere mai mic. Precizm funciile organelor
reprezentate n aceast figur.

pag.17
1) Un canal (sau unitate de schimb) este un procesor specializat n operaiile de intrare-ieire. El poate fi lansat
doar de un procesor central, nu posed ntreruperi, dar poate ntrerupe un procesor central. Setul de instruciuni
ale canalului i permite s acioneze controlerele i perifericele, care-i sunt conectate. Mini- i
microcalculatoarele pot poseda organe, numite Uniti de acces direct la memorie (ADM), care sunt nite canale
simplificate.
2) Un contrler este un dispozitiv de comand adaptat la un tip concret de echipament periferic. Autonomia sa
este limitat de operaii foarte elementare. Destinaia principal a unui controler este de a permite conectarea a
mai multor periferice de acelai tip la un singur controler. Un singur dispozitiv periferic poate transmite
informaii prin intermediul controlerului la un moment de timp dat. n acelai timp, este posibil executarea
simultan a unor operaii pe alte periferice, operaii care nu implic transferul de informaii (rebobinarea unei
bande magnetice, deplasarea braului unui disc, etc.). Partajarea funciilor ntre periferic i controler depinde de
tipul perifericului. De obicei, funciile logice (nlnuirea i sincronizarea operaiilor, emiterea unor semnale n
caz de accident sau terminarea normal a execuiei) sunt ncredinate controlerului, iar funciile fizice (transferul
propriu-zis) - perifericului. n programarea intrrilor-ieirilor nu este necesar, de obicei, s se fac o deosebire
ntre un controler i un periferic.
3) Un periferic este un organ capabil s transfere informaii din sau spre un suport extern. Controlerul este legat de
periferic printr-o interfa, care conine un set de funcii (intrare, ieire, semnalizri de comand i de accident)
i o linie de comunicaie, care servete la transferul informaiilor.























Un canal poate comanda un singur dispozitiv periferic cu debit ridicat (disc, de ex.) sau poate fi multiplexat pentru
mai multe periferice cu debitul mai mic. ncercarea mai multor procesoare (uniti centrale sau canale) de a accesa
simultan memoria operativ poate genera conflicte. Conflictele sunt reglate de ctre dispozitivul hardware de accesare,
UC
M
ADM
Magistral
Cp
p
Cp
p
UC
M
Cp
p
Cp
p
Magistral
(a) (b)
M
C
Cp
C
Cp
Magistral
(c)
Cp
p p p p
UC UC
UC : unitate central
M : memorie
C : canal
ADM : acces direct la memorie
Cp : controler
p : dispozitiv periferic
Fig. 2.5. Organizarea intrrilor-ieirilor

pag.18
care impune o ordine de acces conform unor prioriti prestabilite. Canalele au prioritate fa de unitile centrale,
deoarece ele trebuie s reacioneze ct se poate de rapid la evenimentele externe.
2.4.1.2. Adresarea dispozitivelor periferice
Diferite organe sunt desemnate, la fiecare nivel, printr-o adres care permite s evideniem:
canale legate de memorie,
controlere ataate fiecrui canal,
dispozitive periferice ataate fiecrui controler.
La un nivel anume adresa este un simplu numr de ordine. Un periferic este desemnat printr-o adres compus
<numrul canalului, numrul controlerului, numrul dispozitivului periferic>.
Un controler poate fi conectat la mai multe canale, iar un periferic la mai multe controlere, care vor fi, obligator, de
acelai tip. Astfel, un periferic are mai multe ci de acces la memorie (doar una singur poate fi activ la un moment de
timp dat) i poate fi desemnat prin mai multe adrese (fig.2.6).












Aceast organizare permite ameliorarea performanelor i disponibilitii sistemului. Existena mai multor ci de
acces la un periferic diminueaz riscul unor indisponibiliti din cauza saturaiei sau ieirii din funciune a unui canal sau
controler.
n cazul unor calculatoare, cum ar fi de exemplu DEC, adresarea perifericelor utilizeaz amplasamente de memorie
rezervate, care sunt asociate cuvntului de stare sau registrului de date a unui controler specificat. Accesarea cuvntului
de stare sau a registrului de date este realizat prin intermediul instruciunilor obinuite de accesare a memoriei. Aceast
schem simplific desemnarea perifericelor i programarea intrrilor-ieirilor.
2.4.2. Metode de comand a perifericelor
Programul, care controleaz funcionarea elementar a unui dispozitiv periferic se numete driver. Driverul
gestioneaz n mod direct interfaa controlerului perifericului, trateaz ntreruperile generate de acesta, detecteaz i
trateaz cazurile de eroare. El este, de obicei, invizibil unui utilizator obinuit al sistemului, care apeleaz funcii de
intrare-ieire prin intermediul unor servicii de nalt nivel, realizate prin apelri ale supervizorului. Vom prezenta mai jos
modurile principale de control ale perifericelor i primitivele elementare de intrare-ieire.
2.4.2.1. Intrri-ieiri sincrone
n acest caz nu exist nici un fel de paralelism ntre procesare i transferul informaiilor. Procesorul este ocupat
pentru toat durata transferului.
Schema care urmeaz nu descrie doar un caz particular, ci este reprezentativ pentru organizarea intrrilor-ieirilor
sincrone pentru mai multe tipuri de calculatoare.
1) Specificarea mecanismului
11
01, 10
00
1
0
1
0
1
0
1
0
1
0
1
0
Canal
Canal
Controler
Controler
Controler
p
p
p
p
p
001
000
111
011
101
110
010
100
Fig.2.6. Adresarea perifericelor

pag.19
Operaia de baz const n transferarea unor informaii elementare de volum fix ntre un amplasament de memorie i
un dispozitiv periferic. Presupunem c volumul informaiei transmise, care depinde de perifericul considerat, este un
octet. Starea ansamblului controler-periferic este definit printr-un cuvnt de stare, aflat n controler. Acest cuvnt de
stare conine o mulime de indicatori booleeni, dintre care doar 3 ne vor interesa aici:
preg : perifericul este pregtit (gata) de funcionare,
term : transferul este terminat; perifericul este gata s transfere un nou caracter,
err : n cursul transferului a avut loc o eroare; natura ei este precizat de un cod care face parte din
cuvntul de stare.
Controlerul este comandat de unitatea central cu ajutorul a trei instruciuni de intrare-ieire, efectul crora este
descris mai jos:
IN(adr_mem, adr_perif) : cerere de transfer tip intoducere a unui octet,
OUT(adr_mem, adr_perif) : cerere de transfer tip extragere a unui octet,
TEST(adr_perif) : copie cuvntul de stare ntr-un registru cu scopul de a consulta indicatorii.
Prin adr_mem i adr_perif sunt desemnate adresele amplasamentului memoriei i perifericului.
2) Programul driver-ului
Fie c vrem s extragem o secven de n caractere care se afl ntr-un masiv T[0..n-1]. Caracterul T[i], dac i>0,
poate fi extras doar dac a fost transferat T[i-1]. Pentru a verifica aceast condiie se testeaz iterativ (ateptare activ)
indicatorul term.
iniializare : term:=false;
TEST(adr_perif);
if preg = false then // perifiericul nu este pregtit
<tratare eroare>
endif;
for i:=0 to n-1 do
OUT(adr T[i], adr_perif);
ciclu : TEST(adr_perif);
if err = true then
<tratare eroare>
endif;
if term = false then goto ciclu
endif;
endfor
Intrrile-ieirile sincrone sunt folosite la microprocesoarele cele mai simple sau atunci cnd procesorul nu poate fi
exploatat n mod util n timpul transferului (nregistrri de msurare, ncrcarea iniial a unui sistem).
2.4.2.2. Intrri-ieiri asincrone cu ntreruperi
1) Specificarea mecanismului.
Terminarea procesului de transferare a caracterului T[i] este semnalizat printr-o ntrerupere. Dac acest caracter nu
este ultimul (i<n-1), urmtorul caracter poate fi transmis. Procesul este declanat de transferul primului caracter. Acest
transfer este cerut de ctre programul principal prin intermediul unui apel a supervizorului (SVC intrare sau ieire), care
are drept parametri:
adresa perifericului,
numrul de caractere care vor fi transferate,
adresa de origine sau de destinaie a primului caracter,
booleanul term, valoarea TRUE a cruia semnalizeaz sfritul transferului.
Programul principal programul de tratare a ntreruperii
term:=FALSE (la prsirea lui T[i])
SVC i:=0;
ieire OUT(adr T[i], adr_perif);
save context;

pag.20
TEST(adr_perif);
if err then
<tratare eroare>
else
if i<n-1 then
<tratare paralel> i:=i+1;
OUT(adr T[i], adr_perif)
else
term:=TRUE
if term then endif
endif;
<restabilire context>
2.4.2.3. Intrri-ieiri programate pe canal sau acces direct la memorie
Un canal este un procesor capabil s execute o secven de operaii de intrare-ieire, definite de un program din
memorie, pentru un periferic conectat la acest canal. El conine un cuvnt de stare n care este inclus un contor ordinal ca
i un set de indicatori despre starea operaiei curente. Programul unui canal este compus dintr-o suit de instruciuni,
fiecare specificnd o operaie elementar de intrare-ieire. Acest program trebuie s fie pregtit anticipat de procesorul
central. Principiul de funcionare a unui canal este urmtorul:
1) Un canal poate fi lansat doar de un procesor central cu ajutorul unei instruciuni SIO (Start Input-Output, eng.).
Aceasta iniializeaz cuvntul de stare a canalului, specificnd adresa primei instruciuni care trebuie executat
i adresa perifericului origine sau destinaie a transferului. Dup aceasta, activitatea canalului i a procesorului
central decurg n mod paralel.
2) Odat lansat, canalul execut programul su. Aceast execuie se poate termina n trei moduri:
a) terminarea execuiei programului,
b) terminare cauzat de o eroare (pan hardware, program incorect, etc.),
c) la comanda unui procesor central, care poate n orice moment stopa execuia programului canalului cu
ajutorul unei instruciuni speciale stop_canal (HIO, Halt Input-Output, eng.).
Cazul a) este cel al funcionrii normale. Procesorul central este informat despre terminarea executrii programului
canalului prin intermediul unei ntreruperi. Toate datele necesare derulrii intrrii-ieirii sunt prezente n cuvntul de
stare a canalului, care poate fi consultat de ctre procesorul central cu ajutorul unei instruciuni testare_canal (adesea
notat prin TIO, eng. Test Input Output). n cazul b) o ntrerupere oricum are loc, cu excepia, evident, a cazului n
care nsui dispozitivul ntreruperii a fost afectat. Cuvntul de stare a canalului conine toate informaiile necesare despre
cauza opririi. Pentru o oprire de urgen, dac procesorul central detecteaz o situaie anormal, este folosit
instruciunea stop_canal (cazul c).
3) Procesorul central, la orice moment de timp, poate consulta cu ajutorul instruciunii testare_canal starea
canalului. Aceast consultare nu mpiedic executarea programului procesorului central. Starea obinut este starea
corespunztoare ultimului punct observabil.
Programul unui canal reflect specializarea acestuia n operaii de intrare-ieire. O instruciune a canalului specific
urmtoarele:
natura operaiei care va fi executat (citire, scriere, deplasarea braului unui disc, etc.),
adresa de nceput a zonei de memorie origine sau destinaie,
numrul caracterelor care urmeaz a fi transmise.
Exist o instruciune, care permite un salt condiionat n cadrul programului. Pot fi de asemenea programate iteraii.
Exemplul 2.8. Canalele calculatoarelor IBM 370. Instruciunile canalului conin informaiile menionate mai sus
la care sunt adugai trei indicatori:
un bit de nlnuire a instruciunilor. Dac acest bit este pus n 1, la terminarea instruciunii
curente se va executa instruciunea urmtoare, n caz contrar execuia se oprete,
un bit de nlnuire a datelor. Dac acest bit este pus n 1, canalul execut, la terminarea
instruciunii curente, o instruciune, care are acelai cod al operaiei i este ataat aceluiai
periferic, ca i instruciunea precedent, dar care utilizeaz o zon de memorie, specificat n

pag.21
instruciunea urmtoare. Aceasta permite executarea unui transfer spre sau dintr-o zon non-
contigu de memorie,
un bit de cerere a unei ntreruperi. Dac valoarea acestui indicator este 1, o ntrerupere are loc
atunci cnd canalul ncepe execuia instruciunii date. Aceasta permite culegerea unor date
statistice.
Un canal este lansat cu ajutorul unei instruciuni SIO care specific adresa perifericului. n prealabil
adresa primei instruciuni, care va fi executat i cheia de protecie utilizat n timpul transferului,
trebuiesc plasate ntr-o locaiune rezervat de memorie.
Mai sus au fost prezentate doar aspectele eseniale ale funcionrii unui canal. Exist ns cteva mecanisme, care
complic n mod substanial descrierea unui sistem real de intrare-ieire:
multiplexarea canalelor i a contolerelor. Suntem impui s tim a determina imediat momentul de timp n
care canalul sau controlerul devin disponibile, pentru a le utiliza n mod eficient. Pentru aceasta sunt folosii
indicatori i ntreruperi speciale,
necesitatea de a ine cont de caracteristicile diverselor periferice, ceea ce complic n mod substanial
relaiile de ordonanare,
detectarea i tratarea erorilor, crora sunt consacrate majoritatea programelor unui administrator al intrrilor-
ieirilor.
Un ADM este o form simplificat a unui canal: "programul" unui ADM conine o instruciune unic, care specific
o adres n memorie, o adres de periferic, numrul octeilor care vor fi transferai, sensul transferului i semnalul
terminrii transferului (s se cear sau nu o ntrerupere). Acest program nu este plasat n memorie, ci ntr-un registru al
ADM, utilizat ca i cuvnt de stare, care poate fi consultat n timpul transferului pentru a duce evidena octeilor rmai
pentru a fi transmii.
2.4.3. Intrri-ieiri buferizate n memorie
2.4.3.1. Specificarea problemei
Diferena considerabil dintre viteza de lucru a unitii centrale i cea a organelor periferice impune "buferizarea"
intrrilor-ieirilor, adic introducerea unei zone de memorie-tampon ntre periferic i programul utilizatorului. Scopul
este de a reduce timpul de inactivitate a unitii centrale, dezlegnd funcionarea acesteia de periferice. Programul
utilizatorului va transfera informaiile din sau spre zona-tampon, iar aceast zon-tampon va servi, n mod paralel, drept
surs sau destinaie la schimbul de date cu perifericul. Dezlegarea unitii centrale de periferic este cu att mai bine
realizat cu ct este mai mare capacitatea zonei-tampon. Adesea, pentru a nu suprancrca memoria principal, zona-
tampon este situat pe discul fix.
Pentru descrierea modelului sunt necesare urmtoarele specificaii:
schimburile de informaii cu perifericele se va face prin nregistrri de lungime fix,
zona-tampon este de volum fix egal cu N nregistrri,
pentru un program utilizator, schimbul de informaii cu zona-tampon trebuie s simuleze schimbul cu
perifericul, drept consecin, ordinea de depozitare sau de extragere a informaiilor trebuie s fie bine stabilit i
nici o nregistrare s nu fie pierdut,
ateptrile inutile trebuie reduse la minimum, att n cazul unitii centrale, ct i a perifericului,
capacitatea suporturilor nu este limitat: n cazul unei operaii de citire organul de intrare va fi totdeauna
alimentat; n cazul unei operaii de scriere, organul de ieire poate accepta ntotdeauna o nregistrare,
transferul se va efectua fr eroare.
2.4.3.2. Descrierea algoritmilor
1) Citire
Un program de citire este o procedur citire(nregistrare), care prezint drept rezultat valoarea nregistrrii citite.
Aceast procedur, realizat printr-o apelare a supervizorului, are ca efect citirea din zona-tampon a nregistrrii
urmtoare. Citirea este posibil doar dac zona-tampon conine cel puin o nregistrare, care nu a fost nc citit. n caz
contrar, activitatea apelant trece n starea de ateptare.
n ambele cazuri, continuitatea alimentrii zonei-tampon este asigurat de introducerea unei nregistrri de la
perifericul de intrare, dac un transfer nu are deja loc. Terminarea transferului unei nregistrri n zona-tampon provoac

pag.22
o ntrerupere. Pentru a menine perifericul n stare activ, programul de tratare asociat acestei ntreruperi trebuie s
relanseze transferul urmtor, dac mai exist loc n zona-tampon. Plus la aceasta, dac activitatea apelant era n
ateptarea sosirii unei nregistrri, ea trebuie relansat.
Acest mod de funcionare poate fi schematic prezentat conform schemei programului de mai jos.







procedura citire(nreg) tratare ntrerupere
(apelare supervizor)
if tamponul_nu este_vid then if tamponul_nu este_plin then
extragere(nreg, tampon); lansare_transfer;
lansare_transfer n caz de necesitate; if ateptare then // ateptare pentru citire
else reluare citire
lansare_transfer n caz de necesitate; endif
ateptare
endif
n acest program "n caz de necesitate" semnific "dac un transfer nu este deja n curs". Sistemul este iniializat
de citirea primei nregistrri, care provoac transferuri succesive pn la umplerea zonei-tampon.
2) Scriere
Schema care corespunde unei scrieri se obine din precedenta, nlocuind dup cum urmeaz:
citire prin scriere
extragere prin introducere
tampon_vid prin tampon_plin
tampon_plin prin tampon_vid






procedura scriere(nreg) tratare ntrerupere
(apelare supervizor)
if tamponul_nu este_plin then if tamponul_nu este_vid then
introducere(nreg, tampon); lansare_transfer;
lansare_transfer n caz de necesitate; if ateptare then
else reluare scriere
lansare_transfer n caz de necesitate; endif
ateptare
endif
3) Programe
periferic de
intrare
programul utilizator
citire (nreg)
Zon-tampon cu N locaiuni
periferic de
ieire
programul utilizator
scriere (nreg)
Zon-tampon cu N locaiuni

pag.23
Programele sunt o transcriere a schemelor de mai sus. Zona-tampon este un fir de ateptare, gestionat circular cu
ajutorul a doi pointeri: tcitire (top-ul FA) - indic urmtoarea nregistrare care urmeaz a fi preluat, qcitire (coada FA) -
indic amplasamentul unde se va introduce urmtoarea nregistrare. Funcia suc realizeaz nlnuirea amplasamentelor;
o realizare simpl pentru o zon-tampon secvenial, care are N nregistrri a cte L amplasamente este de forma:
suc(ptr) = (ptr + L) mod (L*N)
Vom presupune, c activitatea care cere operaia citire este unica care va utiliza procesorul; trecerea acesteia n
starea de ateptare se va realiza trecnd n starea de ateptare procesorul. Aceast soluie este impracticabil n cazul unor
activiti multiple (este necesar de a relansa o alt activitate), dar o vom accepta din motive de simplitate.
Mai subliniem c transferul este comandat de un canal sau un ADM, fr a detalia programul respectiv, pregtit de
obicei anticipat; numai valorile parametrilor se vor schimba de la o execuie la alta. Procedurile lansare_citire i
lansare_imprimare realizeaz pregtirea programului i lansarea transferului.







Variabile Semnificaie Valoare iniial
L lungimea unei casete (nregistrri) const.
Ncitire numrul de casete a zonei-tampon const
nvcitire numrul de casete vide Ncitire
citire_activ indicator al activitii perifericului de intrare false
tcitire, qcitire pointeri top i coad 0, 0
suc() pointer spre caseta urmtoare

citire(nreg) tratare_ntrerupere_perif_de_intrare
save(zon_svc); save(zon_ntrerupere);
nceput: qcitire:=suc(qcitire);
if nvcitire<Ncitire then nvcitire:=nvcitire-1;
nreg:=tampon[tcitire]; if nvcitire>0 then
tcitire:=suc(tcitire); lansare_perif_de_intrare(qcitire)
nvcitire:=nvcitire+1; else
if non citire_activ then citire_activ:=false
citire_activ:=true; endif;
lansare_perif_de_intrare(qcitire) if ateptare_citire then
endif ntrerupere_veche.act:=activ;
else ateptare_citire:=false
if non citire_activ then endif;
citire_activ:=true; restabilire(zon_ntrerupere);
lansare_perif_de_intrare(qcitire) ncrcare_csp(ntrerupere_veche);
endif;
csplucrare:=<ateptare,slave,demascat, adr nceput>; lansare_perif_de_intrare(qcitire)
ateptare_citire:=true; elaborare prog.canal:
ncrcare_csp(csplucrare); <sens=citire
endif; adr.memorie=adr tampon[qcitire]
restabilire(zon_svc); contor_octei=L>
ncrcare_csp(svc_vechi); SIO
<prog=prog.canal
perif= perif_de_intrare>
periferic de
intrare
programul utilizator
(SVC)
citire (nreg)
Zon-tampon
qcitire tcitire

pag.24
Execuia programelor de mai sus ne impun s facem o remarc foarte important. Trebuie s notm, c executarea
tratrii ntreruperii este declanat de sfritul transferului fizic al unei nregistrri, activitate, care are loc paralel cu
executarea programului primitivei citire(nreg) pe procesor. Drept rezultat, este posibil ca ntreruperea s survin ntr-un
punct oarecare (observabil) al executrii acestei primitive, ceea ce va nsemna intercalarea executrii programului de
tratare a ntreruperii ntre dou puncte oarecare ale programului citire(nreg). Consecinele pot fi catastrofale, cum ne
arat exemplul urmtor.
S considerm instruciunea a doua
if non citire_activ then
citire_activ:=true;
lansare_perif_de_intrare(qcitire)
endif
din programul citire(nreg). Ea se descompune n urmtoarele instruciuni elementare:
(a) load R, citire_activ
(b) jifz R, urm -- ramificare dac true
(c)
urm:
<ateptare>
Presupunem c ntreruperea sosete ntre instruciunile (a) i (b), valoarea citit n R de (a) este true; programul de
tratare a ntreruperii pune citire_activ n false. Dup prelucrarea ntreruperii, instruciunea (b) este executat cu R avnd
valoarea true i activitatea apelant trece n starea de ateptare n care rmne un timp indefinit, deoarece perifericul nu a
fost relansat. Pot exista i alte cazuri de funcionare incorect, legat de momentul sosirii unei ntreruperi.
Putem afirma, c validitatea variabilelor comune (de ex. citire_activ, nvcitire etc.,) nu poate fi garantat dac
autorizm sosirea ntreruperilor de terminare a operaiilor de intrare-ieire n orice moment de timp. Apelarea
supervizorului pentru a realiza secvena de cod citire_nreg trebuie executat cu ntreruperile de intrare-ieire mascate.
Situaia dat este cunoscut sub numele de excludere mutual i este o consecin a execuiei activitilor asincrone.
Programele pentru un periferic de ieire (imprimare, de ex.) sunt analogice. Remarca despre mascarea ntreruperilor
rmne valabil.









Variabile Semnificaie Valoare iniial
L lungimea unei casete (nregistrri) const.
Nimp numrul de casete a zonei-tampon const
nvimp numrul de casete vide Nimp
imp_activ indicator al activitii perifericului de intrare false
timp, qimp pointeri top i coad 0, 0
suc() pointer spre caseta urmtoare

scriere(nreg) tratare_ntrerupere_imp
save(zon_svc); save(zon_ntrerupere);
nceput: qimp:=suc(qimp);
if nvimp>0 then nvimp:=nvimp+1;
imprimant
programul utilizator
(SVC)
scriere (nreg)
Zon-tampon
timp qimp

pag.25
tampon[timp]:= nreg; if nvimp<Nimp then
timp:=suc(timp); lansare_imp(qimp)
nvimp:=nvimp-1; else
if non imp_activ then imp_activ:=false
imp_activ:=true; endif;
lansare_imp(qimp) if ateptare_imp then
endif ntrerupere_veche.act:=activ;
else ateptare_imp:=false
if non imp_activ then endif;
imp_activ:=true; restabilire(zon_ntrerupere);
lansare_imp(qimp) ncrcare_csp(ntrerupere_veche);
endif;
csplucrare:= :=<ateptare,slave,demascat, adr nceput>; lansare_imp(qimp)
ateptare_imp:=true; elaborare prog.canal:
ncrcare_csp(csplucrare); <sens=ieire
endif; adr.memorie=adr tampon[qimp]
restabilire(zon_svc); contor_octei=L>
ncrcare_csp(svc_vechi); SIO
<prog=prog.canal
perif= imprimant>
2.4.4. ncrcarea iniial
Pentru a ncepe lucrul maina "goal" trebuie s aib ncrcat n memoria operativ programul sistemului de operare
i s execute un salt la prima instruciune a acestui program. Aceasta presupune prezena n memorie a unui program de
citire, care el nsui trebuie ncrcat n prealabil. La primele calculatoare, un program de cteva instruciuni, introdus
manual n memorie cu ajutorul unor comutatoare ale pupitrului de comand la o adres fix, permitea ncrcarea unui
program de citire mai elevat capabil s citeasc versiunea complet a sistemului de operare. Acest proces era numit
ncrcare (bootstrapping, eng.).
n calculatoarele contemporane, programul de iniializare se afl permanent ntr-o memorie constant (BIOS).
Execuia acestui program este declanat odat cu punerea sub tensiune a calculatorului (autoncrcare).
Exerciii
Exerciiul 2.1.
Elaborai schema unui program de intrare-ieire cu tratare a ntreruperilor conform schemei date n 2.4.2.2. cu
modificrile urmtoare:
a) n cazul detectrii unei erori de transfer, se va ncerca repetarea operaiei pn la un numr maxim de ncercri
n
max
, nainte de a anula intrarea-ieirea,
b) dac transferul nu a fost realizat ntr-o perioad de timp t
max
specificat, s se anuleze operaiile de intrare-ieire.
Pentru ambele cazuri s se apeleze o procedur specificat de tratare a erorii.
Exerciiul 2.2.
Un calculator este utilizat pentru culegerea unor date de msurare. El execut periodic (cu perioada T) un ciclu de
activiti:
culegerea rezultatelor de msurare de la captoare (durata t
m
)
procesarea rezultatelor de msurare (durata t
p
)
vidajul pe disc al rezultatelor (durata t
v
)
Toate cele trei operaii de mai sus trebuie s fie executate consecutiv pentru fiecare ciclu. Exist un ceas, care
provoac o ntrerupere la trecerea unui contor prin zero. S se elaboreze programele acestui sistem (programul principal,
programul de tratare a ntreruperilor) pentru urmtoarele trei cazuri (formulnd pentru fiecare caz, dac va avea loc,
condiia posibilitii tratrii n funcie de durata diferitor operaii).
a) Captoarele i controlerul discului sunt comandate de unitatea central. Ciclurile succesive de msurare trebuie
executate consecutiv i un task de fond este executat pentru perioada timpului mort.

pag.26
b) Presupunem c t
m
+t
p
< T < t
m
+t
p
+t
v
. Vidajul ciclului i trebuie efectuat paralel cu preluarea datelor
ciclului i+1. Se presupune c discul este comandat de ADM.
c) Presupunem c t
m
< T < t
m
+t
p
. Trebuie executat n paralel i preluarea datelor i vidajul pentru ciclurile
consecutive.
Exerciiul 2.3.
O instruciune citire_poziie(x,y) permite citirea poziiei curente pe ecran a mouse-ului, definit prin coordonatele
sale carteziene x i y. O alt instruciune init_mouse permite s definim poziia curent a mouse-ului drept origine a
sistemului de coordonate.
S se elaboreze un program, care va permite urmrirea deplasrii mouse-ului pe ecran.
a) Admitem c viteza maxim de deplasare a mouse-ului este de 10 cm/s. Care este frecvena de preluare a
coordonatelor dac se cere s localizm poziia mouse-ului definit printr-un pixel pe un ecran de 30x30 cm i
care conine 1024x1024 pixeli?
b) Mouse-ul este gestionat de un program activat periodic, cu perioada T aleas n funcie de rezultatul obinut.
a) S se elaboreze acest program presupunnd disponibile dou proceduri:
afiare_cursor(x,y), care afieaz un cursor centrat pe x, y,
deplsare_cursor(d
x
,d
y
), care deplaseaz cursorul, presupus afiat, la distana dictat de vectorul (d
x
,d
y
).
Avem la dispoziie un ceas cu ntrerupere la trecerea prin zero.

S-ar putea să vă placă și