Universitatea Tehnica „Gh.

Asachi” Facultatea de Automatica si Calculatoare

Sisteme de Timp Real

Apostol George-Lucian Gr. 1405A

1

La citire operatia se va efectua doar pe cilindrul mai apropiat de pozitia curenta Cerinte: . .media pentru repartiţia normală: 20 . Se introduc doua constrangeri ce atenuaza efectele metodei: .discul magnetic are fiabilitateea cea mai redusa din sistem. Deoarece prezinta subansamble mecanice.iar datele sunt memorate pe ambele jumatati de disc. .33 .numărul de sectoare: 255 . .Comentati avantajele implementarii acestei tehnici de redundanta pentru securitatea datelor memorate pe disc.Evaluarea influentei solutiei de toleranta la defecte asupra timpului mediu de acces la disc . De aceea.perioada de rotaţie: 8. din pricina fragmentării datele de pe disc se extind în permanenţă şi în a doua jumătate a discului.pentru reducerea riscului de pierdere a datelor se propune urmatoarea solutie: domeniul adreselor logice se reduce la jumatatate.numărul de cilindri: 56460 . Date de intrare: . Rezolvare: Varianta clasică Chiar dacă volumul datelor utile nu depăşeşte jumătate din capacitatea discului.numărul de simulări : 1000000 . . unde C reprezinta numarul de cilindri. 2 .La scriere operatia se va efectua pe cilindrul mai apropiat de pozitia curenta a capetelor de citire/scriere si apoi se continua pe cilindrul pereche . Se porneste de la presupunerea ca jumatate din capacitatea discului asigura necesarul de spatiu de stocare.Problema: Fie un sistem tranzactional ce contine o unitate de stocare de capacitate C.pe cilindri pereche.

777 Codul sursă: #include <iostream> #include <stdlib. } int main() 3 ..4 .i<=12. } double timpPoz(double n){ if (n==1) return 1.h> using namespace std.2+0.double sigma){ double r.h> #include <cmath> #include <conio. }while(r==0). } return (-1)*log(u)/lam.i++) { do{ r=(double)rand()/RAND_MAX. } return m+sigma*(sum-6).2.065*sqrt(abs(n-1)). for(int i=1. sum+=r. Valori obţinute: Lambda 2*ln(5)/C 2*ln(10)/C Fiabilitate 80% 90% Timp mediu de acces 22. else return 1.7759 18.sigma pentru repartiţia normală: 5. } double GenExp(double lam){ double u=0.00052*(n-1)+0. while (u==0){ u=(double)rand()/RAND_MAX. double GenGauss(int m. double sum=0.

//marimea blocului de date double c.4 . //lambda double T=8. . //numarul de sectoare double m=20.perioada de rotaţie: 8. //suma timpilor de acces double Tma_c=0.i++) { b=GenGauss(m. } Tma_c=STa/NS.media pentru repartiţia normală: 20 . cout<<Tma_c<<endl. ) .4. . //valoarea medie repartitie normala double sigma=5.33.numărul de cilindri: 56460 . //numarul de cilindri capacitatea double ns=255. Date de intrare : . c=GenExp(lam). frecvenţa de apariţie a adreselor de cilindru se uniformizează şi ca urmare putem considera pentru acest caz o repartiţie uniformă. . . //numarul de simulari double C=56460. STa+=b*T/ns. //perioada rotatie double b. _getch().i<=NS. 4 . După o anumită perioada de funcţionare.33 . //timpul mediu de acces double i. lam=2*log((double)10)/C. //pozitia curenta double STa=0. //adresa double pc=0.numărul de simulări : 1000000 . STa+=T/2. for(i=1. return 0. } Varianta modificată Adresele logice sunt restrânse la domeniul [o. . //valoare sigma double lam. pc=c. STa+=timpPoz(abs(pc-c)).numărul de sectoare: 255 .{ double NS=1000000.sigma pentru repartiţia normală: 5.sigma).

