Sunteți pe pagina 1din 67

MINISTERUL EDUCAIEI 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, Calculatoare, Informatica i Limbi Moderne aplicate

CHIINU 2003
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 Scopul lucrrii: Crearea discului de ncrcare al sistemului de operare Noiuni teoretice 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. 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.
3

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 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.
4

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 bootsector. 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 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
5

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 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,
6

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 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.
7

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 CODESEG ORG 100h Start: jmp Start1 ORG 07C00h

01000h

Datele din sectorul boot vor fi ncrcate la adresa 0000:7C00, vom scrie cod pentru aceast adres.
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 DW 0 AbsHeadNum DW 0 Begin: ; Ram de ncadrare ; Citire nucleu mov ax,KernelSEG mov es,ax mov di,100h ; Punct de intrare nucleu-KernelSEG:100h mov dx,33 ; Primul sector cu date; (128 sectoare ale nucleului) nextsect: push dx es di call ReadSect 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 citire-scriere (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); mov ax,si xor dx,dx div cx
9

mov di,ax Sec=Sect-(tmp*Sectors)+1; mov ax,di imul cx mov dx,si sub dx,ax inc dx mov [AbsSectNum],dx Hea=tmp & 1; mov ax,di and ax,1 mov [AbsHeadNum],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 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-2-1-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
10

mov dl,0 mov al,1 mov ah,2 int 13h ret ENDP ReadSect END Start

; Numr disc 0 = A ; Numr de sectoare citite ; Numr funcie

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 ... 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?

11

LUCRAREA DE LABORATOR Nr. 2 Tema: ncrcarea sarcinii. Scopul lucrrii: De creat o procedur de ncrcare a lucrrii n memorie. Noiuni teoretice 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; 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 intrare-ieire, procesorul trece de la prelucrarea unui program la altul (cu condiia c n memoria operativ sunt ncrcate mai multe programe).
13

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 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
14

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 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.2.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

Fig.2.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 trebuie s cunoasc atributele procesului (aa cum sunt identificatorul procesului, starea i amplasarea n memorie). Amplasarea n memorie a procesului. nainte de a trece la problema amplasrii procesului sau atributele procesului, trebuie s gsim rspuns la ntrebarea: cum se
16

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.2.1.) Tabela 2.1. Elementele tipice ale imaginii procesului. Denumirea Descrierea elementului Datele O parte din spaiul de adrese al utilizatorului, care utilizatorului permite introducerea schimbrilor. Aici se conin datele programului, stiva i codul programului ce se modific. Programul Programul ce trebuie executat. utilizatorului Stiva de De fiecare program sunt legate una sau mai multe sistem stive de sistem. Stiva se utilizeaz pentru pstrarea parametrilor, adreselor de apel a procedurilor i serviciilor de sistem Blocul de Datele necesare SO pentru dirijarea procesului. control al procesului Amplasarea imaginii procesului depinde de schema de dirijare a memoriei aleas ( n cel mai simplu caz, imaginea procesului prezint un segment nentrerupt de memorie, care este amplasat n memoria secundar, de obicei pe disc.) Pentru, ca SO s poat dirija procesul ,
17

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 enumerate tipurile de informaie, care sunt necesare SO pentru fiecare proces.
18

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
19

de exemplu pot fi 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 .
20

Indentificatoarele se pot utiliza n diferite situaii. n afar de 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 trebuie s cunoasc ct spaiu este necesar pentru amplasarea datelor i programului utilizatorului i ct spaiu este necesar pentru
22

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 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
23

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 mov [Word Ptr cs:di+509],00000h ; CX 0000 mov [Word Ptr cs:di+507],00000h ; DX 0000 mov [Word Ptr cs:di+505],00000h ; BP 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.
24

mov [Word Ptr cs:di+9],1 ; Stabilim prioritatea lucrrii mov [Word Ptr cs:di+11],1 ; Stabilim prioritatea 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: Scriei o procedur de ncrcare a unei lucrrii. ntrebri de control: 1. Dai o definiie a termenului proces. 2. Ce prezint blocul de control al procesului? 3. Ce reprezint imaginea procesului? 4. Enumerai atributele procesului. 5. Pentru ce este necesar descriptorul lucrrii? Care este structura lui?

25

LUCRAREA DE LABORATOR Nr. 3 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. 3.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 3.1. Cauzele finisrii execuiei procesului
Cauza Finisarea normal Descrierea Procesul apeleaz procedur de finisare a execuiei pentru a ntiina SO despre finisarea lucrului su Depirea timpului Timpul sumar de execuie a programului depete limit alocat valoarea limit stabilit. Acest tip poate fi calculat procesului 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.
27

