Memoria virtuala

Download Report

Transcript Memoria virtuala

Conţinut
• Memoria – tipuri de memorie
• Memoria virtuală
• Algoritmi de inter-schimbare a paginilor în cazul MV
1
O ierarhie a memoriei
Regiştrii UCP
Cache
Regiştrii UCP
Dimensiune
Viteza
Dimensiuni maxime
Bandwith (MB/sec)
Administrare
Memoria
principală
Magistrala de memorie
200 B
5 ns
1 KB (CMOS sau
BiCMOS)
4000-32000
Compilator
Cache
Magistrala I/E
Dispozitive
I/E
Memoria principală Dispozitive I/E
>2 MB
10-15 ns
>1 GB
60-100 ns
>2 GB
5 ms
>9 MB SRAM
800-5000
Hardware
24 GB DRAM
400-2000
SO
2 TB
4-32
SO/utilizator
2
Tipuri de memorie
Creşte preţul
Regiştrii UCP
Cache
Magistrala de memorie
Memoria
principală
Magistrala I/E
Dispozitive
I/E
Creşte dimensiunea/timpul de acces
3
Memoria cache
• Tip de memorie mică, ultra-rapidă, aproape de UCP, ce conţine cele mai
recent accesate date sau instrucţiuni de cod
– “Cache hit”
– “Cache miss” (un bloc de dimensiune fixă de date ce conţine datele necesare
sunt extrase din memoria principală şi introduse în cache)
• Fenomenul de “localizare temporală” ne spune că este foarte probabil să
avem nevoie de aceste date curând, deci el este plasat în cache unde poate fi
accesat rapid
• Timpul de răspuns necesar pentru un “cache miss” depinde atât de latenţa
memoriei cât şi de bandwith – ce determină timpul în care va fi citit întregul
bloc. Un “cache miss” administrat hardware va determina de regulă o pauză
în funcţionarea CPU – până în momentul în care sunt disponibile datele.
4
Memoria cache şi controller-ul de memorie cache
UCP
Unitatea de control cache
UCC
512 KB SRAM
cache
Timp de acces: 10 ns
Magistrala de sistem
Subsistemul de
Intrare/Ieşire
512 MB DRAM
Memoria principală
Timp de acces: 60 ns
5
Unitatea de management a memoriei virtuale
UCP
UMM
Unitatea de management
a memoriei
Memoria SRAM
cache
Magistrala de sistem
Subsistemul de
Intrare/Ieşire
Memoria principală
DRAM
6
Magistrala de sistem
Procesor
Magistrala de sistem
Slot
Slot
Slot
Slot
Slot
7
Magistrala de sistem - echipamente periferice
Procesor
Magistrala de sistem
Slot
Slot
Slot
Memorie
Interfaţă de
monitor
Interfaţă de
floppy-disc
Slot
Interfaţă de
CD-ROM
Slot
Interfaţă de
imprimantă
8
Execuţie concurenţială
Programul 1
Execuţie
Execuţie Aşteptare
Aşteptare
Programul 2
Aşteptare
Execuţie
Ex Aşteptare
Aşteptare
Programul 3
Aşteptare
Execuţie
Aşteptare
Execuţie
9
Memoria virtuală
Memoria virtuală
Reprezintă separarea conceptuală a memoriei logice
disponibile pentru aplicaţii faţă de memoria fizică. În acest mod
putem avea o memorie virtuală de dimensiuni mari chiar cu o
memorie fizică de dimensiuni reduse.
Pagini de memorie
Memoria virtuală
Harta memoriei
(memory map)
Memoria fizică
Disk
10
Memoria virtuală
• În acelaşi sens, nu toate obiectele (date sau instrucţiuni) pot fi la un
moment dat în memoria principală. Dacă avem memorie virtuală, atunci
unele dintre obiecte se pot afla pe disc. Spaţiul de adresare este de regulă
împărţit în blocuri de lungime fixă – pagini.
• La un moment dat, paginile se află fie în memoria principală, fie pe disc
• Atunci când se cere un obiect care nu este în cache sau în memoria
principală, apare un “page-fault” – moment în care întreaga pagină este
mutată de pe disc în memoria principală. Aceste “page-fault” durează mai
mult şi atunci sunt controlate de software şi UCP nu face pauză.
• De regulă, UCP comută către alt task atunci când apare un acces la disc.
Memoria cache şi memoria principală au aceeaşi relaţie ca şi cea existentă
între memoria principală şi disc.
11
Memoria virtuală
• În orice moment, un calculator rulează mai multe procese, fiecare având
propriul spaţiu de adrese de memorie. Ar fi foarte costisitor să se dedice un
întreg spaţiu de adresare pentru fiecare proces, având în vedere că multe
dintre procese folosesc doar o mică parte a spaţiului propriu de adrese. A
apărut astfel necesitatea partajării unei părţi a memoriei între mai multe
procese.
• Acest procedeu poartă numele de “memorie virtuală” – memoria fizică se
divide în blocuri care sunt alocate diferitelor procese.
• Inerentă unei astfel de abordări este o schemă de protecţie ce restricţionează
accesul proceselor la blocuri ce aparţin altor procese. Majoritatea formelor
de memorie virtuală reduc, de asemenea, timpul de pornire a unui program,
deoarece nu tot codul sau datele trebuie să fie deja în memoria fizică înainte
ca programul să înceapă.
12
Memoria virtuală
• Nu însă partajarea între procese a memoriei este adevăratul motiv pentru
care s-a inventat memoria virtuală. Dacă un program devine prea mare
pentru memoria fizică, este sarcina programatorului să îl facă să încapă în ea.
Au rezultate acele suprapuneri (overlay).
• Blocurile de memorie în cazul memoriei virtuale se numesc pagini sau
segmente. UCP foloseşte adrese virtuale ce sunt translatate (hardware cât şi
software) în adrese fizice ce accesează memoria principală. Acest procedeu
se numeşte procedeul de mapare a memoriei sau de translatare a adreselor.
Astăzi memoria virtuală intervine la nivel de memorie principală şi disc
magnetic.
13
Memoria virtuală
Cererea de pagini (demand paging)
Atunci când o pagină de memorie este referită (fie că este vorba despre cod sau
date) şi ea nu se află în memorie atunci ea este adusă de pe disc şi
se re-execută instrucţiunea
Programul A
Programul B
Memoria fizică
Hard disc
14
Memoria virtuală
Nr paginii
Regula spune că cererile de pagini din
memoria externă (page faults) se produc
rareori.
Tabela de pagini necesită prezenţa unui bit
“rezident" care ne arată dacă pagina
este sau nu în memorie. Uneori se
utilizează termenul "valid" pentru a
indica rezidenţa în memorie. O pagină
“invalidă" este astfel o pagină
nerezidentă sau care are o adresă
ilegală.
Este mai logic să avem doi biţi - unul ne
indică faptul că pagina este validă iar
cel de-al doilea ne arată dacă pagina
este sau nu în memorie.
Bit valid/invalid
1
1
1
1
0
Tabela de pagini

