Sunteți pe pagina 1din 67

Ministerul Educaiei si Tineretului

al Republicii Moldova
UNIVERSITATEA TEHNIC A MOLDOVEI
Catedra Tehnologii Informaionale

ndrumar pentru lucrri de laborator


la disciplina Analiza i concepia sistemelor de
operare
Pentru studenii specialitilor Tehnologii
Informaionale

Chiinu 2007
1

Introducere
La momentul de fa nu exist o definiie clar, acceptat de
toi i succint a termenului sistem de operare. Muli ncearc s
propun o definiie a acestui termen prin enumerarea funciilor pe
care trebuie s le ndeplineasc un sistem de operare, ns trebuie de
luat n considerare acel fapt, c nu toate sisteme de operare propuse
pentru vnzare asigur aceste funcii n ntregime. Conform
cerinelor moderne un sistem de operare trebuie s ndeplineasc
urmtoarele funcii:
S asigure ncrcarea n memorie a programelor
utilizatorului i s le execute;
S asigure dirijarea memoriei. n cel mai simplu caz
aceasta se reduce la indicarea programului unic ncrcat
n memorie adresei, la care se termin memoria
accesibil pentru el, i se ncepe segmentul de memorie
ocupat de sistem;
S asigure lucrul cu diverse mijloace de pstrare a
informaiei, cum sunt benzi magnetice, lente, discuri
optice etc.
S asigure acces mai mult sau mai puin standardizat la
diverse dispozitive periferice;
S asigure o careva interfa pentru utilizator.
Alegerea tipului sistemului de operare poate prezenta o
problem nu foarte simpl. Unele aplicaii nainteaz cerine stricte,
crora le corespund numai un numr restrns de sisteme. De
exemplu, problemele de dirijare a dispozitivelor industriale i de
cercetare care lucreaz n timp real, ne oblig s alegem ntre SO
specializate i unele sisteme de uz general. Altele, de exemplu
servere bazelor de date, cer asigurarea unei protecii nalte i
productivitii. i, n final, exist asemenea aplicaii, cum sunt
automatizarea lucrului de oficiu al unei organizaii mici, care acord
posibilitatea de a alege fr careva restricii un sistem de operare sau
de a crea unul nou.

LUCRAREA DE LABORATOR Nr.1


Tema:
ncrcarea sistemului de operare. ncrcarea sarcinii.
Scopul lucrrii:
Crearea discului de ncrcare al sistemului de operare. De creat o
procedur de ncrcare a lucrrii n memorie.
Noiuni teoretice
1. ncrcarea sistemului de operare
La ncrcarea sistemului de operare apare o problem specific:
pe un calculator gol, de regul, nu exist un program care ar lansa
procesul de ncrcare.
Pe calculatoarele n care acest program se afl n ROM (sau n
alt tip de memorie independent de energie) nu exist aceast
problem: conectarea calculatoarelor duce la execuia programului
din memorie. La conectarea calculatorului sau resetarea, procesorul
execut comanda aflat pe o anumit adres, de exemplu
0xFFFFFFFA. Dac, la aceasta adres se afl ROM i n ea este
nscris programul, atunci el se lanseaz.
La elaborarea programelor pentru aplicaii incorporate, de
obicei, se folosesc emulatoare ROM n circuit. Aceste emulatoare
servesc sistemul drept ROM, iar sistemului elaboratorului - drept
RAM sau dispozitiv extern special. Calculatoarele universale au
nevoie de ROM, iar programul nscris aici se numete monitor de
ncrcare. Punctul de intrare a acestui program trebuie s se afle pe
adresa, la care procesorul transmite controlul n momentul conectrii.
Acest program efectueaz iniializarea primar a procesorului,
testarea memoriei i a echipamentelor periferice obligatorii, i apoi
lanseaz ncrcarea sistemului de operare. n calculatoarele
compatibile IBM PC monitorul de ncrcare este cunoscut drept
BIOS.
3

Pe multe sisteme n ROM pe lng ncrctorul primar mai sunt


nscrise i alte seturi de programe. Unul dintre aceste seturi poate fi
un sistem de control i diagnoz numit monitor de consol.
Asemenea sisteme se gsesc pe toate calculatoarele PDP-11/VAX i
pe sistemele VME OS-9 sau VxWorks. Un asemenea monitor
permite scanarea coninutului memoriei pe o anumit adres,
nscrierea datelor, lansarea unei poriuni de memorie ca program, etc.
Pe PDP-11/VAX n acest monitor pot fi scrise programe cu acelai
succes ca i n assembler.
Pe sistemele firmei Sun n calitate de monitor de consol
servete interpretatorul limbajului Forth. La nceput, n ROM-ul
calculatoarelor IBM PC era nscris interpretatorul BASIC. Acesta era
motivul utilizrii ineficiente a spaiului de adrese mai sus de
segmentul 0xC000. Prezena BASIC-ului poate fi controlat
chemnd ntreruperea 0x60. Pe ecran trebuie s se afieze mesajul
NO ROM BASIC. PRESS ANY KEY TO REBOOT. n principiu,
BASIC nu este un monitor de consol n tot sensul cuvntului
deoarece primete controlul nu nainte de ncrcare, ci doar dup ce
ncrcarea de pe orice dispozitiv disponibil s-a sfrit cu eec.
Dup lansarea monitorului de consol i iniializarea sistemului
se poate ordona ncrcarea SO propriu-zis. Pe IBM PC acest ordin se
d automat, i n multe cazuri ncrcarea se ndeplinete nu de pe
dispozitivul dorit. Pe aceasta se bazeaz ciclul de via a viruilor de
ncrcare.
Pentru ca monitorul de consol s poat ncrca ceva, el trebuie
s poat iniializa dispozitivul de pe care se presupune ncrcarea, i
s citeasc de pe acest dispozitiv codul de ncrcare. Monitorul de
consol este obligat s conin un modul de comand cu dispozitivul
de ncrcare. De exemplu, un BIOS tipic pentru IBM PC conine
module de comand cu discuri flexibile (floppy) i cu discuri rigide
cu interfaa Seagate 506 (pe calculatoarele moderne, de obicei,
aceasta este interfaa EIDE, incompatibile constructiv, compatibile
soft de sus n jos).
Pe lng aceasta, construcia multor sisteme permit montarea
ROM pe plcile controloarelor dispozitivelor auxiliare. Acest ROM
4

trebuie s conin un modul program care s permit iniializarea


dispozitivului i ncrcarea de pe el.
De regul, serviciile montorului de ncrcare sunt disponibile
sistemei ncrcate. Modulul de dirijare cu discuri ale calculatoarelor
IBM PC - compatibile ofer funcii de citire i scriere pe anumite
sectoare ale discului. Accesul la funciile ROM permite micorarea
codului ncrctorului primar al SO, n cele mai multe cazuri l face
independent de dispozitiv.
Cel mai simplu se petrece ncrcarea de pe dispozitivele cu
acces consecutiv (benzi magnetice, benzi perforate). Monitorul de
ncrcare citete ntregul volum de informaie n memorie i apoi
pred comanda la nceputul informaiei citite.
Aceast metod de ncrcare nu se mai folosete n sistemele
contemporane. ncrcarea se efectueaz de pe dispozitive cu acces
direct, ca regul de pe discuri. De obicei, n memorie se citete
sectorul 0 de pe pista 0. Coninutul acestui sector se numete
ncrctorul primar. Pe IBM PC acest ncrctor se numete sector
de ncrcare sau boot-sector.
De regul, ncrctorul primar, utiliznd serviciile monitorului
de ncrcare, caut pe disc nceputul sistemului de fiiere a propriului
sistem de operare, gsete n acest sistem de fiiere un fiier cu o
anumit denumire, l ncarc n memorie i i pred controlul. n cel
mai simplu caz acest fiier reprezint nucleul sistemului de operare.
Volumul ncrctorului primar este limitat de obicei de volumul
sectorului discului, adic 512 bytes. Dac sistemul de fiiere are o
structur complicat, uneori ncrctorul primar trebuie s citeasc
ncrctorul secundar, volumul cruia poate s fie mult mai mare.
Deoarece volumul acestuia este mai mare, el este capabil de a citi
structurile sistemului de fiiere. n unele cazuri se folosesc i
ncrctoarele teriare.
Aceast execuie n lan a ncrctoarelor de complexitate
crescnd se numete bootstrap.
Un rol important are metoda de ncrcare prin reea. Ea se
efectueaz analogic ncrcrii de pe disc: ROM-ul montat pe cartela
de reea trimite n reea un pachet standard care conine interpelarea
ctre serverul de ncrcare. Acest server transmite n reea
5

ncrctorul secundar, .a.m.d. Aceast tehnologie este de nenlocuit


pentru staiile de lucru fr discuri. Amplasarea centralizat pe server
a imaginilor de ncrcare a staiilor de lucru simplific dirijarea lor i
protejeaz setrile SO de modificri accidentale i intenionate. De
asemenea, reduce costurile de ntreinere a parcurilor de calculatoare,
ceea ce duce la ncrcarea prin reea i a calculatoarelor cu discuri.
Cel mai simplu se efectueaz ncrcarea sistemelor, nucleul
crora este amplasat n acelai modul de ncrcare cu alte module
auxiliare. De exemplu, n sistemele familiei UNIX, nucleul se
numete /unix (n FreeBSD - /vmunix, n linux - /vmlinux, n cazul
nucleului mpachetat - /vmlinuz.
La reconfigurarea sistemului, adugrii sau tergerii driverelor
i a altor module, este nevoie de a reasambla nucleul. Aceasta poate
fi fcut cu un redactor standard de legturi sau cu programe speciale
de generare a sistemului. Pentru aceast reasamblare este nevoie de
textele surs (Linux i BSD) sau de obiectele modulului nucleului.
Asamblarea nucleului din obiecte pe sistemele contemporane dureaz
nu mai mult de cteva minute. Recompilarea complet a textelor
surs dureaz mai mult.
n cazul n care administratorul de sistem greete i
asambleaz un nucleu invalid, ncrctorul secundar de obicei
propune alegerea fiierului ce urmeaz a fi ncrcat. Nucleul acestor
sisteme de obicei nu folosete fiiere de configurare, toate setrile
specificndu-se la generare.
Majoritatea SO moderne folosesc o form complicat de
ncrcare, la care modulele auxiliare se ncarc dup lansarea
nucleului. n terminologie aceasta se numete asamblare n
momentul ncrcrii. Lista modulelor ce urmeaz a fi ncrcate i
parametrii de setare a nucleului se conin ntr-un fiier special sau n
mai multe fiiere. Pentru DOS i OS/2 acest fiier se numete
CONFIG.SYS, iar pentru sistemele WIN32 registru (registry).
Problema acestui tip de ncrcare const n faptul c nucleul
neiniializat complet trebuie s fie deja capabil de a lucra cu sistemul
de fiiere, s gseasc n el fiiere i s le citeasc.
Deosebit de complicat este aceast metod cnd driver-ele
discului de ncrcare i a sistemului de fiiere sunt module de
6

ncrcare. n acest caz nucleul se folosete de funciile pentru lucru


cu sistemul de fiiere, propuse de ncrctorul secundar (sau teriar,
n general, ultimul) pn se iniializeaz modulele proprii.
ncrctorul secundar este obligat s poat citi fiierele de ncrcare,
altfel nu ar putea gsi nucleul. Dac productorii de SO nu realizeaz
un ncrctor secundar, ci doar un driver pentru sistemul de fiiere,
atunci SO poate lucra cu un asemenea sistem de fiiere, dar nu se va
putea ncrca din el.
Unele SO, de exemplu DOS, se pot ncrca doar de pe
dispozitive susinute de BIOS, i doar dintr-un tip de sistem de fiiere
FAT, driverul cruia este asamblat n nucleu. O derivare a acestei
idei este propus de Linux, modulele cruia pot s se alture
nucleului att static, ct i dinamic. Orice module, cu excepia
driverelor discului de ncrcare i a sistemului de fiiere de ncrcare,
se pot ncrca dinamic.
Avantajele pe care le d nucleul asamblat dinamic nu sunt mari
n comparaie cu cele asamblate static. Totui, unele sisteme (Solaris,
Linux, Netware) merg n aceast direcie i permit ncrcarea i
descrcarea modulelor dup ncrcarea SO. Aceast arhitectur pune
unele cerine deosebite interfeei modulului nucleului (trebuie s se
poat autoiniializa, s poat elibera corect resursele la descrcare),
ns ofer avantaje considerabile.
n primul rnd, aceasta permite ncrcarea modulelor la cerere
i subsistemele necesare rar pot s nu se ncarce. Chiar i modulele
necesare permanent se pot iniializa doar atunci cnd devin necesare,
micornd astfel timpul de la ncrcare pn la startul unor servicii.
n al doilea rnd, administratorul de sistem poate configura sistemul
fr s-l rencarce. i, n final, posibilitatea descrcrii modulelor din
nucleu permite corectarea lucrului altor subsisteme fr a rencrca
SO i aplicaiile clientului.
La ncrcarea dinamic a modulelor, iniializarea lor se petrece
odat cu ncrcarea. De obicei, iniializarea se termin cu ncrcarea
unui program care continu nu iniializarea nucleului, ci a sistemului
n general.
Sistemele UNIX conin un program special de iniializare care
se numete init. Acest program lanseaz procese-demoni, de exemplu
7

cron program care poate lansa alte programe n anumite momente


de timp, servicii de reea, etc. Lista programelor pentru lansare se
conine n fiierul /etc/inittab (n diferite versiuni ale sistemului
fiierul poate s aib diferite denumiri). Administratorul de sistem
poate redacta acest fiier i s instaleze serviciile de care are nevoie,
i s le opreasc pe altele.
Programul init rmne lansat pe tot parcursul lucrului SO. De
regul, el monitorizeaz procesele lansate. n dependen de
parametrii specificai n fiierul /etc/inittab, programul poate relansa
procesul dup nreruperea lui. ntr-o form sau alta, toate sistemele
moderne propun asemenea servicii de iniializare.
Crearea discului de ncrcare
Datele sectorului 1 al pistei 0, dispozitivul de citire-scriere 0 i
suportul de disc 0, pentru primul disc, care a rspuns (dischet sau
hard disc) sunt ncrcate la adresa absolut 0000:7c00, iar controlul
va fi transmis la aceast adres. Dac consultarea tuturor discurilor a
fost fr succes, controlul este transmis ntreruperii INT 18H.
Pentru un hard disc, acest cod din sectorul rdcin
determin n realitate compartimentul activ al discului, dup care
ncarc i execut sectorul rdcin al acestui compartiment. Prin
acesta controlul este transmis sistemului de operare activ al discului.
Problema este s fie elaborat o procedur, care va ncepe
lucrul de la adresa CS:07C00h i care va ncrca sistemul de operare.
Pentru simplitate vom presupune c nucleul sistemului de operare
este primul fiier nefragmentat pe dischet cu dimensiunea mai mic
sau egal cu 64 Ko. Primul fiier pe o dischet de 1.44 Mo se afl n
sectorul 33. (Dac ar exista o procedur de citire a unui sector (de
tipul int 25h) nu ar fi probleme mari cu ncrcarea din boot.)
IDEAL
MODEL tiny
DATASEG
KernelSeg
EQU
01000h
CODESEG
8

ORG
100h
jmp
Start1
ORG
07C00h
Datele din sectorul boot vor fi ncrcate la adresa 0000:7C00, vom
scrie cod pentru aceast adres.
Start:

Start1:

jmp Begin

; EB 3C 90
; Tabel pentru compatibilitate cu DOS

nop
OEMName DB 29h,63h,7Eh,26h,49h,49h,48h,43h
SectSize
DW 00200h
ClustSize
DB 001h
ResSecs
DW 00001h
FatCnt
DB
002h
RootSiz
DW
000E0h
TotSecs
DW
00B40h
Media
DB
0F0h
FatSize
DW
00009h
TrkSecs
DW
00012h
HeadCnt
DW
00002h
HidnSec
DW
00000h
Datele despre dischet pentru compatibilitate cu DOS:
AbsSectNum
AbsHeadNum
Begin:
; Citire nucleu
mov
mov
mov
KernelSEG:100h
mov
nucleului)
nextsect: push
call

