通过访存地址获取主存数据的过程

news/2024/9/19 22:59:48/ 标签: 操作系统, 计算机组成原理

目录

1.根据访存地址在Cache中查找数据

2.如果在Cache中命中

3.如果没有命中

4.数据送CPU

5.做几道题:


主要厘清思路,中间细节需自行补充!

1.根据访存地址在Cache中查找数据

 ① 访存地址的结构会根据Cache和主存之间的映射方式不同而改变。映射方式有三种:直接映射,全相联映射和组相联映射(这里不细讲,还不清楚的可以到主页搜关键词或者回看书)。

注意

第一点:

Cache只是保存了主存的一部分副本,主存会将某些主存块复制到Cache中,也就是Cache行中。也就是Cache行的大小等于主存块的大小。所以不能把Cache行想象为一行一行的结构,因为里面包含很多个存储单元。

第二点:

直接映射中,有下面的关系图,可能会有人误解,Cache是由Cache行号和块内地址组成的,不是这样的。

这里这样画的原因:

Cache的块数(行数)比主存块数小很多,所以表示Cache块的位数肯定比表示内存块的位数小。这里的位数差就可以反映Cache和主存的容量差。(例如,主存块为16块(2^4),Cache块为4块(2^2),那么2^4/2^2=4,主存容量就是Cache容量的4倍)。

假设主存块号为13,Cache总行数为4(也就是只拷贝了主存的4个主存块)。那么其Cache行号=13%4=1。主存块号用二进制表示出来是1101。这里的01,和上面作余求出来的结果是一样的。所以用主存块号的低位就可以计算出Cache的行号,具体用低几位?

那就要看Cache的总行数,例如上面Cache行为4,那么用2位(2^2)就可以表示Cache行号了。

那么主存块号的高位用来作什么呢?主存块号的高位,我们称之为"标记位"。在Cache行中也有相应的标记位。将主存地址的高位的标记位与Cache中的标记位进行匹配。如果匹配成功,且Cache的有效位置"1"。那么就表示"命中"。也就是CPU想要的数据可以在Cache中找到,不需要访存了。

所以Cache数据区的容量比主存小很多,小多少可以看两者位数的差值(差的位数),而两者的差值正好对应tag的位数。例如:根据主存容量是 Cache 容量(当然是数据部分Cache)的 4096 倍。那么tag位就有12(2^12)位。

结论:tag位数=log2(主存大小/Cache数据区大小)

第三点:

那么Cache的真正结构是什么呢?

上面反复提到了Cache的数据区。首先我们要明白,我们常说的Cache块的大小和主存块大小相同实际指的是数据Cache(Cache的数据部分)。例如下图,主存块大小为64B,那么Cache的数据部分就是64B。

相对于主存块,Cache还有额外的标记项,上面的标记项忽略了脏位和替换控制位,实际的Cache行标记项:

在组相联映射中将每组各行的标记项排成一行,将各组从上到下排列,构成一个二维的标记阵列。查找 Cache时就是查找标记阵列的标记项是否符合要求。二路组相联的标记阵列如图 

2.如果在Cache中命中

以直接映射为例,首先会根据访存地址的主存块号的低位找到相应的Cache行,接着对比这个Cache行对应的标记位,如果标记位相同,且有效位为"1",则命中。这时根据访存地址的块内地址,在Cache行中存取信息即可。

3.如果没有命中

则需要到主存中找读数据,这就需要将逻辑地址转换为物理地址(涉及操作系统--内存管理内容),并且根据物理地址,在主存中查找相应的数据。

以页式存储管理为例:

拿个题举例:

一分页存储管理系统中,逻辑地址长度为16位,页面大小为4k,现有一逻辑地址为2F6AH(十六进制),页号对应块号如下表,求逻辑地址2F6AH对应的物理地址。

① 将十进制转换为二进制为0010 1111 0110 1010  页号 页内地址

