计组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里面的键帽交换 并且每个键帽最多可以换一次 给出按键序列和输出序列 判断是否可以 如果可 ...
随机推荐
- 齐博x1如何开启自定义标签模板功能
为安全起见,同时也为了避免用户随意添加风格导致默认模板不协调,系统默认关闭了类似V系列的自定义修改模板功能.如下图所示,默认是关闭的 你如果需要启用的话,把下面的代码,参考下图导进去后,就可以增加一个 ...
- SpringBoot 阶段测试 1
SpringBoot 阶段测试 1 目录 SpringBoot 阶段测试 1 1.使用JDK8新语法完成下列集合练习: 1.1 List中有1,2,3,4,5,6,7,8,9几个元素要求; (1) 将 ...
- 计算机系统大作业:Hello的一生
计算机系统大作业 题 目 程序人生-Hello's P2P 专 业 计算机科学与技术 学 号 班 级 学 生 江水为竭 指导教师 刘宏伟 计算机科学与技术学院 2022年5月 摘 要 HelloWor ...
- Go实现常用软件设计模式一:单例模式
目录: 举个栗子 概念介绍 使用场景 1.举个栗子 类图 plantuml ``` @startuml'https://plantuml.com/class-diagramclass Elephant ...
- Redis 常见问题
Redis 常见问题 落叶他乡树,寒灯独夜人. 一. 什么是Redis? Redis 是一个使用 C 语言写成的,开源的高性能key-value非关系缓存数据库: Redis的数据都基于缓存的,所以很 ...
- vue 中使用 this 更新数据的一次大坑
情景说明: 之前用 vue 做数据绑定更新时,发现一个莫名奇妙的问题. 我在 vue 实例中声明了一个数组属性如 books: [],在异步请求的回调函数中使用 this.books = res.da ...
- Mybatis-plus多数据源 + 数据库连接明文加密
核心依赖 <!--mybatis-plus 核心组件--> <dependency> <groupId>com.baomidou</groupId> & ...
- Vue2组件间通讯
Vue2组件通信的基础方式 自己的理解:组件化通信,无非就是数据你传我,我传你,两个组件的相互交流,方法很多,下方有图示(此篇建议小白阅读,大神的话也不会看,哈哈哈哈!仅供参考,有不同的意见可以一起交 ...
- Jmeter中用户定义的变量跟用户参数的区别
用户定义的变量: 全局变量,可以跨线程组被调用,但是,在启动运行时,获取一次值,在运行过程中,不会再动态获取值.用户参数: 局部变量,只能在自己的线程组中被调用,不能直接跨线程组被调用:但是,它在启动 ...
- 【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(上)
背景介绍 在我们日常的工作当中,通常应用都会采用Kubernetes进行容器化部署,但是总是会出现一些问题,例如,JVM堆小于Docker容器中设置的内存大小和Kubernetes的内存大小,但是还是 ...