Cache与主存地址映像计算例题

摘要:
Cache的块内地址部分直接取自主存地址的块内地址段。Cache保存的各数据块互不相关,Cache必须对每个块和块自身的地址加以存储。当请求数据时,Cache控制器要把请求地址同所有的地址加以比较,进行确认。直接映像方式下,数据块只能映像到Cache中唯一指定的位置,故不存在替换算法的问题。它不同于全相连Cache,地址仅需比较一次。Cache也进行同样的分组和分块。分析:Cache容量:4KB主存容量:16MB映像方式:直接映像;把主存分成若干区,每区与Cache大小相同。

一、全相连映像

主存中任何一个块均可以映像装入到Cache中的任何一个块的位置上。主存地址分为块号和块内地址两部分,Cache地址也分为块号和块内地址。Cache的块内地址部分直接取自主存地址的块内地址段。主存块号和Cache块号不相同,Cache块号根据主存块号从块表中查找。Cache保存的各数据块互不相关,Cache必须对每个块和块自身的地址加以存储。当请求数据时,Cache控制器要把请求地址同所有的地址加以比较,进行确认。

特点:灵活,块冲突率低,只有在Cache中的块全部装满后才会出现冲突,Cache利用率高。但地址变换机构复杂,地址变换速度慢,成本高。

公式:

主存地址位数=块号+块内地址;

Cache地址位数=块号+块内地址。

二、直接映像

把主存分成若干区,每区与Cache大小相同。区内分块,主存每个区中块的大小和Cache中块的大小相等,主存中每个区包含的块的个数与Cache中块的个数相等。任意一个主存块只能映像到Cache中唯一指定的块中,即相同块号的位置。主存地址分为三部分:区号、块号和块内地址,Cache地址分为:块号和块内地址。直接映像方式下,数据块只能映像到Cache中唯一指定的位置,故不存在替换算法的问题。它不同于全相连Cache,地址仅需比较一次。

特点:地址变换简单、速度快,可直接由主存地址提取出Cache地址。但不灵活,块冲突率较高,Cache空间得不到充分利用。

公式:

主存地址位数=区号+区内分块号+块内地址;

Cache地址位数=块号+块内地址。

三、组相连映像

组相连映像是前两种方式的折衷。主存按Cache容量分区,每个区分为若干组,每组包含若干块。Cache也进行同样的分组和分块。主存中一个组内的块数与Cache中一个组内的块数相等。组间采用直接方式,组内采用全相连方式。组的容量=1时,即直接映像,组的容量=整个Cache的容量时,即全相连映像。Cache的存在对于程序员透明,Cache的地址变换和数据块的替换算法都采用硬件实现。

公式:

主存地址位数=区号+组号+主存块号+块内地址;

Cache地址位数=组号+组内块号+块内地址。

四、主存地址和Cache地址的相关计算

&主存地址的位数A由主存容量N决定

A=log2N=区号位数+块号位数+块内地址位数

&Cache地址的位数B由Cache容量H决定

B=LOG2H=块号位数+块内地址位数

&区号根据Cache容量划分,区号长度=主存地址位数-Cache地址位数

&主存的块号和Cache块号的长度相同,位数K取决于Cache中能容纳的个数

J,K=LOG2J

&主存的块内地址和Cache的块内地址长度相同,位数M取决于块的容量 Q,M=LOG2Q

例题解析:

例一、容量为64块的Cache采用组相联方式映像,字块大小为128字节,每4块为一组,若主容量为4096块,且以字编址,那么主存地址为多少位,主存区号为多少位?

方法一:

分区数=主存容量/Cache容量=4096/64=64;

区内分组数=64/4=16;

组内分块数=4块/组;

块内地址=128字节;

所以根据公式:

主存地址位数=6+4+2+7=19;

主存区号=6位;

方法二:

主存地址的位数A由主存容量N决定:

A=log2N=区号位数+块号位数+块内地址位数

所以:

A=LOG2N=LOG2(4096*128)=LOG2(2^12*2^7)=LOG2(2^19)=19;

&Cache地址的位数B由Cache容量H决定

B=LOG2H=块号位数+块内地址位数

所以:

B=LOG2(64*128)=13.

区号的计算方法同上!

方法三:

主存地址=主存块地址+块内地址=12+7=19;

主存区号地址=主存块地址-Cache块地址=12-6=6.