DW
DW

0
0
; Ram de ncadrare

ax,KernelSEG
es,ax
di,100h ; Punct de intrare nucleudx,33

; Primul sector cu date; (128 sectoare ale

dx es di
ReadSect
9

pop
di es dx
add
di,512
inc
dx
cmp
dx,160
jne
nextsect
call
far KernelSEG:0100h
; ReadKey
int
20h
; Citire sector (DX=numr sector)
Citirea unui sector far MS DOS nu este simpl. Numrul absolut
al sectorului trebuie transformat n numrul dispozitivului de citirescriere (DCS), numrul pistei i a sectorului.
; ES:DI unde vom citi
PROC
ReadSect
Push
di es
; nceput calcule sector/pist/DCS
push
cs
pop
ds
mov
cx,[TrkSecs]
mov
si,dx
; tmp=(Sect/Sectors);
movax,si
xor
dx,dx
xzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzxxxc
mov
di,axf
; Sec=Sect-(tmp*Sectors)+1;
mov
ax,di
imul
cx
mo
]]

rxf div cx

10

=]

=dx,si
sub
dx,ax
inc
dx
mov
[AbsSectNum],dx
; Hea=tmp & 1;
mov
ax,diZaz3
\saaaaaaaa3 ecdfwzxgfzfz and
ax,1
mov
[AbsHeadxzz\xd sxNum],ax
; Trk=(Sect-(Hea*Sectors)-(Sec-1))/(Sectors*2);
imul
cx
push
ax
mov
ax,si
pop
dx
sub
ax,dx
mov
dx,[AbsSectNum]
dec
dx
sub
ax,dx
mov
dx,cx
shl
dx,1
push
ax
11

push
dx
xor
dx,dx
pop
bx
pop
ax
div
bx
; AX = AbsTrackNum
; Terminare calcule
mov
cx,ax
mov
al,cl
shr
cx,2
and
cl,0C0h
mov
ch,al
and
cx,0FFC0h
mov
ax,[AbsSectNum] ;-5-4-3-2-1-0-9-8-7-6-5-4-3-21-0or
cl,al
; CX = |c|c|c|c|c|c|c|c|C|c|S|s|s|s|
s|s|
pop
es bx
; ES:BX = Unde vom pune
mov
dx,[AbsHeadNum]
mov
dh,dl
; Numr DCS
mov
dl,0
; Numr disc 0 = A
mov
al,1
; Numr de sectoare citite
mov
ah,2
; Numr funcie
int
13h
ret
ENDP ReadSect
END Start
Procese
Una din concepiile de baz, care servete pentru nelegerea
corect a structurii sistemelor de operare (SO), este concepia
procesului. Acest termen a fost pentru prima dat utilizat n anii 60
de ctre elaboratorii SO MULTIX i se folosete pe larg n teoria SO.
Exist mai multe definiii a termenului proces, dintre care
menionm:
1. Programul ce se execut;
12

2. Exemplarul programului, ce se executa la calculator;


3. Obiect, care poate fi identificat i executat de ctre
procesor;
4. Unitatea de lucru, ce se caracterizeaz printr-un lan de
activiti consecutive, stare curent i setul de resurse de
sistem alocate.
Pe parcursul dezvoltrii sistemelor de calcul i rezolvrii
problemelor legate de partajarea timpului i sincronizare s-a depus un
aport n dezvoltarea concepiei procesului: au fost elaborate sisteme
cu prelucrarea n pachete a ctorva programe, sisteme cu partajarea
timpului i tranzacii n timp real. Este cunoscut c , regimul
multiprogram d posibiliti procesorului i dispozitivelor de intrare
ieire s lucreze concomitent, ridicnd n aa fel eficacitatea
utilizrii sistemului de calcul. n asemenea sisteme se utilizeaz un
mecanism, principiul de lucru al cruia const n urmtoarele: ca
rspuns la semnale ce corespund terminrii operaiilor de intrareieire, procesorul trece de la prelucrarea unui program la altul (cu
condiia c n memoria operativ sunt ncrcate mai multe
programe).
O alt direcie de dezvoltare prezint sisteme cu partajarea
timpului. Scopul lor principal este satisfacerea cerinelor a fiecrui
utilizator cu condiia aflrii lor concomitente n sistem. n asemenea
sisteme se utilizeaz faptul, c utilizatorul reacioneaz la evenimente
mult mai lent dect calculatorul. De exemplu, dac necesitatea
utilizatorului n timp a procesorului pentru prelucrarea sarcinii este
de 2 secunde pe parcurs de 1 minut, atunci n acelai timp utiliznd
acelai sistem, pot conlucra pn la 30 utilizatori, fr s afecteze
lucrul unul altuia. n asemenea calcule, trebuie de luat n consideraie
i timpul, necesar pentru lucrul SO.
nc o direcie important de dezvoltare sunt sisteme de
prelucrare a tranzaciilor n timp real. n asemenea sisteme mai muli
utilizatori transmit interogri ctre baza de date sau introduc n ea
unele schimbri. Ca exemplu poate servi sistemul de rezervare a
biletelor de avion.
ntreruperea este un mijloc important, care a devenit accesibil
pentru programatorii de sistem nc la primele etape de dezvoltare
13

ale sistemelor multitasking i sistemelor cu timp partajat. Prelucrarea


oricrui program poate fi ntrerupt la apariia unui eveniment
concret, de exemplu, terminarea operaie de intrare-ieire (I/O). n
asemenea caz procesorul trebuie s memorizeze informaia (de
exemplu, coninutul contorului de program, coninutul registrelor,
etc.) despre starea procesului i s treac la ndeplinirea procedurii,
care determin tipul ntreruperii, o prelucreaz , iar apoi rencepe
ndeplinirea altei lucrri.
Procesul conine trei componente:
1. Programul, ce trebuie executat;
2. Date necesare pentru lucrul programului (variabile,
spaiul de lucru, bufer, .a.)
3. Contextul programului (cuvntul de stare a procesului).
Ultima component este foarte important . Contextul de
execuie (execution context) sau cuvnt de stare a procesului (process
state word PSW), conine toat informaia necesar SO pentru
dirijarea procesului, i procesorului pentru executarea lui. Datele ce
caracterizeaz aceast stare cuprind coninutul diferitor registre a
procesorului (de exemplu, contorul instruciunii programului, registre
de date), prioritatea procesului, informaia despre starea n care se
afl procesul.
n figura 2.1. este prezentat un exemplu de realizare a
proceselor. Doua procese, A i B, se afl n diferite pri a memoriei.
Cu alte cuvinte fiecrui proces i este alocat un bloc de memorie,
unde se conine codul programului, datele i informaia despre starea
programului. Fiecare proces este inclus n lista de procese, care este
creat i ntreinut de SO. n afar de aceasta, n ea se poate include
i informaia despre starea procesului. Celelalte date pot fi pstrate
chiar n blocul de memorie , alocat procesului.
n registrul identificatorului procesului se pstreaz
identificatorul procesului activ n momentul curent i l identific n
lista proceselor. Coninutul contorului de instruciuni indic
urmtoarea instruciunea ce trebuie ndeplinit. Registru de baza i
de hotar definesc spaiul de memorie, n care se pstreaz procesul.
n registru de baz se introduce adresa amplasamentului de nceput a
acestui spaiu, iar n cel de hotar dimensiunea lui (n octei sau
14

cuvinte). Coninutul contorului de program i pointerele (referinele)


la date se calcul n raport cu valoarea registrului de baz i nu pot fi
mai mari dect valoarea registrului de hotar.
Registru identificatorului procesului, prezentat n fig.1.1. indic
c se ndeplinete procesul B. Pn la acest moment se ndeplinea
procesul A, ns a fost temporar ntrerupt. Coninutul tuturor
registrelor n momentul ntreruperii acestui proces se nscrie sub
forma datelor despre starea procesului. n continuare sistemul va
putea s renceap ndeplinirea procesului A. n momentul , n care n
contorul de program a fost ncrcat valoarea ce indic spaiul
(segmentul) codului programului procesului A, automat se trece la
ndeplinirea acestui proces.

15

Memoria
Principal

Lista
proceselor

i
j

Registru de baz
Registru de hotar

Context
Procesul

Date

Alte
registre

b
h
.
.
.

Codul
programei
b

Procesul

Indexul
procesului
Contorul
programului

Registre
procesorului
i

Context
Date
Codul
programei

Fig.1.1. Realizarea proceselor


n aa fel procesul se realizeaz sub forma unei structuri de
date. Procesul poate s se afle n starea de execuie, blocat sau
ntrerupt. Starea procesului n fiecare moment de timp se introduce n
spaiul de date special rezervat pentru aceasta. Utilizarea structurii de
date permite dezvoltarea metodelor de coordonare i interconlucrare
a proceselor. n limitele SO pe baza datelor despre starea procesului
pot fi elaborate noi posibiliti a SO.
n continuare, vom examina problema despre ce informaii
trebuie s dispun SO, pentru ca ea s poat dirija procesul. n primul
rnd , ea trebuie s tie unde se afl procesul; n al doilea rnd , ea
16

trebuie s cunoasc atributele procesului (aa cum


identificatorul procesului, starea i amplasarea n memorie).

sunt

Amplasarea n memorie a procesului.


nainte de a trece la problema amplasrii procesului sau
atributele procesului, trebuie s gsim rspuns la ntrebarea: cum se
manifest fizic procesul? Ca minim, n proces se include un program
sau un set de programe, care trebuie ndeplinite. De aceste programe
este legat un set de amplasamente din memorie n care se pstreaz
variabile locale sau globale i constante. n aa fel , trebuie s fie
alocat procesului un volum de memorie suficient pentru amplasarea
programului i datelor , ce aparin acestui proces. n afar de aceasta ,
pe parcursul ndeplinirii programului se utilizeaz o stiv cu ajutorul
creia se realizeaz apelarea procedurilor i transmiterea
parametrilor. n final, de fiecare proces sunt legate mai multe
atribute, care se utilizeaz de ctre SO pentru dirijarea procesului.
De obicei, asemenea set de atribute se numete blocul de control al
procesului (process control block).
Mulimea care conine programul , stiva i atributele se numete
imaginea procesului (process image). (tab.1.1.)
Tabela 1.1. Elementele tipice ale imaginii procesului.
Denumirea
elementului
Datele
utilizatorului
Programul
utilizatorului
Stiva de sistem
Blocul de control
al procesului

