Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
1
Spomin
Poglavje 4
4.1 Osnovno delo s spominom4.2 Izmenjevanje 4.3 Virtualni spomin4.4 Algoritmi za zamenjavo strani4.5 Modeliranje algoritmov za zamenjavo strani4.6 Načrtovanje sistema za rokovanje s stranmi4.7 Implementacija4.8 Segmentacija
2
Modeliranje multiprogramiranja
Uporaba CPU kot funkcija števila procesov v spominu
Degree of multiprogramming
3
Analiza performans multiprogramskega sistema
• Prispetje in delovne zahteve za 4 opravila• Uporaba CPU za 1 – 4 posle z 80% I/O čakanje• Sekvenca dogodkov ko posel prispe in zaključi
– Številke pokažejo CPU čase poslov v vsakem intervalu
4
Rokovanje s spominom
• Idealno bi programer hotel imeti spomin, ki je:– velik– hiter– persistenten
• Hierarhija pomnilnika– Majhna količina hitrega in dragega spomina – vmesni
pomnilnik (cache) – Nekaj srednje hitrega pomnilnika, srednji cenovni razred– Velike količine počasnega in poceni spomina
• Upravljalnik pomnilnika ureja rokovanje s pomnilnikom
5
Abstrakcija: Fizični spomin
• Samo fizični sistem.– Veliki računalniki <1960, mini-računalniki
<1970, osebni računalniki <1980
• Program se je lahko izvajal samo znotraj celotnega spomina.– Ne moremo izvajati dva programa hkrati. – Razen ,če bi bili po področjih in bi si podajali
izvajanje.
6
Osnovno delo s spominomMonoprogramiranje brez zamenjevanja strani
Trije enostavni načini organizacije spomina- operacijski sistem z enim samim procesom
7
Multiprogramiranje s fiksnimi particijami
• Fiksne particije– Različne vhodne vrste za vsako particijo – Ena vhodna vrsta
9
Relokacija in razščita
• Ne moremo biti sigurni kam bo program naložen v spomin– Naslovi lokacij spremenljivk in rutin ne morejo biti absolutni– Moramo ostati izven particij drugih procesov
• Uporaba vrednosti osnova in meja– Naslovi lokacij so prišteti osnovi pri preslikavi na fizični naslov– Naslovi lokacij, ki so večje od meje vrnejo napako
10
Abstrakcija: Naslovni prostor
• Glavna problema:– Zaščita in relokacija– Relokacija programa ob nalaganju.
• Počasno in potratno
• Vsak proces ima svoj naslovni prostor– Kako kreirati iluzijo?
• Naslovni prostori– Telefonske številke, IPv4, Internetne domene.
11
Registra: osnova in meja
• Enostavna verzija dinamične relokacije– Rešitev za CDC 6600 -- 8088 Intel– Več programov gre v različne particije– JMP 28 --> JMP 16412
• Oba registra sta zaščitena– Dostopa samo OS– Več segmentov – več registrov osnova in meja
• Slaba lastnost– Vsako delo s spominom zahteva seštevanje in
primerjanje
12
Procesi v spominu
• Unix starta na začetku 40-60 procesov– Vsi ne gredo v spomin !– Sistemski procesi 5-10 MB– Uporabniški procesi 3-200 MB
• Dva splošna pristopa– Izmenjevanje– Virtualni spomin
13
Izmenjevanje (1)
Lokacija procesa v spominu se spremeni – Proces pride v spomin– Gre iz spomina
Črtkana področja so neuporabljen spomin
14
Izmenjevanje (2)
• Programi se izmenjujejo v spominu• V spominu ostanejo „luknje“
– Prazen prostor nastal zaradi izmenjevanja– Kompaktiranje prostora– Prepisovanje programov navzdol
• Rast segmentov– Samo kolikor je bilo predvideno– Sicer moramo najti drug prostor (luknjo) za
program
15
Izmenjevanje (2)
• Alokacija prostora za rastoči podatkovni segment • Alokacija prostora za rastoči sklad
16
Rokovanje s spominom preko bitnih nizov
• Del spomina s 5 procesi in 3 luknjami – Oznake za mere definirajo alokacijske enote– Črtkana področja so prosta
• Ustrezni bitni vektor• Ista informacija s seznamom
18
Iskanje praznega prostora
• Strategije1) Prvo ujemanje2) Naslednje ujemanje3) Najboljše ujemanje
● Počasnejše + 1 in 2 da boljše rezultate● Najslabše ujemanje ne da dobrih rezultatov
● Vodenje več seznamov● Karakteristične velikosti segmentov● Hitro ujemanje
19
Virtualni spomin
• VAX, 20 MB, #uporabniki > nekaj 10– Vista, 512 MB, 1 GB...
• Tehnika zamenjevanja – Program ima 1GB ??? Prepisovanje v spomin = 10s– Tehnika prekrivanja --> Uporabnik razdeli
program na dele, ki se prekrivajo v spominu
• Fotheringham, 1961– Virtualni spomin– Posplošitev ideje o osnovi/meji
20
Virtualni spomin (2)
• Ostranjevanje (paging)– Virtualni naslovni prostor / virtualni naslovi– Virtualni naslovni prostor je večji od fizičnega– MMU prestreže virtualni naslov in ga spremeni v
fizičnega
22
Ostranjevanje (2)
Razmerje med virtualnim naslovom in fizičnim naslovom, ki ga dobimo preko tabele strani.
23
Ostranjevanje (3)
• Organizacija pomnilnika za ostranjevanje – Virtualni spomin = strani– Fizični spomin = okvirji strani
• Tabela strani– Prisotna/odsotna stran– Napaka strani– Indeks TS = začetnih k bitov
25
Tabele strani (2)
• Starejša arhitektura– 16 bitni naslovni prostor– Velikost strani = 4 KB – 4 biti = stran + 12 bitov odmik znotraj strani
• Številka virtualne stani je indeks tabele strani– Iz zapisa TS pridemo do okvirja
• Preslikava iz virtualne strani v okvirje !
27
Pohitritev ostranjevanja
• Preslikava med virtualnim in fizičnim spominom mora biti hitra– Več dostopov do strani na inštrukcijo– Inštrukcija = 1ns ==> dostop do strani 0.2 ns
• Tabela strani lahko zelo zraste– 32 bitni naslov ==> 106 virtualnih strani ==>106
zapisov TS– 64 bitni naslov ==> 252 = 4.503.599.627.370.496– Tabela ne gre v spomin– Rešitve ?
28
Pohitritev ostranjevanja (2)
• Možnosti – dva ekstrema– Celotna tabela je realizirana s strojno opremo
• Neizvedljivo vendar hiter odziv
– Celotna tabela je v spominu• Prepočasno
– Ena inštrukcija = branje inštrukcij + dostop do TS (1-2X)
• Nobeden nebi uporabljal ostranjevanja!
• Začetna točka: TS je v spominu– Praktična ugotovitev
• Večina delov programa referencira manjšo množico strani in ne obratno !
• TBL – majhna naprava vgrajena v MMU
29
Pohitritev ostranjevanja (3)
• TBL – Translation Lookaside Buffer– Asociativni spomin– Redko več kot 64 zapisov
• Struktura– V uporabi / ni v uporabi– Zaščita– Virtualna stran spomina– Umazan bit– Številka okvirja
32
Tabele strani (1)
32 bitni naslov z 2 nivojsko tabelo strani
Second-level page tables
Top-level page table
33
Tabele strani (2)
• Skrivnost dela z velikimi tabelami strani je v tem, da ne hranimo celotne tabele v pomnilniku.– 10 bitov/prvi nivo ==> 1024 besed– Program: 4MB CS, 4MB DS, 4MB SS– Potrebujemo 4 x 1024 besed za vse tabele
• Skupaj je to 4K besed !
34
Invertirane tabele strani (1)
• Hierarhična predstavitev je OK za 32 bitni naslovni prostor– Problem se pojavi s 64 bitnim naslovnim prostorom– Imamo 252 zapisov tabele = 4.503.599.627.370.496
Če je vsak zapis 8B ==> dobimo 30 miljonov GB
• Invertirane tabele– Imamo en zapis na okvir (ne na virtualni blok)– 64-bitni virt.naslov, 4KB stran, 1GB RAM,
invertirana tabela potrebuje 262,144 zapisov.–
35
Invertirane tabele strani (2)
• Problem z iskanjem virt.strani n procesa p– Ne moremo uporabiti n kot indeks !– Iskanje po tabeli za vsak dostop do spomina ?
• Rešitev: uporaba TBL + razpršilne funkcije– Pogosto iskane strani so v TBL (asociativni
dostop)– Razpršilna tabela z zapisi (virt.naslov,okvir)
36
Invertirane tabele strani
Primerjava med tradicionalno tabelo strani in invertirano tabelo strani
37
Algoritmi za zamenjavo strani
• Napaka strani zahteva izbiro – Katera stran naj se zamenja– Naredimo prostor za novo stran
• Spremenjena stran se mora najprej shranit– Nespremenjena se samo prepiše
• Bolje, da ne vzamemo pogosto uporabljeno stran– Verjetno bo morala spet kmalu nazaj
38
Optimalen algoritem za zamenjavo strani
• Zamenjaj stran, ki jo bomo potrebovali zadnjo – Optimialno vendar ne tudi realno
• Ocena z …– Beleženje uporabe strani pri prejšnjem zagonu procesa– Čeprav je to nepraktično
39
Algoritmi za zamenjavo strani
• Podatki, ki jih zbira sistem– Bit M = umazan bit (1/spremenjena stran, 0/čista)– Bit R = bit dostopa (1/referencirana, 0/ne)– Bite postavlja strojna oprema ob vsakem dostopu do
pomnilnika (R=1 za stran)– Ob zagonu so vsi biti 0
40
Neuporabljen v zadnjem času
• Vsaka stran ima bit dostopa in umazan bit– Bita se postavita ob dostopu do strani
• Strani so klasificirane1. Nereferencirana, nespremenjena2. Nereferencirana, spremenjena3. Referencirana, nespremenjena4. Referencirana, spremenjena
• NRU odstrani stran naključno– Od najnižje oštevilčenega praznega razreda
41
Prvi pride prvi melje (FIFO)
• Vzdrževanje povezanega seznama vseh strani – V vrstnem redu po katerem pridejo v spomin
• Stran na začetku se zamenja
• Slaba lastnost– Strani, ki so dolgo v pomnilniku se lahko pogosto
uporabljajo
42
Druga možnost (1)
• Delovanje druge možnosti– Strani so sortirane v FIFO vrstnem redu
– Ob napaki strani vzamemo najstarejšo stran• A ima R=1 ==> R:=0, t=zdaj, druga možnost• A ima R=0 ==>
– M=1: stran se zapiše na disk– gre ven iz pomnilnika!
– Če so vse strani referencirane potem dobimo FIFO• Najstarejša referencirana pride okoli...
45
Algoritem za zamenjavo strani:Najdlje neuporabljen (LRU)
• Predpostavimo, da bomo pred kratkim uporabljene strani spet uporabili– Vrzi ven stran, ki je najdlje bila neuporabljena
• Moramo hraniti seznam strani– Najzadnje uporabljena stran je na začetku, zadnja pa
najdlje neuporabljena– Popravi seznam ob vsakem dostopu do spomina !!
• Alternativa: hrani števec za vsak zapis tabele strani– Izberi stran z najnižjim števcem – Periodično postavimo števec na nič– Rešitev s strojno opremo
46
LRU s strojno opremo
LRU z uporabo matrike – strani referencirane v vrstnem redu 0,1,2,3,2,1,0,3,2,3
47
Simulacija LRU s programom (1)
• Pribljižek: Ne pogosto uporabljane strani– Vsak zapis TS ima števec– Za vsako urino prekinitev se zapisu TS prišteje
bit dostopa ==> števec dostopov.– Ob napaki strani se izbere najmanj referencirana
stran
• Algoritem zelo počasi “pozabi“– Program začne z naslednjo fazo (npr. 2. prehod
pri prevajanju)– Prejšnje strani imajo še vedno visok števec!
48
Simulacija LRU s programom (2)
• Algoritem staranja simulira LRU v programu• Pozor: 6 strani za 5 urinih period, (a) – (e)
49
Algoritem za zamenjavo strani: Delovna množica (1)
• Branje strani na zahtevo.• Lokalnost referenc.
– Večina dostopov do strani je lokalna glede na zadnjo uporabljeno stran.
• Strani, ki jih dan proces trenutno uporablja imenujemo delovna množica.– Če sistem nima zadosti spomina, da bi shranil
delovno množico pride do smetenja.
• Ko proces preneha z izvajanjem izgine delovna množica.
50
Algoritem za zamenjavo strani: Delovna množica (2)
• Shranjevanje delovne množice in vnaprejšnje branje le-te pred izvajanjem procesa.– Delovna množica se spreminja.
• Graf prikazuje stabiliziranje velikosti delovne množice v času.
51
Algoritem za zamenjavo strani: Delovna množica (3)
• Delovna množica je množica strani, ki se uporabijo v k-tih najzadnjih referenc
• w(k,t) je velikost delovne množice v času t
53
Algoritem za zamenjavo strani: Delovna množica (5)
• Zgodi se napaka strani:– Pregleda se celotna tabela strani– Če je R=1 se popravi čas zadnjega dostopa– Strani z R=0 so kandidati
• Če je t>max-t potem se stran da ven• Če je t<=max-t se začetno ne uporabi• Uporabi se stran z največjim t• V najslabšem primeru so vse strani referencirane• Izberemo naključno stran z R=1
54
Algoritem za zamenjavo strani: WSClock (1)
• Krožen seznam okvirjev strani– Kot prihajajo strani tako se polni seznam
– Vsak okvir vsebuje čas zadnje uporabe
• Ob napaki strani se pogleda okvir pod roko– R=1; stran uporabljena v zadnjem tiku; R:=0; roka gre naprej;
– R=0; t>limit; M=0; kandidat za zamenjavo
– R=0; t<=limit; M=1• Shranjevanje strani se da v razvrščevalnik; bo prišla okoli
• Roka se premakne naprej
– Roka pride okoli• Vsaj 1 shranjevenje razporejeno ==> nadaljuj;• Nobeno shranjevanje ==> vse so v del.množici
– Naključno izberi eno stran ==> kandidat
57
Načrtovalske odločitve za ostranjevalni sistem Lokalna proti globalni alokacijski politiki
• Originalna konfiguracija• Lokalna zamenjava strani• Globalna zamenjava strani
58
Lokalna proti globalni alokacijski politiki (2)
Napaka strani kot funkcija števila naslovljenih strani
59
Kontrola obremenitve
• Čeprav smo imeli dober načrt je sistem lahko slab
• Ko PFF algoritem indicira – Nekateri procesi rabijo več spomina– Noben proces ne rabi manj spomina
• Rešitev : zmanjšaj število procesov, ki tekmuje za spomin– Daj enega ali več na disk, razdeli strani, ki jih procesi
držijo– Premisli stopnjo multi-programiranja
60
Velikost strani (1)
Majhne strani• Prednosti
– Manj interne fragmentacije – Boljše ujemanje za različne podatkovne strukture,
kodne sekcije– Manj neuporabne kode v spominu
• Slabosti – Programi potrebujejo veliko strani, večje tabele
strani
61
Prostor za tabelo strani
Velikost strani (2)
• Dodatno delo zaradi tabele strani in interno fragmentacijo
• Kjer – s = povprečna velikost procesa v zlogih– p = velikost strani v zlogih– e = zapis strani
2
s e poverhead
p
⋅= + Interna fragmentacija
Optimizirano ko
2p se=
64
Politika čiščenja
• Potreba po procesih v ozadju, deamon za ostranjevanje– Periodično pregleda stanje spomina
• Ko je premalo okvirjev prostih– Izbere strani za odstranitev z algoritmom za
zamenjavo strani
• Lahko uporabimo krožni seznam (ura) – Kot običajen algoritem za zamenjavo strani
65
Segmentacija (1)
• Primer prevajalnika:– Segmenti (tabele) lahko rastejo– En segment lahko zraste, ostali imajo prostor
• Neodvisni naslovni prostori – segmenti– Nova dimenzija pomnilnika– Vsak ima linearen naslovni prostor– Velikost lahko varira
• Programer se zaveda segmentov
66
Segmentacija (2)
• Eno-dimenzionalni naslovni prostor z rastočimi tabelami • Ena tabela lahko trči v drugo
67
Segmentacija (3)
• Prednosti segmentacije:– Variranje velikosti segmentov– Poenostavljeno povezovanje in vlaganje
programov (n,0)– Procedure se izvajajo na naslovu 0– Skupni segmenti (knjižnice, grafika, ...)– Zaščita (R,X,RX,...) segmenta – pomaga pri
iskanju napak– Programer ima iluzijo, da so vsi segmenti vedno
v pomnilniku
69
Segmentacija (5)
• Implementacija čiste segmentacije:– Segmenti so variabilne velikosti - strani niso– Spomin se fragmentira, ko se segmenti
zamenjujejo– Segmente lahko stisnemo skupaj periodično
• Poglejmo razlike med ostranjevanjem in segmentacijo
70
Implementacija segmentacije
(a)-(d) razvoj zunanje fragmentacije(e) odstranitev fragmentacije s stiskanjem
72
Segmentacija z ostranjevanjem: MULTICS (1)
• MULTICS je tekel na Honeywell 6000– Program ima lahko 218 segmentov– Vsak segment ima lahko 65,536 (36-bitov) besed– Vsak segment ima virtualni spomin z
ostranjevanjem – s tem imamo prednosti obeh• Segment se širi/krči z dodajanjem/odvzemanjem strani
• Vsak program ima tabelo segmentov– Vsebuje lahko 250.000 segmentov– Tabela segmentov je segment in je sestavljena iz
strani
73
Segmentacija z ostranjevanjem: MULTICS (2)
• Deskriptor segmenta– Segment v spominu (delno!) / ni v spominu
• V spominu ==> tabela strani z 18 bitnimi naslovi
– Velikost strani = 64 ali 1024 besed– Fizični naslov = 24 bitov
• Virtualni spomin znotraj segmenta je narejen enako kot navadno ostranjevanje
74
Segmentacija z ostranjevanjem: MULTICS (3)
• Opis segmenta kaže na tabelo strani• Opis segmenta – številke so dolžine polj
75
Segmentacija z ostranjevanjem: MULTICS (4)
• Naslov je sestavljen iz treh delov:– Številka segmenta– Številka strani – Odmik od strani
• Algoritem za dostop do pomnilnika– Več delov je izvedeno v strojni opremi
77
Segmentacija z ostranjevanjem: MULTICS (6)
Dostop do pomnilnika:1) S številko segmenta najdemo deskriptor segmenta.
2) Preverimo, če je segmentova tabela strani v spominu.Da ==> vrni naslov
Ne ==> napaka segmenta
Napaka pri dostopu ==> sproži se past
3) Preverimo, če je naslovljena stran v spominu.Da ==> vrni naslov
Ne ==> napaka strani
4) K naslovu strani se prišteje odmik.
5) Lako preberemo ali spremenimo vsebino.
78
Segmentacija z ostranjevanjem: MULTICS (7)
Prevod 2-delnega naslova MULTICS v naslov v glavnem spominu
79
Segmentacija z ostranjevanjem: MULTICS (8)
• Poenostavljena verzija MULTICS TLB• Obstoj 2 velikosti strani naredi TLB bolj kompleksen
80
Segmentacija z ostranjevanjem: Pentium (1)
• Pentium ima 16K neodvisnih segmentov (Multics 256K).
• Vsak segment ima do 1 bilijona 32-bitnih besed (Multics 64K 36-bitnih besed).
• Manj segmentov kot MULTICS in veliko večji segmenti, kar je bolj pomembno. – Malo število programov potrebuje več kot 1000
segmentov.
81
Segmentacija z ostranjevanjem: Pentium (2)
• Lokalna/Globalna tabela deskriptorjev– Vsak program ima svoj LDT.– Sistem ima skupen GDT.
• Dostop do segmenta:– Program naloži selektor v segmentni register.
• CS= selektor za kodni segment; DS= selektor za podatkovni segment;...
• Vsak selektor je 16-bitna beseda
83
Segmentacija z ostranjevanjem: Pentium (4)
• Segmentni deskriptor– Ko se selektor naloži v segmentni register se
segmentni deskriptor naloži v mikro-programski register.
– SD vsebuje 8 zlogov. • Osnovni naslov segmenta, velikost, itd.
• Poglejmo si kako se (selektor,odmik) prevede v fizični naslov– Nalaganje selektorja v register + mikroprogram
prebere deskriptor + preveri se odmik
84
Segmentacija z ostranjevanjem: Pentium (5)
• Polje Limit je dolgo 20 bitov (ne 32 bitov)– Polje G=0 ==> velikost v besedah– Polje G=1 ==> velikost v blokih– Velikost strani = 4K ==> 20 bitov Limit = 232
• Polje Base je razdeljeno na tri dele– Kompatibilnost z 286 (Base=24 bitov)
• Segment je v spominu + odmik je OK ...– Linearni naslov = Osnova + Odmik– Osnova je naslov v 232 ==> segment se lahko
začne na poljubenem naslovu v 232 nasl. prostoru.
85
Segmentacija z ostranjevanjem: Pentium (6)
• Pentium – opis kodnega segmenta• Podatkovni segment je malce različen
87
Segmentacija z ostranjevanjem: Pentium (8)
• Če je ostranjevanje onemogočeno:– Imamo fizični naslov znotraj segmenta.– Na ta način dobimo čisto segmentacijo.– Osnova segmenta je v deskriptorju
– Segmenti se lahko prekrivajo
• Če je ostranjevanje omogočeno:– Naslavljamo lahko 220 strani velikosti 4K– Vsak program ima 1024 32bit velik direktorij strani– Vsak zapis DS kaže na tabelo strani: 1024 32bit besed– Vsak zapis TS kaže na stran veliko 4K– Linearni naslov = 20bit (stran) + 12bit (odmik)