Sunteți pe pagina 1din 9

Exercitiul 1 + Exercitiul 2 : #include <dos.h> #include <stdio.h> #include <conio.h> void main(void) { printf("ASC - E ercitiul !

"n")# int func $ % &A# // Indexul functiei care va fi interpretata de sistem ca fiind citirea datei curente unsi'ned () $ %# unsi'ned A* $ %# int A) $ %# // Functia BDOS intoarce rezultatul actualizat al re istrului !" A) $ +dos(func,(),A*)# // !cesta este modul de apelare a functiei BDOS pentru afisarea datei curente printf("-e.ltatul intors de apelul functiei / 0d"n",A))# // !ici c#iar afisam data curenta // $odul din spatele functiei BDOS care ne permite accesul re istrilor union -E1S re'2structure# re'2structure. .d $ ()# re'2structure.h.ah $ func# re'2structure.h.al $ A*# int34(% &!,5re'2structure,5re'2structure)# // Extra erea valorilor din re istrii tip %&%' actualizati int an $ re'2structure. .c # int luna $ re'2structure.h.dh# int .i $ re'2structure.h.dl# printf("(ata curenta este / 0d60d60d"n",.i,luna,an)# 'etch()# printf("ASC - E ercitiul &"n")# func $ % &C# // Indexul functiei care va fi interpretata de sistem ca fiind citirea orei curente () $ %# A* $ %# A) $ +dos(func,(),A*)# // !cesta este modul de apelare a functiei BDOS pentru afisarea orei curente printf("-e.ultatul intors de apelul functiei / 0d"n",A))# // !ici c#iar afisam ora curenta // $odul din spatele functiei BDOS cu a(utorul caruia putem citi re istrii actualizati re'2structure. .d $ ()# re'2structure.h.ah $ func# re'2structure.h.al $ A*# // Implementarea unui ceas rudimentar int ora $ %,minutul $ %,secunda $ !,sutimi $ %# 7hile (secunda 8$ %) { int34(% &!,5re'2structure,5re'2structure)# // $itirea re istrilor ora $ re'2structure.h.ch# minutul $ re'2structure.h.cl# !

int au 2secunda $ re'2structure.h.dh# sutimi $ re'2structure.h.dl# if (au 2secunda > secunda) { clrscr()# printf("9ra curenta este / 0d60d60d / 0d"n",ora,minutul,secunda,sutimi)# : secunda $ au 2secunda# : printf("Sfarsit ...")# 'etch()# : Exercitiul ) : Secventa de cod din enunt nu este corecta. ;oi considera ca functia <ne7SC=> este declarata inainte de primele doua linii de cod , si la compilare nu avem nici o eroare. 1reseala din codul dat, este folosirea incorecta a suprascrierii rutinei de intrerupere. ?ai intai se setea.a vectorul de intrerupere cu referinta la functia <ne7SC=> prin comanda / <setvect(=@A-,ne7SC=)>, dupa care rutina care s-a vrut a fi suprascrisa, <oldSC=>, primeste referinta noii rutine prin comanda <'etvect(=@A-)>. Corect ar fi fost sa inversam ordinea celor doua comen.i. (aca lasam asa codul, vom 'enera o recurenta infinita care pro+a+il va re.ulta intr-o +locare a sistemului. Exercitiul * :