Descrierea
O parte din spaiul de adrese al utilizatorului, care permite
introducerea schimbrilor. Aici se conin datele programului,
stiva i codul programului ce se modific.
Programul ce trebuie executat.
De fiecare program sunt legate una sau mai multe stive de
sistem. Stiva se utilizeaz pentru pstrarea parametrilor,
adreselor de apel a procedurilor i serviciilor de sistem
Datele necesare SO pentru dirijarea procesului.

Amplasarea imaginii procesului depinde de schema de dirijare a


memoriei aleas ( n cel mai simplu caz, imaginea procesului
17

prezint un segment nentrerupt de memorie, care este amplasat n


memoria secundar, de obicei pe disc.) Pentru, ca SO s poat dirija
procesul , cel puin o parte din imaginea lui trebuie s se afle n
memoria operativ. Pentru a lansa procesul n execuie , imaginea lui
trebuie integral ncrcat n memoria de baz (sau virtual). n aa fel
, SO trebuie s cunoasc amplasarea fiecrui proces pe disc, iar
pentru procesele ncrcate n memoria de baz amplasarea lor n
memoria operativ. n majoritatea SO moderne se utilizeaz schema
de dirijare a memoriei, conform cruia imaginea procesului const
dintr-un set de blocuri (segmente) de memorie care nu neaprat sunt
amplasate consecutiv. n dependen de schema utilizat, aceste
blocuri pot fi de mrime fix (numite n acest caz pagini), mrime
variabil (numite segmente) sau o combinaie dintre segmente i
pagini. Oricare dintre aceste scheme permite SO ncrcarea n
memorie numai a unei pri din proces.
n aa fel, n orice moment de timp, numai o parte din imaginea
procesului se poate afla n memoria operativ, pe cnd cealalt parte
se afl pe disc (memoria secundar). De aceea tabelele proceselor, pe
care le susin SO, trebuie s conin informaia despre amplasarea
fiecrui segment i/sau paginii tuturor imaginilor proceselor.
Structura informaiei despre amplasarea proceselor este
organizat n felul urmtor. Exist un tabel iniial de procese , n care
fiecrui proces i corespunde o nregistrare. Toate nregistrrile
trebuie s conin cel puin un pointer la imaginea procesului. Dac
imaginea procesului const din mai multe blocuri, atunci acest lucru
sau se reflect direct n nregistrarea corespunztoare a tabelului
iniial sau poate fi obinut cu ajutorul pointerelor la nregistrrile n
tabelele de memorie. Aceast descriere are un caracter general,
fiecare SO utilizeaz o metod proprie de organizare a informaiei
despre amplasarea procesului.
Atributele procesului.
Un sistem multitasking trebuie s cunoasc mai multe date
despre proces. Cum a mai fost menionat, se poate considera c
aceste date se conin n blocul de control al procesului. Mai jos sunt
18

enumerate tipurile de informaie, care sunt necesare SO pentru


fiecare proces.
I.
Identificarea proceselor. Identificatoare un numr, care se
pstreaz n blocul de control a procesului.
Identificatorul procesului.
Identificatorul procesului printe.
Identificatorul utilizatorului.
II.
Informaia despre starea procesului.
Registre accesibile utilizatorului. Registru accesibil utilizatorului
este un registru la care se poate adresa un utilizator cu ajutorul
instruciunilor de main care se ndeplinesc de ctre procesor. De
obicei, n sistem sunt prezeni de la 8 la 32 asemenea registre, cu
toate c n unele realizri a RISC (procesoare cu un set limitat de
instruciuni ) se conin mai mult de 100 registre.

Registre de dirijare i registre de stare. Procesorul


conine mai multe tipuri de registre, care se utilizeaz pentru dirijarea
execuiei procesului. La ele se refer:
1. Contorul instruciunilor. Aici se pstreaz adresa urmtoarelor
instruciuni pentru execuii.
2. Codul condiiei. Reflect rezultatul ultimei operaii logice sau
aritmetice.
3. Informaia despre regimul de lucru . Aici se conine
informaia despre regimul de execuii (master sau slave) i
permisiunea ntreruperilor.

Pointer la stiva de execuie.


III.
Informaia de dirijare a procesului.
1.
Informaia despre planificri i stare. Aceast informaie este
necesar SO pentru planificare i conine:
Starea procesului, determin pregtirea procesului pentru
execuie (activ, blocat, ntrerupt).
Prioritatea procesului , un cmp sau mai multe al nregistrrii
pot fi utilizate pentru descrierea prioritii procesului. n unele
sisteme sunt necesare mai multe valori ( cum ar fi prioritatea
curent, prioritatea maxim posibil).
Informaia legat de planificare. Aceast informaie depinde
de algoritmul de planificare utilizat. n calitate de exemplu pot fi
19

numite: timpul de ateptare sau timpul pe parcursul cruia


procesul a fost executat ultima dat.
Informaia despre evenimente. Identificarea evenimentului,
apariia cruia va permite continuarea executrii procesului, ce se
afl n stare blocat.

Structurarea datelor. Procesul poate fi legat cu alte procese


prin intermediul unui fir de ateptare sau oricrei alte instruciuni.
De exemplu , toate procesele n stare de ateptare, care au una i
aceiai prioritate, se afl ntr-un fir de ateptare.

Schimbul de informaie dintre procese. Dou procese


independente pot interconlucra prin intermediul schimbului de
informaie: diferite semnale, mesaje. O parte din aceast
informaie sau chiar toat informaia se pstreaz n blocul de
control a procesului.

nlesniri pentru procese. Procesele pot avea unele privilegii


care se manifest n dreptul de acces la un segment de memorie
sau posibilitatea ndeplinirii unor instruciuni, dreptul de a utiliza
servicii i utilite de sistem.

Dirijarea memoriei. Aici se pstreaz pointerele la tabelele


segmentelor i/sau paginilor de memorie n care se descrie
amplasarea procesului n memoria virtual.

Dreptul de utilizare a resurselor. Aici se indic resurse care


pot fi dirijate de proces. n afar de aceasta aici se include
informaia despre utilizarea procesorului i altor resurse necesare
pentru planificare.
Informaia ce se conine n blocul de control al procesului,
poate fi divizat n trei categorii:
informaia pentru identificarea procesului;
informaia despre starea procesului;
informaia utilizat pentru dirijare ;
n ceea ce ine identificarea procesului (process identification),
toate SO atribuie fiecrui proces un identificator numeric unic, care
reprezint, de obicei, un index n tabelul proceselor. n orice caz
trebuie s existe o reflectare , care va permite SO s gseasc tabelele
ce corespund procesului dup identificatorul acestui proces .
Indentificatoarele se pot utiliza n diferite situaii. n afar de
20

aceasta , procesului i se atribuie i identificatorul utilizatorului, care


indic cui i aparine procesul.
Informaia despre starea procesului (process state information)
const din coninutul registrelor. ntrerupnd procesul, toat
informaia din registre trebuie memorat, pentru a putea fi restabilit
la relansarea execuiei procesului. Caracterul i numrul registrelor
depinde de procesor. De regul n setul de registre intr registre
accesibili utilizatorului, registre de dirijare i registre de stare.
Trebuie de menionat faptul c, n orice tip de procesor exist
un registru sau un set de registre cunoscute sub denumirea cuvntul
de stare al programului (program status word - PSW), unde se
conine informaia despre starea i codul condiiei. Ca un exemplu
poate servi registrul EFLAGS, care se conine n procesoare Pentium.
Acest registru este utilizat de SO ce lucreaz pe procesoare Pentium.
Rolul blocului de control al procesului.
Blocul de control al procesului reprezint cea mai important
structur de date ce exist n SO. n blocul de control al procesului se
afl toat informaia, necesar SO pentru dirijarea procesului.
Informaia din acest bloc se citete i/sau se modific de fiecare
modul al SO, incluznd acele module care rspund de planificare,
dreptul de acces la resurse, prelucrarea ntreruperilor, control i
analiz. Se poate spune c starea SO reprezint un set de blocuri de
control al proceselor.
Vom examina un aspect al arhitecturii SO. n componenta SO
intr un ir de programe crora li este necesar accesul la blocul de
control al procesului. A acorda accesul direct nu este complicat fiecrui proces i se atribuie un identificator unic, care poate fi utilizat
n calitate de index n tabelul blocului de control al procesului.
Problema const nu n acordarea accesului, ci n asigurarea
proteciei. n legtur cu aceasta apar dou probleme:
- o eroare n careva subprogram (de exemplu n procedura de
prelucrare a ntreruperii) poate duce la afecta blocului de
control al procesului i ca rezultat , SO nu va mai putea dirija
procesul.
21

Schimbarea structurii sau semanticii blocului de control al


procesului poate influena un ir de module ale SO.
O modalitate de rezolvare a acestor probleme poate fi:
efectuarea operaiilor cu blocul de control al procesului s fie fcut
prin intermediul unei proceduri, scopul unic al creia va fi protejarea
acestui bloc i care va rspunde de citire i scrierea informaiei
din/n blocuri.
Structura descriptorului lucrrii
n modul real memoria operativ conine 10 segmente fizice,
fiecare segment avnd capacitatea de 64 Ko (640Ko/64Ko), ns doar
8 lucrri pot pretinde regimul multitasking, deoarece dou segmente
sunt ocupate de sistemul de operare (unul pentru nucleu i altul
pentru variabilele sistemului).
Pentru fiecare dintre cele 8 lucrri i pentru nucleu va fi folosit
urmtoarea structur
task8 DB ?
;char id; (255 - no task)
DD ? ;void far * pointer;
DW 255 DUP(?) ;unsigned int stack[255];
n care:
id - este identificatorul lucrrii: numrul lucrrii, dac lucrarea
este ncrcat, 255 - dac lucrarea nu este ncrcat, 254 - dac
procesorul a fost retras (starea eligibil a lucrrii, suspendare).
pointer punctul de intrare n program.
stack[255] aici vom pstra la comutare unele registre ale
lucrrii, de asemenea tot aici va fi pstrat indicatorul stivei lucrrii, n
care sunt salvate celelalte registre i, la necesitate, alte informaii.
Dac din careva considerente sistemul de operare a luat decizia
de a crea un proces, atunci el trebuie s fac acest lucru n felul
urmtor:
1. S atribuie acestui proces un identificator. La aceast
etap n tabelul iniial al proceselor se introduce o
nregistrare nou.
2. S aloce spaiu pentru proces. Aici se includ toate
elementele imaginii procesului. Sistemul de operare
22

trebuie s cunoasc ct spaiu este necesar pentru


amplasarea datelor i programului utilizatorului i ct
spaiu este necesar pentru stiva de execuie. Aceste valori
pot fi atribuite din start reieind din tipul procesului sau
pot fi setate pe baza cererii utilizatorului n timpul crerii
lucrrii. Dac procesul este creat de un alt proces, atunci
procesul printe poate transmite sistemului de operare
valorile necesare prin intermediul cererii de creare a
procesului nou. Dac procesul nou creat va utiliza o parte
din spaiu de memorie n comun cu alte procese este
necesar s se stabileasc legturile corespunztoare. De
asemenea trebuie s fie alocat spaiu de memorie necesar
pentru blocul de control al procesului.
3. S iniializeze blocul de control al procesului.
Informaia despre proces conine identificatorul acestui
proces i alte identificatoare cum ar fi identificatorul
procesului printe. De regul, iniial restul informaiei din
blocul de control al procesului se iniializeaz cu valoarea
zero, cu excepia contorului de instruciuni (care conine
punctul de intrare n program) i pointerii stivei de
execuie, care indic limitele stivei procesului.
Iniializarea informaiei de control se face pe baza
valorilor setate implicit, lund n consideraie atributele
procesului din cererea de creare a procesului. De
exemplu, starea procesului se iniializeaz cu valoarea
eligibil (gata pentru execuie). n caz dac n cerere de
crearea procesului nu este prevzut prioritatea lui, atunci
ea, de regul, se iniializeaz cu valoarea minimal. De
asemenea, iniial procesului nu-i sunt alocate careva
resurse (cum ar fi dispozitive de intrare ieire sau
fiiere) dac acest lucru nu este implicit prevzut n
cerere.
4. S stabileasc legturile necesare. n caz dac sistemul
de operare realizeaz firul de ateptare al proceselor
planificare sub forma unei liste nlnuite, atunci procesul
23

nou creat trebuie s fie plasat n lista proceselor gata


