高速缓冲存储器cache介绍_c6713的第一级程序高速缓冲和第一级数据高速缓冲容量都是8kb,第一级存储器/高速缓冲的容量为32-程序员宅基地

技术标签: cache  计算机基础  

cache介绍

一、 Cache- 主存存储结构及其实现

     为了解决存储器系统的容量、存取速度及单位成本之间的矛盾,可以采用 Cache- 主存存储结构,即在主存和 CPU 之间设置高速缓冲存储器 Cache ,把正在执行的指令代码单元附近的一部分指令代码或数据从主存装入 Cache 中,供 CPU 在一段时间内使用,由于存储器访问的局部性,在一定容量 Cache 的条件下,我们可以做到使 CPU 大部分取指令代码及进行数据读写的操作都只要通过访问 Cache ,而不是访问主存而实现。

优点:

•  Cache 的读写速度几乎能够与 CPU 进行匹配,所以微机系统的存取速度可以大大提高;

•  Cache 的容量相对主存来说并不是太大,所以整个存储器系统的成本并没有上升很多。

采用了 Cache- 主存存储结构以后,整个存储器系统的容量及单位成本能够主存相当,而存取速度可以与 Cache 的读写速度相当,这就很好地解决了存储器系统的上述三个方面性能之间的矛盾。 


如图 4-21(P106) ,是 Cache- 主存结构示意图,在主存和 CPU 之间增加了一个容量相对较小的双极型静态 RAM 作为高速缓冲存储器 Cache ,为了实现 Cache 与主存之间的数据交换,系统中还相应地增加了辅助的硬件电路。

管理这两级存储器的部件为 Cache 控制器, CPU 与主存之间的数据传输必须经过

图 4-21 主存 -Cache 层次示意图 Cache 控制器 ( 见图 4-22 (P108)) 进行, Cache 控制器将来自 CPU 的数据读写请求,转向 Cache 存储器,如果数据在 Cache 中,则 CPU 对 Cache 进行读写操作,称为 一次命中 。命中时, CPU 从 Cache 中读 ( 写 ) 数据。由于 Cache 速度与 CPU 速度相匹配,因此不需要插入等待状态,故 CPU 处于零等待状态,也就是说也就是说 CPU 与 Cache 达到了同步,因此,有时称高速缓存为同步 Cache ;若数据不在 Cache 中,则 CPU 对主存操作,称为 一次失败 。失败时, CPU 必须在其总线周期中插入等待周期 T W 。


在主存— Cache 存储体系中,所有的程序代码和数据仍然都存放在主存中,

Cache 存储器只是在系统运行过程中,动态地存放了主存中的一部分程序块和

数据块的副本,这是一种以块为单位的存储方式。块的大小称为“块长”,块长一般取一个主存周期所能调出的信息长度。

假设主存的地址码为 n 位,则其共有 2 n 个单元,将主存分块 (block) ,每块有 B 个字节,则一共可以分成 2 n /B 块。 Cache 也由同样大小的块组成,由于其容量小,所以块的数目小得多,也就是说,主存中只有一小部分块的内容可存放在 Cache 中。

在 Cache 中,每一块外加有一个标记,指明它是主存中哪一块的副本,所

以该标记的内容相当于主存中块的编号。假定主存地址为 n = M + b 位,其中 M

称为主存的块地址,而 b 则称为主存的块内地址,即:主存的块数为 2 M ,块内

字节数为 2 b ;同样,假定 Cache 地址 n =N十 b 位,其中 N 称为 Cache 块地址,

而 b 为 Cache 的块内地址,即 Cache 的块数为 2 N ,块内字节数为 2 b ,通常使主

存与 Cache 的块内地址码数量相同,即 b = b ,即 Cache 的块内字节数与主存的

块内字节数相同。

当 CPU 发出读请求时,将主存地址M位 ( 或M位中的一部分 ) 与 Cache 某块的标记相比较,根据其比较结果是否相等而区分出两种情况:当比较结果相等时,说明需要的数据已在 Cache 中,那么直接访问 Cache 就行了,在 CPU 与 Cache 之间,通常一次传送一个字;当比较结果不相等时,说明需要的数据尚未调入 Cache ,那么就要把该数据所在的整个字块从主存一次调进来。


