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. go-zero docker-compose 搭建课件服务(三):编写courseware api服务

    0.转载 go-zero docker-compose 搭建课件服务(三):编写courseware api服务 0.1源码地址 https://github.com/liuyuede123/go-z ...

  2. stm32h750移植lvgl

    之前没做过ui,只用过lcd画几条线写点字,如果按键.菜单什么的全用线画也太麻烦了,所以需要一个ui库. 听说lvgl用的人很多,就打算裸机移植一下用用.本文移植的lvgl版本是lvgl6.2,也移植 ...

  3. jvm之自动内存管理

    一.运行时数据区 程序计数器(线程私有) 1.程序计数器占用jvm内存较小,主要用来记录当前线程所执行的字节码的位置,因为jvm的多线程都是通过cpu对线程进行来回切换,所以在某个确定的时间cpu只会 ...

  4. 洛谷P4135 Ynoi2016 掉进兔子洞 (带权bitset?/bitset优化莫队 模板) 题解

    题面. 看到这道题,我第一反应就是莫队. 我甚至也猜出了把所有询问的三个区间压到一起处理然后分别计算对应询问答案. 但是,这么复杂的贡献用什么东西存?难道要开一个数组 query_appear_tim ...

  5. ElasticSearch深度分页详解

    1 前言 ElasticSearch是一个实时的分布式搜索与分析引擎,常用于大量非结构化数据的存储和快速检索场景,具有很强的扩展性.纵使其有诸多优点,在搜索领域远超关系型数据库,但依然存在与关系型数据 ...

  6. 使用CRD扩展Kubernetes API

    本文是如何创建 CRD 来扩展 Kubernetes API 的教程.CRD 是用来扩展 Kubernetes 最常用的方式,在 Service Mesh 和 Operator 中也被大量使用.因此读 ...

  7. Go语言核心36讲18

    你很棒,已经学完了关于Go语言数据类型的全部内容.我相信你不但已经知晓了怎样高效地使用Go语言内建的那些数据类型,还明白了怎样正确地创造自己的数据类型. 对于Go语言的编程知识,你确实已经知道了不少了 ...

  8. win10+vs2019 编译webrtc m108

    不能访问外网途径的捷径 已经下载好的资源,可以直接生成工程: https://pan.baidu.com/s/14plvXZD_qX9nn441RbsCwA?pwd=ww8c 该资源可以跳过的步骤 步 ...

  9. React实用插件收集

    1.react-img-editor 图片编辑 demo: npm install react-img-editor -S 引入和使用 import ReactImgEditor from 'reac ...

  10. Excel2010表格内容被加密,无法编辑内容。

    Sub PasswordBreaker() Dim i As Integer, j As Integer, k As Integer Dim l As Integer, m As Integer, n ...