pentru execuie i s fie create legturile de nlnuire.
5. S creeze noi structuri de dare sau s extind cele
existente deja. Acest lucru este necesar n caz dac
sistemul de operare creeaz pentru fiecare proces un fiier
care conine evidena
ncrcarea lucrrii
Este necesar s fie cunoscut structura TTASK. Unele comentarii
pot fi gsite chiar n textul programului.
doStart8: mov
al,[tasknum]
inc
al
mov
[tasknum],al
;Mrim numrul de lucrri
mov
[cs:di],al
; Salvm punctul de intrare n descriptorul lucrrilor
mov
[Word Ptr cs:di+1],100h
mov
[cs:di+3],es
;Salvm punctul de intrare n descriptorul lucrrilor ES:100h
; Pregtim ambele stive
mov
[Word Ptr es:0FFFEh],00000h
; 0 dac
programul se va termina cu RET, atunci CS:IP=CS:0000,
;iar acolo int 20h
mov
[Word Ptr es:0FFFCh],00232h
; FLAGS
mov
[Word Ptr es:0FFFAh],es
; CS PSP
mov
[Word Ptr es:0FFF8h],00100h
; IP 100h
mov
[Word Ptr es:0FFF6h],00111h
; DI 0000
mov
[Word Ptr es:0FFF4h],00222h
; BX 0000
mov
[Word Ptr es:0FFF2h],00333h
; AX 0000
mov
[Word Ptr es:0FFF0h],es
; ES PSP
mov
[Word Ptr es:0FFEEh],es
; DS PSP
mov
[Word Ptr es:0FFECh],00000h
; SI 0000
mov
[Word Ptr cs:di+513],0FFECh
; SS FFEC
mov
[Word Ptr cs:di+511],ES
; SP seg
24

mov
mov

[Word Ptr cs:di+509],00000h


[Word Ptr cs:di+507],00000h

; CX 0000
; DX

mov

[Word Ptr cs:di+505],00000h

; BP 0000

0000
Simulm starea de lucru a lucrrii, adic punem la dispoziia
lucrrii toate registrele, stiva i indicatorii (flags). La comutarea
lucrrii, lucrarea nou va ncepe execuia cu registrele date.
mov

[Word Ptr cs:di+9],1

; Stabilim prioritatea

mov

[Word Ptr cs:di+11],1

; Stabilim prioritatea

lucrrii
lucrrii
Stabilim prioritatea 1 (normal) a lucrrii i prsim procedura de
ncrcare. Lucrarea nou se va autolansa, atunci cnd i va veni
rndul.
Sarcina lucrrii:
Creai discul de ncrcare a sistemului de operare i nscriei acest
ncrctor n boot sectorul. Dup ncrcarea sistemului de operare s
se afieze pe ecran Sistemul de operare al studentului . . .
Scriei o procedur de ncrcare a unei lucrrii.
ntrebri de control:
1. Ce funcii ndeplinete sistemul de operare?
2. Dai definiia termenului monitorul de ncrcare. Ce funcie
ndeplinete el?
3. Care este diferena dintre monitorul de ncrcare i monitorul de
consol?
4. Ce reprezint bootstrap-ul?
5. Cum se petrece ncrcarea unui sistem de operare?
6. Care sunt avantajele programrii modulare a sistemului de operare?
7. Dai o definiie a termenului proces.
8. Ce prezint blocul de control al procesului?
9. Ce reprezint imaginea procesului?
10. Enumerai atributele procesului.
11. Pentru ce este necesar descriptorul lucrrii? Care este structura lui?
25

LUCRAREA DE LABORATOR Nr. 2


TEMA: Terminarea execuiei lucrrii.
Scopul lucrrii: De a studia cauzele finisrii execuiei unei lucrri i
a crea procedura de terminare a execuiei lucrrii.
Noiuni teoretice
Cauzele terminrii execuiei unei lucrri
n tab. 2.1. sunt enumerate cauzele posibile de finisare a
execuiei unei lucrri. n fiecare sistem de calcul trebuie s existe
mijloace care permit s determinm dac execuia procesului s-a
terminat sau nu. Un pachet de lucrri trebuie s includ o instruciune
de tip HALT sau a apelare a unei proceduri de terminare a execuiei
lucrrii , care intr n componena SO. n primul caz se genereaz o
ntrerupere care aduce la cunotin SO despre terminarea execuiei
procesului. De exemplu, n sistemul cu partajarea timpului execuia
procesul utilizatorului trebuie finisat atunci cnd utilizatorul
prsete sistemul sau deconecteaz terminalul. n calculatoare
personale sau staie de lucru utilizatorul nchide aplicaia (de
exemplu, un redactor de texte, un redactor de tabele electronice etc.).
toate aceste aciuni n final vor duce la apelarea procedurii de finisare
a execuiei procesului.
Tabelul 2.1. Cauzele finisrii execuiei procesului
Cauza

Descrierea

Finisarea normal
Depirea timpului
alocat procesului

limit

Procesul apeleaz procedur de finisare a execuiei


pentru a ntiina SO despre finisarea lucrului su
Timpul sumar de execuie a programului depete
valoarea limit stabilit. Acest tip poate fi calculat
prin mai multe metode. Una din ele este evidena
timpului total de execuie a procesului (metoda
pendulului). La execuia procesului interactiv
timpul se poate calcula din momentul ultimei
introduceri de date.

Volumul
insuficient

de

memorie

Ieirea n afara limitelor


spaiului de memorie alocat
Eroarea de protecie

Eroare aritmetic

Ateptare excesiv
Eroare de intrare - ieire

Instruciune greit

Utilizarea eronat a datelor


Finisarea execuiei procesului
printe

Pentru execuia procesului este necesar un volum


mai mare de memorie, dect este disponibil la
momentul dat n sistem
Procesul ncearc s obin acces la segmentul de
memorie, la care el nu are drept de acces
Procesul ncearc s utilizez un resurs sau fiier
inaccesibil pentru el, sau ncearc s o fac ntr-un
mod inadmisibl. De exemplu, ncearc s nscrie
informaie ntr-un fiier deschis pentru citire.
Procesul ncearc s efectueze o operaie
nepermis, de exemplu, s mpart la zero, sau s
utilizez un numr care depete limitele
aparatajului.
Procesul ateapt apariia unui eveniment mai mul
dect este stabilit n parametrii sistemului
n timpul execuiei operaiei de intrare-ieire apare
o eroare. De exemplu, nu este gsit fiierul necesar
sau s se execute citirea/scrierea ntr-un numr
stabilit de ncercri.
Procesul ncearc s efectueze o instruciune
inexistent (des apare n cazul trecerii procesului
n spaiul date i ncearc s le interpreteze ca o
instruciune)
O parte de date nu corespunde tipului stabilit sau
nu este iniializat
Multe sisteme de operare finiseaz execuia
proceselor fii n cazul finisrii procesului printe

Terminarea execuie unui program


Programele COM sub MS DOS pot fi terminate prin:
a)
int
20h
b)
mov
ah,4Ch
int
21h
sau
c)
ret
n cazul a) vom prelua ntreruperea int 20h din care controlul va fi
transmis procedurii de descrcare a lucrrii. n cazul b) din
ntreruperea 21h este apelat ntreruperea 20h, adic, pn la urm
totul se reduce la a). n cazul c), la lansarea unei lucrri stiva se afl la
adresa SS:FFFE, iar dac lucrarea este terminat corect stiva va fi tot
28

acolo. Instruciunea ret transmite controlul la adresa indicat n


SS:FFFE. Vom scrie acolo valoarea 0, transmind controlul la
adresa CS:0000, iar acolo vom introduce instruciunea int 20h, iar mai
departe ca i n a).
Procedura de tratare a ntreruperii 20h este adus cu, comentarii
incorporate, mai jos.
PROC newint20h
(descrcarea lucrrii)
call
_di

; ntreruperea 020h

Interzicem ntreruperile pentru ca lucrarea s nu poat fi lansat n


momentul retragerii procesorului.
pop
ax
pop
ax
; Extragem din stiv
pop
ax
Extragem din stiv ceea ce a mai rmas dup instruciunea int 20h
(CS, IP i indicatorii, nu mai avem nevoie de ei).
push
cs
pop
ds
lea
di,[cs:firsttask]
; DI = Adresa nceputului
structurii TTASK
mov
al,[cs:numtask]
; AL = Numrul lucrrii
xor
ah,ah
; AX = Numrul lucrrii
push
dx
mov
dx,515
mul
dx
; AX = Deplasarea de la nceputul lui
firsttask
pop
dx
add
di,ax
; DI = Deplasarea absolut a topului
stivei n structura TTASK
Aflm numrul lucrrii curente i punem n id ul ei valoarea 255,
adic lucrarea nu este ncrcat.
mov
[Byte Ptr cs:di],255
29

mov
call
call
jmp

dx,[cs:di+3]
FreeMemory
_ei
int08new

Eliberm memoria, armm ntreruperile i ncepem execuia


ntreruperii 8 comutarea lucrrilor, unde va avea loc i lansarea
urmtoarei lucrri.
ENDP newint20
Sarcina lucrrii: Scriei procedura terminrii execuiei unei lucrri.
ntrebrile de control:
1. Care sunt cauzele finisrii execuiei unei lucrri?
2. Care sunt etapele de finisare a execuiei unei lucrri?
3. Ce se ntmpl cu identificatorul procesului execuia cruia
s-a finisat?

30

LUCRAREA DE LABORATOR Nr. 3


TEMA: Comutarea contextelor lucrrilor.
Scopul lucrrii: De a crea o procedur de comutare a contextului
lucrrilor la trecerea execuiei de la o lucrare la alta.
Noiuni teoretice.
Comutarea contextelor
Funcia de comutare a proceselor, pare la prima vedere una
simpl i uor de realizat. La un moment dat de timp procesul ce se
afl n execuie (proces activ) se ntrerupe, iar SO trece n stare activ
un alt proces. ns aici apar un ir de ntrebri, ce in de arhitectura
SO. n primul rnd, ce evenimente pot duce la comutarea proceselor;
n al doilea rnd, cum se stabilete deosebirea dintre comutarea
regimului de lucru i comutarea proceselor; i, nu n ultimul rnd, ce
trebuie s fac un SO cu diferite structuri de date, aflate sub controlul
ei, pentru a realiza comutarea procesului.
Comutarea procesului poate fi executat n orice moment, cnd
controlul trece de la procesul n execuie la SO. n tabelul 4.1. sunt
enumerate cauzele posibile, care duc la transmiterea controlului SO.
Tabelul 3.1. Mecanismul de ntrerupere a procesului
Mecanism
ntreruperea
Devierea
Apelul
supervizorului

Cauza

Utilizeaz

Exterioar n raport cu execuia


instruciunii curente
Este
legat
cu
execuia
instruciunii curente
Cererea aplicaiei

Ca rspuns la un eveniment
asincron exterior
Prelucrarea erorii sau a unei
situaii anormale
Apelarea unei funcii a SO

Vom examina n primul rnd, ntreruperile de sistem. De fapt,


exist 2 tipuri de ntreruperi de sistem. Primul tip - ntreruperi
propriu-zise, iar al doilea tip devieri (trap). ntreruperi de primul tip

apar ca rezultat al unor evenimente concrete, care nu sunt legate de


procesul n execuie i snt exterioare n raport cu acest proces (de
exemplu: terminarea operaiunii de intrare - ieire). Devieri sunt
legate cu erori sau situaii anormale aprute n rezultatul execuiei
procesului activitii. Ca exemplu poate servi ncercarea obinerii
accesului neautorizat la fiier. n cazul ntreruperilor simple controlul
se transmite procedurii de prelucrare a ntreruperi, care execut unele
aciuni de pregtire, iar apoi funciilor SO, ce rspund de ntreruperi
de aa tip. Vom aduce cteva exemple:
1. ntreruperea timer-ului. SO determin daca procesul se execut n
limita intervalului de timp maximal admisibil. n asemenea
cazuri, procesul se ntrerupe, iar controlul se transmite altui
proces.
2. ntreruperea de intrare ieire. SO determin ce eveniment a
avut loc si n caz dac acesta este acel ateptat de unul sau mai
multe procese, SO trece procesele blocate corespunztoare n
starea de ateptarea. Apoi SO trebuie s ia decizia de a continua
execuia procesului curent sau a transmite controlul procesului
aflat n starea de ateptare cu o prioritate mai nalt.
3. Eroare legat de lipsa blocului de memorie. Vom presupune c
procesul se adreseaz la un segment n memorie virtual, care la
momentul dat lipsete n memoria de baz. n aa caz SO trebuie
s ncarce n memoria de baza blocul (pagina sau segment), n
care se conine cuvntul adresabil. Apoi, dup cererea de a ncrca
blocul respectiv, SO poate transmite controlul altui proces, iar
procesul care necesita ncrcarea blocului respectiv trece n stare
blocat. Dup ncrcarea blocului curent acest proces trece n stare
de ateptare.
n cazul apariiei devierilor SO determin dac eroarea sau
situaia aprut este fatal. Dac da atunci procesul ce se afl n
execuie trece n stare de finalizare, iar controlul trece la un alt proces.
n caz contrar, aciunile SO vor depinde de caracterul erorii aprute i,
de asemenea, de construcia SO. Poate fi fcut ncercarea de a
executa procedurile de restabilire sau, mai simplu, de a ntiina
utilizatorul despre eroarea aprut. n aa caz, SO poate sau s
32

execute comutarea proceselor, sau s continue execuia procesului


