Adressöversättning Repetition av virtuellt minne TLB - cacheminne för sidtabellinformation Virtuellt eller fysiskt adresserat cacheminne Tricket - det bästa av två världar Minneshierarki
Virtuellt minne fysiskt minne sidtabell 1 sidtabell 2 process 1 - virtuell adressrymd 1 process 2 - virtuell adressrymd 2 skivminne
Adressöversättning virtuell adress fysisk adress virtuellt sidnummer (VPN) sidoffset (PO) virtuell adress adress- översättning fysisk adress fysiskt sidnummer (PPN) sidoffset (PO)
Vanliga sidstorlekar 4 kbyte (Sparc, x86) 8 kbyte (Ultrasparc) 4 kbyte + 4 Mbyte (Pentium) 8k, 64k, 512k, 4Mbyte (Alpha 21264)
Enkel sidtabell en minnesadress virtuellt sidnummer offset primär- sida 71 fysiskt sidnummer sida 72 sida 73 Enkel adressöversättning med hjälp av en enkel sidtabell.
Minneslayout Kod, data, stack utspridda Många ogiltiga sidor adress 0 Kod, data, stack utspridda Många ogiltiga sidor Enkel sidtabell blir stor och tom kod data utökning av dataområdet utökning av stacken stack största möjliga adress
Problem Många (möjliga) virtuella sidor medför stora sidtabeller som medför sidtabeller i primärminnet som medför långsam uppslagning
Flernivåers sidtabell Tomma sidtabeller på nivå 2 och 3 kan ersättas med nollställd giltigbit på nivån ovanför inkommande adress virtuellt sidnummer index 1 (4 bit) index 2 (8 bit) index 3 (8 bit) sidoffset (12bit) sidtabell nivå 1 sidtabell nivå 2 sidtabell nivå 3 sida . . . . . . . . .
Flernivåers sidtabell, exempel tre sidtabeller på nivå 2 fem sidtabeller på nivå 3 sidtabell nivå 1 . . . . . . . . . . . . . . . tre sidtabeller för programkod . . . en sidtabell för data . en sidtabell . . . . . . . . för stacken Sidtabeller för ett program. Själva sidorna finns inte med i figuren.
TLB Translation Lookaside Buffer Cacheminne för adressöversättning Delmängd av sidtabellen Associativt, mindre än 200 platser Sitter på processorchippet Miss-rate under 1 procent Missar hanteras i programvara i Riscar
Misshantering i programvara TLB-miss ger felavbrott (exception) Felavbrottsrutinen läser sidtabellen Sidfel upptäcks som TLB-miss, felavbrotts- rutinen ser i tabellen att det är sidfel Vanligt i Riscar, som saknar mikroprogram x86 hanterar TLB-miss i hårdvara
TLB-miss i mjukvara medför: Operativsystemet bestämmer hur sidtabellen ser ut Operativsystemet bestämmer TLB:ns utbytesalgoritm Instruktioner för att läsa/skriva TLB-platser Delar av sidtabell kan hamna i datacachen
Statusbitar Sidbytesrutin behöver use-bit och dirty-bit use-bit: har sidan använts sen sist? Behövs för att approximera LRU dirty-bit: har sidan skrivits sen sist? Kan spara skrivning till långsamt skivminne
Statusbitar i TLB:n TLB kan ha use-bit, men måste inte: endast nyligen använda sidor finns i TLB:n TLB kan ha dirty-bit (för prestanda), annars: när en sidas översättning lagras i TLB:n markeras sidan som skrivskyddad första skrivning ger felavbrott, programrutinen sätter dirty-bit i sidtabellen
Obs! En TLB är inget vanligt cacheminne! En dirty-bit i TLB:n anger om sidan ändrats i minnet Innehållet i TLB:n ändras inte av att programmet skriver till sidan (undantag: dirty-bit för sidan ettställs) Om dirty-bit = 1 så måste sidan sparas i swap-filen innan minnet återanvänds. TLB-innehållet ska inte sparas någonstans!
Täckning (coverage) Coverage = sidstorlek x antal sidor i TLB Större täckning ger färre missar Ökad sidstorlek ger ökad täckning Två sidstorlekar vanligt, exempelvis 4 kB och 4 MB Bildminne (och OS?) kan ligga i stora sidor
Virtuellt eller fysiskt adresserat cacheminne CPU TLB cacheminne CPU TLB cacheminne Virtuella adresser i adresslapparna TLB används bara vid miss Fysiska adresser i adresslapparna TLB används vid varje referens
Fördelar med virtuellt adresserade cacheminnen Snabbare, behöver inte vänta på TLB:n kortare cykeltid större cacheminne kortare pipeline TLB:n används mer sällan gemensam TLB räcker TLB:n kan vara större och långsammare Falska konflikter undviks i cacheminnet
Nackdelar med virtuellt adresserade cacheminnen Synonymer - olika virtuella adresser blir samma fysiska samma fil inmappad på två ställen i en process samma fil eller delade bibliotek inmappade i två olika processer Homonymer - samma virtuella adress blir olika fysiska vid processbyte
Synonymproblem Om A och B är två olika virtuella adresser som mappas till samma fysiska, så kan STORE A <- #0 LOAD R3 <- B resultera i att B 0 Lösning: låt OS:et förbjuda synonymer
Homonymproblem Om den virtuella adressen A motsvarar den fysiska adressen X som finns i cacheminnet och TLB:n uppdateras så att A motsvarar en annan fysisk adress Y, så kan LOAD R3 <- A ge värdet från X i stället för från Y
Processbyte i virtuellt adresserat cacheminne Hela adressrymden byts vid processbyte. För att lösa homonymproblemen kan man invalidera hela cacheminnet, eller lägga till processnummer till varje adresslapp Operativsystemet använder egna adresser, varje systemanrop blir byte av adressrymd
Fysiskt adresserade cacheminnen Fördelar: Inga synonym- eller homonymproblem Behöver ej invalideras vid processbyte Nackdelar: TLB-uppslagning före varje referens Falska konflikter
Falska konflikter Virtuella adressen visar ingen konflikt direktmappat cacheminne Virtuella adressen visar ingen konflikt Adressöversättning skapar konflikten OS kan hindra detta fysiskt minne sidtabell processens virtuella adressrymd skivminne
TLB-uppslagning vid varje referens Instruktionshämtning (glöm inte den!) Datareferens (vid load/store) Kräver separat I-TLB och D-TLB, och förstås separata I- och D-cacheminnen TLBn tar en extra cykel i pipelinen, om inte tricket med samtidig uppslagning används
Tricket - samtidig uppslagning i TLB och cacheminne inkommande (virtuell) adress sidnummer offset 20bit 10bit index 2bit byte-offset ³ 1 felavbrott = lagrad adresslapp lagrat ord (32 bit) adress in = (20 bit) = . . . . . . data ut data ut Minne = . . . med 1024 ord TLB om 53bit till processorn = fysiskt sidnummer & fanns/ fanns inte Ett direktmappat cacheminne med parallell TLB-uppslagning.
Trickets restriktion Ingen enda bit från adresslappen får användas som indexbit! Detta medför att: Cachestorlek associativitetstal x sidstorlek
Sidfärgning (page coloring) Den virtuella adressen används som index, den fysiska finns i adresslappen virtuellt sidnummer sidoffset får inte ändras av adressöversättningen index fysiskt sidnummer sidoffset
Sidfärgning Tricket kan användas i större cacheminnen Sidbytesalgoritmen väljer alltid sidor så att överlappande bitar ej ändras av TLB:n Huvudminnet som cache för hårddisken - inte längre fullt associativt Falska konflikter minskar eller försvinner
Hierarki av cacheminnen processor data instruk- tioner register virtuella adresser Register I- och D-cache Level 2, Level 3 Huvudminne Skivminne I- L1I- D- L1D- TLB cache TLB cache fysiska adresser L2 cache på processor- chippet L3 cache primärminne skivminne En minneshierarki med flera nivåer.