首页 > 技术文章 > CSAPP第六章概念

wwqdata 2019-12-04 17:44 原文

CSAPP第六章概念

1.时间局部性:程序有在一段时间多次访问同一数据块的倾向

空间局部性:程序往往有访问一个聚集空间数据块的倾向

空间局部性的例子:我们可以选择在读取内存块的时候,把它附近的内存块也读进来(prefetch)

2.B KB MB

1GB=1024MB=1024*1024KB=1024*1024*1024B

3.Tmax rotation=1/旋转速率RPM*60s/min*1000ms

Tavg rotation=1/2*Tmax rotation

Tavg transfer=1/旋转速率RPM*60s/min*1000ms*1/(平均扇区数/磁道)

4.逻辑块数=文件大小/每个逻辑块大小

随机情况Taccess =逻辑块数*(Tavg seek+Tavg rotation)

最好情况 Taccess =(Tavg seek+Tavg rotation)+(文件大小/(扇区大小*(平均扇区数/磁道))*Tmax rotation

5.练习题6.8类似结构体中数组的存储

p[0].vel[3] 0 4 8

p[0].acc[3] 12 16 20

P[1].vel[3] 24 28 32

循环体越小,循环迭代次数越多,局部性越好

6.缓存不命中

当tag和valid校验成功是,我们称为cache命中,这时只要将cache中的单元取出,放入CPU寄存器中即可。

当tag或valid校验失败的时候,就说明要访问的内存单元(也可能是连续的一些单元不在缓存中,这时就需要去内存中取了,出现miss.

Cold miss   the cache starts empty

Conflict miss  一些对象会映射到同一缓存块

Capacity miss  缓存太小,不能处理整个工作集

工作集( working set)一个特定时间段内,一个进程所需要的内存

7.cache address 由t位tag,s位set index和b 位block offset组成

中间的位来做索引的原因 

如果高位做索引,一些连续的内存块就会映射到相同的高速缓存块。顺序扫描一个数组时,cache在任何时候都只保存一个块的大小的数组内容。

由于空间局部性原理(程序往往有访问一个聚集空间内存块的倾向)相邻的块之间conflict miss的可能性较高。

如果用中间位做索引,相邻的块总是会映射到不同的高速缓存行,使用效率大大提高,此时高速缓存能够存放整个数组片。

用中间位做索引可以尽量减少conflict miss.

8.C=B*E*S

S--组数

E--每组的行数(cache line)

B--块大小

m--物理地址位数

t=m-(s+b)

s=log2(S)

9.计算机存储体系简介(摘自知乎)

离CPU越近的存储器,速度越快,每字节的成本越高,同时容量也因此越小。

存储器分级,利用的是局部性原理。我们可以以经典的阅读书籍为例。我在读的书,捧在手里(寄存器),我最近频繁阅读的书,放在书桌上(缓存),随时取来读。当然书桌上只能放有限几本书。我更多的书在书架上(内存)。如果书架上没有的书,就去图书馆(磁盘)。我要读的书如果手里没有,那么去书桌上找,如果书桌上没有,去书架上找,如果书架上没有去图书馆去找。可以对应寄存器没有,则从缓存中取,缓存中没有,则从内存中取到缓存,如果内存中没有,则先从磁盘读入内存,再读入缓存,再读入寄存器。

10.cache概述

第一次访问某区域是,就将其复制到cache中,以后访问该区域的指令或者数据时,就不再从主存中取出了。

1)direct-mapped cache

每个组只有一个line   E=1

2) Set associative cache

S个组,每个组E个line   1<E<C/B

替换策略 LFU 把频次最低的淘汰

      LRU 把访问时间最久远的淘汰

 

LRU,最近最少使用,把数据加入一个链表中,按访问时间排序,发生淘汰的时候,把访问时间最旧的淘汰掉。
比如有数据 1,2,1,3,2
此时缓存中已有(1,2)
当3加入的时候,得把后面的2淘汰,变成(3,1)

LFU,最近不经常使用,把数据加入到链表中,按频次排序,一个数据被访问过,把它的频次+1,发生淘汰的时候,把频次低的淘汰掉。
比如有数据 1,1,1,2,2,3
缓存中有(1(3次),2(2次))
当3加入的时候,得把后面的2淘汰,变成(1(3次),3(1次))
区别:LRU 是得把 1 淘汰。

显然
LRU对于循环出现的数据,缓存命中不高
比如,这样的数据,1,1,1,2,2,2,3,4,1,1,1,2,2,2.....
当走到3,4的时候,1,2会被淘汰掉,但是后面还有很多1,2

LFU对于交替出现的数据,缓存命中不高
比如,1,1,1,2,2,3,4,3,4,3,4,3,4,3,4,3,4......
由于前面被(1(3次),2(2次))
3加入把2淘汰,4加入把3淘汰,3加入把4淘汰,然而3,4才是最需要缓存的,1去到了3次,谁也淘汰不了它了。

链接:https://www.jianshu.com/p/1f8e36285539
来源:简书

 

3) Fully associative cache

由一个包含所有高速缓存行的组组成 不用hash判断在哪个组中,在该组中挨个查找  E=C/B

 11.关于写的问题

write through :write immediately to memory

write back:defer write memory until replacement of line

use a dirty bit to set if data defers from memory

 1)WB(write back)+WA(write allocation)

 

 

 2)WT(write through )+WN(write no allocation)

 

 

 http://en.wikipedia.org/wiki/Cache_(computing)

3)Write allocate: data at the missed-write location is loaded to cache, followed by a write-hit operation. In this approach, write misses are similar to read misses.

4)No-write allocate : data at the missed-write location is not loaded to cache, and is written directly to the backing store. In this approach, data is loaded into the cache on read misses only.

write-back cache uses write allocate,

write-through cache uses no-write allocate.

12.

 E=8

B=64

C=32*1024

S=64

t=m(47)-(s+b)=47-6-6=35

13.cache performance

 miss 也要访问一次cache 故1cycle+...

推荐阅读