计组Review1
1GB的内存,它是以字节编址的,假设内存地址为32位,128KB的高速缓存。现在有一个数据位于0x123456(字节编址),会映射到那些不同情形的内存单元上,还有TAG和总缓存大小。

1. 直接映射,每块16字节。
已知:
- 块大小为 $16$ 字节,也就是 $128({2^7})Bit$ 。
首先要计算块行数(数量):
- 块行数=$\frac{{128 \times 1024 \times 8B{\rm{it}}}}{{16 \times 8B{\rm{it}}}} = \frac{{{2^{20}}}}{{{2^7}}} = {2^{13}}$。
主存地址 = 区号 + 区内块号 + 块内偏移量:
- 主存有 ${2^{32}}$ 块。
- 区内块号就是cache行数。
- 块内偏移量就是cache块大小=$4$(注意这里是字节编址)。
于是我们可以得到标记的位数:
- $Tag=32-13-4=15$。
于是我们可以得到地址如下所示:

然后计算块地址:
- $0{\rm{x}}123456 \div 0{\rm{x}}10 = 0{\rm{x}}12345$
接着计算Cache行号:
- $0{\rm{x}}12345\bmod {2^{13}} = 0{\rm{x}}345$
- 所以$TAG=0{\rm{x}}9$。

所以直接映射的Cache总位数为:
- ${2^{13}} \times ({2^2} \times {2^5} + (32 - 13 - 2 - 2) + 1)=1179648Bit=147456Byte=144KB$
2. 直接映射,每块64字节。
已知:
- 块大小为 $64$ 字节,也就是 $512({2^9})Bit$ 。
首先要计算块行数(数量):
- 块行数=$\frac{{128 \times 1024 \times 8Bit}}{{{2^9}}} = {2^{11}}$。
主存地址 = 区号 + 区内块号 + 块内偏移量:
- 主存有 ${2^{32}}$ 块。
- 区内块号就是cache行数。
- 块内偏移量就是cache块大小=$6$(注意这里是字节编址)。
于是我们可以得到标记的位数:
- $Tag=32-11-6=15$。
然后计算块地址:
- $0{\rm{x}}123456 \div 0{\rm{x}}40 = 0{\rm{x}}48D1$
接着计算Cache行号:
- $0{\rm{x}}48D1\bmod {2^{11}} = 0{\rm{x}}D1$
- 所以$TAG=0{\rm{x}}9$。
所以直接映射的Cache总位数为:
- ${2^{11}} \times ({2^4} \times {2^5} + (32 - 11 - 4 - 2) + 1)=1081344Bit=1056Byte=132KB$
3.二路组相联,每块16字节
已知:
- 块大小为 $16$ 字节,也就是 $128({2^7})Bit$ 。
首先要计算块组数(数量):
- 块行数=$\frac{{128 \times 1024 \times 8B{\rm{it}}}}{{16 \times 8B{\rm{it}}}} = \frac{{{2^{20}}}}{{{2^7}}} = {2^{13}}$。
- 块组数=$\frac{{{2^{13}}}}{2} = {2^{12}}$。
主存地址 = 组号 + 组内块号 + 块内偏移量:
- 块内偏移量也就是cache块大小=$4$。
- 组内块号就是cache组数
于是我们可以得到标记的位数:
- $Tag=32-12-4=16$。