curent.
n final, SO poate fi activizat i ca rezultat al apelrii
supervizorului (supervisor call) de ctre programul n execuie. De
exemplu, fie c n procesul execuiei programului utilizatorului este
necesar ndeplinirea instruciunii, pentru care sunt necesare
operaiuni de intrare ieire (deschiderea unui fiier). Asemenea apel
duce la transmiterea controlului procedurii, ce face parte din codul
SO. De obicei, utilizarea unor asemenea apelrii duce la trecerea
procesului n starea blocat.
Dirijarea procedurilor. Un exemplu de comutare a contextelor
O metod des utilizat pentru realizarea dirijrii apelului i
returului din procedur este utilizarea unei stive. Mai jos este adus o
descriere scurt proprietilor unei stive i utilizarea ei n cazul
procedurilor.
Realizarea stivei.
Stiva reprezint un set ordonat de elemente, care se prelucreaz
dup principiul ultimul sosit primul prelucrat. Elementul la care
poate fi accesat la un moment dat de timp se afl n vrful stivei.
Numrul elementelor stivei (lungimea ei) este variabil. Adugarea sau
extragerea elementului se poate face numai n vrful stivei, din care
cauz apare denumirea lista organizat dup principiul ultimul
sosit primul preluat. Pentru realizarea unei stive este necesar un set
de amplasamente (celule) de memorie, n care se va pstra elementele
stivei. O realizare tipic este artat n figura 4.1.

33

Memoria de baz

Registre ale procesorului

Limita stivei
Vrful stivei
Baza stivei

Liber
Se utilizeaz

Blocul de memorie
rezervat pentru
stiva

Fig.3.1. Realizarea tipic a stivei

n memoria de baz (sau virtual) pentru stiv se rezerv o suit


nentrerupt de amplasamente. n majoritatea timpului, aceast
consecutivitate este parial ocupat cu elementele stivei. Pentru
asigurarea lucrului normal sunt necesari urmtorii pointeri, care se
pstreaz n registrele procesorului:
Pointer la vrful stivei top. n cazul adugrii unui nou
element (Push) sau extragerea unui element (Pop), pointerul dat
crete sau scade cu o unitate respectiv.
Pointer la baza stivei. Indic adresa amplasamentului
de jos (inferior) al suitei rezervate. La adugarea unui element
ntr-o stiv goal, acest amplasament se utilizeaz primul. n
cazul ncercrii extragerii unui element dintr-o stiv goal, se
genereaz un semnal al erorii.
Limita stivei. Conine adresa celuilalt capt al stivei,
adic vrfului suitei rezervate. n cazul ncercrii de a aduga un
nou element ntr-o stiv plin se genereaz un semnal al erorii.
Tradiional, n majoritatea mainilor de calcul moderne, ca baz
al stivei se ia amplasamentul cu adresa maxim, iar limita stiveiamplasamentul cu adresa minim.
Apelul procedurii i rentoarcerea din ea.
34

Cum a mai fost menionat o metod de realizare a apelrii


procedurii i rentoarcerii din ea este utilizarea stivei. n cazul
apelului unei proceduri procesorul introduce n stiv adresa de retur.
La retur din procedur procesorul utilizeaz adresa din vrful stivei.
Deseori, mpreun cu apelarea procedurii este necesar transmiterea
ei unor parametri. Acest lucru poate fi realizat cu ajutorul registrelor;
o alt posibilitate este salvarea parametrilor n memorie imediat dup
comanda de apel. n acest caz returul trebuie efectuat la
amplasamentul de memorie, care se afl imediat dup parametri.
Fiecare din aceste modaliti are neajunsuri. n cazul utilizrii
registrelor pentru salvarea parametrilor aste necesar coordonarea
procedurilor apelante i apelate, care va garanta amplasarea identic a
parametrilor n registre. n cazul salvrii parametrilor in memorie se
complic transmiterea unui numr variabil de parametri.
O flexibilitate mai bun la transmiterea parametrilor o asigur
stiva, La prelucrarea apelrii procesorul introduce n stiv nu numai
adresa de retur , ci i parametrii, transmii procedurii, care devin uor
de apelat. La retur din procedur valorile de ieire, de asemenea, pot
fi introduse n stiv, amplasndu-le sub adresa de retur. Mulimea
tuturor parametrilor (incluznd adresa de retur), care se salveaz la
apelarea procedurii, se numete cadru al stivei (stack frame).
Cazul corutinelor.
Procedura reenterabil (mutual) este o concepie cu succes
utilizat n sisteme multiprogram i multiutilizator. Se numete
procedur reenterabil, procedura care conine o consecutivitate de
instruciuni ce pot fi simultan utilizat de mai muli utilizatori.
Aceast proprietate a procedurii are dou aspecte de baz: codul
programului nu trebuie s se automodifice, iar variabilele locale ale
fiecrui utilizator trebuie s se pstreze separat. Execuia unei
proceduri reenterabile poate fi ntrerupt prin apariia unei ntreruperi,
iar dup prelucrarea ntreruperii s continue n mod corect. n
sisteme multiprogram i multiutilizator procedurile reeterabile permit
utilizarea mai efectiv a memoriei de baz.

35

Realizarea comutarii lucrrilor


n cazul comutrii lucrrilor trebuie s fie executate urmtoarele
operaiuni:
1. Salvarea contextului procesorului, inclusiv coninutul
contorului instruciunilor i a altor registre.
2. Rennoirea blocului de control procesului n execuie
(activ). Aici se are n vedere: schimbarea strii
procesului n una din urmtoarele: eligibil, blocat,
eligibil ntrerupt sau n starea de terminare. n afar de
aceast trebuie schimbate valorile altor cmpuri cu
indicarea cauzei de comutare din starea activ i salvarea
informaiei despre utilizarea resurselor.
3. Plasarea blocului de control al procesului n firul de
ateptare corespunztor(firul de ateptare a proceselor
aflate n starea eligibil, firul de ateptare a proceselor
blocate sau firul de ateptare a proceselor aflate n starea
eligibil ntrerupt).
4. Alegerea urmtorului proces pentru execuie.
5. nnoirea blocului de control al procesului ales. Pentru
procesul ales trebuie s fie setat informaia despre
starea lui.
6. Rennoirea structurilor de date pentru dirijarea
memoriei. Este necesar acest lucru sau - nu depinde de
modul de transformare a adreselor.
7. Restabilirea contextului procesorului n starea n care el
se afla atunci cnd procesul ales a fost ultima dat
comutat din starea activ. Acest lucru se face prin
ncrcarea coninutului contorului instruciunilor i a
altor registre ale procesorului.
n aa fel, comutarea contextului este mai complicat dect
comutarea regimului de lucru. Presupunem, c fiecare program COM
ocup un segment n memorie, ceea ce poate fi ilustrat ca n figura 3.2
0000H

PSP

0100H

Programul
FFFEH
Fig.3.2. Structura unui program COM

FFFFH

Stiva
36

Pentru comutarea lucrrii curente vom utiliza ntreruperea 08h.


Este cunoscut, c timer-ul trimite procesorului cu o frecvena de 18.2
Hz o ntrerupere hardware i procesorul ndeplinete procedura
asociat ntreruperii a opta (int 08h), dac aceasta este armat. n stiv
sunt pstrate registrul indicatorilor (flagurilor, PUSHF) i registrele
care indic instruciunea curent ((CS:IP) PUSH CS, PUSH IP), n
total 6 octei. Dup terminarea prelucrrii ntreruperii hardware,
aceste registre sunt restabilite i continu executarea programului
principal. Problema noastr va fi rezolvat dac n timpul tratrii
ntreruperii vom nlocui stiva astfel nct atunci cnd registrele vor fi
restabilite s fie executat un alt program, aflat n memorie.
Schematic ideea comutrii lucrrilor este reprezentat n figura
3.3. Tratarea ntreruperii va consta n comutarea stivei SS : SP. La
revenire din procedura de tratare a ntreruperii va ncepe execuia unei
alte lucrri, deoarece a fost schimbat contextul lucrrii.
De obicei:
Salvarea registrelor

2000h: FFF 8h

IP

2000h: FFFAh
2000h: FFFCh
2000h: FFFEh

CS
F
00h

Tratarea ntreruperii
Restabilire
2000h: FFF 8h
IP
Pentru comutarea
lucrrii
este
necesar:
2000h: FFF Ah CS
2000h: FFF Ch F
Salvarea registrelor
2000h:
2000h:
FFFFFF
8h Eh IP00h
2000h: FFFAh
CS
2000h: FFFCh
F
2000h: FFFEh
00h
Tratarea ntreruperii
Restabilire

Comutarea
stivei

3128h: FFF 8h

IP

3128h: FFFAh
3128h: FFFCh
3128h: FFFEh

CS
F
00h

Fig.4.3. Comutarea lucrrilor

37

Sarcina lucrrii: Scriei procedura care realizeaz comutarea


proceselor. Trebuie s fie prevzute procedurile de salvare a
contextului lucrrii apelante la o adres anume n memorie,
transmiterea controlului procedurii apelate i restabilirii contextului
lucrrii apelante dup terminarea execuiei celei apelate.
ntrebri de control:
1. Enumerai cauzele ntreruperii execuiei unei lucrri.
2. Care este diferena intre o ntrerupere i o deviere?
3. Ce structuri de date se utilizeaz pentru comutarea
lucrrilor? Ce informaie se conine n ele?
4. Ce tipuri de ntreruperi cunoatei? Care sunt cauzele
apariiei lor?
5. Ce este o procedur reenterabil?

38

LUCRAREA DE LABORATOR Nr. 4


TEMA: ntreruperea i restabilirea execuiei unei lucrri.
Scopul lucrrii: De a crea procedura de ntrerupere a execuiei
lucrrii.
Noiuni teoretice
Procese ntrerupte
Trei stri principale ale proceselor (activ (exe), blocat i eligibil)
permit modelarea comportrii proceselor i obinerea unor cunotine
despre realizarea SO. Foarte multe SO sunt elaborate numai pe baza
acestor trei stri.
Se pot aduce argumente in folosul adugrii in acest model a
unor noi stri. Pentru a nelege ce avantaje pot aduce aceste noi stri,
vom examina un sistem ce nu utilizeaz memorie virtual i n care
fiecare proces nainte de a fi executat trebuie ncrcat in memorie. n
aa fel, toate procesele trebuie sa se afle in memoria principal.
S ne aducem aminte c cauza elaborrii unor asemenea scheme
este ndeplinirea mult mai lent a operaiilor de I/O in comparaie cu
calculele efectuate de procesor ceea ce a dus la utilizarea neeficient a
procesorului. ns utilizarea mai multor fire de ateptare a proceselor
blocate nu rezolv problema dat. Trebuie de menionat c utilizarea
schemei cu mai multe fire de ateptare permite ncrcarea n memorie
a mai multor procese. In timp ce unele procese ateapt terminarea
operaiunilor de I/O, procesorul poate fi alocat altui proces. ns
procesorul lucreaz aa de rapid, nct n puin timp toate procesele se
vor afla n starea de ateptare. n aa fel procesorul nu este utilizat pe
deplin chiar i n sisteme multitascking.
Care ar fi rezolvarea acestei probleme? Este posibil de a mri
volumul memoriei principale pentru ca n ea s ncap mai multe
procese. ns asemenea abordare are dou neajunsuri:
a. n primul rnd, acest lucru va duce la creterea brusc a
preului memoriei (calculat n raport cu 1 bit);

b. n al doilea rnd, utilizarea memoriei de ctre programator


crete proporional cu scderea preului la memorie.
Astfel mrirea volumului memoriei duce la creterea
dimensiunii procesului i nu a numrului lor.
O alt rezolvare a acestei probleme este svopping-ul, ideea
principal al cruia const n transferul unor procese din memoria
principal pe disc. Dac n memoria de baz nu se afl nici un proces
gata pentru execuie, SO transfer un proces blocat pe disc (execut
svopping-ul lui), plasndu-l n firul de ateptare al proceselor
ntrerupte care sunt temporar extrase din memoria principal. Apoi
SO ncarc un alt proces din firul de ateptare al proceselor ntrerupte
i continu executarea lui.
Deoarece svopping-ul reprezint o operaie de I/O, exist un
risc de a nruti situaia, n loc de a o mbunti. ns, lund n
consideraie faptul c schimbul de date cu discul se nfptuiete mai
rapid dect operaiile de I/O, svopping-ul n cele mai multe cazuri
mrete productivitatea lucrului sistemului n ntregime.
Dac introducem n modelul proceselor svopping-ul descris mai
sus, atunci trebuie s introducem i o stare nou: proces ntrerupt
(fig.5.1). Atunci cnd toate procesele din memoria principal se afl
n starea blocat, SO poate ntrerupe execuia unui proces
transferndu-l pe disc. Spaiul eliberat din memorie poate fi utilizat
pentru ncrcarea altui proces.
Introducerea
procesului nou
Nou

Eligibil

Dispecerare
Time-out
Producerea
evenimentului

Activizarea
ntrerupt

ntreruperea

Blocat

Activ
Ateptarea unui
eveniment

Eliberarea
memoriei
Finisat

Fig.4.1. Diagrama strilor procesului, lund n consideraie ntreruperea

Dup ce SO a transferat unul din procese pe disc ea are dou


