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. Debian11管理员手册

    1 用户与群组数据库 用户清单通常保存在 /etc/passwd 文件内,把哈希编码后的密码保存在 /etc/shadow 文件内.这两个文件都是纯文本档,以简单的格式保存,可以用文本编辑器读取与修改 ...

  2. 京东云开发者|软件架构可视化及C4模型:架构设计不仅仅是UML

    软件系统架构设计的目标不在于设计本身,而在于架构设计意图的传达.图形化有助于在团队间进行高效的信息同步,但不同的图形化方式需要语义一致性和效率间实现平衡.C4模型通过不同的抽象层级来表达系统的静态结构 ...

  3. jquery datatable 粗犷

    需要学习: HTML.CSS.Javascript Bootstrap: 基于以上三个的一个框架 jQuery:一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程 ...

  4. 重大发现,AQS加锁机制竟然跟Synchronized有惊人的相似

    在并发多线程的情况下,为了保证数据安全性,一般我们会对数据进行加锁,通常使用Synchronized或者ReentrantLock同步锁.Synchronized是基于JVM实现,而Reentrant ...

  5. 嵌入式-C语言基础:字符串strlen和sizeof的区别

    strlen表示的实际的字符串长度,不会把字符串结束符'\0'计算进去,而sizeof则不是实际的字符串长度,它会把字符串的结束标识符'\0'也包含进去. #include<stdio.h> ...

  6. elasticsearch多字段聚合实现方式

    目录 1.背景 2.实现多字段聚合的思路 3.需求 4.数据准备 4.1 创建索引 4.2 准备数据 5.实现方式 5.1 multi_terms实现 5.1.1 dsl 5.1.2 java 代码 ...

  7. 实现Swaggera的在线接口调试

    1.访问Swagger的路径是:http://localhost:8080/swagger-ui.html 如果项目正常,则可看到如下界面: 2.点开下面的随意一个方法 如add添加数据的方法,展开: ...

  8. 8 STL-stack

    ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录.总结.沉淀.同时希望对刷到的朋友有所帮助,一起加油哦!  生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 写在前面,本篇章主要介绍S ...

  9. 关于解决 inittramfs unpacking failed:Decoding failed 报错

    解决办法 vi /etc/initramfs-tools/initramfs.conf 更改COMPRESS=lz4以COMPRESS=gzip 保存更改 sudo update-initramfs ...

  10. 认证服务(keystone)

    Keystone职能: Keystone (OpenStack ldentityService)是OpenStack中的一个独立的提供安全认证的模块,主要负责openstack用户的身份认证.令牌管理 ...