二、 Cache- 主存存储结构的命中率

     命中率指 CPU 所要访问的信息在 Cache 中的比率,相应地将所要访问的信息不在 Cache 中的比率称为失效率。

Cache 的命中率除了与 Cache 的容量有关外,还与地址映象的方式有关。

目前, Cache 存储器容量主要有 256KB 和 512KB 等。这些大容量的 Cache

存储器,使 CPU 访问 Cache 的命中率高达 90 %至 99 %,大大提高了 CPU 访问

数据的速度,提高了系统的性能。 


三、 两级 Cache- 主存存储结构

      CPU 内部的 Cache 与主机板上的 Cache 就形成两级 Cache 结构。

CPU 工作时,首先在第一级 Cache( 微处理器内的 Cache) 中查找数据,如果

找不到,则在第二级 Cache( 主机板上的 Cache) 中查找,若数据在第二级 Cache

中, Cache 控制器在传输据的同时,修改第一级 Cache ;如果数据既不在第一级

Cache 也不在第二级 Cache 中, Cache 控制器则从主存中获取数据,同时将数据

提供给 CPU 并修改两级 Cache 。两级 Cache 结构,提高了命中率,加快了处理

速度,使 CPU 对 Cache 的操作命中率高达 98 %以上。图 4-22 给出了主板上 Cache 存储器系统的基本结构。


三、 Cache 的基本操作

1 .读操作

     当 CPU 发出读操作命令时,要根据它产生的主存地址分两种情形:一种是

需要的数据已在 Cache 存储器中,那么只需直接访问 Cache 存储器,从对应单

元中读取信息到数据总线;另一种是所需要的数据尚未装入 Cache 存储器, CPU

在从主存读取信息的同时,由 Cache 替换部件把该地址所在的那块存储内容从

主存拷贝到 Cache 中。 Cache 存储器中保存的字块是主存相应字块的副本。

2 .写操作

     当CPU发出写操作命令时,也要根据它产生的主存地址分为两种情形:一种是不命中时,只向主存写入信息,不必同时把这个地址单元所在的整块内容调入Cache中;另一种是命中时,这时会遇到如何保持Cache与主存的一致性问题,通常有三种处理方式:  

  1.直写式(write through)即CPU在向Cache写入数据的同时,也把数据写入主存以保证Cache和主存中相应单元数据的一致性,其特点是简单可靠,但由于CPU每次更新时都要对主存写入,速度必然受影响。  
  2.缓写式(post write)即CPU在更新Cache时不直接更新主存中的数据,而是把更新的数据送入一个缓存器暂存,在适当的时候再把缓存器中的内容写入主存。在这种方式下,CPU不必等待主存写入而造成的时延,在一定程度上提高了速度,但由于缓存器只有有限的容量,只能锁存一次写入的数据,如果是连续写入,CPU仍需要等待。    
  3.回写式(write back)即CPU只向Cache写入,并用标记加以注明,直到Cache中被写过的块要被进入的信息块取代时,才一次写入主存。这种方式考虑到写入的往往是中间结果,每次写入主存速度慢而且不必要。其特点是速度快,避免了不必要的冗余写操作,但结构上较复杂。  


四、 地址映象及其方式

     我们知道,主存与 Cache 之间的信息交换,是以数据块的形式来进行的,

为了把信息从主存调入 Cache ,必须应用某种函数把主存块映象到 Cache 块,

称作地址映象。当信息按这种映象关系装入 Cache 后,系统在执行程序时,应

将主存地址变换为 Cache 地址,这个变换过程叫做地址变换(由于 Cache 的存储空间较小,因此, Cache 中的一个存储块要与主存中的若干个存储块相对应,即若干个主存块将映象到同一个 Cache 块)。

根据不同的地址对应方法,地址映象的方式通常有直接映象、全相联映象和组相联映象三种。

1 .直接映象

     每个主存块映象到 Cache 中的一个指定块的方式称为直接映象。在直接映象方式下,主存中某一特定存储块只可调入 Cache 中的一个指定位置,如果主存中另一个存储块也要调入该位置,则将发生冲突。

