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. 动词时态=>1.动作的时间和状态

    时态 什么是时态? 英语的时态,是由动作的时间 + 动作的状态:这俩一起构成了时态 动词的时间和状态在一起,合称时态 理论上的十六种时态 先将 时间和状态的概念搞清楚,再具体讨论,用什么词,去构成时态 ...

  2. golang的内存管理

    0.1.索引 https://blog.waterflow.link/articles/1663406367769 1.内存管理 内存管理是管理计算机内存的过程,在主存和磁盘之间移动进程以提高系统的整 ...

  3. 洛谷 P3201 梦幻布丁 题解

    (这篇题解可能没什么营养,主要是记录一下我用map乱搞启发式合并的神奇做法) 首先我们知道,我们肯定要用一堆集合维护每一种数当前的位置,并支持合并和数连续出现的段数两种操作 我发现这个东西并不好搞,但 ...

  4. Codeforces Global Round 18 B. And It's Non-Zero(按位前缀和)

    题目大意:求一段数(l到r)的按位与结果不为零需要删除中间元素的最小个数 思路:按位与使得结果不为0只要有某一位全是1即可,所以只要统计每一位1的个数,用总个数减去1的个数就是某一位0的个数 删除包含 ...

  5. 新建Maui工程运行到IiOS物理设备提示 Could not find any available provisioning profiles for iOS 处理办法

    在构建 MAUI App 或 MAUI Blazor 时,您可能会收到以下 Could not find any available provisioning profiles for iOS. Pl ...

  6. 1.python基础使用

    1.git简介 git是一个免费的开源的分布式版本控制系统,可以快速高效的处理从小型到大型项目的所有事务 在实际工作中可以保留项目的所有版本,可以快速的实现版本的回滚和修改 git整体可以分为4个区域 ...

  7. 2022春每日一题:Day 27

    题目:友好城市 分析一下可以转化为:选取最多的点对,使得点对之间连线没有交点,没有交点说明什么,假设选定第i组,则对于任意的j,一定满足a[i].l<a[j].l && a[i] ...

  8. python安装request及更新pip

    今天在python中安装request模块时遇到了问题 爆出一大堆警告 最主要的是下面的 这里的解决方法就是更新pip: 直接使用系统给的pip升级指令好像不行 百度搜了一下,有两步 1.在C:\Py ...

  9. 模块/collections/random/time/datetime

    内容概要 模块--包的具体使用 编程思想介绍 软件开发--目录规范 常用模块介绍--collections模块 常用模块介绍--time.datetime 常用模块介绍--random 1.包的具体使 ...

  10. C温故补缺(四):GDB

    gdb gdb是由GNU软件社区提供的C Debug工具 Pre 在调试前,需要先编译.c程序,且要加上-g使输出文件变得可调式 gcc test.c -g -o test 用gdb test来调试程 ...