1
2
En processor kan ha en klockfrekvens på flera GHz. Det går alltså a9 exekvera en instruk=on väldigt for, givet a9 instruk=onen finns i processorn. Instruk=onerna =ll programmet som exekveras finns lagrade i primärminnet, när programmet har startat. Men, e9 primärminne är avsevärt mycket långsammare än en processor, vilket gör a9 oavse9 hur snabb en processor är, så begränsas exekverings=den av has=gheten på primärminnet. 3
4
5
6
7
8
10
11
12
13
Problem 1 fragmentering (intern). Cirka 500 bytes slösas bort epersom storlek på cluster är 1024 och en fil måste ta e9 antal cluster. Om cluster görs mindre, t ex 5 12 bytes, så minskar naturligtvis den interna fragmenteringen. Men, å andra sidan blir det mer overhead a9 hålla ordning på filer. Problem 2 - bestäm vilka cluster på hårddisken som ska användas. Det finns flera olika sä9. Några exempel är: con=guous (närliggande): n, n+1,... linked list (länkad lista): block n points at block n+1 disk index: block with pointers (FAT) file index: (unix)-solaris-cluster (block)=8k, block nummer 4 bytes->2048 pekare standard unix: superblock with disc info, files, free space, inode: 10 direct pointers, 10 double direct, 10 triple direct För a9 e9 opera=vsystem ska veta hur informa=on är lagrad på hårddisken måste opera=vsystemet känna =ll hur filer är lagrade. Förutom a9 hålla koll på vilka cluster som används för varje fil måste opera=vsystemet hålla ordning på vilka cluster som är lediga. Annars blir det svårt a9 ge cluster =ll en ny fil. 14
15
Närliggande allokering: Välj cluster som ligger bredvid varandra Problem eper e9 tag har filer skapats och filer tagits bort. Det kan då vara svårt a9 få plats med en stor fil trots a9 det finns plats. I exemplet finns 13 lediga cluster (block) så det finns plats men hur lagra en fil som behöver 5 block? De9a är extern fragmentering. 16
Filen lagras som en länkad lista där det finns en pekare i varje cluster som pekar ut var nästa cluster ligger. På de9a sä9 försvinner extern fragmentering för en fil kan lagras på vilka cluster som helst. Det gör också a9 man kan lagra hur stora filer som helst. En nackdel är a9 om man önskar informa=on som ligger i slutet av en fil så måste man söka igenom varenda cluster för a9 hi9a det sista clustret. 17
E9 alterna=v är a9 reservera e9 block (cluster) för pekare. En fil har då e9 block där man samlat alla pekare. Fördelen är a9 man slipper extern fragmentering då vilket cluster som helst kan väljas. Och, det går snabbt a9 hi9a varje cluster (man behöver inte söka igenom hela filen). En nackdel är dock a9 man begränsar storleken på en fil genom a9 reservera e9 visst antal pekare (så många som får plats i clustret). 18
Unix har en så kallad inode för a9 hålla koll på en fil. Här kombinerar man olika sä9. I inoden har man några pekare som pekar direkt på cluster. Det ger snabb access. För a9 =llåta stora filer, så har man indirekta block, dvs en pekare pekar =ll e9 block med pekare. Man har också double indirekta block, där en pekare i inode pekar på e9 block som innehåller pekare och den pekaren pekar på e9 ny9 block med pekare. På de9a sä9 kan man lagra stora filer. Naturligtvis kommer sök=den a9 gå upp för stora filer. 19
20
21
22
23
24
25
26
27
28
29
30
31
33
34
Lokalitet av referenser (locality of references) gör a9 cacheminnen fungerar. Det är så a9 minnesreferenser tenderar a9 gruppera sig under exekvering. När e9 program exekverar, är det vanligt a9 samma minnesreferenser görs om och om igen. Det gäller både instruk=oner (t ex loopar) och data (datastrukturer). Man kan se två typer av lokalitet: Temporal lokalitet lokalitet i =d om en instruk=on/data blivit refererat nu, så är sannolikheten stor a9 samma referens görs inom kort Rumslokalitet om instruk=on/data blivit refererat nu, så är sannolikheten stor a9 instruk=oner/data vid adresser i närheten kommer användas inom kort 35
36
37
38
E9 exempel på cacheminne. I minnet finns plats för 8 block (cacherader). De har index 000-111. Det finns plats för cacheraden (DATA). Utöver de9a finns TAG som avgör om rä9 data är lagrad på en viss cacherad. Primärminnet är större än cacheminnet så det kommer vara så a9 många adresser i primärminnet vill få plats på samma cacherad. Därför måste man ha något sä9 a9 avgöra om rä9 data finns på en viss cacherad. Sedan finns en V bit som avgör om data i cacherad är valid eller inte. Med valid menas om data överensstämmer med primärminnet. Till exempel, e9 program använder en variabel X som har värdet 0. Variabeln läses in =ll cachminnet. Processorn ändrar värdet =ll 1. Helt plötsligt skiljer sig innehållet i cacheraden och innehållet i primärminnet. Det måste man hålla ordning på. 41
Processorn läser på adress 22 (10110). En del av adressen (bitarna 110) används för a9 peka ut en cacheline. I de9a fall finns inte data på cacheraden (TAG bitarna i cacheminnet stämmer inte med TAG bitarna (10) i adressen). Data läses in från primärminnet och placeras på cacheraden. (V)alid bit sä9s =ll Y epersom data i cache och primärminne är samma just nu. 42
43
Nu vill processorn läsa på adress 26 (11010). Adressen plockas isär så a9 11 bildar TAG och 010 ger index. Vid kontroll av vad som finns för TAG på plats 010 upptäcker man a9 det är match mellan adressen där processorn vill läsa och det som finns i cacheminnet. Data hämtas på indexplats 010. 44
45
Processorn vill läsa på adress 18 (10010). Adressen plockas isär så a9 index blir: 010 och TAG blir 10. På index plats 010 finns (se föregående slide, TAG= 11). Här är alltså en konflikt. Den data som finns i cachminnet är fel data. EPersom processorn nu vill ha data på plats 18 så fly9as den in och den gamla datan åker ut. Om valid biten är Y så har inte någon ändring (genom skrivning) ske9 och det är bara a9 skriva över med ny data (primärminne och cache är konsistent) 46
52
E9 exempel på cacheminne och primärminne. I och med a9 överföringen mellan primärminne och cacheminne sker i block om 4 bytes i de9a exempel är det lämpligt a9 låta en cacheline innehålla 4 bytes. Uppdelningen av de 24 bitarna för adressering av cacheminnet är: 2 bitar för a9 peka ut vilken av byten det är i en cacheline. I och med a9 cacheminnet har 2^14 cachelines används 14 bitar a9 peka ut vilken cacheline. Det som är kvar av adressen är: 24-14-2=8. Det är 8 bitar som talar om vilket block om 4 bytes som finns på en viss cacherad. 53
Direktmappning är e9 enkelt sä9 a9 konstruera e9 cacheminne. I exemplet ovan är adressrymden 24 bitar. Om processorn vill läsa i cacheminnet plockas data fram enligt följande: 14 bitar (cacheline) pekar ut vilken cacheline som är aktuell. Man tar de 14 bitarna från adressen och sedan tar man TAG bitarna på motsvarande plats i cacheminnet. Om TAG bitarna i cacheminnet är samma som TAG bitarna i adressen så är det en träff. Den data som söks ligger i cacheminnet och data ligger på denna plats. De 2 minst signifikanta bitarna i adressen pekar ut vilken byte på cacheraden som är den epersökta. Om TAG bitarna inte överensstämmer, är det en cachemiss och data måste hämtas från primärminnet. Då ersä9s hela cacheraden. Man kan notera a9: en viss byte i primärminnet ALLTID hamnar på samma ställe i cacheminnet. det är 2^8 (256) block i minnet som tävlar om a9 få plats på samma plats (samma cacherad). 54
Direktmappning är e9 enkelt sä9 a9 konstruera e9 cacheminne. I exemplet ovan är adressrymden 24 bitar. Om processorn vill läsa i cacheminnet plockas data fram enligt följande: 14 bitar (cacheline) pekar ut vilken cacheline som är aktuell. Man tar de 14 bitarna från adressen och sedan tar man TAG bitarna på motsvarande plats i cacheminnet. Om TAG bitarna i cacheminnet är samma som TAG bitarna i adressen så är det en träff. Den data som söks ligger i cacheminnet och data ligger på denna plats. De 2 minst signifikanta bitarna i adressen pekar ut vilken byte på cacheraden som är den epersökta. Om TAG bitarna inte överensstämmer, är det en cachemiss och data måste hämtas från primärminnet. Då ersä9s hela cacheraden. Man kan notera a9: en viss byte i primärminnet ALLTID hamnar på samma ställe i cacheminnet. det är 2^8 (256) block i minnet som tävlar om a9 få plats på samma plats (samma cacherad). 55
56
57
58
59
I 2-way associa=ve mapping kan varje byte i primärminnet läggas på 2 cachelines. I k-way associa=ve mapping kan varje byte hamna på k cachelines. 60
61
Fullt associa=vt cache -E9 block kan hamna i vilket cache entry (cache line) som helst -Kräver a9 alla cacheentries söks igenom - Jämförelse per entry blir dyrare n-way set associa=vt cache -Varje set består av n cache lines (entries) -Block nummer bestämmer vilket set -(Block number) modulo (#Sets in cache) -Sök all entries för e9 givet set -n jämförelser (färre jämförelser än fullt associa=vt cache) 62
63
64
65
66
67
68
69
70
71
74
Vid set-associa=v och associa=v mappning behövs en algoritm för a9 bestämma vilken cacheline som ska ersä9as vid en cachemiss. Vid direkt mappning behövs ingen algoritm. I set-associa=v mappning är kandidaterna en av cacheraderna i det valda setet och i associa=v mappning är alla cacherader kandidater a9 bytas ut 75
76
77
78
Level 1: närmst CPU. Liten och snabb Level 2: större men långsammare (jämfört med Level 1 cache). Level 2 cache stödjer missar i Level 1 cache. Level 3: större men långsammare (jämfört med Level 2 cache). Level 3 cache stödjer missar i Level 2 cache. Primärminne: Störst men långsammast. 79
80
Om man har en unifierad cache, dvs både data och instruk=oner så kommer fördelningen av utrymme mellan hur många instruk=oner och hur mycket data som ska finnas skötas automa=skt. Om man har en separat cache för instruk=oner och en separat cache för data så måste man bestämma storleken på respek=ve cache vid design. Separat cache för instruk=oner och data har dock en stor fördel och det är a9 man sam=digt kan hämta instruk=oner och data. De9a är en vik=g egenskap och underlä9ar hanteringen av så kallade pipeline konflikter (se föreläsningar längre fram). 81
82
83
84
85
Level 1: närmst CPU. Liten och snabb Level 2: större men långsammare (jämfört med Level 1 cache). Level 2 cache stödjer missar i Level 1 cache. Level 3: större men långsammare (jämfört med Level 2 cache). Level 3 cache stödjer missar i Level 2 cache. Primärminne: Störst men långsammast. 86
När CPU prestanda ökar, så blir miss penalty vik=g a9 minimera. För a9 undersöka prestanda måste man ta hänsyn =ll cacheminne. Cachemissar beror på algoritm(implementa=on) och kompilatorns op=mering. 87
Level 1: närmst CPU. Liten och snabb Level 2: större men långsammare (jämfört med Level 1 cache). Level 2 cache stödjer missar i Level 1 cache. Level 3: större men långsammare (jämfört med Level 2 cache). Level 3 cache stödjer missar i Level 2 cache. Primärminne: Störst men långsammast. 88
89
90
91
På bilden visas e9 exempel på cachestruktur för en AMD processor. Andra exempel på cachedesign: Intel 80486 (1989) a single on-chip cache of 8 Kbytes, line size: 16 bytes, 4-way set associa=ve organiza=on Pen=um (1993) two on-chip caches, for data and instruc=ons, each cache: 8 Kbytes, line size: 32 bytes (64 bytes in Pen=um 4), 2-way set associa=ve organiza=on, (4-way in Pen=um 4) PowerPC 601-Introduced 1993 a single on-chip cache of 32 Kbytes, line size: 32 bytes, 8-way set associa=ve organiza=on PowerPC 603 two on-chip caches, for data and instruc=ons, each cache: 8 Kbytes, line size: 32 bytes, 2-way set associa=ve organiza=on, (simpler cache organiza=on than the 601 but stronger processor) PowerPC 604 two on-chip caches, for data and instruc=ons, each cache: 16 Kbytes, line size: 32 bytes, 4-way set associa=ve organiza=on PowerPC 620 two on-chip caches, for data and instruc=ons, each cache: 32 Kbytes, line size: 64 bytes, 8-way set associa=ve organiza=on 95
96
97
Minne håller de program som exekveras. I exemplet exekveras Facebook (program A), Word (program B) och Spo=fy (program C) först. EPer en stund avslutas användandet av Word. E9 ny9 program D laddas in. AlltePer som =den går blir minnet allt mer fragmenterat, dvs uppdelat. När program A avslutas finns egentligen ganska mycket plats i minnet då bara program C och D är där men epersom hållen är så små så kan inte program B startas (trots a9 det finns plats). Jämför fragmenteringen av minnet med hur hårddisken fragmenterades. 98
99
100
101
E9 program består av e9 stort antal pages som är lagrade på sekundärminnet. Vid demand paging laddas endast de sidor som behövs. Om en sida (page) inte finns i primärminnet, blir det sidfel, och en ny sida laddas in. Sidfel jämför med cachemiss en algoritm, LRU, används för a9 välja ut vilken sida som ska bytas ut. Varje sida har en bit som indikerar om skrivningar gjorts. Om skrivningar gjorts, måste sidan i primärminnet sparas på sekundärminnet (jämför med cacheminnen) Opera=vsystemet (OS) sköter vilka sidor som ska laddas =ll primärminnet. OS måste balansera hur många program som är ak=va. Om OS väljer många program, ökar graden av mul=-programmering. Men, varje program får mindre plats. Alltså, större risk för sidfel, som kostar i =d. OS måste se =ll a9 all krap inte går åt för sidbyten (kallas trashing) 105
107
108
109
Sidtabellen har en entry för varje sida i det virtuella minnet. Varje entry innehåller en adress =ll den frame som lagrar en viss sida (page) om den givna sidan finns i minnet. Varje entry har e9 antal kontrollbitar för a9 bestämma: -Om sidan finns i primärminnet -Om något på sidan blivit modifierat -Informa=on om antal accesser (för OS vid sidbyte) Vid sidfel, sidan (page) måste hämtas från sekundärminne (disk) Tar miljontals klockcykler Hanteras av opera=vsystem 110
114
Problem med sidtabell Tid vid läsning av adress: 1 läs sidtabell 2 läs data Stora sidtabeller Använd cache - Transla=on Look-Aside Buffer (TLB) för sidtabeller 115
116
117