前言
本文为JMU22级软件计组考前复习而总结归纳,吸收了课本上晦涩且长篇大论的文章,以尽量简洁易懂的语句来对知识点进行归纳。
三级存储架构
- 高速缓存:速度最快,容量最小。
- 内存:速度稍快,容量较大。
- 外存:速度慢,容量最大。
按存取方式分类
随机存取存储器RAM
Random Access Memory
- 对任意存储单元的读写速度一致。随机是指,不像磁盘那样一个个扇区顺序找过去,导致位置不同的存储单元读写速度不同。
- 断电数据丢失
只读存储器ROM
Read Only Memory
也称固定存储器,因为信息一旦写入就固定不变。
- 只能读,不能写
- 断电数据仍在
顺序存取存储器SAM
Sequential Access Memory
- 内容按顺序存放,所以存取时间长短与信息在存储器上的物理位置有关。
直接存取存储器DAM
Direct Access Memory
找某个存储单元,先直接跳到一个大块,再遍历那个块。介于RAM和SAM之间。
- 存取时间长短与信息在存储器上的物理位置有关,但是又没有SAM那么慢
刷新方式
集中刷新
固定2ms里的某一整段用来集中读写,另一段集中用来刷新。
优点:主存利用率高,控制简单
缺点:集中刷新时不能使用存储器,这就会形成死区。
分散刷新
把刷新周期安排在读写小周期之后。适合低速系统。
优点:控制简单,主存工作没有很长死区。
缺点:利用率低。(写一点就刷新一点)
异步刷新(大多数)
按行决定刷新周期,分散安排在2ms。
比如有128行的芯片,就2/128=15.6微秒提一次刷新请求,如果有空就刷新,如果cpu正在访存就等待cpu。
优点:主存工作没有很长死区,效率影响不大。利用率高。
缺点:控制复杂。(但是可以利用现有的DMA控制器)
内存拓展
位拓展
位拓展就是,用多个芯片对字长进行拓展。地址线增加。比如8位并联8位组成16位。
字数拓展
字数拓展就是,用多个芯片组成容量更大的存储器(拓展存储单元数)。比如2kb和2kb组成4kb。
缓存Cache
局部性原理
运行程序访问的数据,通常集中在某一局部范围,该范围外的地址很少访问。
缓存把这部分数据从内存读入,就提高读写效率。
地址映像
cpu读取某个内存地址的数据,要先去看缓存里有没有。这就需要把内存地址映射到缓存。
直接映像
一个主存对应一个缓存地址,就类似不采取任何解决哈希冲突措施的哈希映射。所以同一个缓存地址很容易冲突。
优点:访问速度快。
缺点:映射到的单元满时,即使其他空间是空闲的,也只会替换掉映射到的单元。空间利用率低。
全相连映像
一个主存地址对应任意缓存地址,就类似哈希映射解决冲突的方法是放进一个无限的链表。所以找起来就要遍历,速度慢。
优点:映像关系灵活。只要有存储单元空闲,就可以存放数据。空间利用率高。
缺点:查找数据需要对Cache进行遍历,速度慢。
组相连映像
一个主存对应一个缓存块,这个块又分好几个单元。就类似哈希映射解决冲突的方法是采用好多个桶。
组相连映像只有一个组的时候就是全相连映像。
替换算法
当缓存满了,但是又有新的内存页想要调入时,就要把缓存里已有的替换下来。
先进先出算法FIFO
最先进入缓存的优先被替换。
最近最少算法LRU
最近使用最少的优先淘汰。
缓存读写过程
读
一边把要读的地址给内存,一边给缓存。对比缓存是否命中,命中就从缓存读。没命中就从主存读,同时通过某些算法衡量要不要读入缓存。
写
写回
写回法写命中时,对cache进行写操作。未命中则把内存单元复制到cacheLine进行写操作,直到最后要把这块内容从缓存中取出,才对内存进行写操作。
写直达
写直达是直接写内存(至于写不写缓存就看有没有命中)。