精华内容
下载资源
问答
  • 计算机中高速缓存作用

    千次阅读 2020-12-23 22:49:19
    展开全部计算机硬盘的高速缓存:1.高速缓存的概念。缓存(Cache memory)是硬盘控制器上的一块内存e5a48de588b662616964757a686964616f31333337383934芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲...

    展开全部

    计算机硬盘的高速缓存:

    1.高速缓存的概念。缓存(Cache memory)是硬盘控制器上的一块内存e5a48de588b662616964757a686964616f31333337383934芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据,如果有大缓存,则可以将那些零碎数据暂存在缓存中,减小外系统的负荷,也提高了数据的传输速度。

    2.高速缓存的作用。硬盘的缓存主要起三种作用:一是预读取。当硬盘受到CPU指令控制开始读取数据时,硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中(由于硬盘上数据存储时是比较连续的,所以读取命中率较高),当需要读取下一个或者几个簇中的数据的时候,硬盘则不需要再次读取数据,直接把缓存中的数据传输到内存中就可以了,由于缓存的速度远远高于磁头读写的速度,所以能够达到明显改善性能的目的;二是对写入动作进行缓存。当硬盘接到写入数据的指令之后,并不会马上将数据写入到盘片上,而是先暂时存储在缓存里,然后发送一个“数据已写入”的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的时候)时再将缓存中的数据写入到盘片上。虽然对于写入数据的性能有一定提升,但也不可避免地带来了安全隐患——如果数据还在缓存里的时候突然掉电,那么这些数据就会丢失。对于这个问题,硬盘厂商们自然也有解决办法:掉电时,磁头会借助惯性将缓存中的数据写入零磁道以外的暂存区域,等到下次启动时再将这些数据写入目的地;第三个作用就是临时存储最近访问过的数据。有时候,某些数据是会经常需要访问的,硬盘内部的缓存会将读取比较频繁的一些数据存储在缓存中,再次读取时就可以直接从缓存中直接传输。

    缓存容量的大小不同品牌、不同型号的产品各不相同,早期的硬盘缓存基本都很小,只有几百KB,已无法满足用户的需求。2MB和8MB缓存是现今主流硬盘所采用,而在服务器或特殊应用领域中还有缓存容量更大的产品,甚至达到了16MB、64MB等。

    大容量的缓存虽然可以在硬盘进行读写工作状态下,让更多的数据存储在缓存中,以提高硬盘的访问速度,但并不意味着缓存越大就越出众。缓存的应用存在一个算法的问题,即便缓存容量很大,而没有一个高效率的算法,那将导致应用中缓存数据的命中率偏低,无法有效发挥出大容量缓存的优势。算法是和缓存容量相辅相成,大容量的缓存需要更为有效率的算法,否则性能会大大折扣,从技术角度上说,高容量缓存的算法是直接影响到硬盘性能发挥的重要因素。更大容量缓存是未来硬盘发展的必然趋势。

    高速缓存产生作用的时机:

    3.作用体现及应用。 现在拥有大量数据,但最经常使用的往往只有其中一小部分。如国标汉字有6763个,但经常使用的只有3000个,其中几百个又占了50%以上的使用频率。因此人们想到,如果将这几百个放到存取最快的地方,就可以用很小的代价大大提高工作速度。高速缓存的工作原理基本就是这样。例如我们知道内存的存取速度比硬盘快得多,我们可以在一开机时就将宋体字的前3000个、黑体字最常用的500个装入内存专门开辟的区域,这样当使用这部分字的时候就可以从内存取字,其余的才会去读硬盘。内存开辟的这部分区域就叫做高速缓存,它可能只占所有字体存储量的十分之一,但可以将读写字库的速度提高几十倍。

    具体看一下高速缓存起的使用。假设我们有100M数据,其中1M数据的使用频率占到了50%,又知内存存取时间只有硬盘时间的10万分之一,因此如果我们用1M内存做高速缓存存储最常用的1M数据就可以差不多将平均存取速度提高一倍。从这个例子可以看出,当数据使用越不平均,两种存储器之间的速度差越大时CACHE的作用就越大。

    以上是一类使用分布固定的例子,在这种情况下,只要固定将这一部分数据装入最快的存储器就可以了。但在许多情况下,数据的使用频率是不确定的,特别它是与时间相关的。如当我们在写一篇文章时,对这篇文章的内容存取就特别频繁。而过一会儿又去修一张照片,存取操作就转移到了这张照片的数据上去,文章的数据就基本不用了。要让一个系统能够自动地根据当前数据的使用频率改变高速存储器中的内容才能使我们专门开出的高速缓存起作用。因此整个高速缓存系统应该包含调度数据的软件。

    CACHE系统怎样调度数据

    4.拓展知识-深入了解。 怡泓软件早在1983年就在软件内部使用了硬盘的CACHE系统,在早期内存很小的情况下有效地提高了硬盘上大量数据的存取速度。而PC DOS操作系统直到1990年的DR DOS 5.0和MS DOS 4.0中才内含了CACHE程序。从WINDOWS 3.0开始操作系统中都内建了硬盘CACHE系统,CACHE的概念也逐渐延伸到硬盘内部和CPU内部。

    CACHE对数据的调度不一定只在两种存储器之间进行,如现在的CPU就有片上的一级、二级和内存共3种存储器。为了便与理解,我们都以两种存储器为例。

    为使CACHE系统能够起到提高速度的作用,这两种存储器的速度必需有比较大的差异。如果用通用CPU来完成数据调度,两种存储器的速度差至少应该达到100倍以上。因为调度程序在每完成一次数据访问时至少要消耗20-30个指令周期,如果速度只差10倍,用CACHE比不用还要慢。

    数据的调度并不像我们想像地那样简单。第一高速存储器中的每一个数据必需带有地址信息,因为它从第二级存储器中提出来后已经不是按顺序排列。为了避免地址信息过多而造成的空间浪费和查询时间的浪费,必需将数据分成块。块的大小也很有讲究。太小了起不到压缩时间和空间的作用,太大了读一个数据会造成数百个可能用不着的数据涌入高速存储器,反而起不到压缩空间的作用。

    高速存储器中数据的地址信息查询是数据调度时运算的大头。当高速存储器很大时,它的地址表也会很长。从计算机指令发出的是对第二级存储器的存取指令,为了要看它是否在高速存储器中,必需去查询这个地址表。如果地址信息是顺序排列的,平均查询时间将是表长的一半。如果表长到了1000项,平均查一个数据地址就要500次比较。即使两级存储器的速度差达1000倍,这种方法也占不了任何便宜。一种方法是优先级排序法,即每经过一段时间的使用就根据每块数据的使用频率修改表的排列,让频率最高的数据块的地址排到最前面去,这样可以有效地缩短查表次数。这是我们过去使用的方法。Intel发明了一种抢队头的方法。即每一个数据一旦被使用,就将它放到地址表的第一位去。它的优点是重整地址表的算法最简单,缺点是地址表的排列通常不是最优化的。还有一种方法是通过散列表来用空间换时间,这种算法稍微复杂一点,但它通常可以在2次查询就找到所需的地址,不过计算散列地址也要消耗不少时间。

    我们从以上算法的简单介绍就可以看出,CACHE技术不是在什么地方都可以使用的灵丹妙药,它受调度计算的很大制约。在CPU内部,两级存储器的速度差往往到不了100倍以上,如何能实现有效的CACHE调度?它其中必须有专用的调度算法部件,以保证在1/3的速度差之内完成调度运算,否则最多只能实现一级缓存。

    CACHE作用的局限性

    从上面对CACHE调度算法的简单介绍我们已经看到,在没有专用算法部件的情况下,只有当两级存储器速度差很大的时候CACHE才起作用。内存和硬盘的速度差通常为105数量级,因此用内存做硬盘的高速缓存通常是很有效的。

    另一方面,高频使用的数据必须远小于高速缓存的大小才行,如果大于高速缓存的大小就会造成刚进入缓存的数据马上就被后来的数据挤出去,非但没有加快速度,反而增加了一道间接传递的时间。当我们用PHOTOSHOP处理的图像数据大于内存的1/3时就会出现这种情况。好在内存的速度远大于硬盘的存取速度,这点变化我们通常感觉不出来。但在CPU中,就会非常明显。CPU在处理图像数据时,每次处理的数据量都远远超过它内部的一级和二级缓存,因此它的作用将大大降低,唯一的补偿是处理程序的指令在一个操作——如锐化——中是固定的,它可以常驻高速缓存,减少读指令的时间。这时不同CPU缓存的大小对运算速度的影响就很小了。因为即使再小的缓存,也存得下操作指令;再大的缓存也存不下被操作的图像数据。

    在CACHE调度中,为了保证数据的安全而做的回写操作也是阻碍效率的因素。在对数据进行写操作时,可以不将它写回二级存储器,如硬盘,一直到文件关闭甚至操作系统退出时再回写,这样的效率当然最高,但是非常不安全的。一旦一个程序崩溃,其它所有程序的数据就可能都损失了。所以现在的CACHE调度方案通常都内定必须立即回写。我们马上会想到,优化效率的一半没有了。实际情况并非如此。因为回写操作其实并不是立即发生的,它可以由一个优先级较低的线程去完成,当你在考虑怎么进一步调色时,操作系统插空将数据写回硬盘。

    即使内存非常大,PHOTOSHOP也将它的每一步操作写回硬盘,这可以从PHOTOSHOP每次崩溃后都留下一个巨大的临时文件看出。因此如果我们连续对图像做旋转、变形等操作,即使用了极大的内存,CACHE作用也只发生了一半。因此要全面提高PHOTOSHOP的效率,必须用RAID等技术提高硬盘的直接读写速度。同理,硬盘上的2M或4M缓存对于动辄几十M的图像数据是毫无作用的。

    已赞过

    已踩过<

    你对这个回答的评价是?

    评论

    收起

    展开全文
  • 当处理器查询MMU和TLB并得到物理地址之后,使用物理地址查询高速缓存,这种高速缓存称为物理高速缓存。 缺点:使用物理高速缓存的缺点就是处理器在查询MMU和TLB后才能访问高速缓存,增加了流水线的延迟时间。 .....

    概述

        处理器在访问存储器时,访问的地址都是虚拟地址,经过TLB和MMU的映射后变成物理地址。TBL只用于加速虚拟地址到物理地址的转换过程。得到物理地址后,若每次都直接从物理内存中读取数据,显然会变慢。实际上,处理器都配置了多级的高速缓存来加快数据的访问速度。

    物理高速缓存

        当处理器查询MMU和TLB并得到物理地址之后,使用物理地址查询高速缓存,这种高速缓存称为物理高速缓存。

    缺点:使用物理高速缓存的缺点就是处理器在查询MMU和TLB后才能访问高速缓存,增加了流水线的延迟时间。

        物理高速缓存的工作流程如下图:

    虚拟高速缓存

        若处理器使用虚拟地址来寻址高速缓存,称为虚拟高速缓存。处理器在寻址时,首先把虚拟地址发送到高速缓存,若高速缓存里找到需要的数据,就不需要访问TLB和物理内存。

    缺点:会引入问题:1.重名(aliasing)问题,2.同名(homonyms)问题

    虚拟高速缓存的流程图:

    总结:

    1.不管是物理高速缓存和虚拟高速缓存,其实都是高速缓存,这里采用虚拟/物理来区分查询高速缓存的类别。

    2.在查询TLB前,都是先确认高速缓存是否被命中。

    重名(Aliasing)问题

    在操作系统中,多个不同的虚拟地址有可能映射相同的物理地址。由于采用高速缓存架构,那么这些不同的虚拟地址会占用高速缓存中不同的高速缓存行,但是他们对应的是相同的物理地址。

    例:VA1 和 VA2都映射到PA,在cache中有两个cache line缓存了VA1和VA2。当程序往VA1写入数据时,VA1对应的高速缓存行以及PA的内容会被更改,但是VA2还保存着旧数据。这样一个物理地址在高速缓存中就保存了两份数据,这样会产生歧义。

    同名(Homonyms)问题

    •  相同的虚拟地址对应着不同的物理地址,因为操作系统中不同的进程会存在很多相同的虚拟地址,而这些相同的虚拟地址在经过MMU转换后得到不同的物理地址,就产生了同名问题。

    • 同名问题最常见的地方是进程切换。当一个进程切换到另外一个进程时,新进程使用虚拟地址来访问高速缓存的话,新进程会访问到旧进程遗留下来的高速缓存,这些高速缓存数据对于新进程来说是错误的并且是无用的。解决办法是在进程切换时把旧进程遗留下来的高速缓存都置位无效,这样就能保证新进程执行时得到一个干净的虚拟高速缓存。

    高速缓存分类

    • VIVT(virtual index virtual tag):      使用虚拟地址的索引域和虚拟地址的标记域,相当于虚拟高速缓存。

    • PIPT(physical index physical tag): 使用物理地址的索引域和物理地址的标记域,相当于物理高速缓存。

    • VIPT(virtual index physical tag): 使用虚拟地址的索引和物理地址的标记域。

    VIPT工作过程

        

    处理器输出的虚拟地址会同时做两件事:

    1.发送虚拟地址到TLB/MMU进行地址翻译。

    2.在高速缓存中进行索引和查询高速缓存。

    当上面两件事情做完后,从1中可以得到PFN,可以得到物理地址的标记域(PT), 可以从2中得到高速缓存的标记域(tag),对这两个标记域进行比较,如果相等,说明高速缓存命中了,如果不等,cache miss。

    VIPT重名问题

    采用VIPT方式也有可能导致高速缓存重名的问题。在VIPT中,使用虚拟地址的索引域来查找cache组,这时有可能导致多个cache组映射到同一个物理地址上。以linux kernel为例,它是以4KB大小为一个页面进行管理的,那么对于一个页来说,虚拟地址和物理地址的低12bit(bit(11:0))是一样的。因此,不同的虚拟地址映射到同一个物理地址,这些虚拟地址页面的低12位是一样的。如果索引域位于bit[11:0]范围内,那么就不会发生高速缓存重名。例如,cache line是32Byte,那么数据域偏移offset使用5bit,有128个cache组,那么索引域使用7bit,这种情况下刚好不会发生重名。

    VIPT重名实例

    以Linux kernel为例,page为4KB,假如索引域为bit[12:0],高速缓存的路(way)为8KB,则bit12索引高速缓存路(way)中的前4KB还是后4KB,bit[11:0]在4KB内进行索引。如下图:

    题目

    在一个32KB的4路组相联的cache中,其中cache line为32Byte,请画出这个cache的cache line、way和set的示意图。

       答: 在Cortex-A7和Cortex-A9的处理器上可以看到32KB大小的4路组相联cache。下面来分析这个cache的结构图。

    cache的总大小为32KB,并且4路(way),所以每一路的大小为8KB: way_size = 32/4 = 8 (KB)

    cache line的大小为32Byte,所以每一路包含的cache line数量为:num_cache_line = 8KB/32B = 256

    展开全文
  • 计算机中的高速缓存

    2021-04-27 19:50:08
    3.1 高速缓存相关名词 3.2 计算机中的高速缓存存储器模型 3.3 计算机中有哪些缓存 3.4 硬件读取高速缓存的过程 4. 直接映射高速缓存 4.1 组选择 4.2 行匹配 ...
    • 1. 什么是缓存

    • 2. 缓存的定义

    • 3. 计算机中的高速缓存

      • 3.1 高速缓存相关名词

      • 3.2 计算机中的高速缓存存储器模型

      • 3.3 计算机中有哪些缓存

      • 3.4 硬件读取高速缓存的过程

    • 4. 直接映射高速缓存

      • 4.1 组选择

      • 4.2 行匹配

      • 4.3 字选择

      • 4.4 模拟直接映射缓存

      • 4.5 直接映射高速缓存的缺陷

    • 5. 两路相联高速缓存

      • 5.1 组选择

      • 5.2 行匹配

      • 5.3 字选择

      • 5.4 模拟两路相联高速缓存

    • 6. 全相联高速缓存

    • 7. 真实计算机系统中的缓存

    • 8. 缓存的评价指标

      • 8.1 不命中率

      • 8.2 命中率

      • 8.3 命中时间

      • 8.4 未命中惩罚

    • 9. 总结

    1. 什么是缓存

    缓存又叫高速缓存,是计算机存储器中的一种,本质上和硬盘是一样的,都是用来存储数据和指令的 。它们最大的区别在于读取速度的不同。程序一般是放在内存中的,当CPU执行程序的时候,执行完一条指令需要从内存中读取下一条指令,读取内存中的指令要花费100000个时钟周期(缓存读取速度为200个时钟周期,相差500倍),如果每次都从内存中取指令,CPU运行时将花费大量的时间在读取指令上。这显然是一种资源浪费。

      如何解决这个问题呢?有人肯定会问,直接把程序存储在缓存中不行吗?  

      答案是可以的。但是,缓存的造价太贵了。具体如下图所示。以2015年的售价为例,1GB SRAM的价格大约为327680美元,而1GB 普通硬盘的价格仅仅为0.03美元。用缓存来存储程序成本太高了,得不偿失。

    于是,有人就提出了这样一种方法,在CPU和内存之间添加一个高速内存, 这个高速内存容量小,只用来存储CPU执行时常用的指令。既保证了硬件成本,又提高了CPU的访问速度。这个高速内存就是缓存(高速缓存)。

    2. 缓存的定义

    高速缓存是一个小而快速的存储设备 ,它作为存储在更大更慢的设 备中的数据对象的缓冲区域。使用高速缓存的过程称为缓存 。

      具体如下图所示,主存可以作为一个存储设备,L3是主存的缓冲区域,从L3存取数据的过程就叫做缓存。

                                                                       存储器的层次结构

     

    3. 计算机中的高速缓存

     3.1 高速缓存相关名词

    如下图所示,数据总是以块为单位 在高速缓存和主存之间来回复制。

     如果我们的程序请求一个数据字,这个数据字存储在编号为10的块中。将分以下几种情况考虑:

        1. 高速缓存行中为空,这叫做冷不命中  。

     2.高速缓存中有数据块,但没有数据块10,这叫做缓存不命中 。接下来缓存请求主存将该块复制到高速缓存,高速缓存接收到之后将替换一个现有的数据块,从而存储新的数据块在高速缓存中。最后,高速缓存将数据块10返回给CPU。

     3. 高速缓存中有数据,将内存中的数据块放置到高速缓存中时,发生了冲突,这叫做冲突不命中 。

    放置策略中最常用的是:第k+1层的块i必须放在第k层的块(i mod 4)中。比如,第k+1层的0,4,8,12会映射到第k层的块0。块1,5,9,13会映射到块1。

    4. 缓存中有数据块10,则直接返回给CPU。这叫做缓存命中 。

    3.2 计算机中的高速缓存存储器模型

     高速缓存完全由硬件管理,硬件逻辑必须要知道,如何查找缓存中的块,并确定是否包含特定块。因此,必须以非常严格且简单的方式去构建高速缓存。在计算机中,高速缓存模型如下图所示。

     

    我们可以将高速缓存存储器视为有个高速缓存组的数组 。每个组包含个高速缓存行 。每个行是由一个字节的数据块组成的

    一般而言,高速缓存的结构可以用元组(S,E,B,m)来描述。高速缓存的大小(或容量)C指的是所有块的大小的和。标记位和有效位不包括在内 。因此,C=S×E×B。

      每个高速缓存存储器有m位,可以组成个不同的地址,。每个数据块由以下三部分构成。

           有效位:有效位为t位,t一般为1,指明这个行是否包含有效信息。

      标记位:标记位为s位。唯一的标识了存储在高速缓存中的块(数组索引)。

      块偏移:数据块为字节。指明CPU请求的内容在数据块中的偏移

     

    下面对以上内容出现的参数做个总结:

    3.3 计算机中有哪些缓存

    下表为现代计算机中用到的各种缓存。

    3.4 硬件读取高速缓存的过程

    当一条加载指令指示CPU从主存地址A中读取一个字w时,会将该主存地址A发送到高速缓存中,则高速缓存会根据以下步骤判断地址A是否命中:

      组选择:根据地址划分,将中间的s位表示为无符号数作为组的索引 ,可得到该地址对应的组。

      行匹配:根据地址划分,可得到t位的标志位,由于组内的任意一行都可以包含任意映射到该组的数据块,所以就要线性搜索组中的每一行,判断是否有和标志位匹配且设置了有效位的行 ,如果存在,则缓存命中,否则缓冲不命中。

      字抽取:如果找到了对应的高速缓存行,则可以将b位表示为无符号数作为块偏移量 ,得到对应位置的字。

      当高速缓存命中时,会很快抽取出字w,并将其返回给CPU。如果缓存不命中,CPU会进行等待,高速缓存会向主存请求包含字w的数据块,当请求的块从主存到达时,高速缓存会将这个块保存到它的一个高速缓存行中,然后从被存储的块中抽取出字w,将其返回给CPU。

    4. 直接映射高速缓存

    上面我们介绍了计算机中的高速缓存模型,我们可以根据每个组的高速缓存行数E,将高速缓存分成不同的类型。下面我们看下直接映射高速缓存(E=1)的具体例子。

    4.1 组选择

    组选择示意图如下所示。假设有 S 组,每组由一行组成,缓存块为8字节。CPU发出地址要取数据字,高速缓存将该地址分解为三部分,对于图中的地址来说,块偏移量为4。组索引是 1 ,粉红色的为t位标记位。 因此,高速缓存提取的组索引为 1,即图中第二行。

     

     

    4.2 行匹配

      然后,检查地址中的标记位与缓存行中的标记位是否匹配。如果匹配,将进行下一步字选择。如果不匹配,则表示未命中。在未命中时,高速缓存必须从内存中重新取数据块, 在行中覆盖此块。

     

    4.3 字选择

     当标记位匹配时,表示命中,接着检查地址中的块偏移为4,即要从缓存行数据块的第5位开始取值,并返回给CPU。

    4.4 模拟直接映射缓存

    下面,我们模拟下直接映射高速缓存的过程,以便加深理解高速缓存是如何工作的。假设,内存地址为4字节,S=4组,E=1行/组,B=2字节/块。 其结构图如下所示。

                       模拟直接映射高速缓存地址结构图

    我们模拟CPU要从高速缓存中读取地址为0,1,7,8,0的数据。下面是具体的过程

    1. 读地址0的数据。标记位为0,索引位为00,偏移位为0,块号为0。缓存行中没有数据,组0的有效位为0,地址的标记位和组0的标记位不匹配,因此,未命中。然后,高速缓存从内存中取出块0,块1, 共2字节,并存储在组0中。具体如下图所示。

                                         模拟直接映射高速缓存读地址0的数据

      2. 读地址1的数据。标记位为0,索引位为00,偏移位为1,块号1。 缓存行中已有数据数据,组0的有效位为1,地址1的标记位和组0的标记位匹配,因此,命中。具体如下图所示。

                                     模拟直接映射高速缓存读地址1的数据

    3. 读地址7的数据。标记位为0,索引位为11(3),偏移位为1,块号为3。 缓存行中有数据,组3的有效位为0,地址的标记位和组0的标记位不匹配,因此,未命中。然后,高速缓存从内存中取出块6,块7, 共2字节,并存储在组3中。具体如下图所示

                                       模拟直接映射高速缓存读地址7的数据

     4. 读地址8的数据。标记位为1,索引位为00,偏移位为0,块号为4。 缓存行中有数据,组0的有效位为1,地址的标记位和组0的标记位不匹配,因此,未命中。然后,高速缓存从内存中取出块8,块9, 共2字节,并存储在组0中。具体如下图所示。

                                  模拟直接映射高速缓存读地址8的数据

       5. 读地址0的数据。标记位为0,索引位为00,偏移位为0,块号为0。缓存行中有数据,组0的有效位为1,地址的标记位和组0的标记位不匹配,因此,未命中。然后,高速缓存从内存中取出块0,块1, 共2字节,并存储在组0中。具体如下图所示。

     最终结果如下:缓存命中率为20%

    注意:块大小为2字节,所以从内存中取数据总是以偶数倍开始的,所以会看到M[8-9],而不是M[7-8]。

      如果你看懂了上述高速缓存的整个过程,考虑下如何编程来模拟高速缓存呢? 后面的文章我会详细讲解如何用C语言模拟高速缓存,欢迎关注我的公众号【嵌入式与Linux那些事】,第一时间获取更新。

    5. 两路相联高速缓存

      直接映射高速缓存中冲突不命中造成的问题源于每个组只有一行这个限制。组相联高速存放松了这条限制,所以每个组都保存有多于一个的高速缓存行。如下图所示为两路相联的高速缓存。

    5.1 组选择

    它的组选择与直接映射高速缓存的组选择一样,组索引位标识组。具体如下图所示,这里不再赘述。

                                                               两路相联高速缓存组选择

    5.2 行匹配

    组相联高速缓存中的行匹配比直接映射高速缓存中的更复杂,因为它必须每次检查多个行的标记位和有效位,以确定所请求的字是否在集合中。具体如下图所示。

     

    5.3 字选择

     字选择的过程和直接映射高速缓存中的方式一样,这里就不再赘述。

     

    5.4 模拟两路相联高速缓存

    下面,我们模拟下两路相联高速缓存的过程,以便加深理解高速缓存是如何工作的。假设,内存地址为4字节,S=2组,E=2行/组,B=2字节/块。其结构图如下所示。

     我们模拟CPU要从高速缓存中读取地址为0,1,7,8,0的数据。下面是具体的过程。

     1. 读地址0的数据。标记位为00,索引位为0,偏移位为0,块号为0。缓存行中没有数据,组0的有效位为0,地址的标记位和组0的第一行和第二行的标记位都不匹配,因此,未命中。然后,高速缓存从内存中取出块0,块1, 共2字节,并存储在组0第一行中。具体如下图所示。

     

      2. 读地址1的数据。标记位为00,索引位为0,偏移位为1,块号为1。缓存行中已有数据数据,组0的第一行有效位为1,地址1的标记位和组0的第一行标记位匹配,因此,命中。具体如下图所示。

     3. 读地址7的数据。标记位为01,索引位为1,偏移位为1,块号为1。缓存行中有数据,组1的有效位为0,地址的标记位和组1中的第一行和第二行的标记位不匹配,因此,未命中。然后,高速缓存从内存中取出块6,块7, 共2字节,并存储在组1中。具体如下图所示。

    4. 读地址8的数据。标记位为10,索引位为0,偏移位为0,块号为0。缓存行中有数据,组0的第一行有效位为1,第二行有效位为0,地址的标记位和组0的第一行和第二行的标记位不匹配,因此,未命中。然后,高速缓存从内存中取出块8,块9, 共2字节,并存储在组0的第二行中。具体如下图所示。

    5. 读地址0的数据。标记位为00,索引位为0,偏移位为0,块号为0。缓存行中有数据,组0的第一行有效位为1,地址的标记位和组0的第一行的标记位匹配,因此,命中。具体如下图所示。

    模拟两路相联高速缓存再次读地址0的数据

    两路相联高速缓存与直接映射高速缓存相比,在每组中增加了一行,缓存命中率提升了15%。避免了缓存频繁从内存中存取数据的情况,提高了程序运行速度

    6. 全相联高速缓存

     全相联高速缓存中的行匹配和字选择与组相联高速缓存中的是一样的,过程就不再赘述,其结构图如下所示。

    相联度越高越好吗?

    答案是否定的。较高的相联度会造成较高的成本。实现难度大,价格昂贵,而且很难使之速度变快。较高的相联度会增加命中时间,因为复杂性增加了,另外,还会增加不命中处罚,因为选择牺牲行的复杂性也增加了。

    相联度的选择最终变成了命中时间和不命中处罚之问的折中。一般来讲,高性能系统会为L1高速缓存选择较低的相联度(这里的不命中处罚只是几个周期),而在不命中处罚比较高的较低层上使用比较小的相联度。例如, Intel Core i7系统中,L和L2高速缓存是8路组相联的,而L3高速缓存是16路组相联的。

    7. 真实计算机系统中的缓存

     在此之前,我们一直假设高速缓存只保存数据。不过,实际上,高速缓存既保存数据,也保存指令。只保存指令的高速缓存称为 i-cache 。只保存程序数据的高速缓存称为 d-cache 。既保存指令又包括数据的高速缓存称为 统一的高速缓存 。

      如下图所示为 Intel Core i7处理器的高速缓存层次结构。每个CPU芯片有四个核。每个核有自己的L1 i-cache, L1 d-cache和L2统一的高速缓存。所有的核共享片上L3统一的高速缓存。其具体参数如下表所示。

                                                真实计算机的缓存模型

    8. 缓存的评价指标

    最后介绍下衡量高速缓存性能的一些指标:

    8.1 不命中率

      在一个程序执行或程序的一部分执行期间,内存引用不命中的比率,它等于: 不命中数量/引用数量。

    8.2 命中率

      命中的内存引用比率。它等于:  1-不命中率。

    8.3 命中时间

      从高速缓存传送一个字到CPU所需的时间,包括组选择、行确认和字选择的时间。一般来讲,L1缓存的命中时间为:4个时钟。L2缓存的命中时间为:10个时钟。

    8.4 未命中惩罚

      未命中需要的额外时间。对于主存来说,一般为 50 ~ 200个时钟周期

    举个例子:

    假设缓存命中时间为1个时钟周期,缓存未命中惩罚为100个时钟周期。

    下面计算下97%缓存命中率和99%的缓存命中率的平均访问时间为多少?计算公式为命中时间加上未命中处罚乘以百分系数。

    97%的命中率:时钟。

    99%的命中率:时钟。

    结论:命中率增加2%,平均访问时间减少了50%。

    9. 总结

    计算机中存在着各种各样的缓存,比如, 文件缓存 把一些需要高速存取的变量缓存在内存中,每次访问直接读出即可。 浏览器缓存 根据一套与服务器约定的规则进行工作,如果在浏览过程中前进或后退时访问到同一个图片,这些图片可以从浏览器缓存中调出而即时显示。数据库缓存 经常需要从数据库查询的数据、或经常更新的数据放入到缓存中,这样下次查询时,直接从缓存直接返回,减轻数据库压力。

      我们了解这么多基本概念有什么用呢?如果我们理解了计算机系统是如何将数据在内存中组织和移动的,那么在写程序时就可以把数据项存储在合适的位置,CPU能更快地访问到它们,提高程序的执行效率。

     

     

    展开全文
  • 在神前经网络方法之,计算机于统主要机器计模型的翻译翻译是基。般如呛水呛血何处理:肺、内存肺一。被同包中被该被该被该包中的是的类的所的该以下一个有子用同一正确只能只能只能中的子类该类个包其他其他可以类本...

    在神前经网络方法之,计算机于统主要机器计模型的翻译翻译是基。

    般如呛水呛血何处理:肺、内存肺一。

    被同包中被该被该被该包中的是的类的所的该以下一个有子用同一正确只能只能只能中的子类该类个包其他其他可以类本类所类自类自类及类的访问访问访问说法身和身所身、储器存C存所引,储器存C存被保变量成员制符关于问控d修护访饰的。不属的是以下于证易的成本券交显性。的几定了的几杂化轨道型决型何构何构分子。杜甫于哪一年出生。

    6caa02e3c6ba0c8944893208dba166e5.jpg

    速缓速缓皮内注射进针角度。部委大会员会团员制一中的指的支部、支会两会”课”“三“三是:。

    相比变的转由以以质取胜量取实现胜向。班电车某城每8有轨5路分钟发一市5,计算机达车一时一乘在任站刻某客到,的概车超过7求乘客等率_分钟。备矣大人”出之事自下者:内存位学列哪,义仁由“居。储器存C存点和的距多少最近区线离是罚球罚球。品质郁、速缓速缓茶的特征味醇形美、香绿、“色”是。

    必须,相比。能水平时在撰人技写个,计算机意(需注。

    内存能带大的为它经济效益来巨是因。

    储器存C存大循有径的下面环路属于。

    变之门之雨课堂:玄武后,速缓速缓不包民的举措括:李世。

    相比典”模式有(徒形中叛造的基本象塑“红色经。标准差为,B的平均总体值为,表其表性B的的代平均一般总体值代更高所以水平。要讲工程概念热力学主恒的量守述能。内存能带大的为它经济效益来巨是因。

    展开全文
  • 答案查看答案解析:【解析题】计算机病毒的传播途径可以是( ? ? ? ? )。【解析题】把自己的构想和任务方案存入计算机文件,或者在床上等可看得见的地方挂着,是督促自己采取积极行动的有效方法之一。...
  • 高速缓存存储器

    千次阅读 2020-12-23 11:03:48
    高速缓存存储器随机访问存储器DRAMSRAMSRAM高速缓存存储器结构直接映射高速缓存组相连高速缓存全相连高速缓存例题 随机访问存储器 随机访问存储器(Random-Access Memory, RAM)分为两类:静态的和动态的。静态RAM...
  • 1、row cache lockOracle将数据子典信息存于SGA内的行高速缓冲区(或dictionary cache),行高速缓冲区位于共享池内,可以通过如下命令进行确认:SQL> select pool,name,bytes from v$sgastat where name='row ...
  • 一、CPU高速缓存(cache) 参考:https://blog.csdn.net/u014470361/article/details/80060701 cache,中译名高速缓冲存储器,其作用是为了更好的利用局部性原理,减少CPU访问主存的次数。简单地说,CPU正在访问的...
  • 高速缓存cache详解

    2021-11-24 22:22:16
    1.(高速缓存)cache cache存在的意义:为了弥补处理器与主内存处理能力的鸿沟。硬件设计者,在处理器和主内存中引入高速缓存(cache)。cache的读写速度远大于主内存。引入高速缓存后,处理器的读写操作不直接与主...
  • 在讲解高速缓存之前,需要先搞清楚整个计算机系统的硬件组成及我们运行一个helloWorld程序时发生了什么 计算机硬件组成 总线 贯穿整个系统的一组电子导管,携带信息字节并负责在各个部件间传递。通常总线被设计成...
  • 文章目录CPU高速缓存多CPU多核缓存架构缓存一致性(Cache coherence)缓存一致性的要求写传播(Write Propagation)事务串行化(Transaction Serialization)一致性机制(Coherence mechanisms)总线仲裁机制总线...
  • 会发现其变量have_query_cache的值是yes,MYSQL初学者很容易以为这个参数为YES就代表开启了查询缓存,实际上是不对的,该参数表示当前版本的MYSQL是否支持Query Cache,实际上是否开启查询缓存是看另外一个参数的值:...
  • 6.4 高速缓存介绍

    2021-05-04 16:04:43
    一、缓存内存(cache memories) 早期的计算机系统中仅包含三个基本层次:CPU寄存器、DRAM主内存及磁盘存储。然而,由于计算机CPU和主内存间速度差异的不断拉大,系统设计者被迫在主存和CPU间插入一个小的SRAM缓存...
  • 高速缓存的读写

    2021-05-08 16:17:22
    高速缓存的读写问题 读操作 缓存命中 cache hit 当程序需要第k+1层的某个数据对象d时,它首先在当前存储在第k层的一个块中找d,如果d刚好缓存在第k层中,那么就是我们所说的缓存命中(cache hit)。该程序直接从第k层...
  • 61磁盘高速缓存

    2021-05-20 08:09:05
    1、 磁盘高速缓存(Disk Cache) 操作系统中使用磁盘高速缓存技术来提高磁盘的IO速度,对高速缓存复制的访问要比原始数据访问更高效。例如正在运行的进程的指令即存储在磁盘上,也存储在物理内存上,也被复制到CPU的...
  • 高速缓存(cache)原理

    千次阅读 2021-03-01 20:57:52
    高速缓存(cache) 概念和原理 cache基本思想 ▪ cache 存储器( Cache memories ) ▪ 在处理器附近增加一个小容量快速存储器(cache) ▪ 基于SRAM,由硬件自动管理 cache基本思想: ▪ 频繁访问的数据块存储在cache中 ...
  • 计算机组成原理之CPU以及高速缓存

    千次阅读 2021-03-29 18:29:08
    2.2 高速缓存和内存的映射以及高速缓存的替换策略 我们知道,高速缓存是比较小的,一般的话L1只有256KB, L2只有1M,L3只有8M。那么主存是比较大的,那么肯定就会遇到缓存容量满了的问题,那么缓存容量满了,应该...
  • 24张图7000字详解计算机中的高速缓存

    千次阅读 多人点赞 2020-12-30 22:32:52
      缓存又叫高速缓存,是计算机存储器中的一种,本质上和硬盘是一样的,都是用来存储数据和指令的。它们最大的区别在于读取速度的不同。程序一般是放在内存中的,当CPU执行程序的时候,执行完一条指令需要从内存中...
  • CPU高速缓存原理梳理

    2021-09-10 00:05:28
    为什么要用CPU高速缓存? 原因本质是局部性原理,体现在两个方面。 时间局部性: 如果一个信息最近被访问,那么很可能会被再次访问 空间局部性: 如果一个地址被读取,那么它临近的地址也很可能会被访问。 所以...
  • MySQL高速缓存

    2021-01-19 08:29:35
    MySQL高速缓存启动方法及参数详解query_cache_size=32M query_cache_type=1,默认配置下,MySQL的该功能是没有启动的,可能你通过show variables like '%query_cache%';会发现其变量have_query_cache的值是yes,MYSQL...
  • 三、改进Database Buffer Cache的性能1.最简单的方法就是加大它的大小。...的方法把表变成一个高速缓存区表select owner,table_name from dba_tables where ltrim(cache)='Y'可以查看高速缓存区表的信息
  • 高速缓存(L1、L2、L3三级缓存)

    千次阅读 2021-05-30 14:49:23
    1、高速缓存至关重要 刚开始,我们编译好的可执行程序是存放在磁盘上的,当程序加载时,它们被复制到主存,当处理器(CPU)运行程序时,指令又从主存复制到处理器。从程序员的角度来看,这些复制就是开销,减慢了...
  • 我们首先假设一个存储器结构,CPU,L1高速缓存,主存。 一个存储器地址有m位,形成个不同的地址。高速缓存可组织成个高速缓存组的数组。每个组包含E个高速缓存行,每一个行由字节的数据块构成。有效位代表本行是否有...
  • 域名服务器中高速缓存作用:将近期访问过的网址信息存在缓存里,再次访问的时候会从缓存里读取,不需要重新解析;这样可以加快域名服务的响应速度。本教程操作环境:windows7系统、Dell G3电脑。DNS(Domain Name ...
  • 高速缓存概述

    2021-06-26 16:21:32
    在CPU和主存之间设置一个快速小容量的存储器,其中总是存放最活跃 (被频繁访问)的程序和数据,由于程序访问的局部性特征,大多数情 况下,CPU能直接从这个高速缓存中取得指令和数据,而不必访问主存。 2.1 Cach...
  • 高速缓存与一致性

    2021-01-12 22:26:54
    知乎上大神smcdef的专栏文章,讲解和配图都很详细贴切。 ...首先是介绍高速缓存的基本原理,硬件是如何缓存和查找数据,这是个基础入门。 https://zhuanlan.zhihu.com/p/102293437 Cache对代码.
  • 以下的文章主要讲述的是MySQL缓存查询与设置global query_cache_size的实际操作步骤,我们大家都知道其访问量一增加的话,MySQL数据库的压力就大!如果对其减小压力呢?首先缓存。设置缓存global query_cache_size...
  • 大概结构如下: CPU缓存模型 L1是一级缓存,L1d是数据缓存,L1i是指令缓存 L2是二级缓存,比L1稍大 L3是三级缓存,L3缓存是cpu共享的高速缓存,主要目的是进一步降低内存操作的延迟问题。 CPU-01读取数据A,数据A被...
  • 6.7.2缓冲区高速缓存Linux采用了缓冲区高速缓存机制,而不同于其他操作系统的“写透”方式,也就是说,当你把一个数据写入文件时,内核将把数据写入内存缓冲区,而不是直接写入磁盘。在这里要用到一个数据结构 ...
  • nginx高速缓存

    千次阅读 2021-12-14 13:18:21
    一、构建nginx高速缓存 [root@server1 ~]# lftp 172.25.254.250 lftp 172.25.254.250:~> cd pub/docs/lamp/ lftp 172.25.254.250:/pub/docs/lamp> get openresty-1.19.9.1.tar.gz 5166658 bytes ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 177,111
精华内容 70,844
关键字:

高速缓存的作用

友情链接: 350.zip