精华内容
参与话题
问答
  • 主存到Cache直接映射、全相联映射和组相联映射

    万次阅读 多人点赞 2016-11-29 14:30:46
    ---- Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块(cache line)为单位的。为了把信息放到Cache中,必须应用某种函数把主存地址...Cache的地址映射方式有直接映射、全相...

    ---- Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块(cache line)为单位的。为了把信息放到Cache中,必须应用某种函数把主存地址定位到Cache中,这称为地址映射

    ---- 在信息按这种映射关系装入Cache后,CPU执行程序时,会将程序中的主存地址变换成Cache地址,这个变换过程叫做地址变换。

    Cache的地址映射方式有直接映射全相联映射组相联映射

    假设某台计算机主存容量为1MB,被分为2048块,每个Block为512B;Cache容量为8KB,被分为16块,每块也是512B。

    下面以此为例介绍三种基本的地址映射方法。

    1. 直接映射

    ---- 一个内存地址能被映射到的Cache line是固定的。就如每个人的停车位是固定分配好的,可以直接找到。缺点是:因为人多车位少,很可能几个人争用同一个车位,导致Cache淘汰换出频繁,需要频繁的从主存读取数据到Cache,这个代价也较高。

    直接映射的Cache组织如图(1)所示。主存中的一个块只能映射到Cache的某一特定块中去。例如,

    主存的第0块、第16块、第32块、第48块、……、第2032块等128块,只能映射到Cache的第0块;

    主存的第1块、第17块、第33块、第49块、……、第2033块等128块,只能映射到Cache的第1块;

    以此类推,主存的第15块、第31块、第47块、……、第2047块等128块,只能映射到Cache的第15块中。

    映射完毕,Cache总共有0~15即16块,主存中的每128(2048/16)块,只能映射到Cache中的某一个块中。

    即映射规则为cache line index = (主存(Page)的line数)%(cache中 cache line的总数)

    主存的line数是0~2047,cache中cache line的总数是16.

      

                                              图(1)

    直接映射是最简单的地址映射方式,它的硬件简单,成本低,地址变换速度快,而且不涉及替换算法问题。但是这种方式不够灵活,Cache的存储空间得不到充分利用,每个主存块只有一个固定位置可存放,容易产生冲突,使Cache效率下降,因此只适合大容量Cache采用。例如,如果一个程序需要重复引用主存中第0块与第16块,最好将主存第0块与第16块同时复制到Cache中,但由于它们都只能复制到Cache的第0块中去,即使Cache中别的存储空间空着也不能占用,因此这两个块会不断地交替装入Cache中,导致命中率降低。

    2. 全相联映射

    ---- 主存中的一个地址可被映射进任意cache line,问题是:当寻找一个地址是否已经被cache时,需要遍历每一个cache line来寻找,这个代价很高。就像停车位可以大家随便停一样,停的时候简单,找车的时候需要一个一个停车位的找了。

    图(2)是全相联映射的Cache组织,主存中任何一块都可以映射到Cache中的任何一块位置上。

      

                                             图(2)

    全相联映射方式比较灵活,主存的各块可以映射到Cache的任一块中,Cache的利用率高,块冲突概率低,只要淘汰Cache中的某一块,即可调入主存的任一块。但是,由于Cache比较电路的设计和实现比较困难,这种方式只适合于小容量Cache采用。

    3. 组相联映射

    ---- 组相联映射实际上是直接映射和全相联映射的折中方案,其组织结构如图(3)所示。

    主存和Cache都分组,主存中一个组内的块数与Cache中的分组数相同,组间采用直接映射,组内采用全相联映射。也就是说,将Cache分成2^u组,每组包含2^v块,主存块存放到哪个组是固定的,至于存到该组哪一块则是灵活的。即主存的某块只能映射到Cache的特定组中的任意一块。主存的某块b与Cache的组k之间满足以下关系:k=b%(2^u).

    例如,Cache分为8组(u=3),每组2块(v=1),主存分为128个区,每个区16块。

     

                                                      图(3)

    主存中的各块与Cache的组号之间有固定的映射关系,但可自由映射到对应Cache组中的任何一块。例如:

    --主存的第0块、第2^u块、第2×(2^u)块、…第255x(2^u)即255x8=2040块等256块均映射于Cache的第0组,但可映射到其中的第0块或第1块

    --主存的第1块、第2^u+1块、第3^(2^u)+1块、…第255x(2^u+1)即2041块等均映射于Cache的第2组,但可映射到Cache第2组中的任意一块;

    --主存的第2块、第2^u+2块、第(2^u)x2+2块、…第2042块等均映射于Cache的第3组,但可映射到Cache第3组中的任意一块;

    --主存的第7块、第2^u+7块、第2^(u+1)+7块、…第2047块等均映射于Cache的第8组,但可映射到Cache第8组中的第14块或第15块。

    常采用的组相联结构Cache,每组内有2、4、8、16块,称为2路、4路、8路、16路组相联Cache。以上为2路组相联Cache。组相联结构Cache是前两种方法的折中方案,适度兼顾二者的优点,尽量避免二者的缺点,因而得到普遍采用。

    实例分析:

    1.容量为64块的Cache采用组相联方式映像,字块大小为128字节,每4块为一组,若主容量为4096块,且以字编址,那么主存地址为(19)位,主存区号为(6)位。

    :组相联的地址构成为:区号+组号+块号+块内地址。

    主存的每个分区/组大小与整个Cache大小相等,故此主存需要分的区数为:4096/64=64,因为26=64,因此需要6位来表示区号。每4块为一组,故共有组数 64/4 = 16 ,因为24=16,因此需要4位表示组号。每组4块,故表示块号需要2位。

    块内地址共128字节,27=128,所以块内地需要7位表示。所以:主存地址的位数=6+4+2+7 = 19

    主存区号的位数=6

    个人见解:Cache有u组,每组有v块,即u = 16,v = 4,Cache大小:64块×128B = 8KB

    主存大小:4096×128B = 2^12*2^7 = 2^19,即主存地址有19位。4096/64= 2^6主存区号为6位。

    2.某 32 位计算机的 cache 容量为 16KB,cache 块的大小为 16B,若主存与 cache 的地址映射采用直接映射方式,则主存地址为 1234E8F8(十六进制)的单元装入的 cache 地址为__C__。

    A. 00 0100 0100 1101 (二进制)
    B. 01 0010 0011 0100 (二进制)
    C. 10 1000 1111 1000 (二进制)
    D. 11 0100 1110 1000 (二进制)

    :Cache大小为16KB,块大小为16B,所以Cache被分成16KB/16B=1024块,因210=1024故需要10位来表示块数

    24=16故块内地址需要4位来表示。所以Cache的地址线位置为14位。

    由于采用直接映像的方式,所以主存的后14位就是要装入的到Cache中的位置。故选 C.

    个人见解:Cache的容量是16KB = 16×1024B = 16384B,主存的地址为0x1234E8F8/(16×1024B)= 18643. 该地址对应的是主存的第18643块。

    根据公式:cache的块地址i = 主存的块地址 % 16384 = 1234E8F8 - 1234C000 = 0x28F8 选C

     

     

    展开全文
  • Cache之直接映射

    千次阅读 多人点赞 2016-08-28 16:18:07
    Cache之直接映射@(组成原理)直接映射的再次理解: 首先,理清楚这种映射下的主存物理地址位数的分配。核心目的:加快主存和CPU之间的交换,目的在快。区别于虚拟地址的目的是扩大容量以及逻辑上容易编写程序等。...

    Cache之直接映射

    @(组成原理)

    直接映射的再次理解:
    首先,理清楚这种映射下的主存物理地址位数的分配。

    核心目的:加快主存和CPU之间的交换,目的在快。区别于虚拟地址的目的是扩大容量以及逻辑上容易编写程序等。

    主存地址分为两个大的部分:高m位和低b位。
    高m位又分为最高的t位,称之为主存字块标记,和次低c位,称之为Cache字块地址。
    对应的Cache的地址结构是:高t位和低b位。

    这里写图片描述

    有一个问题,Cache字块地址它自己是不管的对吗?主存知道但是Cache自己是不知道的。

    从二者的最低位都是b位,我们知道,因为字块的大小一样,因此位数也是一样的。

    主存地址中,可以根据中间的c位计算出共计有2^c块Cache块,当然也可以根据Cache的总容量与字块的大小自行计算。

    情景:
    因此,现在给你一个主存块,根据它的地址结构,让你帮它找一个可用的Cache块。
    脑海中要有一个印象,Cache块是比较宝贵的。主存块能以进入到Cacahe块为荣。主存块数远远大于Cache块数的。
    毕竟,物以稀为贵。

    直接映射中,一个主存块只能对应到一个Cache块。

    根据主存的地址,当前块映射到的Cache块,和2^c块之后的主存块映射的是同一个Cache块。

    这里我们来推导一下Cache块号的计算方式:
    设i是Cache块号,j是主存块号。i的范围当然就是 [0,2c1],j的范围是[0, 2m1]

    i=jmod2c

    换成汉字就是取出主存地址中间的c位代表的数字,即为Cache块号。

    这样就完了?

    么有。

    为什么要设计高t位呢?

    因为要确定Cache心里装的到底是不是当下主存自以为的根据中间c位计算出来那个Cache块。
    因为Cache还可能装着别人嘛。

    所以要精确匹配是不是(有点像DNA那啥)。

    这些就是直接映射的最核心的概念理解,其他的细节是比较容易理解的,比如在Cache存储中还加有效位的概念等。

    展开全文
  • 直接映射详解

    万次阅读 多人点赞 2018-06-05 22:23:03
    在cache中为主存中每个字分配一个位置的最简单方法就是根据这个字的主存地址进行分配,这种cache结构称为直接映射。其中,每个存储器地址对应到cache中一个确定的地址。直接映射cache都采用以下映射方法:i=j mod C...

    在cache中为主存中每个字分配一个位置的最简单方法就是根据这个字的主存地址进行分配,这种cache结构称为直接映射。其中,每个存储器地址对应到cache中一个确定的地址

    直接映射cache都采用以下映射方法:

    i=j mod C,其中,i为Cache块地址,j为主存块地址,C为Cache中的块数,mod表示求余运算。



    • 上图中Cache的块数为8,又块数是2的幂,取模计算就很简单,只需要取地址的低log2(8)位即块地址中最低的三位,例如存储器地址(00001)2被映射到(001)2的位置,(11101)2被映射到(101)2的位置。

    标记:由于cache中每个位置可能对应于存储器中多个位置,因此需要引入一组标记,标记中包含了地址信息。标记只需包含地址的高位,也就是没有用来检索cache的那些位。如上图标记位只需使用5位地址中的高两位。

    有效位:我们还需要一种方法来判断cache块中确实没有包含有效信息。例如,当一个处理器启动时,cache中没有数据,标记域中的值就没有意义,甚至在执行了一些指令后,cache中的一些块依然为空。因此需要增加一个有效位来标识一个块是否含有一个有效地址。


    • 上图给出了一个使用32位地址,1024字的cache。由于cache有1024个字,即需要10位索引2^10。又有2位是字节偏移信息,剩下的32-10-2=20位用来和标记比较。如果标记和地址的高20位相等,并且有效位开启,那么请求在cache命中。


    上图给出了直接映射的完整结构图

    直接映射是最简单的地址映射方式,它的硬件简单,成本低,地址变换速度快,而且不涉及替换算法问题。但是这种方式不够灵活,Cache的存储空间得不到充分利用,每个主存块只有一个固定位置可存放,容易产生冲突,使Cache效率下降,因此只适合大容量Cache采用。例如,如果一个程序需要重复引用主存中第0块与第2^c块,最好将主存第0块与第2^c块同时复制到Cache中,但由于它们都只能复制到Cache的第0块中去,即使Cache中别的存储空间空着也不能占用,因此这两个块会不断地交替装入Cache中,导致命中率降低。


    展开全文
  • 缓存直接映射Prerequisites: Memory mapping and its types 先决条件: 内存映射及其类型 In Direct mapped cache memory, each block mapped to exactly one location in cache memory. 在直接映射的高速缓存中...

    缓存直接映射

    Prerequisites: Memory mapping and its types

    先决条件: 内存映射及其类型

    In Direct mapped cache memory, each block mapped to exactly one location in cache memory.

    在直接映射的高速缓存中,每个块都精确映射到高速缓存中的一个位置。

    直接映射缓存的工作 (Working of Direct Mapped Cache)

    • CPU generates a memory request, so the line number field of the address is used to access the particular line of the cache.

      CPU生成内存请求,因此地址的行号字段用于访问高速缓存的特定行。

    • The tag field of the processor address is then compared with the tag of the line.

      然后将处理器地址的标签字段与该行的标签进行比较。

    • If the two tags match, a cache hit occurs and the desired word is found in the cache and they do not match, a cache miss occurs.

      如果两个标签匹配,则发生高速缓存命中,并且在高速缓存中找到所需的单词,但它们不匹配,则发生高速缓存未命中。

    • If the cache miss occurs, the desired word must be brought from the most memory.

      如果发生高速缓存未命中,则必须从最大内存中获取所需的字。

    • It is then held within the cache along with the new tag substituting the previous one.

      然后将其与替换前一个标签的新标签一起保存在缓存中。

    A diagram to show the implementation of direct-mapped cache as follows,

    下图显示了直接映射缓存的实现,

    Direct Mapped Cache

    需要替换算法 (Need of Replacement Algorithm)

    • In direct mapping, there is no requirement of any replacement algorithm.

      在直接映射中,不需要任何替换算法。

    • Due to the main memory block can map only to a particular line of the cache.

      由于主内存块只能映射到高速缓存的特定行。

    • Hence, the new incoming block will always replace the existing block (if any) in that particular line.

      因此,新的传入块将始终替换该特定行中的现有块(如果有)。

    Steps to implement direct memory cache,

    实现直接内存缓存的步骤,

    Step 1:

    第1步:

    • Each multiplexer reads the line range from the generated physical address victimization it's choosing lines in parallel.

      每个多路复用器从并行选择线的生成的物理地址受害中读取线范围。

    • To scan the line range of L bits, range of choose lines every multiplexer should have = L.

      要扫描L位的行范围,每个多路复用器的选择行范围应为L。

    Step 2:

    第2步:

    • After reading the line number, every multiplexer goes to the corresponding line within the cache memory victimization its input lines in parallel.

      读取行号后,每个多路复用器并行访问其输入行,然后转到高速缓存存储器中的相应行。

    • Number of input lines every multiplexer should have = number of lines within the cache memory.

      每个多路复用器应具有的输入线数=缓存中的线数。

    Step 3:

    第三步:

    • Each multiplexer outputs the tag bit it has selected from that line to the comparator using its output line.

      每个多路复用器使用其输出线将从该线选择的标记位输出到比较器。

    • The number of output lines in each multiplexer = 1.

      每个多路复用器中的输出线数= 1。

    • A multiplexer will output solely one bit on the output line. So, to output the complete tag to the comparator, Number of multiplexers required = Number of bits in the tag.

      多路复用器将仅在输出线上输出一位。 因此,要将完整的标签输出到比较器,所需的多路复用器数量=标签中的位数。

    Step 4:

    第4步:

    • The comparator compares the tag of the generated address with the tag coming from the multiplexers.

      比较器将生成的地址的标记与来自多路复用器的标记进行比较。

    • For comparison, only one comparator is required.

      为了进行比较,仅需要一个比较器。

    • Here, Size of comparator = Number of bits in the tag.

      在这里,比较器的大小=标签中的位数。

    • If these two tags do not match, a cache miss occurs otherwise a cache hit occurs.

      如果这两个标签不匹配,则发生高速缓存未命中,否则将发生高速缓存命中。

    命中延迟 (Hit latency)

    The time taken to search out whether or not the specified word is available within the Cache Memory or not is termed as hit latency.

    搜索指定字是否在高速缓存中可用的时间称为命中等待时间。

    For direct mapping cache: Hit latency = Multiplexer latency + Comparator latency.

    对于直接映射缓存:命中延迟=多路复用器延迟+比较器延迟

    基于直接映射缓存的问题 (Problem based on direct mapped cache)

    If there is a direct-mapped cache with block size 4 KB, the size of the main memory is 16 GB and there are 10 bits in the tag. Then find out,

    如果存在块大小为4 KB的直接映射缓存,则主存储器的大小为16 GB,并且标签中有10位。 然后找出来

    1. Size of cache memory

      缓存大小

    2. Tag directory size

      标签目录大小

    Solution:

    解:

        We are considering that the memory is byte addressable.
        So, the number of Bits in Physical Address-
        = Size of main memory
        = 16 GB
        = 234 bytes
        Hence, Number of bits in physical address = 34 bits
    
        Number of Bits in Block Offset-
        Block size
        = 4 KB
        = 212 bytes
        Hence, Number of bits in block offset = 12 bits
    
        Number of Bits in Line Number-
        = total num of bits in physical address – (Num of bits in tag + Num of bits in block offset)
        = 34 bits – (10 bits + 12 bits)
        = 34 bits – 22 bits
        = 12 bits
        Hence, the total number of bits in line number = 12 bits
    
        Number of Lines in Cache-
        Number of bits in line num = 12 bits
        Thus, Total number of cache lines = 212 lines
     
        Size of Cache Memory-
        = Total numb of cache lines x Line size
        = 212 x 4 KB
        = 212 x 22 KB
        = 214 KB
        = 16 MB
        Thus, Size of cache memory = 16 MB
     
        Tag Directory Size-
        = Num of tags x Tag size
        = Num of cache lines x Num of bits in tag
        = 212 x 10 bits
        = 40960 bits
        = 5120 bytes
        Thus, size of tag directory = 5120 bytes
    
    

    References:

    参考文献:

    翻译自: https://www.includehelp.com/operating-systems/working-and-implementation-of-direct-mapped-cache.aspx

    缓存直接映射

    展开全文
  • Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位的。为了把信息放到Cache中,...Cache的地址映射方式有直接映射、全相联映射和组相联映射。假设某台计算机主存容量为...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • Cache与主存之间的全相联映射,直接映射和组相联映射的区别1.高速缓冲存储器的功能、结构与工作原理 高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多...
  • 为了提高cpu的效率,根据程序的局部性原理(现在访问的数据很有可能以后还会访问),引入了读写比较快的memory cache,cache用来存放刚刚访问的memory的数据,这样下次再需要从memory读写数据时,可以直接从cache里面...
  • Cache与主存之间的全相联映射、直接映射和组相联映射的区别高速缓冲存储器的功能、结构与工作原理高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,...
  • 浅谈cache的直接映射、全相联映射和组相联映射

    千次阅读 多人点赞 2019-06-24 11:27:34
    以下用图书馆坐座位的例子来说一说直接映射、全相联映射和组相联映射。 对于直接映射,每个块在cache中只能有一个位置,非常局限,就好像图书馆里有那么多空位,你却只能坐在一个地方,即使别的地方是空的你也不能坐...
  • **注: ...1、一个采用直接映射方式的16KB缓存,假设块长为8个32位的字,则地址为FDA459H的主存单元映射到缓存的第 290 (十进制表示)块内。 直接映射: 内存字地址等于缓存(cache)块内地...
  • 说明:  这篇文章挺好,转载一下,防止迷路。 转载: ... ... Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位的。...在信息按这种映射关系装入Cache...
  • Cache的容量很小,它保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位的。为了把信息放到Cache中,必须...Cache的地址映射方式有直接映射、全相联映射和组相联映射。假设某台计算机主存容量...
  • 开发项目时,习惯于直接修改tomcat的conf/server.xml文件,将项目路径添加到里面,例如,在server.xml文件中添加片段:<Service name="Catalina"> connectionTimeout="20000" re
  • catch中的直接映射

    2014-09-28 19:05:31
    http://cs.xiyou.edu.cn:84/jsjzcyl/a/zjs033050.htm#2 ... 首先,根据CPU指令指定的块号找到catch中所对应的行,然后用指令中的s-r指定的区号(标记)与catch中的标记作比较。若相等,则命中,在catc
  • 高速缓冲存储器的功能、结构与工作原理 高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。 Cache的功能是用来存放那些近期需要运行...
  • Cache与主存之间的直接映射,全相联映射和组项联映射以及其地址变换 首先先解释一些比较基础的东西 1.cache是什么? Cache是高速缓冲储存器,位于CPU和主存之间,比较小,速度比较快。 2.为什么要有cache? Cache类似...
  • 1.windows没有外网IP,但是可以直连外网 2.有一台有外网IP的linux机器 3.windows安装openssh ,安装方法: 1.下载 ... 2.解压,并将文件重命名OpenSSH 移动到C:\Program Files 3....
  • Cache与主存之间的全相联映射,直接映射和组相联映射的区别 1.高速缓冲存储器的功能、结构与工作原理  高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得...
  •  Cache与主存之间的全相联映射,直接映射和组相联映射的区别 1.高速缓冲存储器的功能、结构与工作原理  高速缓冲存储器是存在于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小...
  • mybatis dao接口直接映射到mapper文件

    千次阅读 2019-01-25 21:12:13
    也可以dao接口直接映射到mapper的方式。 步骤: 1.mapper文件的命名空间:dao接口的全类名 2.方法签名:dao接口的方法名 3.通过sqlSession对象获取dao接口的代理对象 4.调用接口的方法 &lt;?xml version=...
  • 1、mysql数据库字段 2、实体类 @Data @EqualsAndHashCode(callSuper=false) public class UserManager { private long id; private String name; private UserEnum userType; ... MANAG...
  • RESTful获取url参数及直接映射pojo

    千次阅读 2014-07-05 23:05:05
    1、url示例:?from=10&to=20 @QueryParam("from") int

空空如也

1 2 3 4 5 ... 20
收藏数 24,081
精华内容 9,632
关键字:

直接映射