0736 16.889 16.h> #include <cmath> #include <conio.3258 16.811 16.8022 15.0612 15.4375 17.7601 20.977 16.2904 17.5169 16.213 17.5084 18.Valori obţinute: Raport R/W 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 25 30 40 60 100 Codul sursă: #include <iostream> #include <stdlib.4811 26.h> using namespace std.0692 23.9014 19.5816 17.9731 17.3807 21.6641 19.5909 5 .double sigma){ Timpul mediu de acces 31.7633 17.8783 18.3194 18.1757 17. double GenGauss(int m.

sum+=r.60.i<=NS. }while(r==0).4.065*sqrt(abs(n-1)).15.double r. double sum=0.4). //tip operatie int RW[25]={1.5. } int main() { double NS=1000000. for(int k=0.33.40.12. //numarul de simulari double C=56460.3.i++) { if (i>NS/(RW[k]+1)) t=1. } double timpPoz(double n){ if (n==1) return 1.00052*(n-1)+0. //numarul de sectoare double m=20.18. } double GenC(double limit) { double u=(double)rand()/RAND_MAX.2. for(int i=1. double i.9. //perioada rotatie double b.k<25.25. //marimea blocului de date double c.17.5. return u*limit.10. else t=0.2.4.i<=12.8. b=GenGauss(20. //pozitia curenta double STa=0. } return m+sigma*(sum-6). //timpul mediu de acces double t.7. //suma timpilor de acces double Tma_dm=0. else return 1.i++) { do{ r=(double)rand()/RAND_MAX.19.6. //valoare sigma double T=8. if (t==0) { if (abs(pc-c)<abs(pc-(c+C/2))) 6 .20. //valoarea medie repartitie normala double sigma=5.13. //numarul de cilindri capacitatea double ns=255.k++) { for(i=1.30.16.100}. //adresa double pc=0.14. c=GenC(C/2).2+0.11.

STa+=b*T/ns. }else{ //a doua jumatate STa+=timpPoz(abs(pc-(c+C/2))). STa=0. }else{ //a doua jumatate STa+=timpPoz(abs(pc-(c+C/2))). } 7 . } }else{ if (abs(pc-c)<abs(pc-(c+C/2))) { //prima jumatate STa+=timpPoz(abs(pc-c)). } } } Tma_dm=STa/NS. //a doua jumatate STa+=timpPoz(C/2). STa+=b*T/ns. STa+=b*T/ns. STa+=T/2. return 0. pc=c+C/2. STa+=T/2. STa+=T/2. STa+=T/2. STa+=b*T/ns. } _getch(). STa+=b*T/ns. STa+=T/2. //prima jumatate STa+=timpPoz(C/2). STa+=T/2. STa+=b*T/ns. pc=c. pc=c. pc=c+C/2.{ //prima jumatata STa+=timpPoz(abs(pc-c)). cout<<"Timp mediu acces: "<<Tma_dm<<"\t R/W: " <<RW[k] <<endl.

In urma implementarii solutiilor atat in varianta clasica . defectandu-se mult mai repede. varianta disk-mirroring ramana cea mai buna solutie.cat si in a doua jumatate. Din punct de vedere al securitatii. Folosirea unui singur hard-disk asigura de asemenea un dezavantaj din punct de vedere al redundantei. 8 . deoarece datele sunt dublu memorate atat in prima. cat si in varianta disk-mirroring. Imbunatatirea se obtine datorita faptului ca pe masura ce creste numarul de citire in raport cu numarul de scrieri. implementarea aceasta fiind folosita de obicei la servere. Datorita citirilor si scrierilor consecutive creste gradul de uzura a hard-disk–ului a subansamblelor mecanice si a discului magnetic. se observa o imbunatatire a timpului de acces. capetele de citire/scriere au mai multe posibilitati de a alege pozitia cea mai apropiata de ele. deoarece asigura o siguranta din punct de vedere a datelor si vitezei de acces mult mai buna.

Sign up to vote on this title
UsefulNot useful