② 由于页面大小(内存块大小)为4K,那么页内地址位数:4K=2^2*2^10=2^12。那么页号位数就是16-12=4位。页号(0010)=2,对应块号是7(0111)。

③ 物理地址:

块号+页内地址:0111 1111 0110 1010  块号 页内地址

④ 最后将这个地址写为16进制就行。

其他的,具有快表的地址变换机构,以及其他的内存管理方式(段式存储管理,段页式存储管理)可以看这篇:计算机组成原理操作系统这两部分一定要结合起来学)

http://t.csdnimg.cn/C6fw7
 

4.数据送CPU

在主存中找到相应数据后,还需要将数据送到Cache行中。将标记设为地址的高位,有效位置"1"

同时将该地址的内容送CPU。

直接映射:对于直接映射,主存中的每一块只能装入Cache的对应行(主存块号%Cache总行数)。所以将数据送到对应Cache行中即可。

全相联映射:将数据送到Cache的任意空闲行中。

组相联映射:送到相应的Cache组内的任意空闲行中。

注意:即使CPU要找到数据对应存在于主存的某个存储单元中,但是CPU还是会读出这个存储单元所在的内存块的一整块信息送到对应的Cache行中。

5.做几道题:

地址映射表,即标记阵列,指的是Cache的标记项(有效位,脏位,替换控制位,标记位),由于这里忽略了脏位和替换控制位,所以只需要考虑有效位(1位)和标记位:

标记位有多少位呢?

根据主存容量是 Cache 容量的 4096 倍。那么tag位就是12位(2^12)。所以标记项就是12+1=13位。

又因为Cache有64块,所以地址映射表大小:64*13bit

这里的有效容量指的就是Cache的数据部分,每块16B,那么Cache行大小=主存块大小=16B=2^4。

① Cache中总共有多少Cache块:2^7*2^10=2^17        2^17/2^4(16B)=2^13

② 总共有多少cache组:2^13/2^3(8路组相联)=2^10

③ 主存地址:标记(剩余部分)+组号(10位)+块内地址(4位)

1234567H=0001 0010 0011 01 00 0101 0110 0111

00010010001101转化为16进制,答案C。

直接映射方式:主存地址:标记+行号+块内地址

① 主存容量(2^20)是Cache容量(2^4*2^10=2^14)的2^6倍,所以标记位为6位。

② 每字32位,块内地址为5位(2^5)

③ 主存地址:0011 0101 0011 0000 0001

010011000换算为十进制:152

组相联映射中,主存地址的组成:标记+组号+块内地址

主存块大小和Cache块大小都增加一倍,那么块内地址位数+1(自己想一下2^2=4是2^1=2的一倍)。

n路组相联表示每组中包含n个Cache行,Cache的总容量不变,Cache的大小增加一倍,那么Cache行数减少一倍,组数自然减少一倍(试想一下,8行2路,则有4组,现在4行2路,则只有2组)。块内地址和组号一增一减,tag位数不变。

直接带选项,拿B选项举例:

直接映射:

① 主存按字节编址,块大小是16B,所以先要计算主存单元在哪个主存块中:

由于主存单元从0开始编号,则48号主存单元,其实是第49个主存单元:49/16=3.065。则存放在第4个主存块中,主存块号是3

② 主存块号是3,再余Cache行数,3%16=3。则存放在3号Cache行。

另一个同理,308/16=19        19%16=3。

组相联映射:

48号存储单元主存块号是3,余Cache组号(8组):3%8=3。

另一个同理:19%8=3。

都存放在3号Cache组中,所以可能发生冲突。

采用全相联映射,主存地址:标记+块内地址

主存块大小为1个字(32位)=4B,所以用2位表示即可。剩余30(32-2)位为标记

Cache容量=存储容量+标记阵列容量

① 题目中已经告知存储容量为32K字数据:2^5*2^10*2^5=2^20