例二、一个具有4KB直接相联cache的32位微处理器,主存的容量为16MB,假定该cache的块为4个32位的字。
(1)指出主存地址中区号、块号和块内地址的位数;
(2)求主存地址为ABCDEF(16进制)的单元在cache中的什么位置?
分析:
Cache容量:4KB
主存 容量 :16MB
映像方式:直接映像;
把主存分成若干区,每区与Cache大小相同。区内分块,主存每个区中块的大小和Cache中块的大小相等,主存中每个区包含的块的个数与Cache中块的个数相等。任意一个主存块只能映像到Cache中唯一指定的块中,即相同块号的位置。主存地址分为三部分:区号、块号和块内地址,Cache地址分为:块号和块内地址。
主存地址位数=区号+区内分块号+块内地址;
Cache地址位数=块号+块内地址。

主存的区号:16M/4KB=2^12=12位;
主存块号:4KB/(4*32bit)=2^8=8位;
块内地址:4*32bit =16Byte=4个字(因为一个字为32bit)=2^2字=2位;

1)

主存容量为16MB=2^24个字节,1个32位字是由4个字节组成,所以主存字地址为22位.
CACHE容量为4KB=2^12个字节,同理,CACHE字地址为10位.
CACHE的块为4个32位的字,所以块内地址为2位
在直接映象中:
CACHE地址位=块号位数+块内地址位数==>块号位数=CACHE地址位-块风地址位=10-2=8
主存地址中的区号=主存地址位数-CACHE地址位数=22-10=12位
(2)
ABCDEF=1010 1011 1100 1101 1110 1111
该存储单元在CACHE的位址为:
区号=1010 1011 1100块号=1101 1110块内地址=1111

在cache中的位置:块号1101 1110块内地址1111
数据的存储一般以"字"为单位进行。

但在计算机里我们保留对字节的寻址和编码,不管是16位,还是32位,还是64位微处理器.象第二小题主存地址为ABCDEF(16进制)这是一个24位地址码,而主存字地址为22位. 计算机只会按字进行操作,即它的传输运算,包括直接相连cache映象。 所以我们只管字,不管字节。
ABCDEF=1010 1011 1100 1101 1110 1111

在cache中的位置:块号1101 1110块内地址11

注:后两位为字节寻址,这里不用了。(ABCDEC,ABCDED,ABCDEE,ABCDEF这四个字节地址为同一字地址)在同一个CACHE块内地址。

免责声明:文章转载自《Cache与主存地址映像计算例题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇安卓SDK安装时出现的小问题jq+layui之table表每行的编辑按钮只能点击触发一次的问题的解决下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jQuery在线引用地址(全)

1.官网jquery压缩版引用地址:  3.1.1版本:   <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>    3.0.0版本:   <script src="https://code.jquery.com/jquery-3.0.0.m...

学会使用ip池和cookie池伪装

在进入正题之前,我们先复习一个关于requests模块的相关知识点: requests中解决编码的三种方法: ①response.content 类型:bytes 解码类型:没有指定 如何修改编码方式:response.content.decode() ②response.content.decode() 类型:str 解码类型:解码成python文本的字...

2018年九个很受欢迎的vue前端UI框架

最近在逛各大网站,论坛,SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,小编自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在做自己的公司项目。 学习的过程之中发现继最热的 React 组件库和 Angular 组件库之后,这里有很多个流行和实用的 Vue.js 组件库完善你的下一个用 V...

火狐浏览器所有的快捷键

http://zhidao.baidu.com/link?url=-fpx6gbr3jdwvlTvDrGqBvTu-CHVmLFKLAqm5dSL8DaXYYFVtEt4fD1KsFvcQ_5u-Mn9geEjBv-7LWPwpiDWjKfirefox快捷键搜索类:本页查找: Ctrl+F再次查找: F3输入查找链接: '输入查找文本: /查找: Shif...

获取,修改进程命令行

在XDebug的源码学习中看到的命令行操作,将主要源码摘录出来做了个获取和更改进程命令行的Demo. 0x01  获取命令行      这里获取命令行的方式并不是通过调用GetCommandLine函数。    而是借由ntdll中的NtQueryInformationProcess函数查询ProcessBasicInformation,得到Process...

如何在Ubuntu 20.04 / 18.04或更老版本中安装ifconfig

Ubuntu Linux是最流行的操作系统之一,因此,如果你正在使用它,并希望使用Ifconfig命令查看系统的Ip地址,那么有办法安装它。就像在Windows中的ipconfig一样,我们有ifconfig for Linux操作系统来获取和使用命令行查看所有可用的网络适配器的Ip地址。然而,默认情况下,它不会出现在你的Ubuntu系统中,这需要手动安装...