文章目录
高速缓存器 cache
cache原理及意义
意义:
- 是由高速SRAM组成的高速缓冲存储器,为了解决CPU和主存之间速度不匹配问题。在慢速的 DRAM 和快速 PU 之间插入 至多级速度较快、容撮较小的 SRAM,起到缓冲作用。
原理思想: - 其原理基于程序访问的局部性原理:一般在较短时间间隔内,程序产生的地址多集中在存储器逻辑地址空间的很小范围内.(时间局部性+空间局部性)
- 可在主存和CPU的寄存器之间设置cache, 把正在执行的指令地址附近的一部分指令、数据从主存调入cache, 供CPU一段时间使用,以提高CPU访问存储系统的速度 .程序继续执行时,程序访问的局部性会随时间变化,新的数据需不断从主存调入cache, 替换掉旧数据
工作原理
- 基本结构
三部分:
- 数据存储体,用于存放主存数据的副本;
- 标记存储体,存放标记,不同类型的映射方法标记位数不同,因此,所需要的标记存储体的容量也不同;
- 有效位,用来标识存放在 cache 中的数据是否有效,CPU 查找 cache 以及 cache 更新时都需要使用有效位。
- cache基本组织方式
- cache与主存间以块为单位交换数据
- cache与主存均分为若干数据块 (两者中的块大小相等)
- 相联存储器(CAM)存放查找表
- cpu给出的块地址与查找表中某单元相同,则命中。
- cache系统 读过程
- CPU给出 主存地址( 块地址,块内地址)
- 主存块地址为关键字查找CAM中存储的查找表
- 如相符表示副本在cache中,命中,访问cache
- 否则数据缺失,访问主存 并将数据所在块的副本调入cache(块交换—局部性),载入副本过程可能引起替换。
- Cache的命中率
主存与cache的地址映射以及变换
地址映射:
是指把主存地址空间映射到 cache 的地址空间,即把存放在主存中的程序或数据按照某种规则装入到 cache ,并建立两者之间地址的对应关系,实现这功能的函数称为映像函数。
地址变换:
是指在程序运行时,根据地址映像函数把主存地址变换成cache 地址。 地址映射与变换方法相关,不同的地址映射方法具有不同的地址变换方法
主存和cache划分为同样大小的“块”。
- 全相联的映射方式
- 直接映射方式
- 组相联映射方式。
全相联的映射方式
(1) 主存数据块可以映射到 cache 的任意行,因此 cache 利用率高。
(2) 只要 cache 中还有空行就不会引起冲突,因此 cache 的冲突率低
(3) 因每次地址变换时要比较 cache 所有行的标记值,因此比较电路复杂,且复杂程度与 cache 的行数有关。
(4) 适合小容量 cache 使用
全相联映射方式下,只对主存和 cache 分块,因此,两者的地址只包含块号和块内地址两部分。
假定:
(1) cache 的容量为4K字节
(2) cach 和主存储器中,数据块的大小为 256 字节,即 cache 被分成 16 块, cache块也称为cache行
(3) 主存储器的容量为1M字节
(4) 指令或数据从主存的0号单元开始存放。
主存储器的容量为1M字节,因此地址有20位
由于cache和主存每一块大小一样,因此,主存块的块数为:1M/256=4096块
因此,块号有12位。每一块256,所以块内地址为8位。
比如,要访问第61个字。就把61用二进制表示出来,按照块地址和块内地址的位数划分。再把块地址和tag去比较。具体过程如下:
过程:
- 主存块号也就是标记部分(tag),把主存块号拿出来去cache里面的tag部分找。如果没有命中,将该字所在主存块调入 cache任一空行的数据存储体中,同时空的tag位放入主存块号。有效位变为1。并按照块内偏移取出想要的数据。
- 若命中了,就不用再访问主存了,直接找到块,根据块内偏移,取出想要的数据
- 命中了,不用找主存,未命中,要访问主存
直接相连映射
特点:
- 块映射速度快,一对一映射,无须查表
- 利用索引字段直接对比相应标记位即可
- cache容易冲突,cache利用率低
- 命中率低,适合大容量cache .
注意:每个分区中包含的块数与 cache 中包含的行数相同。直接映射对主存
地址的逻辑划分为:
**要时刻记住主存和cache划分的每一块(最小单元)是一样大小的!!
主存区号由主存被划分的块数 除以 cache行数
区内块号的数量和cache行的数量相等
块内地址位数由此得到
**
过程:
- 将主存地址分成上面对应的三块。比如访问第61个字,就把61写成二进制划分
- 区内块号表示的值就是去cache要找的那一行。
- 命中了,就把主存区号和cache那一行的tag比对,如果相同就读出。如果不同,从主存读取数据并替换cace中那个位置的数据。
替换算法
若cache中已装满数据,当新的数据块要装入时,须将cache中原数据块替换掉。最常用替换算法:
-
先进先出算法FIFO
需要进行替换时,选择最先被调入 cache 中的块作为替换块 。
求为每块记录它们进入 cache 的先后次序 -
最近最不经常使用算法LFU
将一段时间内被访次数最少的那行数据换出。
每行设置一个计数器 ,新调入行的数据从0开始计数,每访问一次被访问行的计数器增1。当需要替换时,对这些特定行的计数值进行比较,将计数值最小的行换出。 -
近期最少使用算法LRU
近期内长久未被访问过的行换出
每行设置一个计数器, cache 每命中一次,命中行计数器清零,其他各行计数器增1 ,因此它是未访问次数计数器. 当需要替换时,比较各特定行的计数值,将计数值最大的行换出 -
随机替换法
cache系统写的流程
- CPU给出写主存的地址
- 以主存块地址为关键字,在相联存储器的查找表中查找
若相符则表示命中,即数据副本在cache里,转3
若缺失则根据写操作策略决定是否将该主存地址对应数据块调入cache - 写入数据到cache
- 根据写策略决定是否写入主存。
写策略:写回法、全写法、写一次法
虚拟存储器
主存、辅存在OS和硬件的管理之下,提供比实际主存大得多的存储空间。—虚拟存储器
虚存空间是靠辅存(磁盘)来支持的
虚拟存储采用与Cache类似原理,提高速度,降低成本,用户感觉到的是一个速度接近主存而容量极大的存储器。
实地址与虚地址:
虚地址或逻辑地址:用户编制程序时使用的地址,其对应的存储空间称为虚存空间或逻辑地址空间;
实地址或物理地址:计算机物理内存的访问地址,其对应的存储空间称为物理存储空间。
在存储系统的层次结构中,虚拟存储器处于“主存-辅存“存储层次,通过在主存和辅存之间增加部分软件(如操作系统)和必要的硬件(如地址映射与转换机构、缺页中断结构等),使辅存和主存构成一个有机的整体,就像一个单一的、可供CPU 直接访问的大容量主存。
每个程序的虚地址空间:
可以远大于实地址空间以提高存储容量为目的
也可远小于实地址空间以地址变换为目的。如实存空间较大,单个任务并不需要很大地址空间,较小的虚存空间则可缩短指令中地址字段长度。
CPU 以虚拟地址访问主存,由存储管理控制部件 MMU(Memory Management Unit)找出虚地址和实地址之间的对应关系,并判断这个虚地址对应的内容是否已经在主存中。如果已经在主存中,则通过 MMU地址变换机构将虚拟地址变换成物理地址, CPU 直接访问主存单元;如果不在主存中,则把包含这个字的一页或一个程序段调入主存,并向 MMU 中填写相关的标志
虚拟存储器的地址映射与变换
在虚拟存储器中有3种地址空间:
虚拟地址、主存地址和磁盘存储器地址
虚拟存储器中的地址映像把虚拟地址空间映像到主存空间,也就是将用户利用虚拟地址访问的内容按照某种规则从辅助存储器装入到主存储器中,并建立虚地址与实地址之间的对应关系。而 地址变换则是在程序被装入主存后,在实际运行时,把虚拟地址变换成实地址或磁盘存储器地址,以便 CPU 从主存或磁盘中读取相应的信息
页式虚拟存储器
在页式虚拟存储器中,虚拟地址被划分成虚拟页号 (V tual Page Number, VPN)和虚拟页偏移量( tual Page Offset , VPO)
物理地址被划分成物理页号 (PhysicalPage Numb r,PPN) 和物理页偏移量 (Physical Page Offset, PPO) 两部分
偏移量大小就是一页的大小。物理页和虚拟页大小相同,所以偏移量不用变换,直接相等
页式虚拟存储器中虚拟地址与物理地址之间的转换基于页表进行。
页表是一张保存虚拟页号和物理页号 之间对应关系的表格,由若干个表项组成,每个表项又包括有效位和物理页号两部分
物理地址(看主存)位数=物理页号位数+偏移位数
虚拟地址位数(看虚拟存储器容量)位数=虚拟页号位数+偏移位数
页表常驻内存
页表项的数量与虚拟地址中虚页号字段的位数有关,如虚页号字段为 20 位,则页表中表项的数为 2 2 0 2^20 220
Cache-主存和主存-辅存 两个存储层次的不同之处
- 侧重点不同。 cache主要解决主存与CPU的速度差异问题;而就性能价格比的提高而言,虚存主要是解决存储容量问题。
- 数据通路不同。 CPU与cache和主存之间均有直接访问通路,cache不命中时可直接访问主存;而虚存所依赖的辅存与CPU之间不存在直接的数据通路,当主存不命中时只能通过调页解决,CPU最终还是要访问主存。
- 透明性不同。 cache的管理完全由硬件完成,对系统程序员和应用程序员均透明;而虚存管理由软件(OS)和硬件共同完成,因此 虚存对实现存储管理的系统程序员不透明,而只对应用程序员透明。
- 未命中时的损失不同。 由于主存的存取时间是cache的存取时间的5~10倍,而主存的存取速度通常比辅存的存取速度快上千倍,故主存未命中时系统的性能损失要远大于cache未命中时的损失。