地址映象的方法 

将主存块地址对 Cache 的块号取模,即可得到 Cache 中的块地址,这相当于将主存的空间按 Cache 的大小进行分区,每区内相同的块号映象到 Cache 中相同

的块的位置。

一般来说,如果 Cache 被分成 2 N 块,主存被分成同样大小的 2 M 块, 则主存与 Cache 中块的对应关系如图 4-23 所示。

直接映象函数可定义为:

j = i mod 2 N

其中 j 是 Cache 中的块号; i 是主存中的块号。在这种映象方式中,主存的

第 0 块,第 2 N 块,第 2 N+l 块,…,只能映象到 Cache 的第 0 块,而主存的第 1

块,第 2 N 十 l 块,第 2 N+1 十 1 块,…,只能映象到 Cache 的第 1 块,依次类推。

例如,一个 Cache 的大小为 2K 字,每个块为 16 字,这样 Cache 中共有 128

个块。假设主存的容量是 256K 字,则共有 16384 个块。主存的地址码将有 18

位。在直接映象方式下,主存中的第 1 ~ 128 块映象到 Cache 中的第 1 ~ 128 块,

第 129 块则映象到 Cache 中的第 1 块,第 130 块映象到 Cache 中的第 2 块,依

次类推。

直接映象函数的优点是实现简单,缺点是不够灵活,尤其是当程序往返访问两个相互冲突的块中的数据时, Cache 的

命中率将急剧下降。


2 .全相联映象

     如图 4-24 所示,它允许主存中的每一个字块映象到 Cache 存储器的任何一个字块位置上,也允许从确实已被占满的 Cache 存储器中替换出任何一个旧字块当访问一个块中的数据时,块地址要与 Cache 块表中的所有地址标记进行比较以确定是否命中。在数据块调入时,存在着一个比较复杂的替换策略问题,即决定将数据块调入 Cache 中什么位置,将 Cache 中哪一块数据调出到主存。

全相联方法块冲突的概率低, Cache 的利用率高,是一种最理想的解决方案,但全相联 Cache 中块表查找的速度慢,由于 Cache 的速度要求高,因此全部比较和替换策略都要用硬件实现,控制复杂,实现起来也比较困难。


3 .组相联映象

     组相联映象方式是全相联映象和直接映象的一种折衷方案。这种方法将存

储空间分成若干组,各组之间是直接映象,而组内各块之间则是全相联映象。

如图 4-25 所示,在组相联映象方式下,主存中存储块的数据可调入 Cache 中一

个指定组内的任意块中。它是上述两种映象方式的一般形式,如果组的大小为

1 时就变成了直接映象;如果组的大小为整个 Cache 的大小时就变成了全相联

映象。


例如,把 Cache 子块分成 2 C 组,每组包含 2 R 个字块,那么,主存字块 M M (i)(0 ≤ i ≤ 2 M -1) 可以用下列映象函数映象到 Cache 字块 MN(j)( 0 ≤ j ≤ 2 N -1) 上:

j = (i mod 2 C ) × 2 R 十 k ( 0 ≤ k ≤ 2 R -1)

例如, 设 C = 3 位, R = 1 位,考虑

主存字块 15 可映象到 Cache 的哪一个字块中。根据公式,可得:

j = (i mod 2 C ) × 2 R 十 k

= (15 mod 2 3 ) × 2 1 十 k

= 7 × 2 十 k

= 14 十 k

又: 0 ≤ k ≤ 2 R -1 = 2 1 - 1 = 1

即: k = 0 或 1

代入后得 j = 14(k = 0) 或 15(k = 1) 。所以主存模块 15 可映象到 Cache 字块 14

或 15 ,在第 7 组。同样可计算出主存字块 17 可映象到 Cache 的第 0 块或第 1

块 , 在第 1 组。

组相联映象方法在判断块命中以及替换算法上都要比全相联映象方法简

单,块冲突的概率比直接映象方法的低,其命中率介于直接映象和全相联映象

方法之间。