Volumul de Pentru execuia procesului este necesar un volum memorie insuficient mai mare de memorie, dect este disponibil la momentul dat n sistem Ieirea n afara Procesul ncearc s obin acces la segmentul de limitelor spaiului de memorie, la care el nu are drept de acces memorie alocat Eroarea de protecie 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. Eroare aritmetic Procesul ncearc s efectueze o operaie nepermis, de exemplu, s mpart la zero, sau s utilizez un numr care depete limitele aparatajului. Ateptare excesiv Procesul ateapt apariia unui eveniment mai mul dect este stabilit n parametrii sistemului Eroare de intrare - n timpul execuiei operaiei de intrare-ieire apare ieire o eroare. De exemplu, nu este gsit fiierul necesar sau s se execute citirea/scrierea ntr-un numr stabilit de ncercri. Instruciune greit Procesul ncearc s efectueze o instruciune inexistent (des apare n cazul trecerii procesului n spaiul date i ncearc s le interpreteze ca o instruciune) Utilizarea eronat a O parte de date nu corespunde tipului stabilit sau datelor nu este iniializat Finisarea execuiei Multe sisteme de operare finiseaz execuia procesului printe proceselor fii n cazul finisrii procesului printe

Terminarea execuie unui program Programele COM sub MS DOS pot fi terminate prin:
a) b) sau c) int mov int ret 20h ah,4Ch 21h

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
28

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 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; ntreruperea 020h (descrcarea lucrrii) call _di

Interzicem ntreruperile pentru ca lucrarea s nu poat fi lansat n momentul retragerii procesorului.


pop pop pop ax ax ax ; Extragem din stiv

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. 4 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 4.1. Mecanismul de ntrerupere a procesului Mecanism ntreruperea Devierea Apelul supervizorului Cauza Exterioar n raport cu execuia instruciunii curente Este legat cu execuia instruciunii curente Cererea aplicaiei Utilizeaz Ca rspuns la un eveniment asincron exterior Prelucrarea erorii sau a unei situaii anormale Apelarea unei funcii a SO

31

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
32

executa procedurile de restabilire sau, mai simplu, de a ntiina utilizatorul despre eroarea aprut. n aa caz, SO poate sau s 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

Fig.4.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.
34

Apelul procedurii i rentoarcerea din ea. 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 4.2:
36

Fig.4.2. Structura unui program COM 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 4.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.

37

Fig.4.3. Comutarea lucrrilor 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. 5 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);
39

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.

Fig.5.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
40

proces nou, sau s ncarce un proces ntrerupt mai devreme. S-ar 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,
41

deoarece orice segment al oricrui proces poate fi ncrcat n/din 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
42

unele cazuri o metod unic pentru a elabora un bloc mare 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
43

care a fost numai ce deblocat, atunci SO poate trece la 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 5.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
44

nou sau a micora ncrcarea memoriei virtuale, alocnd fiecrui proces rmas n memorie o parte suplimentar de memorie. 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 5.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 procese-fii.

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.
45

Utilizatorul poate testa i modifica programul sau datele, iar apoi s 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
46

je cmp je mov mov

nexttask [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. 6 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 6.1. Tabelul 6.1. Tipuri de ntreruperi Tipul Descrierea ntreruperii ntrerupere Se genereaz n urma unor situaii , ce apar ca de program 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. ntreruperea Se genereaz de timer-ul sistemului. Aceast dup timer ntrerupere permite SO s-i execute funciile periodic, peste intervale de timp stabilite. ntreruperea Se genereaz de controlerul I/O. Semnalizeaz de I/O finalizarea normal a operaiei de I/O sau apariia unor erori. ntreruperea Se genereaz ca rezultat al apariiei situaiilor de hard 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
49

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
50

imprimarea fiierului.). Operaia de I/O se face concomitent cu executarea instruciunilor programului utilizatorului. 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.6.1.

Fig.6.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
51