posibiliti pentru a alege un proces ce va fi ncrcat: ea poate crea un
proces nou, sau s ncarce un proces ntrerupt mai devreme. S-ar
40

prea c este mai bine de a ncrca pentru execuie un proces


ntrerupt, ceea ce nu va duce la suprancrcarea sistemei. ns aceasta
nu este chiar aa. Toate procesele nainte de a fi ntrerupte se aflau n
stare blocat. Este clar c rencrcarea n memorie a unui proces
blocat nu va da nici un rezultat, deoarece el tot nu este gata pentru
ndeplinire. S ne amintim, c fiecare proces n stare ntrerupt este
blocat i ateapt ndeplinirea unei operaii sau apariia unui
eveniment. Dac evenimentul ateptat are loc, procesul poate fi
executat mai departe.
Acest lucru trebuie luat n consideraie, cnd se elaboreaz un
SO. Exist dou situaii independente: procesul ateapt apariia unui
eveniment (este blocat sau nu) sau nu se afl n memoria principal,
adic este transferat pe disc (este ntrerupt sau nu). Pentru a lua n
consideraie 2x2 combinaii posibile sunt necesare 4 stri enumerate
mai jos.
1. Proces gata de execuie. Procesului ce se afl n memoria
principal i sunt alocate toate resursele necesare n afara
procesorului.
2. Proces blocat. Proces aflat n memoria principal i care
ateapt apariia unui eveniment.
3. Proces blocat-ntrerupt. Proces ce se afl n memoria
secundar (disc) i este n ateptarea unui eveniment.
4. Proces eligibil-ntrerupt. Proces ce se afl n memoria
secundar, ns este gata pentru execuie. Pentru a fi
executat el trebuie numai ncrcat n memoria principal.
Pentru a compune diagrama trecerilor dintr-o stare n alta, n
care se vor lua n consideraie dou stri ntrerupte noi, trebuie de
menionat un lucru. Pn n prezent nu se lua n consideraie existena
memoriei virtuale, se consider c procesul sau se afl n memoria
principal sau n afara ei. Existena memoriei virtuale permite
executarea parial a procesului ce se afl n memoria principal.
Dac n procesul de execuie se face adresare la un segment al
procesului ce nu se afl n memoria principal, atunci aceasta parte a
procesului poate fi ncrcat n memorie. S-ar prea c existena
memoriei virtuale ne scutete de necesitatea utilizrii svopping-ului,
deoarece orice segment al oricrui proces poate fi ncrcat n/din
41

memoria principal cu ajutorul resurselor tehnice ale procesorului,


care asigur dirijarea memoriei. ns productivitatea memoriei
virtuale poate fi insuficient, n cazul existenei unui numr mare de
procese active, care parial sau n ntregime sunt ncrcate n memoria
principal. Din aceast cauz chiar dac SO utilizeaz memoria
virtual, este necesar periodic de a elibera memoria principal,
transfernd procese pe disc (n ntregime sau parial). Acest lucru va
crete productivitatea ntregului sistem de calcul.
Dintre treceri noi cele mai importante sunt :
- Blocat Blocat-ntrerupt. n cazul cnd nu exist nici un
proces gata pentru execuie cel puin un proces din cele
blocate se transfer pe disc pentru a elibera spaiu pentru un
alt proces, care nu este blocat. Aceast trecere poate fi
efectuat chiar dac exist procese gata pentru execuie,
atunci cnd SO determin c pentru procesul ce se afl n
execuie sau pentru urmtorul proces, este necesar un volum
de memorie mai mare.
- Blocat-ntrerupt eligibil-ntrerupt. Aceast trecere are
loc atunci cnd a avut loc evenimentul, apariia cruia
ateapt procesul. Menionm c pentru realizarea acestei
treceri SO trebuie s aib acces la informaia despre starea
proceselor ntrerupte.
- Eligibil-ntrerupt Eligibil. Atunci cnd nu exist n
memoria principal procese gata pentru execuie, pentru
continuarea lucrului SO trebuie s ncarce un proces n
memoria principal. Se poate ntmpla i o astfel de situaie:
procesul gata pentru execuie, dar ntrerupt, are o prioritate
mai mare dect celelalte procese gata pentru execuie. n
asemenea cazuri programatorul SO poate hotr c este mai
important asigurarea prioritii, dect minimizarea
svopping-ului.
- Eligibil Eligibil-ntrerupt. De regul, SO prefer
ntreruperea procesului blocat i nu celui gata pentru
execuie , deoarece procesul blocat ocup memoria, pe cnd
cel gata pentru execuie poate fi imediat ndeplinit. ns n
unele cazuri o metod unic pentru a elabora un bloc mare
42

de memorie este ntreruperea procesului gata pentru


execuie. De asemenea, SO poate ntrerupe un proces gata
pentru execuie dac el are o prioritate mai joas dect
procesul blocat.
Nou Eligibil-ntrerupt i nou Eligibil. Dup crearea
unui nou proces el se adaug sau n firul de ateptare a
proceselor gata pentru execuie, sau n firul de ateptare a
proceselor gata pentru execuie, dar ntrerupte. Indiferent n
ce fir de ateptare a fost plasat, SO trebuie s creeze tabele
necesare pentru dirijarea procesului i s-i aloce memoria
necesar. Este mai preferabil ndeplinirea acestor aciuni la
primele etape pentru a avea o rezerv mai mare de procese
neblocate. ns aceast strategie poate duce la situaia cnd
unui nou proces nu-i ajunge memorie principal. Pentru
asemenea cazuri se prevede trecerea noului proces n proces
gata pentru execuie , dar ntrerupt. Din alt punct de vedere
crearea procesului n ultimul moment , duce la micorarea
cheltuielilor neproductive i permite SO s asigure crearea
procesului chiar i n cazul suprancrcrii cu procesul
blocat.
Blocat-ntrerupt Blocat. La prima vedere s-ar prea
absurd asemenea trecere. Pentru a ncrca n memorie
procesul care nu este gata pentru execuie, vom examina
urmtoarele scenarii: s-a finisat un proces, elibernd o parte
din memoria principal. n firul de ateptare a proceselor
blocate ntrerupte se afl un proces, prioritatea cruia este
mai mare, dect oricrui alt proces din firul de ateptare al
procesului eligibile. n plus SO tie c foarte curnd va avea
loc evenimentul ateptat de procesul blocat cu prioritate mai
mare. n asemenea caz, este mai rezonabil de a ncrca n
memoria procesul blocat i nu cel gata pentru execuie.
Activ Eligibil-ntrerupt. De obicei, procesul activ, timpul
de alocare a procesorului pentru care a expirat, trece n stare
eligibil. ns dac exist un proces n firul de ateptare a
proceselor blocate ntrerupte cu o prioritate mai mare, i
care a fost numai ce deblocat, atunci SO poate trece la
43

execuia lui. Pentru a elibera o parte din memoria SO poate


trece procesul activ n starea eligibil-ntrerupt.
Orice stare Finalizare (Terminare). De regul, se termin
execuia procesului activ, fie ca sarcina lui a fost ndeplinit,
fie din cauza unor erori. ns n unele SO procesul poate s
se finalizeze odat cu procesul care la creat (proces printe).
Aceast finalizare este posibil cu condiia c procesele pot
trece n starea de finalizare din orice alt stare.

Alte posibiliti de utilizare a ntreruperii.


Pn la momentul dat concepia ntreruperii temporare a
procesului se asocia cu lipsa lui n memoria principal. Procesul ce nu
se afl n memoria principal nu poate fi executat imediat, indiferent
dac este n ateptarea unui eveniment sau nu.
ns concepia procesului ntrerupt poate fi generalizat. Vom
defini proces ntrerupt ca un proces care satisface urmtoarele
condiii:
1. Acest proces nu poate fi executat la momentul dat.
2. Acest proces sau se afl n ateptarea unui eveniment sau
nu. Dac el se afl n ateptarea unui eveniment, atunci
evenimentul dat nu este legat cu condiia ntreruperii, iar
apariia evenimentului nu nseamn c execuia procesului
poate fi continuat.
3. Procesul se ntrerupe de sine stttor, de SO sau de ctre
procesul printe.
4. Procesul nu poate iei din starea ntrerupt pn cnd nu
va fi scos din aceast stare de agentul care a ntrerupt
execuia lui.
n tab 4.1 sunt enumerate cauzele principale de trecere n starea
ntrerupt. Una din cauzele menionate mai sus este necesitatea
transferrii procesului pe disc, pentru a ncrca n memorie un proces
nou sau a micora ncrcarea memoriei virtuale, alocnd fiecrui
proces rmas n memorie o parte suplimentar de memorie.
44

Exist i alte cauze de ntrerupere a proceselor. Vom examina


pentru exemplu un proces care efectueaz controlul lucrului
sistemului. Acest proces poate fi efectuat pentru fixarea intensitii
utilizrii diferitelor resurse i vitezei de ndeplinire a proceselor
utilizrii lui. n cazul apariiei unei erori, acest proces poate ntrerupe
procesul, execuia cruia a dus la apariia acestei erori. Un alt
exemplu sunt dereglri n linii de comunicare (de legtur). n
asemenea cazuri operatorul SO poate transmite comanda de
ntrerupere a procesului, ce utilizeaz aceast linie, pentru a efectua
teste necesare i a nltura dereglrile aprute.
Tabelul 4.1. Cauzele ntreruperii proceselor
Cauza
Descrierea
Svopping
SO trebuie s elibereze un spaiu n memoria
principal pentru a ncrca un proces nou.
Alte cauze ale SO
Cererea
utilizatorului
interactiv
Regimul temporal
de execuie
Cererea procesului
printe

SO poate ntrerupe un proces de deservire sau un


proces suspect care a devenit cauza posibil de
apariie a erorilor.
Utilizatorul dorete ntreruperea procesului
pentru a efectua editarea programului sau n
legtur cu utilizarea unei resurse.
Procesul poate fi executat periodic (de exemplu:
programul pentru evidena utilizrii resurselor
sau lucrului sistemului); n momentul execuiei
unui asemenea program procesul se ntrerupe.
Procesul printe poate s doreasc ntreruperea
procesului fiu pentru a-l controla i modifica, sau
pentru coordonarea lucrului mai multor procesefii.

Alte cauze de ntrerupere temporar sunt legate cu aciunile


utilizatorului; de exemplu, dac utilizatorul suspecteaz c n program
este eronat, el poate modific programul, ntrerupnd execuia lui.
Utilizatorul poate testa i modifica programul sau datele, iar apoi s
45

renceap execuia lui. Un alt exemplu este procesul care duce


evidena utilizrii resurselor sistemului.
Examinarea graficului funciei temporale de lucru se poate
demonstra necesitile svopping-ului. De exemplu, procesul care
trebuie periodic activizat i intervalele de timp dintre activizare sunt
mari, este raional s-l transferm pe disc. Ca exemplu poate servi
programul care duce evidena utilizrii resurselor sau activitii
utilizatorilor.
n final, procesul printe poate dori ntreruperea procesului fiu.
De exemplu procesul A este printe procesului B (pentru a citi un
fiier). Pe parcursul ndeplinirii procesului B a aprut o eroare de
citire, iar el a comunicat acest lucru procesului A. Procesul A
ntrerupe execuia procesului B, i ncearc nlturarea erorii.
Realizarea ntreruperii procesului
Trecerea unei lucrri n starea eligibil (retragerea temporar a
procesorului) se va produce prin nscrierea valorii 254 n
identificatorul (id) ei.
doStop3:

call
mov
mov
mov
call
ret

_di
al,254
[cs:di],al
dx,[cs:di+3]
_ei

La comutarea lucrrilor, trecerea la urmtoarea lucrare are loc


dup cum urmeaz:
int201:
push
ax
mov
dx,515
mul
dx
add
di,ax
; DI = Deplasarea absolut a
topului stivei n structura TTASK
pop
ax
cmp
[Byte Ptr ds:di],255
je
nexttask
46

cmp
je
mov
mov

[Byte Ptr ds:di],254


nexttask
[ds:numtask],al
ax,di

Din cauza c identificatorul lucrrii conine valoarea 254, la


comutare lucrarea nu va fi luat n consideraie.
Sarcina lucrrii: Scriei un program care realizeaz
ntreruperea execuiei unui proces. Trebuie creat procedura de
salvare a contextului lucrrii ntrerupte la o dres anume n memorie
i citirea din memorie a contextului procesului execuia cruia se
restabilete.
ntrebrile de control:
1. Care este ideea principal a svopping-ului?
2. Enumerai rezolvrile posibile ale utilizrii neeficiente a
procesorului ntr-un sistem monoutilizator.
3. Descriei modelul strilor unui proces lund n consideraie
starea ntrerupt.
4. Enumerai cauzele posibile de trecere a procesului n starea
ntrerupt

47

LUCRAREA DE LABORATOR Nr. 5


TEMA: Preluarea ntreruperilor.
Scopul lucrrii: Definirea ntreruperilor noi.
Noiuni teoretice
ntreruperi
n toate calculatoarele este prevzut un mecanism cu ajutorul
cruia este posibil ntreruperea lucrului normal al procesorului. Cele
mai cunoscute clase de ntreruperi sunt enumerate n tabelul 5.1.
Tabelul 5.1. Tipuri de ntreruperi
Tipul ntreruperii
ntrerupere de program