五、 替换策略

     主存与 Cache 之间的信息交换,是以存储块的形式来进行的,主存的块长与 Cache 的块长相同,但由于 Cache 的存储空间较小,主存的存储空间较大,因此, Cache 中的一个存储块要与主存中的若干个存储块相对应,若在调入主存中一个存储块时, Cache 中相应的位置已被其它存储块占有,则必须去掉—个旧的字块,让位于一个新的字块。这称为替换策略或替换算法。

常用的两种替换策略是:先进先出 (FIFO) 策略和近期最少使用 (LRU) 策

略。

1 .先进先出 (FIFO) 策略

    FIFO ( First In First Out )策略总是把一组中最先调入 Cache 存储器的字块替换出去,它不需要随时记录各个字块的使用情况,所以实现容易,开销小。

2 .近期最少使用 (LRU) 策略

    LRU(Least Recently Used) 策略是把一组中近期最少使用的字块替换出去,

这种替换策略需随时记录 Cache 存储器中各个字块的使用情况,以便确定哪个

字块是近期最少使用的字块。 LRU 替换策略的平均命中率比 FIFO 要高,并且

当分组容量加大时,能提高该替换策略的命中率。


LRU 实现方法是:把组中各块的使用情况

记录在一张表上 ( 如图 4-26 所示 ) ,并把最近使用过的块放在表的最上面,设组

内有 8 个信息块,其地址编号为 0 , 1 ,…, 7 。当要求替换时,首先更新 7 号信息块的内容;如要访问 7 号信息块,则将 7 写到表的顶部,其它号向下顺移。接着访问 5 号信息块,如果此时命中,不需要替换,也要将 5 移到表的顶部,其它号向下顺移。 6 号数据块是以后要首先被替换的,……。

LRU 策略的另一种实现方法是:对 Cache 存储器中的每一个字块都附设一

个计数器,记录其被使用的情况。每当 Cache 中的一块信息被命中时,比命中

块计数值低的信息块的计数器均加 1 ,而命中块的计数器则清 0 。显然,采用这

种计数方法,各信息块的计数值总是不相同的。一旦不命中的情况发生时,新

信息块就要从主存调入 Cache 存储器,以替换计数值最大的那片存储区。这时,

新信息块的计数值为 0 ,而其余信息块的计数值均加 1 ,从而保证了那些活跃的

信息块(即经常被命中或最近被命中的信息块)的计数值要小,而近来越不活

跃的信息块的计数值越大。这样,系统就可以根据信息块的计数值来决定先替

换谁。


六、 P III 中采用的 Cache 技术

     在本节的开头曾提到,为了提高 CPU 访问存储器的速度,在 486 和 Pentium

机中都设计了一定容量的数据 Cache 和指令 Cache ( L1 ) , 并且还可以使用处理

器外部的第二级 Cache ( L2 )。 Pentium Pro 在片内第一级 Cache 的设计方案中,

也分别设置了指令 Cache 与数据 Cache 。指令 Cache 的容量为 8kB ,采用 2 路

组相联映像方式。数据 Cache 的容量也为 8kB ,但采用 4 路组相联映像方式。

它采用了内嵌式或称捆绑式 L2 Cache ,大小为 256kB 或 512kB 。此时的 L2 已

经用线路直接连到 CPU 上,益处之一就是减少了对急剧增多 L1 Cache 的需求。

L2 Cache 还能与 CPU 同步运行,即当 L1 Cache 不命中时,立刻访问 L2 Cache ,

不产生附加延迟。

     Pentium II 是 Pentium Pro 的改进型,同样有 2 级 Cache , L1 为 32kB( 指令和

数据 Cache 各 16kB) 是 Pentium Pro 的两倍, L2 为 512kB 。 Pentium II 与 Pentium

Pro 在 L2 Cache 的不同是由于制作成本的原因。此时, L2 Cache 已不在内嵌芯

片上,而是与 CPU 通过专用 64 位高速缓存总线相联,与其它元器件共同被组

装在同一基板上,即 “ 单边接触盒 ” 上。

Pentium III 也是基于 Pentium Pro 结构为核心,它具有 32kB 非锁定 L1 Cache

