poglavje 4 spomin - osebje.famnit.upr.siosebje.famnit.upr.si/~savnik/predmeti/sis2/04-spomin.pdf ·...

89
1 Spomin Poglavje 4 4.1 Osnovno delo s spominom 4.2 Izmenjevanje 4.3 Virtualni spomin 4.4 Algoritmi za zamenjavo strani 4.5 Modeliranje algoritmov za zamenjavo strani 4.6 Načrtovanje sistema za rokovanje s stranmi 4.7 Implementacija 4.8 Segmentacija

Upload: others

Post on 11-Oct-2019

4 views

Category:

Documents


0 download

TRANSCRIPT

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

8

Problem relokacije

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

17

Rokovanje s spominom preko sezamov

Štiri kombinacije sosedov za zaključitev procesa X

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

21

Ostranjevanje (1)

Pozicija in funkcija MMU

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

24

Tabele strani (1)

Interne operacije MMU s 16 4 KB stranmi

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 !

26

Tabele strani (3)

Tipičen zapis tabele strani

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

30

TLB – Izravnalnik za prevajanje naslovov

TLB za pohitritev ostranjevanja

31

Tabele strani za velik spomin

• Drevesno strukturirane TS• Invertirane tabele strani

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...

43

Druga možnost (2)

– Če se zgodi napaka strani ob času 20...– A ima R=1

Časi nalaganja strani

44

Algoritem za zamenjavo strani: Ura

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

52

Algoritem za zamenjavo strani: Delovna množica (4)

Algoritem delovne množice

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

55

Algoritem za zamenjavo strani: WSClock (2)

Delovanje algoritma WSClock

56

Pregled algoritmov za zamenjavo strani

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=

62

Ločen instrukcijski in podatkovni prostor

• En naslovni prostor• Ločeni I in D prostori

63

Skupne strani

Dva procesa si delita isti program, ki deli svojo tabelo strani

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

68

Segmentacija (4)

• Omogoča širjenje in krčenje tabel• Neodvisno drug od drugega

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

71

Segmentacija (5)

Primerjava ostranjevanja in segmentacije

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

76

Segmentacija z ostranjevanjem: MULTICS (5)

34-bitni virtualni naslov MULTICS

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

82

Segmentacija z ostranjevanjem: Pentium (3)

Pentium selektor

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

86

Segmentacija z ostranjevanjem: Pentium (7)

Prevajanje (selector, offset) para v linearni naslov

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)

88

Segmentacija z ostranjevanjem: Pentium (4)

Prevajanje linearnega naslova v fizični naslov

89

Segmentacija z ostranjevanjem: Pentium (5)

Zaščita na Pentium

Level