② 题目中采用回写法(脏位1)随机替换策略(不需要替换控制位)。所以每个Cache行的标记项组成:

有效位(1)+脏位(1)+标记位(30)=32

③ Cache块可以存放32K字数据,主存块大小=Cache块大小=1个字。所以Cache块数为

2^15(32K=2^5*2^10)

④ 所以Cache容量:2^20+(1+1+30)*2^15=2^10(1024+1024)=2048K


http://www.ppmy.cn/news/1514326.html

相关文章

【C++ 面试 - 面向对象】每日 3 题(七)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

centos7.9系统安装cloudpods并使用ceph存储(二)

1.ceph安装 1.1 环境准备 配置hosts: $ vim /etc/hosts 10.121.x.x node01设置ssh无密码登录: # ssh-keygen -t rsa # ssh-copy-id -i /root/.ssh/id_rsa node01关闭selinux、firewalld # setenforce 0 # sed -i "s#SELINUXenforcing#SELINUXd…

5步掌握Python Django+Vue二手房项目,实现房价预测与知识图谱系统

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

基于SpringBoot的在线笔记网站的设计与实现

目录 项目技术和环境 页面展示 登录注册 管理员页面 用户页面 在线网址 源代码 本系统由十大核心模块构成,包括用户登录与注册模块、个人中心模块、笔记分类与笔记管理模块、笔记详情展示模块、分享协作与收藏管理模块、回收站与用户管理模块,以及…

深入探讨量子计算领域在发展过程中所遇到的难题及其解决方案。

一、引言 量子计算作为未来科技的重要方向,其潜力巨大,但同时也面临着诸多技术挑战。这些挑战不仅制约了量子计算的进一步发展,也考验着科学家和工程师们的智慧和毅力。本文将探讨量子计算面临的主要技术挑战,并分析其可能的解决…

自己做的一个用于生成DICOM文件的服务器