ntreruperea dup timer


ntreruperea de I/O
ntreruperea hard

Descrierea
Se genereaz n urma unor situaii , ce apar ca rezultat
al ndeplinirii comenzilor. De exemplu: mprirea la
zero, ncercarea efecturii unei comenzi incorecte sau
adresrii la un segment de memorie, la care utilizatorul
nu are drept de acces.
Se genereaz de timer-ul sistemului. Aceast
ntrerupere permite SO s-i execute funciile periodic,
peste intervale de timp stabilite.
Se genereaz de controlerul I/O. Semnalizeaz
finalizarea normal a operaiei de I/O sau apariia unor
erori.
Se genereaz ca rezultat al apariiei situaiilor de
incendiu , de exemplu: scderea brusc a intensitii
curentului sau eroarea controlului paritii.

ntreruperile sunt destinate pentru mrirea eficacitii de lucru.


De exemplu, majoritatea dispozitivelor de I/O lucreaz mult mai lent
dect procesorul. Presupunem c procesorul transmite date la
imprimant. Dup fiecare operaii procesorul este obligat s efectueze
o pauz i s atepte pn cnd imprimanta nu primete (citete)
datele transmise. Durata acestei pauze poate fi de sute si chiar mii de
ori mai mare dect durata ciclului de comenzi, pentru transmiterea

datelor. Este evident, c asemenea utilizare a procesorului este


neeficient.
Fie programul utilizatorului conine un ir de apelri a
procedurii WRITE; n intervale dintre ele se afl alte instruciuni. La
apelarea procedurii WRITE controlul se transmite procedurii de I/O al
sistemului, care ndeplinete operaiunile corespunztoare. Programul
de I/O const din trei pri:
1. Consecutivitatea instruciunilor care servesc pentru
pregtirea execuiei operaiilor de I/O. Acestei consecutiviti pot
aparine copierea datelor ntr-un bufer special, pregtirea setului de
parametri , necesare pentru dirijarea dispozitivului.
2. Instruciuni de I/O. Dac programul nu utilizeaz
ntreruperi , el trebuie s atepte pn cnd dispozitivul de I/O va
executa instruciunile necesare (sau s controleze periodic starea lui).
n acest caz programul nu face alt ceva dect s atepte terminarea
operaiilor de I/O.
3. Consecutivitatea instruciunilor, care servesc pentru
terminarea operaiei.
Din cauza c pentru ndeplinirea operaiilor de I/O este necesar
un interval de timp lung, programul ncetinete execuia , ateptnd
terminarea operaiei (instruciunii). n aa fel, n locul unde apare
procedura WRITE, productivitatea programului se micoreaz.
Utiliznd ntreruperi pentru executarea operaiilor de I/O, n
timp ce programul ateapt terminarea operaiei de I/O, procesorul
poate fi alocat altui proces sau s execute alte instruciuni. Ca i n
cazul precedent (fr utilizare ntreruperilor), la apelarea procedurii
WRITE, programul se adreseaz la sistem. Sistemul activeaz
programul pentru executarea operaiei de I/O, care const din codul
de pregtire i instruciuni de I/O. Dup executarea acestor
instruciuni , controlul se ntoarce la programul utilizatorului. n
acelai timp, dispozitivul periferic se ocup cu transferul datelor din
memoria calculatorului i prelucrarea lor (de exemplu, dac acest
periferic este imprimanta, atunci sub prelucrare se subnelege
imprimarea fiierului.). Operaia de I/O se face concomitent cu
executarea instruciunilor programului utilizatorului.
50

n momentul cnd perifericul s-a eliberat i este gata pentru alt


lucrare, adic este gata pentru a primi o nou porie de date,
controlerul de I/O al acestui periferic transmite un semnal de cererea
ntreruperii procesorului. Ca rspuns, procesorul ntrerupe execuia
programului curent, iar controlul trece la programul de deservire a
perifericului dat sau, cu alte cuvinte, la procedura de prelucrare a
ntreruperii. Dup terminarea execuiei procedurii date, procesorul
continu execuia programului ntrerupt.
Din punct de vedere al programului utilizatorului, ntreruperea
nu este alt ceva dect nclcarea consecutivitii normale de execuie.
Dup terminarea prelucrrii ntreruperii, execuia instruciunilor
continu. n aa fel, programul utilizatorului nu trebuie s includ un
cod special, pentru a prelucra ntreruperea. Procesorul si SO rspund
de ntreruperea programului utilizatorului i restabilirea lui din acel
punct din care a fost ntrerupt.
Pentru a coordona ntreruperea cu execuia programului , n
ciclul comenzilor se adaug ciclul ntreruperii fig.5.1.
Ciclu de
selectare

START

Selectarea
urmtoarei
instruciuni

Ciclu de
execuie
interzicerea
ntreruperilor
Executare

a
instruci
unii

permisiunea
ntreruperilor

ciclu
ntreruperilor

Verificarea prezenei
ntreruperilor i
prelucrarea lor

STOP

Fig.5.1. Ciclu de comenzi cu ntreruperi

n ciclul ntreruperii procesorul controleaz prezena semnalelor


de ntrerupere. La apariia ntreruperii, procesorul ntrerupe
executarea programului activ (curent) i execut procedura de
prelucrare a ntreruperii, care, de obicei fac parte din SO. De regul,
aceste proceduri determin natura ntreruperii i execut operaiunile
necesare. n exemplul de mai sus , procedura de prelucrare a
ntreruperii trebuie s determine care din controlere de I/O a generat
51

ntreruperea i s transmit controlul programului ce transfer datele


dispozitivului de I/O. Cnd procedura de prelucrare a ntreruperii se
finiseaz, execuia programului utilizatorului trebuie s nceap din
locul, din care a fost ntrerupt.
Este evident c acest proces include unele cheltuieli
neproductive. Pentru determinarea naturii ntreruperii i luarea
deciziei despre aciunile ulterioare, procedura de prelucrare a
ntreruperii trebuie s execute instruciuni suplimentare. Cu toate
acestea, pentru ateptarea terminrii operaiilor de I/O este necesar
mai mult timp, dect presupune utilizarea ntreruperii, iar procesorul
este utilizat mai efectiv.
Preluarea ntreruperii 08h.
n DOS
urmtor:
1.
2.
3.
4.

redefinirea unei ntreruperi standard are loc n felul


obinerea adresei procedurii standard de tratare,
instalarea procedurii de tratare noi,
executarea programului,
restaurarea procedurii de tratare standard.

Obinerea adresei procedurii de tratare standard este bazat pe


urmtoarele. Tabelul vectorilor ntreruperilor se afl n spaiul de
adrese ncepnd cu 0000:0000 i are 256 elemente (dup numrul de
ntreruperi). Fiecare element al tabelului este un vector de 4 octei,
care conin adresa procedurii de tratare standard a ntreruperii. Pentru
obinerea adresei procedurii de tratare standard poate fi utilizat
funcia MS DOS 35h preluare vector ntrerupere:
Intrare
o
AH = 35h
o
AL = numrul ntreruperii (de la 00h pn la 0FFh)
Ieire
o
ES:BX = adresa procedurii de tratare a ntreruperii

52

Descriere: returneaz
INT(AL); adic ncarc n
0000:[(AL*4)+2].
; Salvm 08h
mov
mov
int
mov
mov

valoarea vectorului ntreruperii pentru


registrul BX 0000:[AL*4], iar n ES ah,035h
al,008h
021h
[cs:oldseg08],es
[cs:oldofs08],bx

Dac MS DOS este lips (ncercm doar s scriem un sistem de


operare propriu!) vom citi direct valoarea din tabelul vectorilor
ntreruperilor, dup cum urmeaz:
; Salvm 08h
push
ds
xor
bx,bx
mov
ds,bx
mov
bx,[ds:0020h]
mov
es,[ds:0022h]
mov
[cs:oldseg08],es
mov
[cs:oldofs08],bx
pop
ds
Instalarea procedurii noi de tratare
Problema principal, atunci cnd prelum o ntrerupere, este
elaborarea procedurii noi de prelucrare a acesteia.
Pentru setarea adresei ntreruperii noi poate fi folosit funcia
25h din MS DOS: setare vector ntrerupere
Intrare
o
AH = 25h
o
AL = numrul ntreruperii
o
DS:DX = vectorul ntreruperii: adresa procedurii de
tratare a ntreruperii
Ieire
o
nu are
53

Stabilete valoarea elementului tabelului vectorilor ntreruperilor


pentru ntreruperea cu numrul AL egal cu DS:DX, ceea ce este
echivalent cu nscrierea unei adrese de 4 octei n 0000:(AL*4), dar,
spre deosebire de nscrierea direct, DOS tie c aceasta este
produs de noi i garanteaz blocarea ntreruperilor pentru toat durata
nscrierii.
; Legare de 08h
push
mov
mov
lea
procedurii noi de tratare
mov
mov
int
pop

ds
ax,cs
ds,ax
dx,[kernel]

; adresa

ah,025h
al,008h
021h
ds

Dac MS DOS este lips, modificm direct valoarea din tabelul


vectorilor de ntrerupere dup cum urmeaz:
; Legare de 08h
call
_di
ntreruperilor
push
xor
mov
lea
noi de tratare
mov
mov
pop
call
_ei
ntreruperile

; Blocarea
ds
bx,bx
ds,bx
bx,[cs:kernel]

; Adresa procedurii

[ds:0020h],bx
[ds:0022h],cs
ds
; Permitem

Codul responsabil de instalarea unor ntreruperi noi se afl n


modulul mtasks.asm procedurile getvectors, setvectors i
restorevectors.
54

Elaborarea procedurii noi de tratare a ntreruperii poate fi realizat


n mai multe moduri. Una din posibiliti este urmtoarea:
PROC

kernel
pushf
call

; ntreruperea 008h
[Dword Ptr cs:oldofs08]

Sensul acestor linii de cod const n salvarea registrului


indicatorilor (pushf) i apelarea procedurii vechi de tratare call
[Dword Ptr cs:oldofs08]. Aceste dou instruciuni simuleaz sosirea
ntreruperii instruciunea int 08h. Dup execuia instruciunii iret IP
va indica instruciunea urmtoare dup call.
push
push
push
push
push
push

di
bx
ax
es
ds
si

Am salvat primul set de registre (nu putem salva totul, fiindc


riscm s pierdem stiva lucrrii precedente sau stiva nucleului).
cmp
lucrrii nu este posibil,
je

[cs:int08],0

; dac comutarea

kernelend

; atunci nu comutm.

Dac valoarea variabilei int08 este zero, lucrarea nu va fi comutat


(o modalitate de dezarmare a ntreruperii).
mov
mov
mov
; iniializm DS
push
pop

si,sp
ax,ss
es,ax

; ES:SI=SS:SP

cs
ds

Salvm stiva lucrrii vechi i iniializm registrele segmentelor


pentru executarea ntreruperii.
; Cutm stiva lucrrii
55

lea
di,[ds:firsttask]
de nceput a structurii TTASK
mov
al,[ds:numtask]
Numrul lucrrii
xor
ah,ah
Numrul lucrrii
push
dx
mov
dx,515
mul
dx
raport cu nceputul firsttask
pop
dx
add
di,ax
absolut a topului stivei n

; DI = adresa
; AL =
; AX =

; AX = Deplasare n
; DI = Deplasarea

; structura TTASK
mov
[Word Ptr ds:di+5],ss
mov
[Word Ptr ds:di+7],sp
; Lum n consideraie prioritile
dec
[Word Ptr ds:di+9]
cmp
[Word Ptr ds:di+9],0
jne
kernelend
mov
ax,[Word Ptr ds:di+11]
mov
[Word Ptr ds:di+9],ax
kernel_01:
add
di,515
;
SP=DI+515
mov
sp,di
mov
ax,ds
; SS=DS
mov
ss,ax
Acest fragment de cod repartizeaz prioritile pentru prioriti
nalte nu au loc cteva comutri ale lucrrii i lucrarea curent este
executat mai mult timp.
; Salvm restul registrelor n structura TTASK
push
si
; SP
push
es
; SS
push
cx
; CX
push
dx
; DX
56

push

bp

; BP

Aici are loc salvarea celorlalte registre , dar nu n stiva lucrrii, ci


n structura TTASK. Tot aici mai este pstrat SS:SP (deja ES:SI), care
indic stiva lucrrii unde am pstrat restul registrelor.
; Cutm urmtoarea lucrare
int08new:
xor
ax,ax
mov
al,[ds:numtask]
nexttask:
inc
al
;_urmtoarea_
lea
di,[ds:firsttask]
cmp
al,9
jne
int201
xor
ax,ax
Cutm, cercetnd descriptorii lucrrilor, urmtoarea lucrare.
int201:

push
ax
mov
dx,515
mul
dx
add
di,ax
; DI = Deplasarea absolut a
topului stivei n structura TTASK
pop
ax
cmp
[Byte Ptr ds:di],255
je
nexttask
Controlm, dac lucrarea dat este ncrcat. Dac nu trecem la
urmtoarea.
cmp

