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的更多相关文章

  1. 计组CPU设计实验关键材料和关键设计

    我记得这是2016春季学期搞得,参考和学习了很多别人的东西,这里小小的总结一下,逻辑性还不是太强,还需要好好整理 首先是指令集 CPU架构 外部接线架构 指令格式 机器状态自动机 这部分忘了,汗 这部 ...

  2. 【计组】《计算机组成与体系结构性能设计》William Stallings 第2部分 计算机系统 第3章 计算机功能和互连的顶层视图

    关键词 address bus 地址总线 asynchronous timing 异步时序 bus 总线 bus arbitration 总线仲裁 bus width 总线宽度 centralized ...

  3. 【重学计算机】计组D3章:运算方法与运算器

    1. 定点数运算及溢出 定点数加减法:减法化加法,用补码直接相加,忽略进位 溢出:运算结果超出了某种数据类型的表示范围 溢出检测方法:统一思想概括为正正得负或负负得正则溢出,正负或负正不可能溢出 方法 ...

  4. 【重学计算机】计组D2章:数据表示

    1.基本概念 真值:+0101,-0100:机器数: [x]原=0101 2.几种机器数 原码:x = -0101,[x]原 = 1101 反码:x = -0101,[x]反 = 1010 补码:x ...

  5. 【重学计算机】计组D1章:计算机系统概论

    1.冯诺依曼计算机组成 主机(cpu+内存),外设(输入设备+输出设备+外存),总线(地址总线+数据总线+控制总线) 2.计算机层次结构 应用程序-高级语言-汇编语言-操作系统-指令集架构层-微代码层 ...

  6. 计组_IEEE754_练习题

    IEEE754   阶码:移码:尾数:原码 一个规格化的32位浮点数x的真值可表示为:          x=(-1)^s×(1. M) × 2^(E-127)       e=E-127 其中尾数域 ...

  7. [软工顶级理解组] Beta阶段项目展示

    目录 团队成员 软件介绍 项目简介 预期典型用户 功能描述 预期目标用户数 用户反馈 团队管理 分工协作 项目管理 取舍平衡 代码管理 程序测试 代码规范 文档撰写 继续开发指导性 用户沟通 需求分析 ...

  8. [软工顶级理解组] Alpha阶段项目展示

    目录 团队成员 软件介绍 项目简介 预期典型用户 功能描述 预期目标用户数 用户反馈 团队管理 分工协作 项目管理 取舍平衡 代码管理 程序测试 代码规范 文档撰写 继续开发指导性 用户沟通 需求分析 ...

  9. 计算机系统6-> 计组与体系结构3 | MIPS指令集(中)| MIPS汇编指令与机器表示

    上一篇计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统从顶层讲解了一个指令集 / 指令系统应当具备哪些特征和工作原理.这一篇就聚焦MIPS指令集(MIPS32),看看其汇 ...

  10. Codeforces Round #389 (Div. 2,) B C

    考完复变之后沉迷联盟不能自拔...明天就开始抢救计组 ... B 一个人装错了键帽 选择几个pair 把pair里面的键帽交换 并且每个键帽最多可以换一次 给出按键序列和输出序列 判断是否可以 如果可 ...

随机推荐

  1. 7 步保障 Kubernetes 集群安全

    随着 Kubernetes 的发展和改进,新的安全威胁和风险也逐渐向 K8s 转移,因此 K8s 安全性变得越来越重要,而保护 K8s 集群已成为 DevOps 团队不容忽视的重要任务.K8s 有多种 ...

  2. Landau-Vishkin

    基础算法 假设我们有两个字符串:,每个字符串由A C G T四个字母组成. 在两个字符串上,都有三种可能的编辑操作(突变): 删除某个字符 在某个位置插入字符 改变某个字符 每一个编辑操作都有惩罚值. ...

  3. Windows7下驱动开发与调试体系构建——4.在x64下使用汇编代码(x86下的_asm)

    目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html asm文件设置 在vs x64中无法使用_asm关键字,需要使用.asm文件. 按第 ...

  4. Python基础之模块:7、项目开发流程和项目需求分析及软件开发目录

    一.项目开发流程 1.项目需求分析 明确项目具体功能: 明确到底要写什么东西,实现什么功能,在这个阶段的具体要询问项目经理和客户的需求 参与人员: 产品经理.架构师.开发经理 技术人员主要职责: 引导 ...

  5. (线段树) P4588 数学计算

    小豆现在有一个数 x,初始值为 1.小豆有 QQ 次操作,操作有两种类型: 1 m:将 x变为 x × m,并输出 x mod M 2 pos:将 x 变为 x 除以第 pos次操作所乘的数(保证第  ...

  6. MindStudio模型训练场景精度比对全流程和结果分析

    摘要:MindStudio是一套基于华为昇腾AI处理器开发的AI全栈开发平台 本文分享自华为云社区<MindStudio模型训练场景精度比对全流程和结果分析>,作者:yd_24730208 ...

  7. RabbitMq消息手动应答、放回队列重新消费、设置队列消息持久化、分发模式

    RabbitMq消息手动应答,放回队列重新消费,设置队列消息持久化 消息应答 概念 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉了,会发生什么情况. ...

  8. winform的TabContorl的TabPage动态添加滚动条

    关键属性 AutoScrollMinSize  private int minWidth = 800; private int minHeight = 600; List<Form> li ...

  9. 关于tomcat8在windows2008下高并发下有关问题的解决方案

    关于tomcat8在windows2008下高并发下问题的解决方案 因为客户服务器特殊的环境问题,只能使用windows2008r2服务器,然而配置过后,网站的高访问量很快就出现了各种问题,以下是解决 ...

  10. postman的运用

    链接: https://pan.baidu.com/s/1gfaKoAv 密码: dp7t 最近要测试和其他系统对接,忽然想起了postman这款url测试神器. 现分享如下: 下载完成后解压到文件夹 ...