精华内容
下载资源
问答
  • 主存到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采用。

    需要存储tag来区分,tag可以理解为主存块的index,方便查找。

    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块。

    下面这个图中间部分总共16块,0~15,是从主存中取了和Cache同样大小的,16块分为2组,0~7块是第1组,8~15块是第2组。

    即将一个区分为了2组;块0映射到Cache中的组1,块1映射组1,以此类推,块7映射组7;但是可以是组中的任一块。

     

                                                                              图(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是前两种方法的折中方案,适度兼顾二者的优点,尽量避免二者的缺点,因而得到普遍采用。

    更正一下:有人说这个Cache的组画的不对,是Cache分了2组,应该是组1和组2,组1里有0-7,组2是8-15,和中间的那个一样。

    这么画是为了便于理解,把2路体现在了中间部分,而把可以放同一个块的放到了一组,看个人理解,但是映射的关系都是一样的。

    至于块0和块1在一组不太合逻辑,更正为下面的图,有问题请指正。

    实例分析:

    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

     

     

    展开全文
  • 在80386以上档次的微机中配置了高速缓冲存储器(Cache),这时内存包括主存与高速缓存两部分。 计算器内存条采用的是DRAM(动态随机存储器),即计算机的主存。通常所说的内存容量即指内存条DRAM的大小。 高速缓冲...

    在80386以上档次的微机中配置了高速缓冲存储器(Cache),这时内存包括主存与高速缓存两部分。


    计算器内存条采用的是DRAM(动态随机存储器),即计算机的主存。通常所说的内存容量即指内存条DRAM的大小。


    高速缓冲存储器Cache主要是为了解决CPU和主存速度不匹配而设计的。Cache一般由SRAM(静态随机存储器)芯片实现,它的存取速度接近CPU,快于DRAM,存储容量小于DRAM。它比主存的优先级高,CPU存取信息时优先访问Cache,找不到的话再去主存DRAM中找,同时把信息周围的数据块从主存复制到Cache中。


    现代计算机系统基本都采用Cache-主存-辅存(即外存储器)三级存储系统。其中CPU可直接访问Cache和主存,辅存则通过主存与CPU交换信息。


          严格的说,内存包括主存(内存条,基于DRAM)与高速缓存(Cache,基于SRAM)两部分。可能是由于Cache相较内存条容量很小,毕竟内存容量只计内存条大小,加上重要性也不及内存条,一般人或许不知道Cache,所以就忽略了高速缓存Cache,直接将主存--内存条等同了内存吧。

     

     

     

     

     

     

     

    展开全文
  • 主存分类

    千次阅读 2018-09-05 21:11:06
    主存分随机存取寄存器(RAM)和只读存储器(ROM),一般RAM用于内存(断电时将丢失其存储内容),ROM用于bios之类(断电还存在)。ROM表示的是只读存储器,即:它只能读出信息,不能写入信息,计算机关闭电源后其内...

    主存分随机存取寄存器(RAM)和只读存储器(ROM),一般RAM用于内存(断电时将丢失其存储内容),ROM用于bios之类(断电还存在)。ROM表示的是只读存储器,即:它只能读出信息,不能写入信息,计算机关闭电源后其内的信息仍旧保存,一般用它存储固定的系统软件和字库等。RAM表示的是读写存储器,可其中的任一存储单元进行读或写操作,计算机关闭电源后其内的信息将不在保存,再次开机需要重新装入,通常用来存放操作系统,各种正在运行的软件、输入和输出数据、中间结果及与外存交换信息等,我们常说的内存主要是指RAM。


    RAM分 DRAM(动态)和SRAM(静态):由于SRAM不需要刷新电路就能够保存数据,所以具有静止存取数据的作用。而DRAM则需要不停地刷新电路,否则内部的数据将会消失。而且不停刷新电路的功耗是很高的,在我们的PC待机时消耗的电量有很大一部分都来自于对内存的刷新。SRAM存储一位需要花6个晶体管,而DRAM只需要花一个电容和一个晶体管。cache追求的是速度所以选择SRAM,而内存则追求容量所以选择能够在相同空间中存放更多内容并且造价相对低廉的DRAM

    ROM分 MROM、PROM、EROM、闪存。


    主存偏址:8*4代表8个存储空间,每个空间存储4个bit,

    计算地址单元:例子:从AC000H到C7FFFH,一共有C7FFFH-AC000H+1=1C000H(bit)/2^10=112k个地址空间。按16bit偏址,若由28片存储芯片构成,每片有16K存储单元,则该芯片每个存储单元有 112K*16/(28*16K) = 4

    展开全文
  • privpage:PrivPage主存储库
  • 关于主存地址和主存区号的计算

    千次阅读 2016-03-04 19:02:00
    主存容量为4096块,且以字编址,那么主存地址应为_(?)_位,主存区号应为_(?)_位。 主存地址=区号+组号+组内块号+块内地址号 由于主存容量为4096块,而每块为128个字,主存的总容量为512K字,故主存地址应为...

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

     

    主存地址=区号+组号+组内块号+块内地址号

    由于主存容量为4096块,而每块为128个字,主存的总容量为512K字,故主存地址应为19位。主存地址应分为区号、组号、组内块号、块内地址号。可以看到, 块内地址号应为7位,用以表示128个字。一组为4块,则组内块号用2位表示。Cache容量为64块,共分16组, 故组号需要用4位地址表示。剩余的即为区号,应为6位。

     

    主存地址=区号+组号+组内块号+块内地址号

    区号

    组号

    组内块号

    块内地址号

    6

    4

    2

    7

    6=19-(4+2+7)

    16=24

    4=22

    128=27

    521488=219

    则分为16组

    每4块为一组

    字块大小为128个字

    主存总容量=4096*128=524288

    Cach容量为64块,每4块为一组

     

     

    转载于:https://www.cnblogs.com/imysql/p/5243120.html

    展开全文
  • 存储器按字节编址,每个主存块大小为32字节,请问: Cache如何分组、分块? 主存如何分组、分块? 计算129号主存单元所在的主存块应装入到的Cache组号。 解答思路一: 1.组相联映射方式下,主存块按模Q(Q为Cache...
  • 主存与CPU之间的连接 现在的计算机 存储器的输入输出信号 增加主存的存储字长——位扩展 单块主存芯片与CPU的连接 可以看到数据线的利用是非常不充分的,只连接了一根线。 通过相同的地址线连接两块主存,这样就...
  • 主存容量扩展

    2020-10-20 13:53:44
    当存储芯片的位与CPU的位数不一致时,可以采取位扩展的方式 假设我们买了一个CPU,它有15...如下面两幅图所示,就是连接的模型图,也就是主存容量的位扩展位,8K8位,也就是主存容量是8KB。 当CPU的容量不能满足时
  • 系统采用最优适应分配算法为作业分配主存空间,而且具有紧凑技术。请编程完成以下步骤: (1). 输出此时的已分配区表和未分配区表; (2). 装入 Job3(35K),输出主存分配后的已分配区表和未分配区表; (3). 回收 ...
  • vispy:Vispy的主存储库
  • 主存是中央处理器能够直接存取指令和数据的存储器。能否合理而有效地使用它,在很大程度上将影响整个计算机系统的性能。 提供用户友好的界面设计模拟可变分区管理方式中根据用户的选择使用首次适应算法、最佳适应...
  • 在Cache主存层次中主存的更新算法有哪几种它们各有什么特点 1 写直达法 易于实现而且下一级存储器中的数据总是最新的 2 写回法速度块写操作能以 Cache 存储器的速度进行而且对于同一单元的多 个写最后只需一次写回...
  • Cache – 主存的地址映射及相关计算问题

    万次阅读 多人点赞 2016-12-29 11:12:30
    对于Cache,即高速缓存,是用来解决主存与CPU速度不匹配问 题,Cache的出现使得CPU可以不直接访问主存而直接与高速Cache交换信息。由于程序访问的局部性原理可以很容易设想只要将 CPU近期要用到的程序和数据提前从...
  • 主存与cache间的地址映射

    万次阅读 多人点赞 2017-12-07 11:38:01
    ①cache与主存之间的数据交换是以“块”为单位进行的。一个“块”中包含若干个“字”,字长由实际情况确定。  习惯上,cache中的“块”称“行”,主存中称“块”。cache的“行”与主存的“块”存储容量相同。 ②...
  • 来源 Mulesoft应用程序主存储库
  • 核心:.NET Core的主存储库
  • 用C/C++语言模式Linux操作系统主存的分配与回收,希望采纳!
  • 主存与CPU的连接

    2020-04-02 11:02:20
    一:主存容量扩展-位扩展 二:主存容量扩展-子扩展 一:线选法 译码器选法 主存容量扩展–译码器 主存容量扩展-字位同时扩展 主存与CPU的连接 解答: ...
  • 通过redis主存复制(一主两从) 数据同步过程日志,分析Redis主从复制的工作原理,Redis允许同时开启AOF和RDB,既保证了数据安全又使得进行备份等操作十分容易。此时重新启动Redis后Redis会使用AOF文件来恢复数据,...
  • dentep.github.io:主存储库
  • 广工操作系统实验 主存空间的分配与回收 带源代码源程序和报告
  • 存储层次模拟器包括 1,主存-Cahe 2.主存-辅存
  • 信息8000 INFO 8000主存储库 该存储库将包含2020年Spring的所有作业
  • 主存内容更新算法

    2019-01-15 02:13:53
    更新主存内容 主存和缓存之间信息交换的关键是更新主存内容,一般有两种更新算法:写回法(Write Back)和写直达法(Write Through)。 写回法是指在CPU执行写操作命中Cache时,信息只写入Cache,仅当需要被替换时...
  • 主存和CPU连接

    2020-08-09 11:14:38
    主存容量扩展-位扩展 8个8Kx1为的存储芯片 相当与8Kx8位的存储器 容量为8KB 主存容量扩展-字扩展 线选法 线选法:n条线对于n和片选信号 相当于A13和A14控制使用哪个8Kx8位的芯片如果是01的话用第一片如果是10的话...
  • munin:munin主节点插件的主存储库
  • 共享主存段机制

    2017-06-03 15:33:05
    共享主存段为进程提供了直接通过主存进行通信的有效手段,不像消息缓冲机制那样需要系统备份提供缓冲,也不像pipe机制那样需要实现尽力一个特殊文件,而是由通信双方直接访问某些共享虚拟存储空间。在系统V中,系统...
  • 一、相同点 1.1 出发点相同 二者都是为了提高存储系统的性能价格比而构造的分层存储体系,都力图使存储系统的性能接近高速存储器,而...cache的出现主要是为了解决主存与CPU的速度差异问题; 虚存的出现主要是为了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,703
精华内容 4,281
关键字:

主存