和 512kB 非锁定 L2 Cache 。 L2 可扩充到 1 ~ 2MB ,具有更合理的内存管理,可

以有效地对大于 L2 缓存的数据块进行处理,使 CPU 、 Cache 和主存存取更趋合

理,提高了系统整体性能。在执行视频回放和访问大型数据库时,高效率的高

速缓存管理使 P III 避免了对 L2 Cache 的不必要的存取。由于消除了缓冲失败,

多媒体和其它对时间敏感的操作性能更高了。对于可缓存的内容, P III 通过预先

读取期望的数据到高速缓存里来提高速度,这一特色提高了高速缓存的命中率,

减少了存取时间。

     为进一步发挥 Cache 的作用,改进内存性能并使之与 CPU 发展同步来维护

系统平衡,一些制造 CPU 的厂家增加了控制缓存的指令。 Intel 公司也在 Pentium III 处理器中新增加了 70 条 3D 及多媒体的 SSE 指令集,其中有很重要

的一组指令是缓存控制指令。 AMD 公司在 K6-2 和 K6-3 中的 3DNow 多媒体指

令中,也有从 L1 数据 Cache 中预取最新数据的数据预取指令 (Prefetch) 。

Pentium III 处理器有两类缓存控制指令。一类是数据据预存取 (Prefetch) 指

令,能够增加从主存到缓存的数据流;另一类是内存流优化处理 (Memory

Streaming) 指令,能够增加从处理器到主存的数据流。这两类指令都赋予了应用

开发人员对缓存内容更大的控制能力,使他们能够控制缓存操作以满足其应用

的需求,同时也提高了 Cache 的效率。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Agoni_xiao/article/details/78288050

智能推荐

用python+graphviz/networkx画目录结构树状图_networkx画树状图-程序员宅基地

文章浏览阅读1.3w次,点赞2次,收藏22次。想着用python绘制某目录的树状图,一开始想到了用grapgviz,因为去年离职的时候整理文档,用graphviz画过代码调用结构图。graphviz有一门自己的语言DOT,dot很简单,加点加边设置属性就这点东西,而且有python接口。我在ubuntu下,先要安装graphviz软件,官网有deb包,然后python安装pygraphviz模块。目标功能是输入一个路径,输出该路径下的_networkx画树状图

【绿色求索T1设备资产通1.5单机版】适用于资产密集型企业管理_求索t1设备资产通系统(单机版)注册码-程序员宅基地

文章浏览阅读899次。绿色求索T1设备资产通 1.5 单机版 [企业管理高价值设备资产的使用情况]下载软件大小:5.56MB软件语言:简体中文软件类别:软件授权:免费软件更新时间:2013-08-03 07:44:00应用平台:Win2K,WinXP,Win2003,Vista,Win7绿色软件下么官方地址:系统之家官网求索T1设备资产通 1.5 单机版 _求索t1设备资产通系统(单机版)注册码

王桂林C语言从放弃到入门课程-程序员宅基地

文章浏览阅读195次。课程目标16天,每天6节课,每节40分钟课堂实录,带你征服C语言,让所有学过和没有学过C语言的人,或是正准备学习C语言的人,找到学习C语言的不二法门。适用人群所有学过和没有学过C语言的人,或是正准备学习C语言的人!

xml实体注入问题_xml注入 内容注入-程序员宅基地

文章浏览阅读618次。xml实体注入问题 https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#SAXBuilder_xml注入 内容注入

CRM是否有效?可通过这些办法判断!_crm如何判断会员唯一性-程序员宅基地

文章浏览阅读204次。CRM就是关于客户与公司销售团队之间的客户关系管理,它是一个销售人员管理工具。作为一个工具型产品,CRM能减少更多的人为错误,提高工作效率,从而达到更好的营收。如果在使用CRM期间出现以下现象:不能从不同潜在客户来源中获取潜在客户,不能将潜在客户转化为销售订单,不能提供合适的销售渠道,不能提高销售人员的工作效率。说明你使用的CRM存在问题。如何判断CRM是否有效?为了检查CRM的有效性,销售人员可以对捕获到的潜在客户和具体需求进行跟踪。销售人员能够判断这个潜在客户是否值得做进一步的跟进,或者是否应该放_crm如何判断会员唯一性