necesare. n exemplul de mai sus , procedura de prelucrare a ntreruperii trebuie s determine care din controlere de I/O a generat 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 redefinirea unei ntreruperi standard are loc n felul urmtor: 1.obinerea adresei procedurii standard de tratare, 2.instalarea procedurii de tratare noi, 3.executarea programului, 4.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 valoarea vectorului ntreruperii pentru INT(AL); adic ncarc n registrul BX 0000:[AL*4], iar n ES 0000:[(AL*4)+2]. ; Salvm 08h mov ah,035h mov al,008h int 021h mov [cs:oldseg08],es mov [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 ds mov ax,cs mov ds,ax lea dx,[kernel] ; adresa procedurii noi de tratare mov ah,025h mov al,008h int 021h pop ds

Dac MS DOS este lips, modificm direct valoarea din tabelul vectorilor de ntrerupere dup cum urmeaz:
; Legare de 08h call _di ; Blocarea ntreruperilor push ds xor bx,bx mov ds,bx lea bx,[cs:kernel] ; Adresa procedurii noi de tratare mov [ds:0020h],bx mov [ds:0022h],cs pop ds call _ei ; Permitem ntreruperile

Codul responsabil de instalarea unor ntreruperi noi se afl n modulul mtasks.asm procedurile getvectors, setvectors i restorevectors. Elaborarea procedurii noi de tratare a ntreruperii poate fi realizat n mai multe moduri. Una din posibiliti este urmtoarea:
PROC kernel ; ntreruperea 008h pushf call [Dword Ptr cs:oldofs08]
54

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 [cs:int08],0 lucrrii nu este posibil, je kernelend ; dac comutarea ; atunci nu comutm.

Dac valoarea variabilei int08 este zero, lucrarea nu va fi comutat (o modalitate de dezarmare a ntreruperii).
mov mov mov ; iniializm push pop si,sp ax,ss es,ax DS cs ds ; ES:SI=SS:SP

Salvm stiva lucrrii vechi i iniializm registrele segmentelor pentru executarea ntreruperii.
; Cutm stiva lucrrii lea di,[ds:firsttask] ; DI = adresa de nceput a structurii TTASK mov al,[ds:numtask] ; AL = Numrul lucrrii xor ah,ah ; AX = Numrul lucrrii push dx mov dx,515
55

mul dx ; AX = Deplasare n raport cu nceputul firsttask pop dx add di,ax ; DI = Deplasarea absolut a topului stivei n ; 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 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
56

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 ; lucrarea temporar oprit je nexttask

Controlm, dac lucrarea dat este temporar oprit. Dac da trecem la urmtoarea.
mov [ds:numtask],al mov ax,di add ax,(515-10) mov sp,ax ; n SP avem stiva urmtoarei lucrri (cea din structura TTASK) push ds pop ss

Am depistat registrele lucrrii noi, salvate n structura TTASK. ; Restabilim restul registrelor urmtoarei lucrri
pop pop pop pop pop bp dx cx es si

Dup restabilirea restului registrelor trebuie s punctm stiva real a lucrrii.


; SS:SP indicm stiva real mov ax,es mov ss,ax ; SS:SP=ES:SI mov sp,si
57

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)


ENDP iret kernel

instruciunea

terminare

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?

58

LUCRAREA DE LABORATOR Nr. 7 : 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. 7.1. i tab. 7.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 7.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 7.2. Regime video textuale Registrul BX Rezoluia ecranului 108h 80 60 109h 132 25 10Ah 132 43 10Bh 132 50 10Ch 132 60 Implicit n DOS se utilizeaz regimul 3.
mov AH,5 ; Setarea paginii video active a monitorului mov AL, Numrul paginii video int 10h
60

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 ; Cererea regimului video curent al monitorului int 10h

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 AH,2 ; poziia cursorului mov , Numrul paginii video mov DH, Numrul liniei mov DL, Numrul coloanei int 10h mov ,3 ; citirea poziiei i dimensiunii curente ale cursorului mov , Numrul paginilor video int 10h
61

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.

62

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 cerute mov , Numrul paginii video mov L, codul ASCII al simbolului mov L, Atributul simbolului mov , Numrul de repetri al simbolului int 10h mov ,0h ; Afiarea simbolului cu atribute curente mov , Numrul paginii video mov L, codul ASCI al simbolului mov , Numrul de repetri al simbolului int 10h

cu ajutorul acestor dou funcii se poate afia orice simbol, inclusiv i simbolurile CR i LF.
mov ,0h ; Afiarea simbolului cu atribute curente mov , Numrul paginii video mov L, codul ASCII al simbolului int 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 ;0ntregul ecran se umple cu 0
63

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 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 mov mov mov mov mov lea int ,13h ; afiarea unui ir de simboluri L, regimul de afiare , Numrul de simboluri pentru afiare L, Atributulde afiare ;dac irul conine numai simboluri D, Numrul linii de nceput al afirii DL, Numrul coloanei de nceput al afirii S:, Adresa nceputului liniei n memorie 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.
64

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). 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 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
65

dl, 79; Atributul ecranului: 7 alb-negru mov bh,7 int 10h p d p p b p ret Clrscr EndP mov ; 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?

66

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

67

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