[Byte Ptr ds:di],254

je

nexttask

; lucrarea

temporar oprit
Controlm, dac lucrarea dat este temporar oprit. Dac da
trecem la urmtoarea.
mov
mov
add

[ds:numtask],al
ax,di
ax,(515-10)
57

mov
sp,ax
urmtoarei lucrri (cea din

; n SP avem stiva
; structura TTASK)

push
pop

ds
ss

Am depistat registrele lucrrii noi, salvate n structura TTASK.


; Restabilim restul registrelor urmtoarei lucrri
pop
bp
pop
dx
pop
cx
pop
es
pop
si
Dup restabilirea restului registrelor trebuie s punctm stiva real
a lucrrii.
; SS:SP indicm stiva real
mov
ax,es
mov
ss,ax
mov
sp,si

; SS:SP=ES:SI

Am depistat stiva principal a lucrrii noi


kernelend:

pop
pop
pop
pop
pop
pop

si
ds
es
ax
bx
di

i am restabilit restul registrelor. Acum SS:SP puncteaz stiva lucrrii


noi, dup terminarea ntreruperii va fi ndeplinit o alt lucrare.
push
mov
out
pop

ax
al,20h
20h,al
ax

Trimitem controlerului ntreruperii


ntrerupere (ntreruperea 08h este hard)

instruciunea

terminare
58

ENDP

iret
kernel

Sarcina lucrrii: Scriei procedura de preluare a ntreruperii i


instalarea unei noi proceduri de prelucrare a ntreruperii.
ntrebri de control:
1. Aducei o defeniie termenului ntrerupere.
2. Care sunt tipurile ntreruperilor? Descriei aceste tipuri.
3. Care sunt etapele unui program de intrare-ieire?
4. n ce mod se face preluarea unei ntreruperi standard?
5. Ce informaie se conine n vectorul ntreruperilor?

59

LUCRAREA DE LABORATOR Nr. 6


: Interfaa grafic a SO
Scopul lucrrii:De creat o interfa grafic pentru sistemul de
operare
Noiuni teoretice
Funciile de baz pentru lucrul cu ecran. ntreruperea BIOS
10h
Funciile de afiare pe ecran alocate de ntreruperea DOS 21h
nu dau posibilitatea de a afia textul din orice poziie a ecranului, de a
terge ecranul, s fie schimbat culoarea textului. Toate aceste
lucruri pot fi fcute prin intermediul funciilor video ale BIOS-ului. n
afar de aceasta, BIOS permite lucrul ecranului att n regim text, ct
i n regim grafic. Vom examina funciile de baz ale servesului video
BIOS, care sunt apelate prin intermediul ntreruperii 10h, numrul lor,
de regul, se introduce n registru AH.
Spaiu de afiare este considerat poriunea dreptunghiular a
ecranului cu coordonatele de baz:
Colul stng de sus - ( = (linia), L = (coloana)).
Implicit =0.
Colul drept de jos - ( = ,BL = )
Implicit in DOS este setat regimul text de lucru al ecranului. n acest
caz =184Fh (24 i 79 ntregul ecran).
Valorile admisibile ale coordonatelor (x,y) depind de regimul de lucru
al monitorului i tipul video adaptorului vezi tab. 6.1. i tab. 6.2.
Setarea regimului video
mov
mov
int

,0
; setai regimul video al monitorului
AL, Numrul regimului video
10h

Numrul regimului video se nscrie n cei 7 bii inferiori. Dac bitul


superior (8) a fost setat cu valoarea 1, atunci se efectueaz tergerea
ecranului. Ne vom limita numai la regimuri video text.
Tabelul 6.1. Regime video textuale
Registrul
AL
0
1
2
3
7

Rezoluia
ecranului
40 25
40 25
80 25
80 25
80 25

Regimul i numrul
culorilor
Alb negru
Color, 16 culori
Alb-negru
Color, 16 culori
Monocrom

Numrul
paginilor video
07
07
03
03
0-3

Pentru video adaptoare, care sunt compatibile cu standardul


VESA BIOS Extension, este posibil trecerea ntr-un regim cu
rezoluie nalt a ecranului:
mov
,4Fh
; regimul video extins al
monitorului
mov
AL, 02
; regimul SVGA
mov
BX, Numrul regimului video
int
10h
Numrul regimului video se seteaz n 13 bii inferiori. Setarea bitului
superior (15) cu valoarea 1 nseamn cu ecranul nu se terge.
Numrul de culori este determinat de capacitatea memoriei video.
Tabelul 6.2. Regime video textuale
Registrul BX
108h
109h
10Ah
10Bh
10Ch

Rezoluia ecranului
80 60
132 25
132 43
132 50
132 60

Implicit n DOS se utilizeaz regimul 3.

mov
monitorului
mov
int

AH,5

; Setarea paginii video active a

AL, Numrul paginii video


10h

Pagina afiat la momentul dat pe ecran se numete activ.


Implicit pagina activ este pagina 0. exist posibilitatea afirii unui
text pe pagin neactiv la momentul dat, iar apoi s se treac la ea.
Acest lucru permite mrirea vitezei de afiare.
mov
,0Fh
curent al monitorului
int
10h

; Cererea regimului video

La ieire aceast funcie ntoarce urmtoarele registre:


L Numrului regimului video;
numrul simbolurilor ntr-o linie;
Numrul paginii video.
Dirijarea cu dimensiunea i poziia cursorului
De regul, simbolul cursorului este o linie de subliniere.
Utiliznd ntreruperea se poate dirija cu mrimea vertical a
cursorului
mov
mov
mov
int

AH,1
;dimensiunea cursorului
CH, Linia de sus al scanrii
; biii 4-0
CL, linia de jos al scanrii
;biii 4-0
10h

Cursorul i pstreaz dimensiunile pn cnd programul nu le va


schimba.
mov
mov
mov

AH,2
; poziia cursorului
, Numrul paginii video
DH, Numrul liniei
63

mov DL, Numrul coloanei


int
10h
mov
,3
; citirea poziiei i dimensiunii
curente ale cursorului
mov
, Numrul paginilor video
int
10h
La ieire aceast funcie ntoarce urmtoarele valori ale
registrelor CX i DX:
DH numrul liniei poziiei curente a cursorului;
DL numrul coloanei poziiei curente a cursorului;
, L linia de sus i de jos, respectiv, a scanrii.
Afiarea simbolurilor n regim textual
Regimul textual de lucru al adaptoarelor video n calculatoare
IBM compatibile utilizeaz a parte a memorie operative ca memorie
video. Adresa nceputului depinde de tipul adaptorului. Pentru
adaptoare G, G, VG i SVGA aceasta este 800h:0000.
memoria video conine carta ecranului: coduri ale simbolurilor
afiate i atributele lor. Accesul direct la memoria video asigur cea
mai maximal posibil vitez de schimbare a imaginii pe ecran,
deoarece orice simbol care apare n memoria video este imediat afiat
pe ecran.
n regim textual ecranul se pstreaz c o succesiune de perechi
de bii, unde primul bit n pereche este oricare din cele 256 simboluri
ASCII, iar al doilea bit atributele acestui simbol.

64

5 4
f n

3
br
t

2 1 0
simboluri
Culoarea simbolurilor

Intensitate: 1 culoarea aprinsa a simbolurilor

Culoarea de fon
Pata de luminozitate (Blink) sau
culoarea aprinsa a simbolurilor

Opiunile planului
exterior (culoarea
simbolurilor)

00h
01h
02h
03h
04h
05h
06h
07h
08h
09h
0Ah
0Bh
0Ch
0Dh
0Eh
0Fh

negru
albastru
verde
acvamarin
rou
roz aprins
maro
gri
gri-nchis
albastru-deschis
verde-deschis
acvamarin deschis
rou-deschis
roz deschis
galben
alb

Opiunile fonului

mov ,8
; Citirea simbolului i atributelor lui din
poziia curent a cursorului
mov , Numrul de pagini video
int
10h
La ieire aceast funcie returneaz urmtoarele valori ale registrelor:
atributele simbolului;
L codul ASCII-al simbolului.
mov

,9

; Afiarea simbolului cu atribute

mov
mov
mov

, Numrul paginii video


L, codul ASCII al simbolului
L, Atributul simbolului

cerute

65

mov
int
mov

, Numrul de repetri al simbolului


10h
,0h
; Afiarea simbolului cu atribute

mov
mov
mov
int

, Numrul paginii video


L, codul ASCI al simbolului
, Numrul de repetri al simbolului
10h

curente

cu ajutorul acestor dou funcii se poate afia orice simbol,


inclusiv i simbolurile CR i LF.
mov
curente
mov
mov
int

,0h

; Afiarea simbolului cu atribute

, Numrul paginii video


L, codul ASCII al simbolului
10h

aceast funcie interpreteaz simbolurile CR, LF, BS (08) i


BELL (07) ca simboluri de formatare pe ecran.
Curirea i afiarea urmtoarei pagini ale ecranului
mov AH,6
;deplasarea n sus al ecranului
mov L, numrul de linii pentru deplasare;0 ntregul ecran se
umple cu 0
mov , Atributul ecranului;7 alb-negru
mov DH, Numrul liniei de jos al colului drept ; 24 ntreg
ecran n regimurile 0-3,7
mov DL, Numrul coloanei de jos al colului drept ;79 ntreg
ecran n regimurile 2,3,7
mov , Numrul liniei de sus al colului stng
mov L, Numrul coloanei de sus al colului stng
int
10h
mov ,7
; deplasarea n jos al ecranului
66

mov L, numrul de linii pentru deplasare


; 0 ntregul
ecran se umple cu spaii
mov , Atributul ecranului
; 7 alb-negru
mov D, Numrul liniei de jos al colului drept ; 24 ntreg
ecran n regimurile 0-3,7
mov DL, Numrul coloanei de jos al colului drept ;79 ntreg
ecran n regimurile 2,3,7
mov , Numrul liniei de sus al colului stng
mov L, Numrul coloanei de sus al colului stng
int
10h
Afiarea unei linii de simboluri
mov
,13h
; afiarea unui ir de simboluri
mov L, regimul de afiare
mov
, Numrul de simboluri pentru afiare
mov
L, Atributulde afiare
;dac irul conine
numai simboluri
mov
D, Numrul linii de nceput al afirii
mov
DL, Numrul coloanei de nceput al afirii
lea
S:, Adresa nceputului liniei n memorie
int
10h
Regimul de afiare se seteaz printr-un flag n bitul inferior:
0 se afieaz o linie simpl (cte un bait pentru fiecare
simbol). Dup afiarea liniei cursorul se deplaseaz la sfritul
liniei.
1 linia mai conine i atributele simbolurilor ce se afieaz
(cte doi baii pentru fiecare simbol.
Aceast funcie interpreteaz simbolurile R(0Dh), LF(0h),
S (08) i BELL (07) ca simboluri de dirijare.
Mai jos sunt prezentate exemple de funcii simple:
curirea ecranului (procedura Clrscr);
poziionarea cursorului n colul de sus stng al ecranului
(procedura Goto00).
67

Afiarea mesajelor de eroare cu o culoare mai intens


(colorat) (procedura ErrorOut).
Utiliznd atributele de afiare a simbolurilor.
; dure Goto00
Goto00
r N
push dx
push
mov dh,0
; Numrul liniei
mov dl,0
; Numrul coloanei
; setarea poziiei cursorului
mov ah,2
mov bh, 0
; Numrul paginii video
int
10h
p

p
d
ret
Goto00
EndP
; dure Clrscr
N
push
push b
push
push d
mov h,6
; Deplasarea ecranului n sus
;Numrul de linii pentru deplasare: 0 ntregul ecran se umple cu
spaii
mov al,0
mov ,0
; Colul stng de sus (0,0)
; Numrul liniei colului drept de jos: 24 ntreg ecran n regimurile
0-3,7
mov dh,24
; Numrul coloanei colului drept de jos: 79 ntregul ecran n
regimurile 2,3,7
mov dl, 79
; Atributul ecranului: 7 albnegru
Clrscr

68

Clrscr

mov
int
p
p
p
p
ret
EndP

bh,7
10h
d

; dure ErrorOut
; Intrare:
;
lea
, Adresa nceputului liniei n memorie
;
mov , Numrul de simboluri pentru afiare
ErrorOut

mov ah, 13h


; Afiarea unei linii de simboluri
mov al,0
; Regimul de afiare obinuit
; Atributul de afiare: rou deschis (0Ch) pe acvamarin (3)
mov bl,3Ch
mov dh,10
; Numrul liniei de
nceput al firii
mov dl,5
; Numrul coloanei de
nceput al afirii
int
10h
ret
ErrorOut
EndP

Sarcina lucrrii: Creai o interfa grafic simpl pentru SO scris.


ntrebri de control:
1. Care sunt avantajele interfeei grafice?
2. Ce valori de scriu n registre generale pentru iniializarea
regimului video, dirijarea cu poziia i dimensiunea
cursorului, afiarea simbolurilor?

69

BIBLIOGRAFIA
1. Barron D.W. Computer Operating Systems, Chapman and
Hall, London, 1971
2. ., , . , ,
1974
3. .., , .
, , 1974
4. ., , . , 2002

70

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