Butem vor+i despre memorie extinsa (e tended memorC), in ca.ul procesoarelor care pot sa adrese.e un spatiu de memorie mai mare de !?D si care lucrea.a in modul protejat. Aceste procesoare incep cu =ntel 3%&34. ?emoria e tinsa este memoria accesi+ila in modul proteEat (adresa virtuala) de !?D. @u avem nevoie de hard7are dedicat pentru a accesa aceasta memorie. Brimii 4F GD din aceasta .ona se numesc H?A (Hi'h ?emorC Area) care pot fi accesati in mod real (direct). Bentru a accesa o adresa fi.ica, e tra'em un selector de !4+ din adresa lo'ica pe care il introducem ca intrare intr-o ta+ela de descriptori ca in fi'ura. =n continuare avem flu ul de date din fi'ura. Bentru a putea 'estiona memoria e tinsa, tre+uie sa incarcam un pro'ram de mana'ement al memoriei, numit HIMEM.SYS. Exercitiul + : &

=n ca.ul in care dorim sa adresam un spatiu de memorie mai mare de !?D cu un procesor care poate adresa doar !?D (=ntel 3%34), putem folosi conceptul de Memorie Expandata. Astfel ?emoria E pandata este memoria peste limita de !?D, dar care se vede din interiorul sptiului de adrese de !?D. Bentru a putea folosi acest concept (specificatie) (E?S), avem nevoie de un hard7are dedicat (posi+il un demultiple or care sa selecte.e cipuri de memorie). Avem nevoie si de un pro'ram de mana'ement al acestui tip de memorie, de e emplu EMM386.EXE, care tre+uie sa fie incarcat. =n e emplul din fi'ura, pentru a accesa adresa % &IJ43A, valoarea re'istrului -E1 tre+uie sa fie %%!% (F), deoarece / Adresa data este % &IJ43A care e repre.entata pe &F de +iti, adica avem un sistem cu ma im !4 ?D de memorie adresa+ili. =n fi'ura sunt desenate F cipuri de memorie asadar spatiul de adrese al sistemului nostru este (% %%%%%% K % FLLLLL). Brocesorul =ntel 3%34 poate adresa doar !?D deci pe intrarea adrese vom avea &% de +iti. Acesti &% de +iti vor repre.enta offsetul in cadrul cipului de memorie. -e'istrul -E1, este conectat la (ecodorul (EC, si valoarea inscrisa in -E1 va selecta cipul. Cum dorim sa accesam adresa % &IJ43A, -E1 va fi %%!% $ &. =n conclu.ie pentru a accesa adresa din enunt vom avea pe intrarea in re'istru % & (F+) si pe intrarea adresa % IJ43A (&%+). Astfel AL $ -E1 M &N&% O Adresa

Exercitiul ' : Bro'ramele re.idente, sunt pro'rame care s-au e ecutat, dar codul lor nu este eli+erat din memorie in eventualitatea unei folosiri ulterioare. Aceste pro'rame de o+icei modifica vectorii de intrerupere ca la o anumita intrerupere, codul ramas in memorie sa poata fi din nou e ecutat. Bentru instalarea acestui fel de pro'rame, tre+uie sa apelam o functie (9S (Aerminate and StaC -esident), iar in C putem face acest lucru cu functia <Geep>, care are urmatorul antet / void keep (unsigned !ar od"iesire# unsigned dimensiune"re$ervata% Bentru de.instalarea lor, tre+uie sa refacem vectorii de intrerupere si sa eli+eram .ona de memorie in care este lasat codul pro'ramului re.ident, eventual folosind un utilitar de 'enul -E*EASE.E)E.

Secventa de cod din enunt, citeste o adresa de memorie in varia+ila <se'>. =n continuare se eli+erea.a memoria de la adresa citita. (aca am introdus adresa unui +loc de memorie care a fost alocat in preala+il, eventual cu functia C <malloc>, atunci secventa va eli+era acel +loc. ?entione. ca nu am 'asit in lim+aEul C functia <free2+locG>, in schim+ functia <free> se 'aseste. Exercitiul , : Lunctia <malloc> se foloseste pentru alocarea unui +loc de memorie de dimensiune sta+ilita pentru o varia+ila dintr-un pro'ram. Antetul ei este / void &mallo (si$e"t si$e%' Brin apelul acestei functii, un +loc de dimensiune <si.e>, aflat in memoria li+era (heap), este alocat pentru varia+ila dorita. =ata un e emplu de folosire a acestei functii / #include <stdio.h> #include <strin'.h> #include <alloc.h> #include <process.h> int main(void) { char Mstr# 6M allocate memorC for strin' M6 I

if ((str $ (char M) malloc(!%)) $$ @P**) { printf("@ot enou'h memorC to allocate +uffer"n")# e it(!)# 6M terminate pro'ram if out of memorC M6 : 6M copC "Hello" into strin' M6 strcpC(str, "Hello")# 6M displaC strin' M6 printf("Strin' is 0s"n", str)# 6M free memorC M6 free(str)# return %# : Lunctia complementara functiei <malloc> este functia <free> prin care eli+eram memoria alocata. Exercitiul % : Lunctia <allocmem>, aloca un +loc de memorie cu header de !4D. Antetul functiei este / int allo mem(unsigned si$e# unsigned &segp%' Cei !4D din antetul +locului sunt folositi astfel / octetul % / este Q?Q sau QRQ octetii ! si & / repre.inta adresa de se'ment a +locului alocat (%%%% daca +locul a fost eli+erat) octetii I si F / repre.inta lun'imea +locului in multiplii de !4 octeti octetii J - !J / neutili.ati Barametrii functiei sunt folositi astfel / si.e / dimensiunea +locului alocat (numar de 'rupari de !4+) se'p / pointer catre se'mentul alocat E emplu de folosire a functiei <allocmem> / #include <stdio.h> #include <conio.h> ;oid main(void) { =nt result $ %# Pnsi'ned int Mse'p $ @P**# Pnsi'ned se'2si.e $ !4# -esult $ allocmem(se'2si.e,se'p)# =f (result 8$ -!) Brintf(<Alocare reusita8"n>) Else Brintf(<Alocare esuata8"n>)# Lree(se'p)# F

: Exercitiul - : Aducem in discutie conectarea cu <memorie duala> in ca.ul sistemelor multiprocesor, in care procesoarele componente ale sistemului tre+uie sa comunice pentru a indeplini functia destinata. (e e emplu un procesor poate scrie la o anumita adresa a cipului de memorie, si la alt tact, alt procesor poate citi si interpreta data inscrisa la adresa respectiva. =n fi'ura din enunt rolul semnalelor fi'urate este urmatorul / Avem doua procesoare care impart +locul de memorie. Bentru a evita conflictele (scrierea la acelasi tact a unei adrese de catre am+ele procesoare, scrierea si citirea pe acelasi tact, etc), avem nevoie de o <lo'ica de control>. *o'ica de control / DusC !6 - <Spune> procesorului ! ca nu poate accesa memoria. DusC &6 - <Spune> procesorului & ca nu poate accesa memoria. Selectie S -epre.inta comanda multiple oarelor din fi'ura. Astfel nu vom avea pe ma'istralele de date, adrese, 7rite ena+le si cip select decat semnal de la un sin'ur procesor. Semnalele Brocesoarelor / A(-! S Adresa pe care doreste sa o accese.e B! (AAA! S (ata pe care o inscrie B! la adresa A(-! sau pe care o citeste B! de la adresa A(-! TE!6 (Trite Ena+le) - -epre.inta modul de utili.are al memoriei de catre B! (! S citire, % S scriere) CS!6 (Cip Select) S Selectia cipului de memorie de catre B! Analo' A(-&, (AAA&, TE&6, CS&6 -(!6 , -(&6 - Sta+ilesc directia flu ului de date pe ma'istrala aferenta (de la memorie spre procesor sau de la procesor la memorie) Semnalele notate cu <6> lan'a ele sunt ne'ate. E / TE!6 $ Trite Ena+le @e'at (Ena+le cand TE! $ U%V) Exercitiul 1& : ?etoda de conectare cu impartirea <+us-urilor> repre.inta o metode de interconectare in care unul sau mai multe procesoare primesc controlul ma'istralei, prin mecanismul <+us S 'rant6reWuest>. Pnul din procesoare este <master> si 'estionea.a cererile de preluare a <+us-ului>. Li'ura din enunt repre.inta un sistem cu doua procesoare conectate la un +loc de memorie. Accesul la memorie se face prin mecansim de tip <+us S 'rant6reWuest>. E plicatia semnalelor / A, (, TE6, CS6 - Adresa, (ate, Trite Ena+le, Chip Select D-6 , D16 - Dus 1rant, Dus -eWuest. Be firul D-6, B& cere folosirea ma'istralei catre memorie. Be firul D16 B! comunica procesorului B& ca poate folosi +usul. -EA(X6 - Be aceasta intrare B& va sti ca a primit acces la +us. Dufferele au rolul de a <mentine> +itii de pe ma'istralele de adresa si date ale B&, pana cand acesta primeste acces la memorie. ?ultiple orul are rolul de a selecta procesorul care va trimite semnal la memorie. Dlocurile (C( au rolul de a 'enera semnalele de Chip Select. Ele primesc ca intrare adresa care va fi citita sau scrisa din memorie si (C( calculea.a cipul care contine adresa respectiva. (C( $ (ecoder Exercitiul 11 : J

=ntreruperile de procesor, sunt utili.ate cu scop de sincroni.are atunci cand avem, de e emplu, un sistem cu un procesor ?aster si unul sau mai multe procesoare slave. Spre e emplu sa .icem ca avem un procesor ?aster, si un procesor Slave cu rolul de a prelua din operatiile pe care le face ?aster-ul. Avem un pro'ram in care procesorul ? se ocupa cu citirea datelor si procesorul S le va procesa dupa care le va transmite inapoi pentru o procesare ulterioara, lui ?. Avem nevoie de un mecanism prin care tre+uie ca S sa il anunte pe ? despre starea in care se afla si invers. Bentru aceasta se folosesc intreruperile. Brocesorul ? / Lla' ? <$ U%V (?asterul este ocupat) - =ntrerupere Breia 9peran.i Efectuea.a operatii asupra lor. Scrie in memoria inpartita de catre ? si S operan.ii pentru operatiile care vor fi efectuate de S. Lla' ? <$ U!V (?asterul a terminat procesarea si S va putea efectua operatii) - =ntrerupere Asteapta pana cand (Lla' S $ U!V) S adica S a terminat de efectuat operatiile Lla' S <$ U%V S adica S poate incepe asteptarea unor noi comen.i E tra'erea si prelucrarea re.ultatelor S Brocesorul S / Lla' S $ U%V Asteapta pana cand Lla' ? $ U!V Citeste operan.ii din memoria comuna Efectuea.a operatiile. Lla' S $ U!V S *ansarea unei intreruperi =n conclu.ie prin intreruperile 'enerate de fla'uri, putem sa sincroni.am cele & procesoare. AvantaEul este ca nu tre+uie sa reali.am sisteme comple e de impartire a memoriei sau a DPS-ului. Exercitiul 12 : Sectiunea de defineuri nu repre.inta importanta. Bentru schema din fi'ura, prima linie de cod, scrie in portul cu id-ul % &D, valoarea %. Brin aceasta instructiune se face o cerere de +us (+us-reWuest), deoarece si conform e plicatiei din schema D- e activ pe %. (aca studiem +locul SAP si consideram intrarea dinspre portul sistemului, ?6=9, atunci cand aceasta e %, re.ultatul +locului va fo tot % deoarece intrarile A % ... Y au fi'urate valorile. (eci E va fi %, adica activa. =n acest ca. reali.am Dus -eWuest. A doua linie de cod aloca o adresa pentru un pointer de tip far (un pointer in alt se'ment de memorie decat cel in care rulea.a pro'ramul), in se'mentul % !%%% la offsetul % !%% de dimensiunea unui char (!D). A treia linie de cod scrie un caracter la adresa alocata. A patra linie de cod scrie, modifica iesirea +locului SAP in !, deci E va fi !, deci inactiv si prin aceasta semnalul de D-6 va fi inactiv, adica vom eli+era ma'istrala.

=n conclu.ie secventa de fata cere accesul la o ma'istrala de memorie, scrie !D la o adresa data (presupunand ca si primeste accesul) si dupa care eli+erea.a acesul la ma'istrala. (A se vedea e emplele din *I dar cat mai adaptate la schema de fata). Exercitiul 1) : Lormatarea discurilor are rolul de a le initiali.a pentru folosire. E ista & tipuri de formatare / *o7 *evel Lormat si Hi'h *evel Lormat. 4

**L / -epre.inta impartirea discului in piste si sectoare. Be un sector se pot stoca J!&ZD de data. 9 pista contine mai multe sectoare. (e e emplu un LloppC (isG cu capacitate de !.FF?+ si o dimensiune de I.JVV e impartit in !4% piste a cate !3 sectoare. =n pre.ent formatarea *o7 *evel nu poate fi facuta de catre utili.ator ci este direct facuta de catre producator. Bentru a fi totusi aproape de **L, formatarea discurilor inseamna scrierea de +iti U%V lo'ic pe toata suprafata discului. H*L / -epre.inta instalarea unui file sCstem 'ol si unui sector de +oot. =n cele mai multe ca.uri, formatarea presupune si verificarea inte'ritatii discului si verificarea de erori. Bentru formatare se foloseste comanda dos <format>.

Exercitiul 1* : Bartitionarea H(-ului repre.inta impartirea capacitatii de stocare in mai multe parti, creaind astfel mai multe disGuri virtuale. Be fiecare partitie se instalea.a un <filesCstem> care repre.inta descrierea sistemului de aranEare si stocare al fisierelor de pe partitia respectiva. AvantaEele partitionarii sunt destul de multe / Aimp de acces mai rapid deoarece avand mai multe discuri virtuale, LAA-urile (Lile Allocation Aa+le) atasate partitiilor vor vi mai mici si vom putea sa le parcur'em mai repede. Butem separa fisierele utili.atorului de cele critice pentru sistemul de operare. Butem or'ani.a mai +ine datele de pe hard-disG. Butem avea mai multe sisteme de operare instalate pe diferite partitiii. Butem sa folosim partitii separate pentru memorii virtuale(s7ap files), etcK

E ista utilitare speciale pentru mana'ementul partitionarii unui H( (E / Bartition ?a'ic, Bartition (octor, etcK) Exercitiul 1+ : Lra'mentarea unui disc este practic consecinta folosirii acestuia. Scrierea si citirea unui fisier se face trecand prin toate locatiile indicate in Lile Allocation Aa+le. Atunci cand ster'em o data de pe disc, practic putem scrie alta informatie in locul respectiv. Asa se intampla ca de multe ori aEun'em sa avem un fisier scris fra'mentat, in sensul ca +itii sai nu sunt scrisi in ordine pe disc ci in locurile li+ere. Bentru a citi acel fisier capul de citire6scriere tre+uie sa sara prin locurile unde el este stocat. Spunem in acest ca. ca discul este fra'mentat. Lra'mentarea incetineste citirea si scrierea pe acel disc si de aceea avem nevoie de o metoda de a rearanEa continutul discului, care se numeste defra'mentare, care se poate lansa folosind utilitarele sistemului de operare. Exercitiul 1' : Bartea de declaratii este evidenta. Brima linie de cod de dupa partea declarativa, crea.a un director, <@P?E>, in directorul in care rulam e ecuta+ilul 'enerat. A doua linie de cod deschide un fisier te t, <test.t t>, in mod scriere si citire. A treia linie de cod citeste continutul fisierului in D, intr-un +uffer definit si stochea.a numarul de octeti cititi prin referinta la varia+ila <count>. A patra linie de cod inchide fisierul. A cincea linie de cod afisea.a continutul citit su+ forma unui sir de caractere. A sasea linie de cod muta directorul curent cu un nivel mai sus. A saptea linie de cod incearca sa stear'a directorul creat dar nu poate deoarece ne-am mutat cu un nivel mai sus unde nu il mai 'asim.

Exercitiul 1, : Y

Bartea declarativa este evidenta. Cream un director in cel curent, <@P?E> Cream un fisier <E emplu.t t>, cu permisiuni de accesare normale. Pmplem &% de locatii de memorie al +ufferului de !%% de locatii definit, cu valorile numerelor pare de la % la F%. Scriem continutul +ufferului in fisier si stocam prin referinta la varia+ila <count> numarul de octeti scrisi. =nchidem fisierul creat.

=n conclu.ie secventa crea.a un fisier de tip te t in care vom avea urmatorul continut / %&F43......I3(u))*+,-(u))*+.-..........(u))*//Memoria cache Sa presupunem ca memoria principala utili.ata de sistem e de &J4ZD. &J4ZD $ &N!3D. (eci o adresa va fi repre.entata pe !3+, spatiul fiind %%%%% H -> ILLLL H. ?emoria cache utili.ata o vom presupune ca fiind de &ZD $ &N!! D. ;om ale'e dimensiunea unui +loc de memorie cache de !4D $> Y+iti pentru adresarea +locului din cache. F+iti pentru adresarea octetului in cadrul +locului. (aca ale'em dimensiunea +locului in memoria principala de !4D, atunci vom avea un +loc din cache corespun.ator la !&3 +locuri din memoria principala deci vor ramane Y +iti din adresa fi.ica pentru adresarea +locului corespun.ator. Exercitiul 1% : Considerand e plicatiile de mai sus, sa .icem ca vrem sa citim un octet din memoria principala. =n acest ca. procesorul va dori sa accese.e o adresa de !3 +iti din memoria de &J4ZD. Aceasta adresa este mai intai trimisa memoriei cache. Brimii Y+iti ai adresei (ta') constituie adresa (inde ul) in memoria cache. Acest ta' repre.inta o adresa in memoria cache (inde ). (aca cei Y +iti aferenti +locului din adresa fi.ica nu sunt aceiasi ca la adresa ta'ului, inseamna ca nu e ista corespondenta intre acel ta' si ?B si deci ta'ul va fi selectat pentru o reamplasare a informatiei din el, conform politicilor de reamplasare implementate sistemului (*-P,L=L9,*=L9,-A@(). Exercitiul 1- : =n ca.ul memoriei asociative ta'ul din memoria cache are !F +iti, adica e act cat numarul de +locuri din memoria principala. (eci fiecarui +loc din memoria principala ii va corespunde un ta'. (aca dorim sa citim un octet din memoria principala primii !F +iti ai adresei fi.ice ii vom cauta printre ta'urile memoriei cache. (aca nu 'asim acel ta' vom citi direct din memoria principala si ta'ul cautat va fi adus in memoria cache in urma poloticii de reamplasare implementata. (aca ta'ul este 'asit, atunci din memoria cache se e tra'e octetul aflat la inde ul <cuvant> din adresa fi.ica furni.ata. Exercitiul 2& : =n ca.ul memoriei asociative pe seturi, se foloseste mecanismul de mapare directa pentru accesul in set si maparea asociativa intra set. (aca dorim sa citim un octet din memorie, selectam +itii 4 -> !! din adresa fi.ica pentru a adresa setul corespun.ator din memoria cache, si cautam in set ta'ul compus din primii 3 +iti. (aca nu 'asim acel ta' vom citi octetul direct din memoria principala si vom utili.a metodele de reamplasare implementate. (aca 'asim ta'ul, vom citi octetul de la offsetul <cuvant> din +locul memoriei cache. Exercitiul 21 :

-ata de pierderi repre.inta raportul dintre numarul de incercari esuate de a 'asi informatia in memoria cache si numarul de incercari totale. Lactorii de care depinde aceasta rata precum si felul in care o influentea.a sunt / ?etoda de mapare. Astfel maparea directa pre.inta o rata de pierderi mai mare decat maparea asociativa pe seturi care la randul ei pre.inta o rata de pierderi mai mare decat memoria complet asociativa. Boliticile de reamplasare folosite influentea.a rata de pierderi a intre'ului sistem. 1radul de asociativitate in ca.ul maparii pe seturi influentea.a rata de pierderi. Astfel daca avem cat mai multe seturi care sunt asociate cator mai multe +locuri vom avea o rata de pierderi mai mica. (imensiunea +locului din memorii influentea.a rata de pierderi incat cu cat avem mai putine +locuri cu atat accesul la ele prin memoria este mai pro+a+il. -ata de pierderi este influentata si de dimensiunea memoriei cache, astfel incat unei memorii cache mai mare ii corespunde o rata de pierderi mai mica. 1radul de locali.are specificat in platforma este doar un parametru de simulare si deci nu pot spune ca afectea.a rata de pierderi a sistemului.