然后计算块地址:
- $0{\rm{x}}123456 \div 0{\rm{x}}10 = 0{\rm{x}}12345$
接着计算Cache组号:
- $0{\rm{x}}12345\bmod {2^{12}} = 0{\rm{x}}345$
- 所以$TAG=0{\rm{x}}12$。
所以2路组相联的Cache总位数为:
- ${2^{13}} \times ({2^2} \times {2^5} + (32 - 12 - 2 - 2) + 1)=1187840Bit=148480Byte=145KB$
4. 四路组相联,每块32字节
已知:
- 块大小为 $32$ 字节,也就是 $256({2^8})Bit$ 。
首先要计算块组数(数量):
- 块行数=$\frac{{128 \times 1024 \times 8B{\rm{it}}}}{{32 \times 8B{\rm{it}}}} = \frac{{{2^{20}}}}{{{2^8}}} = {2^{12}}$。
- 块组数=$\frac{{{2^{12}}}}{{{2^2}}} = {2^{10}}$。
主存地址 = 组号 + 组内块号 + 块内偏移量:
- 块内偏移量也就是cache块大小=$5$。
- 组内块号就是cache组数
于是我们可以得到标记的位数:
- $Tag=32-10-5=17$。
然后计算块地址:
- $0{\rm{x}}123456 \div 0{\rm{x}}20 = 0{\rm{x}}91A2$
接着计算Cache组号:
- $0{\rm{x}}91A2\bmod {2^{10}} = 0{\rm{x}}1A2$
- 所以$TAG=0{\rm{x}}24$。
所以4路组相联的Cache总位数为:
- ${2^{12}} \times ({2^3} \times {2^5} + (32 - 10 - 3 - 2) + 1)=1122304Bit=140288Byte=137KB$
计组Review1的更多相关文章
- 计组CPU设计实验关键材料和关键设计
我记得这是2016春季学期搞得,参考和学习了很多别人的东西,这里小小的总结一下,逻辑性还不是太强,还需要好好整理 首先是指令集 CPU架构 外部接线架构 指令格式 机器状态自动机 这部分忘了,汗 这部 ...
- 【计组】《计算机组成与体系结构性能设计》William Stallings 第2部分 计算机系统 第3章 计算机功能和互连的顶层视图
关键词 address bus 地址总线 asynchronous timing 异步时序 bus 总线 bus arbitration 总线仲裁 bus width 总线宽度 centralized ...
- 【重学计算机】计组D3章:运算方法与运算器
1. 定点数运算及溢出 定点数加减法:减法化加法,用补码直接相加,忽略进位 溢出:运算结果超出了某种数据类型的表示范围 溢出检测方法:统一思想概括为正正得负或负负得正则溢出,正负或负正不可能溢出 方法 ...
- 【重学计算机】计组D2章:数据表示
1.基本概念 真值:+0101,-0100:机器数: [x]原=0101 2.几种机器数 原码:x = -0101,[x]原 = 1101 反码:x = -0101,[x]反 = 1010 补码:x ...
- 【重学计算机】计组D1章:计算机系统概论
1.冯诺依曼计算机组成 主机(cpu+内存),外设(输入设备+输出设备+外存),总线(地址总线+数据总线+控制总线) 2.计算机层次结构 应用程序-高级语言-汇编语言-操作系统-指令集架构层-微代码层 ...
- 计组_IEEE754_练习题
IEEE754 阶码:移码:尾数:原码 一个规格化的32位浮点数x的真值可表示为: x=(-1)^s×(1. M) × 2^(E-127) e=E-127 其中尾数域 ...
- [软工顶级理解组] Beta阶段项目展示
目录 团队成员 软件介绍 项目简介 预期典型用户 功能描述 预期目标用户数 用户反馈 团队管理 分工协作 项目管理 取舍平衡 代码管理 程序测试 代码规范 文档撰写 继续开发指导性 用户沟通 需求分析 ...
- [软工顶级理解组] Alpha阶段项目展示
目录 团队成员 软件介绍 项目简介 预期典型用户 功能描述 预期目标用户数 用户反馈 团队管理 分工协作 项目管理 取舍平衡 代码管理 程序测试 代码规范 文档撰写 继续开发指导性 用户沟通 需求分析 ...
- 计算机系统6-> 计组与体系结构3 | MIPS指令集(中)| MIPS汇编指令与机器表示
上一篇计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统从顶层讲解了一个指令集 / 指令系统应当具备哪些特征和工作原理.这一篇就聚焦MIPS指令集(MIPS32),看看其汇 ...
- Codeforces Round #389 (Div. 2,) B C
考完复变之后沉迷联盟不能自拔...明天就开始抢救计组 ... B 一个人装错了键帽 选择几个pair 把pair里面的键帽交换 并且每个键帽最多可以换一次 给出按键序列和输出序列 判断是否可以 如果可 ...
随机推荐
- 使用 etcdadm 快速、弹性部署 etcd 集群
Etcd 是一个可靠的分布式键值存储, 常用于分布式系统关键数据的存储:而 etcdadm 是一个用于操作 etcd 集群的命令行工具,它可以轻松创建集群.向现有集群添加成员.从现有集群中删除成员等操 ...
- virtualenv +virtualenvwrapper
一.虚拟环境virtualenv 1.安装:pip3 install virtualenv 2.创建虚拟环境:virtualenv venv #venv为虚拟环境目录名,目录名自定义 #virtual ...
- 某 .NET RabbitMQ SDK 有采集行为,你怎么看?
一:背景 1.讲故事 前几天有位朋友在微信上找到我,说他的一个程序上了生产之后,被运维监控定位到这个程序会向一个网址为: http://m.365ey.net 上不定期打数据,而且还是加密的格式,要他 ...
- numpy常用知识点备忘(2)
x.ravel() 和 x.flatten() : 将多为数组降维到1维.ravel()返回元素的引用(对象不一样,但是元素是引用),flatten()返回新的元素. np.meshgrid(x, y ...
- Springboot数据库的配置问题
mysql时区问题 先前的代码如下 spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: ...
- Excel中的VLOOKUP函数
VLOOKUP函数是Excel中的一个纵向查找函数,功能是按列查找,最终返回该列所需查询序列所对应的值. 该函数的语法规则如下: VLOOKUP(lookup_value,table_array,co ...
- 工作中,本人常用到的unzip、zip命令
1. 命令安装 1.1 zip安装 yum install zip 1.2 unzip安装 yum install unzip 2. 常用命令 2.1 常用zip命令 2.1.1 压缩文件 zip x ...
- 面试 个人摸底监测 考察JavaScript基础 (第三天)
01,如何开启JS严格模式?JS严格模式有什么特点? 两种方式 全局开启在js开头加上 'use strict' 局部开启,在作用域开头加上 function fn(){ 'use strict' } ...
- Huawei OJ 题解 - 31. 整数拆分 - Go 参考解答
## 简介- 详情:http://oj.rnd.huawei.com/problems/31/details- 难度:简单## 思路TODO## 用例TODO## 解答```gopackage mai ...
- Seata 1.5.2 源码学习(Client端)
在上一篇中通过阅读Seata服务端的代码,我们了解到TC是如何处理来自客户端的请求的,今天这一篇一起来了解一下客户端是如何处理TC发过来的请求的.要想搞清楚这一点,还得从GlobalTransacti ...