计组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里面的键帽交换 并且每个键帽最多可以换一次 给出按键序列和输出序列 判断是否可以 如果可 ...
随机推荐
- VS code 如何使用HTML Boilerplate插件
此插件是一个HTML 模版插件,可以摆脱为 HTML 新文件重新编写头部和正文标签的苦恼. 只需在空文件中输入 html,并按 tab 键,即可生成干净的文档结构.也可以输入!,然后按tab键或者en ...
- vulnhub靶场之ICA: 1
准备: 攻击机:虚拟机kali.本机win10. 靶机:ICA: 1,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhub.com/ica/i ...
- FHQ Treap 详解
鲜花 一些鲜花放在前面,平衡树学了很久,但是每学一遍都忘,原因就在于我只能 70% 理解 + 30% 背板子,所以每次都忘.这次我采取了截然不同的策略,自己按照自己的理解打一遍,大获成功(?),大概打 ...
- C# 9.0 添加和增强的功能【基础篇】
一.记录(record) C# 9.0 引入了记录类型. 可使用 record 关键字定义一个引用类型,以最简的方式创建不可变类型.这种类型是线程安全的,不需要进行线程同步,非常适合并行计算的数据共享 ...
- Python基础之模块:6、hashlib模块 subprocess模块 logging模块
目录 一.hashlib模块 1.简介 2.基本操作与用法 二.subprocess模块 1.简介 2.基本操作与用法 三.logging模块 1.简介 2.基本操作与用法 一.hashlib模块 1 ...
- 「浙江理工大学ACM入队200题系列」问题 F: 零基础学C/C++39——求方程的解
本题是浙江理工大学ACM入队200题第四套中的F题 我们先来看一下这题的题面. 由于是比较靠前的题目,这里插一句.各位新ACMer朋友们,请一定要养成仔细耐心看题的习惯,尤其是要利用好输入和输出样例. ...
- 通过jmeter,将数据库数据查询出来并打印
1. 连接数据库 1.1 添加jdbc驱动路径 1.2 JDBC Connection Configuration 1.3 JDBC Request 2. 查询数据库数据并打印 2.1 定义变量 ...
- Django的简单使用
Django 基础简介 基础简介 1. 软件框架 一个公司是由公司中的各部部门来组成的,每一个部门拥有特定的职能,部门与部门之间通过相互的配合来完成让公司运转起来. 一个软件框架是由其中各个软件模块组 ...
- Perl语言中一些内置变量等,$x、qw、cmp、eq、ne等
转载 Perl语言中一些内置变量等,$x.qw.cmp.eq.ne等 字母 符号 释义 eq = = equal(等于) ne != not equal(不等于) cmp 比较 qq " ...
- perl大小写转换函数uc和lc
$side = uc $attrs[0]; #把attrs[0]转换成大写,然后给side变量赋值. $gender = lc $attrs[1]; #把attrs[1]转换成小写,然后给gender ...