数据库三大范式_怎么理解第三范式-程序员宅基地

文章浏览阅读617次,点赞2次,收藏3次。1.第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。2. 第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。3.第三范式:任何非主属性不依赖于其它非主属性。在实际的开发中需要考虑诸多问题,如:考虑商业化的需求和目标(成本,用户体验),数据库的性能更加重要在规范性能问题的时候,需要适当地考虑一下规范性有时候会故意给某些表增加一些冗余的字段(多表查询→单表查询)_怎么理解第三范式

随便推点

php中大量数据如何优化,如何对PHP导出的海量数据进行优化-程序员宅基地

文章浏览阅读429次。本篇文章的主要主要讲述的是对PHP导出的海量数据进行优化,具有一定的参考价值,有需要的朋友可以看看。导出数据量很大的情况下,生成excel的内存需求非常庞大,服务器吃不消,这个时候考虑生成csv来解决问题,cvs读写性能比excel高。测试表student 数据(大家可以脚本插入300多万测数据。这里只给个简单的示例了)SET NAMES utf8mb4;SET FOREIGN_KEY_CHECK..._php大数据优化

有道云笔记怎么保存html,有道云笔记如何保存网页 有道笔记保存页面教程-程序员宅基地

文章浏览阅读905次。有道云笔记如何保存网页 有道笔记保存页面教程网页剪报功能支持哪些浏览器?IE,360安全,Firefox,Chrome,搜狗,遨游等主流浏览器。不能收藏网页,原因是没有安装浏览器剪报插件:②点击如下图部门网页剪报”立即体验“。③在弹出”有道云笔记网页剪报“网页对话框,点击如下图”添加到浏览器“。④然后在弹出”确认新增扩展程序“网页对话框中,点击”添加“即可。⑤现在,在浏览器右上角多了一个标记,只需..._有道云笔记装扩展

EasyUI 取得选中行数据-程序员宅基地

文章浏览阅读63次。转自:http://www.jeasyui.net/tutorial/23.html本实例演示如何取得选中行数据。数据网格(datagrid)组件包含两种方法来检索选中行数据:getSelected:取得第一个选中行数据,如果没有选中行,则返回 null,否则返回记录。getSelections:取得所有选中行数据,返回元素记录的数组数据。创建数据网格(DataGrid)&lt..._easyui 获取table选中的一行的值

云上武功秘籍(三)华为云上部署金蝶EAS Cloud_云上部署含带宽-程序员宅基地

文章浏览阅读1k次。每天琐事缠身,查错、维护、开接口?——不,你可以更加富有创造力!假期千里迢迢飞回公司机房处理一个小故障?——不,你可以更加自由高效!如果这就是你的写照,那为什么不选择上云呢?如果要上云,那为什么不选择华为云呢?云上秘籍第三弹——超详细、超全面的金蝶EAS Cloud部署教程来啦!负载均衡?WEB安全?一篇文章全部搞定!最后,请大家相信我们华为云生态 ISV团队的诚意和实力,谢谢!_云上部署含带宽

京东OLAP实践之路-程序员宅基地

文章浏览阅读640次。导读:本文主要介绍京东在构建OLAP从无到有各环节考虑的重点,由需求场景出发,剖析当前存在的问题,并提供解决方案,最后介绍OLAP的发展过程。▌需求场景1. 京东数据入口① 业务数据:订单..._京东 风控flink实践之路

qt qml与c++_qt c++ qml-程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏17次。QMl是一种高效的开发UI 的语言。QML(Qt Meta-Object Language,Qt元对象语言)是一种声明式编程语言,并且它是Qt框架的一个组成部分。Action 对应QAction,提供能够绑定到导航和视图的抽象的用户界面动作。StackView 对应QStackedWidget,提供基于栈的层叠布局。TabView 对应QTabWidget,提供带有标签的基于栈的层叠布局。TabView 对应QTabWidget,提供带有标签的基于栈的层叠布局。_qt c++ qml