600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【王道计组笔记】Cache高速缓存基本工作原理

【王道计组笔记】Cache高速缓存基本工作原理

时间:2019-10-07 14:37:44

相关推荐

【王道计组笔记】Cache高速缓存基本工作原理

缓存器 的引入:

【王道计组笔记】高速缓存器:局部性原理及性能分析_muse_age的博客-CSDN博客

1.主存的块放到Cache中哪个位置?CPU向缓存中读取一个数据过程?

(1)空位随意放:全相联映射

(2)对号入座:直接映射

(3)按号分组,组内随意放:组相联映射

地址映射:

全相联映射:

主存一块数据存放到Cache单元时,不仅要存放数据,还要存放有效位(1个二进制数)和主存的高位(上例为22位),所以用23个二进制数来确定主存地址与Cache地址的映射

优点:空位利用率高

缺点:存放标记项多

(极少用)

直接映射:

主存中的某一块通过固定的计算方法放在Cache中的某一块

缺点:空位利用率低

优点:存放标记项少

(极少用)

组相联映射:

存和Cache都分组,主存中一个组内的块数与Cache中的分组数相同,组间采用直接映射,组内采用全相联映射。主存块存放到哪个组是固定的,至于存到该组哪一块则是灵活的

2.问题:对于(1)如果Cache满了应该怎么办,对于(2)(3),对于位置被占用怎么办?

替换算法:

(了解)

1、随机算法(RAND)

了解:

随机地确定替换的Cache块。实现简单,但没有依据程序访问的局部性原理,故可能命中率低。

2、先进先出算法(FIFO):

选择最早进入的行进行替换。比较容易实现,但没有依据程序访问的局部性原理,可能会把一些需要经常使用的程序块(循环程序)也作为最早进入Cache块替换掉

3、近期最少使用算法(LRU):

依据程序访问的局部性原理选择近期长久未访问过的存储行作为替换的行,平均命中率要比FIFO高,是堆栈类算法

LRU算法对每行设置一个计数器,Cache每命中一次,命中行计数器请0,而其他各行计数器均+1,需要替换时比较各特定行计数值,将计数值最大的行换出

4、最不经常使用算法(LFU):

将一段时间内被访问次数最少的存储行换出。每行也设置一个计数器,新行建立后从0开始计数,每访问一次,被访问的计数器+1,需要替换时比较各特定行的计数值,将计数值最小的行换出

虚拟存储器:

存储器的层次结构:

为什么要设立虚拟存储器:

不同辅存提供的地址形式不一样,访问的数据块的大小也不一样,cache也可以有不同的层次(一级缓存,二级缓存),如果要用户去掌握硬件上的细节很麻烦。-

>引入虚拟存储器:整个硬件和软件搭配起来提供给用户的逻辑模型。(逻辑模型更关注逻辑上的实现,不关注细节)

功能:用户给出一个地址,叫做虚地址或逻辑地址,虚拟存储器要给出该地址对应的数据

*逻辑地址与物理地址由软件实时控制,而不是一一对应。

实现:由辅助硬件将虚地址映射到主存当中的某个单元,主存单元地址成为实地址或物理地址

分类:

页式虚拟存储器:

虚拟空间与主存空间都被划分成同样大小的页

实页:主存的页

虚页:虚存的页

由于页的大小是相同的,所以只需处理虚页号到实页号的映射。把虚页号到实页号的映射关系存到页表中

页表:存放实页号和装入位。

装入位表示虚拟的地址对应的数据是否放在主存中,如果放在主存中直接访问Cache-主存,否则把辅存中的数据放入到主存中。

虚页号与实页号的映射:

页表基址寄存器:存放页表起始地址,和虚页号拼接会得到一个完整的地址。

理解:告诉页表的起始地址,虚页号相当于页表的偏移地址,就可以映射到对应的实页号

段式虚拟存储器

按程序的逻辑结构划分,各个段的长度因程序而异。

虚拟地址分为:段号和段内地址

段表:每一行记录了某个段对应的段号,装入位,段起点和段长等信息。由于段的长度可变,所以段表中要给出各段的起始地址与段的长度。

段页式虚拟存储器

把程序按逻辑结构分段,每段再划分为固定大小的页。主存空间也划分为大小相等的页,程序对主存的调入,调出仍以页为基本传送单位。每个程序对应一个段表,每段对应一个页表。

虚拟地址:段号+段内页号+页内地址

页表和段表存放在主存中,收到虚拟地址后要先访问主存,查询页表,段表,进行虚实地址转换。放在主存中的页表称为慢表

快表(TLB):用高速缓冲存储器存放常用的页表项

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。