[so] multe intrebari:)

Andreea b andreea_rbd87 at yahoo.com
Mon Apr 19 19:36:36 EEST 2010


Am ceva intrebari, imi cer scuze daca intrebarile sunt "de baza" sau daca ar trebui sa stiu raspunsurile. Poate se mai lumineaza si altii :)
1. Am incercat sa imi dau cu presupusul in privinta exercitiului de mai jos, dar as vrea sa fiu sigura. Cum se gandeste?
 Un sistem fără TLB și cache accesează memoria folosind
paginare neierarhică. Presupunând că timpul de acces la
memorie este de 5ns și că o pagină de memorie ocupă 4KB, cât
durează operațiile de mai jos? (sizeof(char) = 1)
char a[4096 * 16];
char b[4096 * 16];
/* init a[i] */
for (i = 0; i < 4096 * 16; i += 32) {
b[i] = a[4096* 16 – i -1];
}
2. Care e diferenta intre o memorie ierarhica si una neierarhica? Am inteles din linkul[1] rationamentul de la memoria ierarhica, dar nu si de ce pentru cea neierarhica se ocupa 4MB.
Date
– Spațiu virtual de adresare de 32 de biți
– Pagina de 4K
– Spațiul virtual al unui proces
● [.text 1020 pagini]
● [.data 4 pagini]
● [4096 pagini spatiu nemapat]
● [.stack 16 pagini]
– O pagină din tabela de pagini conține 1024 de intrări
● Cât spațiu ocupă tabela de pagini în cazul folosirii:
– paginării neierarhice
– paginării ierarhice pe două niveluri (10 biți, 10 biți, 12 biți)
3. In cele din urma ce depinde de ce si in ce proportii ?De la hard, memorie principala, swap, cache, TLB, tabela de pagini, pagini, magistrale si toate sub-sub-organizarile posibile :)
exemplu din curs: Dimensiunea paginii (virtuale și fizice) este dată de hardware
(512B – 4MB) (huge pages - 256MB)Cum e data?
4. Presupunand ca mi se da un cod, cum imi dau seama cand are loc un page fault? De cate ori scriu ceva intr-o pagina noua?
int *p, i, status;
p = (int *) mmap (NULL, sizeof(int) * 1024 * 1024, PROT_READ|PROT_WRITE, MAP_PRIVATE, 0, 0);
for (i = 0; i < 1024; i++)
p[i*1024] = i;
switch(fork()) {
case -1: /handle error */
case 0: /* child process */
for (i = 0; i < 512; i++)
printf(“p[%d] = %d\n”, i*1024, p[i*1024]);
for (i = 512; i < 1024; i++)
p[i*1024] = 1024–i;
exit(EXIT_SUCCESS);
break;
default:
break;
}
wait (&status);
for (i = 0; i < 1024; i++)
p[i*1024] = i;

5. Date
– TLB hit rate: 75%
– Timp de acces la memorie: 60ns
– Timp de acces la TLB: 10ns
● Care este media timpului de acces la memorie?
75% * 10ns + 25% * 60ns?
6. Dacă timpul copierii unei pagini este 1ms, ignorând timpul
necesar altor operații (crearea de structuri interne, alocarea de
pid-uri, copierea tabelelor de pagini etc.), care este timpul
necesar apelului fork pe un proces cu un spațiu de adresă de
100MB? (pe un sistem de tip UNIX modern, cu dimensiunea unei
pagini de 4K)

Dat fiind ca se copiaza spatiul de adresa al parintelui pt procesul copil, iar resursele comune se partajeaza,   100MB/4K * 1ms ? Sau e o capcana ? :) 
7. Cand poate avea loc un context-switch in timpul rularii unui proces pe un sistem cu kernel preemptiv(la ce operatii)? 
8. In cazul unui context switch, ce se schimba ?
In afara de faptul TLB isi goleste o mare parte din intrari si registrele sunt schimbate total(puse pe stiva).
Multumesc anticipat :)
P.S: La linkul [2] e un rezumat al catorva capitole din OSC, poate cineva o sa-l gaseasca folositor.
[1] http://cursuri.cs.pub.ro/lurker/message/20090414.175317.566b0da5.en.html[2] http://dl.transfer.ro/transfer_ro-19apr-f56360ebe7.zip  


      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/lurker/list/so.html/attachments/20100419/3681dd17/attachment.htm>


More information about the so mailing list