计组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里面的键帽交换 并且每个键帽最多可以换一次 给出按键序列和输出序列 判断是否可以 如果可 ...
随机推荐
- python不确定性计算之模糊动态聚类实验
模糊动态聚类实验 本实验所采用的模糊聚类分析方法是基于模糊关系上的模糊聚类法,也称为系统聚类分析法,可分为三步: 第一步:数据标准化,建立模糊矩阵 第二步:建立模糊相似矩阵 第三步:聚类 本程序读取E ...
- LcdTools如何使用PX01进行EDP屏EDID比对及设置显示EDID比对结果
PX01点EDP屏在上电过程会自动读取屏EDID,那怎么进行EDID比对呢? LcdTools打开点屏工程,在上电时序函数中先用SetCmpEDID()指令设置EDID比对值,再调用CheckEDID ...
- Istio(五):使用服务网格Istio进行流量路由
目录 一.模块概览 二.系统环境 三.简单路由 3.1 简单路由 四.Subset和DestinationRule 4.1 Subset 和 DestinationRule 4.2 Destinati ...
- 栈溢出漏洞利用流程——以syncbrs为例
0x1 缓冲区溢出漏洞攻击简介 缓冲区溢出攻击是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序的堆栈,使程序转而执行其他指令,以达到攻击 ...
- 三、Ocelot请求聚合与负载均衡
上一篇文章介绍了在.Net Core中如何使用Ocelot:https://www.cnblogs.com/yangleiyu/p/16847439.html 本文介绍在ocelot的请求聚合与负载均 ...
- WinDBG详解进程初始化dll是如何加载的
一:背景 1.讲故事 有朋友咨询个问题,他每次在调试 WinDbg 的时候,进程初始化断点之前都会有一些 dll 加载到进程中,比如下面这样: Microsoft (R) Windows Debugg ...
- TDSQL-C 真·秒级启停:连接断了,又没断
你听过多少款无服务器架构(Serverless)数据库? 什么是Serverless呢?简单理解,Serverless 分为 FaaS 和 BaaS 两个部分,其中 FaaS 指的是函数即服务,Baa ...
- golang面向对象
一.方法 1.方法是作用在指定的数据类型上,和指定的数据类型绑定,因此自定义类型都可以有方法,而不仅仅是struct: 2.方法的申明和格式调用: package main import ( &quo ...
- 2流高手速成记(之九):基于SpringCloudGateway实现服务网关功能
咱们接上回 上一节我们基于Sentinel实现了微服务体系下的限流和熔断,使得整个微服务架构的安全性和稳定性上升了一个台阶 篇尾我们引出了一个问题,众多的微服务节点,我们如何部署才能满足客户端简洁高效 ...
- 为什么Linux需要虚拟内存 [转载好文]
操作系统中的 CPU 和主内存(Main memory)都是稀缺资源,所有运行在当前操作系统的进程会共享系统中的 CPU 和内存资源,操作系统会使用 CPU 调度器分配 CPU 时间1并引入虚拟内存系 ...