Kapittel 7, Minne RAM DIMM, SIMM ROM, PROM, EPROM, EEPROM FLASH DIM SUM Cache Virtuelt minne 26.04.2013
Data Cache Les adresse 99 Adresse 99 Prosessor med registre Cache Cache L2 Data Data Les side Adresse 99 Virtuelt minne (på disk) Minne Side (page) 5 (inneholder adresse 99)
Litt om minne, ordstørrelse og adressering De fleste moderne maskiner addresserer minne pr byte. Men det finnes også maskiner som addresserer minne pr prosessor-ord. Hvor stort adresserommet er bestemmes av antall bit på adressebussen. Dette er gjerne det samme antallet som et maskinord, men ikke nødvendig vis. Eksepel:Intel 8086 byte-addresserbart minne og 20-bit adressebuss 2 20 (1,048,576) adresser, og dermed en MiB minne, 32-bit maskin med 32-bit adresserom med byte-addressering gir 2 32 = 4,294,967,296 byte minne eller 4 gibibytes (GiB). Låter den siste grensen kjent?
Litt om minne, ordstørrelse og adressering Fra StackOverflow: Why do 64 bit systems have only a 48 bit address space? Because that's all that's needed. 48 bits give you an address space of 256 terabyte. That's a lot. You're not going to see a system which needs more than that any time soon. So CPU manufacturers took a shortcut. They use an instruction set which allows a full 64-bit address space, but current CPUs just only use the lower 48 bits. The alternative was wasting transistors on handling a bigger address space which wasn't going to be needed for many years. So once we get near the 48-bit limit, it's just a matter of releasing CPUs that handle the full address space, but it won't require any changes to the instruction set, and it won't break compatibility.
Litt om minne, ordstørrelse og adressering Hit (treff) Når man finner dataene i cachen Miss (bom) Når man ikke finne dataene i cachen
Assosiativ mapping
Cache Linjer og addressering Linje / blokk (Data) Typisk 16 64 byte Leses og skrives sammen til og fra cachen Tag Inneholder adressen til linja i minnet. Hvordan ser adressen til linja ut? Byte Hvordan kan vi lese byte 8 i en linje? Tag = Indexen i minne Fra http://en.wikipedia.org/wiki/cache_%28computing%29
Assosiativ mapping - Eksempel Word Komplett adresse (For eksempel en forespørsel fra prosessoren) 32 bit 27 bit 5 bit Tag Word Minneadressen til linja Beskriver det uttrekket fra minnet som adresseres med (27 bit) + 00000 (første ord) til (27 bit) + 11111 (siste ord) Vi ønsker oss linjer a 32 ord/byte. Å adressere 32 ord krever 5 bit. De 5 nederste bitene i adressen blir dermed ord-adressen innad i linja
Assosiativ mapping - Eksempel Word 1) Prosessoren spør etter ordet i adresse: 1 0 0 1 1 0 1 0 1 1 0 1 0 0 0 0 1 1 0 1 1 0 1 0 1 0 1 0 1 1 0 1 2) Finnes linja i cachen? Sammenlikt de første 27 bit med alle cachens tag-er Tag Data 1 0 0 1 1 0 1 0 1 1 0 1 0 27 0 bit 0 0 0 0 0 0 0 0 0 0 0 0 1 32 ord data 1 0 0 1 1 0 1 0 1 1 0 1 0 27 0 bit 0 0 1 1 0 1 1 0 1 0 1 0 1 1 1 1 1 1 0 1 0 1 1 0 1 0 27 1 bit 0 0 1 1 0 1 1 0 1 0 1 0 1 32 ord data 32 ord data 3) I riktig linje, hent ord nummer 13 fra datadelen (01101)
Assosiativ mapping Styrker Veldig fleksibel. Svakheter Cache-oppsettet krever mye minne (29 byte pr linje. 2 14 linjer) Må sammenblikne tag-delen for alle 2 14 linjer for å vite om man har treff.
Direkte mapping Hver minneblokk kan bare gjennfinnes i EN cache-slot. Hver cache-slot kan ha innhold fra en av et utvalg minneblokker
Direkte mapping - Eksempel Word 1) Prosessoren spør etter ordet i adresse: 1 0 0 1 1 0 1 0 1 1 0 1 0 0 0 0 1 1 0 1 1 0 1 0 1 0 1 0 1 1 0 1 2) Finnes linja i cachen? Sjekk kun i slot med slotnummer oppgitt i slot-delen av adressen. Det er den ENESTE slotten hvor denne forespørselen kan ligge. Tag Data 3) Sjekk at tag-delen er riktig for denne ene slotten. 3) Hent ord nummer 13 fra datadelen (01101)
Direkte mapping Styrker Fungerer fint hvis programmet leser minne løpende. Cache-oppsettet krever mindre minne (15 mot 29 bit pr linje). Svakheter Lite fleksibel. 0 i treffrate om man leser data som ligger akkurat 2 14 fra hverandre. Det kan skje ved kolonnelesing i 2-dimensjonale arrayer e.l.
Set assosiativ
Set assosiativ - Eksempel Word 1) Prosessoren spør etter ordet i adresse: 1 0 0 1 1 0 1 0 1 1 0 1 0 0 0 0 1 1 0 1 1 0 1 0 1 0 1 0 1 1 0 1 2) Finnes linja i cachen? Sjekk kun i set med setlnummer oppgitt i set-delen av adressen. Det er de eneste 2 slotten hvor denne forespørselen kan ligge. Tag Data 3) Sjekk at tag-delen er riktig for denne ene slotten. 3) Hent ord nummer 13 fra datadelen (01101)
Direkte mapping Set assosiativ Hvorfor denne 1-bits forsakjellen??
Tenk deg at du programmerer en chip i vaskemaskin. Programmet er lagret i Flash-minne (disk). Programmet lastes og kjøres i vanlig minne. Det vanlige minne er for lite til å holde hele programmet. Hva gjør du?
Overlays Delvis lasting
Virtuelt minne En generell metode for å lagre minneblokker på harddisk. «Transparent» for applikasjonene og prosessoren Veldig tregt, men veldig billig. Det trengs en mapping mellom fysisk og virtuelt minne
Virtuelt minne Det trengs en mapping mellom fysisk og virtuelt minne
Side / Page tabell En linje for hver side (ikke for hver «page frame») Present-bit brukes for å fortelle om siden er i minne eller på disk Om siden ligger i minnet, står det hvilken «page frame» siden ligger i.
Sidetabellen i bruk 1. Prosessoren etterspør en adresse (virtuell) 2. Leter i sidetabellen vha de x(3) mest signifikante bitene. 3. Finner siden og dens plass i fysisk minne 4. Bruker de y(2) bitene som beskriver plass i fysisk minne som mest signifikante bit for fysisk adresse. 5. Leverer data fra den fysiske adressen.
En mer typisk line i sidetabellen
Sidetabellen i bruk Kjøreeksempel. Starter tom. 1. Henter adresse 001xxxxxxxxxxxxx 2. 010xxxxxxxxxxxxx 3. 011xxxxxxxxxxxxx 4. 100xxxxxxxxxxxxx 5. Hva skjer nå?
Translation Lookaside Buffer En cache for sidetabellen! En eksempel TLB med 8 rader for et system med 32 virtuelle sider og 16 page frames
Fragmentering 1. Oppstart 2. Etter kjøring 3. Etter sammenslåin g (coalescing) Problemet blir borte med paging. Hvorfor?
Segmentering 1. Segmentert etter type 2. Segmentert pr prosess