0
Nr paginii
Rezident Bit valid/invalid
1
0
1
0
15
Memoria virtuală
Paşii ce se urmăresc în cazul unui “page fault”
1. Procesul necesită o pagină ce nu este rezidentă în memorie.
2. Verifică în tabela de pagini dacă referinţa de memorie este validă sau nu.
3. Dacă este validă dar pagina nu este rezidentă, se încearcă obţinerea acesteia din
memoria secundară.
4. Se caută şi se alocă un cadru (frame) liber (o pagină de memorie fizică neutilizată
în prezent – poate fi necesară eliberarea unei pagini de memorie).
5. Se planifică o operaţie de disc pentru a se citi acea pagină din memoria
secundară în cadrul nou alocat.
6. După scrierea paginii în memorie se modifică tabela de pagini - pagina este acum
rezidentă.
7. Se reporneşte instrucţiunea ce a generat page fault.
16
Memoria virtuală
Sistemul de
Operare
3
Obţinerea paginii
din memoria
secundară
2
Referinţă la tabela
de pagini
1
Trap
Se încarcă P
6
Repetarea
instrucţiunii
Tabela de pagini
5
Refacerea tabelei
de pagini
Paşii administrării unui “page fault”
Cadru liber
de memorie
Memoria fizică
4
Copierea paginii
în memoria
principală
17
Memoria virtuală – înlocuirea paginilor
În cazul supra-alocării memoriei trebuie să renunţăm la ceva deja existent în memorie.
Supra-alocarea apare atunci când programele au nevoie de mai multe pagini de
memorie decât cele existente fizic.
Metoda de abordare: Dacă nici o pagină fizică nu este liberă, se caută una care nu este
utilizată la momentul respectiv şi se eliberează, urmărind următorii paşi:
1. Se caută pagina pe disc.
2. Se caută un cadru liber.
a. Dacă există, se foloseşte
b. Altfel, se selectează o pagină “victimă”
c. Se scrie pagina “victimă” pe disc.
3. Se citeşte noua pagină în cadrul eliberat. Se modifică
tabela de pagini.
4. Se reporneşte procesul.
18
Memoria virtuală – înlocuirea paginilor
Bit valid/invalid
Pagina
Bitul se modifică
în “invalid”
p1
2
p1
p2
v
i
Tabela de pagini
Copierea paginii
“victimă” pe disc
1
Victima
SWAP
p2
4
3
Bitul se modifică
în “valid”
Memoria fizică
Copierea paginii
necesare de pe
disc în memorie
Funcţionarea mecanismului de înlocuire a paginilor
19
Memoria virtuală – înlocuirea paginilor
Algoritmi de înlocuire a paginilor
În momentul supra-alocării putem fie interschimba pagini de pe disc, fie supra-scrie
anumite pagini. Ce pagini vor fi înlocuite?- pentru a minimiza numărul de page faults.
Exemplul unui şir de referinţă pentru pagini de memorie ce vor fi executate:
Şir de referinţă: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
FIFO
1
5
4
Uşor de implementat dpdv conceptual.
2
1
5
Se poate folosi fie un “time-stamp”
pentru pagini, fie o organizare într-o
coadă. (Coada reprezintă implementarea
cea mai uşoară).
3
2
4
3
10 “page faults”
Şir de referinţă: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
20
Memoria virtuală –înlocuirea paginilor
Înlocuirea optimă
• Reprezintă o politică de înlocuire a paginilor care au cea mai mică rată
“page fault”.
• Algoritmul: se înlocuieşte pagina care nu va fi utilizată pentru cea mai
lungă perioadă de timp.
• Practic imposibil de implementat.
1
4
2
6 “page faults”
3
4
5
Şir de referinţă: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
21
Memoria virtuală – înlocuirea paginilor
Metoda LEAST RECENTLY USED ( LRU ) – “Cea mai puţin recent folosită pagină”
– Se înlocuieşte pagina care nu a fost utilizată pentru cea mai mare perioadă de timp.
– Rezultatele sunt bune; dificultatea apare la implementare.
– Variante de implementare:
• ”Time stamp” pentru pagini - înregistrarea ultimei utilizări.
• Stivă de pagini – se scot paginile utilizate şi se introduc în vârful stivei
Ambele metode necesită facilităţi hardware (trebuie făcută reactualizare după fiecare
instrucţiune), de aceea este rar utilizată în practică.
1
5
2
8 “page faults”
3
5
4
3
4
Şirul de referinţă: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
22