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与主存地址映像计算例题的更多相关文章
- Cache与主存之间的全相联映射,直接映射和组相联映射的区别
2017-02-22 注:本文并非原创,来自百度文库,只是觉得写得较好,故分享之.若是某人的知识产权,望告知!谢谢 1.高速缓冲存储器的功能.结构与工作原理 高速缓冲存储器是存在于主存与CPU之间的一 ...
- 使用B或BL跳转时,下一条指令的地址是这样计算的
B跳转指令:它是个相对跳转指令,其机器码格式如下: [31:28]位是条件码:[27:24]位为“1010”(0xeaffffff)时,表示B跳转指令,为“1011”时,表示BL跳转指令:[23:0] ...
- 通过IP地址和子网掩码计算主机数
知道ip地址和子网掩码后可以算出: 1. 网络地址 2. 广播地址 3. 地址范围 4. 本网有几台主机 例1:下面例子IP地址为192·168·100·5 子网掩码是255·255·255·0.算出 ...
- IP地址个数的计算原理
IP注释: IP地址(Internet Protocol Address),缩写为IP Adress,是一种在Internet上的给主机统一编址的地址格式,也称为网络协议(IP协议)地址. 它为互联网 ...
- IP地址及子网掩码计算
主机号全0表示网络号,主机号全1表示广播地址 我们都知道,IP是由四段数字组成,在此,我们先来了解一下3类常用的IP A类IP段 0.0.0.0 到127.255.255.255 B类IP段 128. ...
- 实例讲解ip地址、子网掩码、可用地址范围的计算
关于ip以及相关的掩码.网络号等概念可以查看相关的博客.资料,这些东西很容易找着,一搜一大片.本文主要记录通过实例进行ip相关的计算. 我自己使用的在线网络计算器地址:https://www.sojs ...
- C#根据IP地址和子网掩码计算广播地址
using System.Net; /// <summary> /// 获得广播地址 /// </summary> /// <param name="ipAdd ...
- TMS320F28335系列芯片地址映射表
本表非官方资料,纯属个人学习笔记,欢迎补充 本表非官方资料,纯属个人学习笔记,欢迎补充 本表非官方资料,纯属个人学习笔记,欢迎补充 开始地址 长度 名称 物理器件 程序 数据 只读 Protected ...
- ip地址个数的计算
一个IP地址,却关联太多的知识 二进制与 8 比特 电脑中显示出来的数字是 10 进制的,键盘的每一个键都由一个 8 位的二进制编码,所以 1 字节等于 8 比特.对数字而言,1 的二进制是 0000 ...
随机推荐
- Nmap的活跃主机探测常见方法
最近由于工作需求,开始对Nmap进行一点研究,主要是Nmap对于主机活跃性的探测,也就是存活主机检测的领域. Nmap主机探测方法一:同网段优先使用arp探测: 当启动Namp主机活跃扫描时候,Nma ...
- 【BZOJ1054】[HAOI2008]移动玩具 BFS
[BZOJ1054][HAOI2008]移动玩具 Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个 ...
- CentOS oracle Client客户端安装
CentOS客户端安装方法如下: 1.安装客户端 rpm -ivh /当前目录/oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm rpm - ...
- (java部署篇)eclipse ~ 自动补全词的各种控制(转)
#这种方法只适用于Eclipse Classic版本(这个版本带有插件的源码) 在使用Eclispe的过程,感觉自动补全做的不好,没有VS的强大.下面说两个增强自动补全的方法: 1.增加Eclipse ...
- PHP中文字数限制:中文字符串截取(mb_substr)
一.中文截取:mb_substr() mb_substr( $str, $start, $length, $encoding ) $str,需要截断的字符串 $start,截断开始处,起始处为0 $l ...
- PL/SQL常用设置
tools-->preferences-->user interface-->editor-->AutoReplace AutoReplaceWhen enabled, you ...
- rest_framework之频率详解 03
访问频率(节流) 1.某个用户一分钟之内访问的次数不能超过3次,超过3次则不能访问了,需要等待,过段时间才能再访问. 2.自定义访问频率.两个方法都必须写上. 登入页面的视图加上访问频率 3.返回值F ...
- 基于Token的身份验证--JWT
初次了解JWT,很基础,高手勿喷. 基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session. JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符 ...
- 170526、spring 执行定时任务
Spring 定时任务之 @Scheduled cron表达式 一.使用 Spring配置文件xmlns加入 xmlns:task="http://www.springframework.o ...
- pta 习题集 5-14 求n以内最大的k个素数以及它们的和
本题要求计算并输出不超过n的最大的k个素数以及它们的和. 输入格式: 输入在一行中给出n(10≤≤n≤≤10000)和k(1≤≤k≤≤10)的值. 输出格式: 在一行中按下列格式输出: 素数1+素数2 ...