框架: .ner core web api .net8.0 Program.cs代码如下 using Microsoft.AspNetCore.HttpsPolicy; using System.Diagnostics;namespace PacsServer {/* public class Program{public static void Main(string[] args){//配置服务var builder WebApplication.CreateBuilder(a…

表格滚动分页查询

1.给表格添加id&#xff0c;height"100%"是固定表头 <el-table id"attr-table-box" height"100%" :row-style"{ height: 66px }" style"width: 100%; height: 100%; " > 2.使用计算属性获取总页数 computed: { // 表…

go语言中map、slice、chan底层数据结构是怎样的

map&#xff1a;rutime包下的map中的hmap // A header for a Go map. type hmap struct {// Note: the format of the hmap is also encoded in cmd/compile/internal/reflectdata/reflect.go.// Make sure this stays in sync with the compilers definition.count int /…

信息学奥赛初赛天天练-72-NOIP2016普及组-基础题3-无向图、简单无向图、自环、平行边、顶点的度、握手定理、递归

NOIP 2016 普及组 基础题3 5 以下不是存储设备的是( ) A 光盘 B 磁盘 C 固态硬盘 D 鼠标 6 如果开始时计算机处于小写输入状态&#xff0c;现在有一只小老鼠反复按照 CapsLock、 字母键 A、字母键 S、字母键 D、字母键 F 的顺序循环按键&#xff0c;即 CapsLock、A、S、D、F、…

记录 Ant Design Table 组件使用的问题

问题一、设置 y 之后&#xff0c;侧边栏出现白边&#xff1a;https://github.com/react-component/table/issues/998 问题二、设置scroll y之后&#xff0c;x为max-content失效 github地址&#xff1a;https://github.com/ant-design/ant-design/issues/29283 临时解决方案&am…

Facebook的区块链战略:如何在社交媒体中实现去中心化

随着区块链技术的发展&#xff0c;Facebook&#xff08;现Meta&#xff09;正积极探索如何将这一技术整合进其社交平台中&#xff0c;以提升用户体验和数据安全。区块链技术以去中心化、透明性和不可篡改性为特点&#xff0c;为社交媒体带来了新的可能性。本文将探讨Facebook在…

Qml 实现仿前端的 Notification (悬浮出现页面上的通知消息)

【写在前面】 经常接触前端的朋友应该经常见到下面的控件&#xff1a; 在前端中一般称它为 Notification 或 Message&#xff0c;但本质是一种东西&#xff0c;即&#xff1a;悬浮弹出式的消息提醒框。 这种组件一般具有以下特点&#xff1a; 1、全局/局部显示&#xff1a;它不…

特征工程和训练评估流程

程序的思路&#xff1a; 从配置文件中获取到待组合的特征&#xff0c;进行特征工程返回相应的特征和数据&#xff0c;这个过程中&#xff0c;保留中间特征工程结果&#xff0c;为了避免重复执行。 分批遍历所有的特征组合&#xff0c;进行训练和评估&#xff0c;然后保存评估结…

分形比特币(Fractal Bitcoin)

文章目录 分形比特币&#xff08;Fractal Bitcoin&#xff09;背景近期发展动态 什么是RGB什么是分形比特币&#xff08;Fractal Bitcoin&#xff09;分形&#xff08;Fractal&#xff09; 数学概念 分形比特币&#xff08;Fractal Bitcoin&#xff09; 背景 自比特币上的 Or…

Answer use of function tool by OpenAI assistant in Python

题意&#xff1a;“在 Python 中使用 OpenAI 助手的函数工具的用途” 问题背景&#xff1a; I am trying to answer to OpenAI assistants function tool. “我正在尝试回答 OpenAI 助手的函数工具。” See my code below. The custom function is called "funnyfunc&qu…

冗余电源装VMware系统电源警告

双电源机器装VMware vSphere虚拟化系统&#xff0c;在系统硬件运行状况里面新增加的电源模块出现警告。 刷新一下主板双电源即可&#xff0c;解决方案如下&#xff1a; 下载浪潮一键日志收集工具 http://www.4008600011.com/archives/9195 打开程序后&#xff0c;点击下一步进…

WPF中的可视化树(VisualTree)和逻辑树(LogicalTree)

可视化树和逻辑树 我们先来理解一下什么是可视化树和逻辑树。 可视化树&#xff1a;包含最初指定的大多数元素&#xff08;在XAML或.cs中&#xff09;以及控件模板中的元素。 通俗点来讲&#xff0c;就是整个元素的构成树&#xff0c;从最上面的结点到最后一个结点&#xff…

数据结构8.16

1、顺序表实现学生管理系统&#xff08;参照顺序表技能&#xff09;写出菜单界面switch选择&#xff0c;功能1创建顺序表&#xff08;堆区&#xff09;&#xff0c;2录入学生信息&#xff0c;3插入一个学生信息&#xff0c;4删除一个学生信息&#xff0c;5按照位置修改一个学生…

H7-TOOL脱机烧录的UID加密操作方法,支持一键生成目标板C代码,方便大家轻松操作(2024-08-20,已发布)

UID加密使用比较方便&#xff0c;对应的C代码模板已经做好&#xff0c;使用TOOL上位机生成后&#xff0c;直接复制粘贴到自己的工程即可使用。返回1表示解密成功&#xff0c;返回0表示失败。 【UID加密原理】 1、烧录器在烧录芯片时&#xff0c;按照指定的算法将UID码编码为…

Scratch编程环境:探索暗模式与可访问性选项的创新之路

标题&#xff1a;Scratch编程环境&#xff1a;探索暗模式与可访问性选项的创新之路 Scratch&#xff0c;这款由麻省理工学院媒体实验室开发的编程工具&#xff0c;以其独特的图形化编程界面&#xff0c;降低了编程学习的门槛&#xff0c;让全球的儿童和青少年能够轻松地进入编…