6.存储系统与辅存(cache的映射方式的各种问题解析)

2023-05-16

存储系统体系结构

    • 6.1 存储系统
    • 6.2 程序访问的局部性原理
    • 6.3 主存地址到cache地址的映射
    • 6.4 cache的映像方式
      • 全相联映像方式
      • 直接映像方式
      • 组相联映像方式

6.1 存储系统

衡量存储器有三个指标:容量、速度、价格
一般来讲,速度高的存储器,每位价格也高,因此容量不能太大。
对于存储系统,我们期望实现:
1.增大存储系统的容量
2.提高存储系统的读写速度
3.降低存储系统每位价格

针对提高存储系统的读写速度,我们可以:
采用高速器件提高速度;
采用双端口存储器;
增加字长,在每个存取周期中存取多个字;
将主存划分为多个模块,多模块并行;
增加Cache。

计算机中,CPU可以直接访问主存,因为存储器的速度慢,所以访存的速度主要取决于存储器的速度。
在这里插入图片描述
在CPU与主存之间加入高速缓冲存储器(cache),以减少速度差所导致的访存时间较长的问题。
引入cache的依据:程序访问的局限性
如果当前正在执行的程序和数据存放在cache中,当程序运行时,不必从主存储器取指令和数据,而访问这个高速存储器即可,从而提高了程序的运行速度。

6.2 程序访问的局部性原理

计算机在执行程序的过程中,在一个较短的时间间隔,地址往往集中在存储器逻辑地址空间的很小范围内。
①程序的地址分别是连续的,因此,对程序地址的访问具有相对集中的倾向。
②数据分布的集中倾向不如指令明显,但对数组的访问以及工作单元的选择都可以使存储器地址相对集中。
对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象就称为程序的局部性。
局部性分为时间上的局部性和空间上的局部性:
时间局部性:一个存储单元被访问,此单元很快就会再次被访问。
空间局部性:一个存储单元被访问,该单元临近的单元也可能很快被访问。

6.3 主存地址到cache地址的映射

Cache命中率
在这里插入图片描述
当前正在执行的指令和数据存放在Cache中,当程序执行时,CPU不用从主存中读出指令和数据,只用从cache中读取即可。
如果访问的数据在Cache中,称为访问cache命中
如果访问不命中(缺失),仍然需要从主存中读入数据:
缺失:程序执行时,CPU不能从Cache读取到指令和数据,就需要再到主存中获取。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
Cache中的指令只允许读,不允许修改;而数据可读可写。
chache映像方式
Cache仅为主存的一个极小子集,不能容纳主存的所有数据。Cache与主存交换数据的单位为字块,为了将主存子块放入cache,必须通过某种方式将主存的地址定位到cache中,这种方式称为“地址映像”。
在这里插入图片描述
字块主存的数据块大小称为字块,简称块。每个块中包含2^b个连续的字,字块所包含的字数或字节数称为块长
在这里插入图片描述
字块主存cache交换的最小单位;
是CPU访问存储器时可存取的最小单位。
标记:cache中存放的主存块地址。
:多个块组成的逻辑整体。
在这里插入图片描述

6.4 cache的映像方式

全相联映像方式

这种方式允许主存中的每个字块映像到cache的任何一个字块位置上
特点是灵活,实现难度大,成本高。

举例:在某计算机系统中cache的容量为32KB,数据块的大小为16个字节,主存容量为1MB,
按字节编址,地址映像方式为全相联映像方式。求:
①主存地址和cache地址各多少位,如何分配?
②目录表的容量。

解:①以字节编址,cache地址位 log2(32KB/1B)=15位
主存地址位 log2(1MB/1B)=20位
由于主存和cache划分成同样大小的块,因此对cache的字块数32KB/16B=2K……对应11位。
对主存的字块数1MB/16B=64K……对应16位,故地址分配图为(按字节编址):
在这里插入图片描述
对于上面的标准算法容易忽略出错,我建议这么算:
32KB/16B=215/24=211,对应11位;
1MB/16B=220/24=216,对应16位。除法变成减法,是不是更舒服。
②如上例所示:目录表中包含主存块号、cache块号和1位有效位,且其大小与cache的块数相同。
∴目录表容量:2K×(16+11+1)=56K位=7KB

直接映像方式

这种方式下,主存中的多个字块只允许映像到cache的某个字块位置上

直接映像的特点是主存中的一块只能拷贝到cache中的一个特定行位置。

映像函数简单,实现硬件简单,无需相联存储器,实现成本较全相联映像方式低;
地址变换速度快,如果命中且字块有效,那么主存地址去掉区号后的低位部分就是cache地址。
块冲突率高,当两个或两个以上的主存块映射到相同的cache发生冲突时,即使其他cache块空闲也不能被使用。当两块交替映射到同一cache时,造成频繁置换——抖动。

【举例】在某计算机系统中cache的容量为64KB,数据块的大小为16个字节,
主存容量为4MB,按字节编址,地址映像方式为直接相联映像方式。求:
①主存地址和cache地址各多少位,如何分配?
②区表的容量。

解:①以字节编址,cache地址位 log2(64KB/1B)=16位
主存地址位 log2(4MB/1B)=22位
由于主存和cache划分成同样大小的块,因此对cache的字块数64KB/16B=4K……对应12位。
主存的字块数为:4MB/64KB=64=26,因此主存字块标记需要6位。地位地址与cache相同,故地址分配图为(按字节编址):
在这里插入图片描述
②如前图所示:区表中包含主存字块标记和1位有效位,且行数与cache相同,为4K行。
∴目录表容量:4K×(6+1)=28K位=3.5KB

【举例】有一主存-cache层次的存储器,
其主存容量1MB,cache容量为64KB,每块8KB,
采用直接地址映射方式。求:
①主存地址格式?
②主存地址为25464H,问它映射到cache的哪一块?

①第一个问题很简单:在这里插入图片描述
②主要是第二个问题:
它这里说主存地址是25464H,注意这个是16进制,一共有20位,然后我们的主存也是20位,这就对应上了:0010 0101 0100 0110 0100 ,是这样的,然后主存的字块地址应该对应010,也就2,所以它映射的cache的字块号也为2。

【举例】设某8位计算机采用直接映射cache,已知容量为4096B,主存容量为4MB。
设开始时,cache为空,
若CPU依次从主存单元0,1,……99和4096,4097,……4195交替取指令,
循环执行10次。考虑两种情况下,各自的命中率是多少?
①字块长度为一个字?
②字块长度为8个字?
③若采用全相联映射方式,上述两种情况命中率又将如何?

组相联映像方式

以上两种方式的折中方案。其方法是将cache按某种规格分组,主存中若干字块映射到同一个组中,组间为直接映像方式,组内为全相联映像

【举例】在某计算机系统中cache的容量为32KB,
数据块的大小为64个字节,主存容量为1MB,按字节编址,
地址映像方式为组相联映像方式,cache共分128组。
求:主存地址和cache地址各多少位,如何分配?

解:①以字节编址
cache地址位数 log2(32KB/1B)=15位
主存地址位数 log2(1MB/1B)=20位
cache分128组,每组字块数为32KB/64B/128=4。因此,对cache而言,分128组,每组4个字块,每个字块内含64个字节;主存地址标记为20-7-6=7位。故地址分配图为:
在这里插入图片描述

综合举例

【举例】设主存容量为256K字,cache容量为2K字,块长为4。
①设计cache地址格式,cache可装入多少块数据。
②在直接映射方式下,设计主存地址格式。
③在四路组相联映射方式下,设计主存地址格式
④在全相联映射方式下,设计主存地址格式
⑤若存储字长为32位,存储器按字节寻址,写出上述三种映射方式下主存的地址格式。

解:
① 以字编址的情况下,主存地址位数为18位:256KB/4B=218/22=216
cache可包含的块为512块: 210/22=28=512
为了标记各个字块,需要9位 (512=29) 二进制位来表示,用2位来标记字块内每个字。故cache地址格式为:
在这里插入图片描述
② 直接映射方式下,主存地址包含主存字块标记,cache字块标记,以及字块内地址构成。且主存字块标记位数为log2(256K/2K)=7位,地址为:
在这里插入图片描述
③四路组相联,即每组中包含4个字块,cache可以分成的组为log2(2K/4/4)=7。进一步细分可知cache地址:
在这里插入图片描述
主存地址为:
在这里插入图片描述
④ 全相联映射方式下,主存地址位数去掉字块内地址即为主存字块标记,地址表示如下:
在这里插入图片描述
⑤ 按字节寻址,仅需在地址的最后添加字节地址即可,位数为log2(32/8)=2。按字节寻址,直接、组相联、全相联映射方式对应地址格式分别为:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

6.存储系统与辅存(cache的映射方式的各种问题解析) 的相关文章

  • Spring Boot启动器

    文章目录 Spring Boot启动器简介自定义springboot启动器命名规约自定义starter步骤1 创建一个Spring boot项目2 导入pom3 编写配置类4 在resources META INF目录下新建spring f
  • web开发入门

    在vscode中输入英文 xff0c 按tab键 xff0c 叩可显示html5的框架 搭建好框架之后 xff0c 再进行局部设计即可制作一张简易静态网页
  • springboot学习笔记

    http t csdn cn aLaeJ
  • spring中的annotation简介

    1 注解介绍 注解 xff0c 是一种用来描述数据的数据 比如说 64 override表示我们重载父类函数 如果我们不用这个注解 xff0c 程序也能执行 xff0c 但是我们加了这个注解代表我告诉编译器这个方法是一个重写的方法 如果父类
  • C语言中如何使用字符数组和字符型指针变量

    案例一 使用字符数组统计字符串的长度以及实现字符串的反转 参考代码 xff1a include lt stdio h gt include lt stdlib h gt include lt string h gt int main cha
  • 拓扑排序详解

    提示 xff1a 古人学问无遗力 少壮功夫老始成 xff0c 纸上得来终觉浅 觉知此事须躬行 文章目录 一 AOV网的特点二 问题三 拓扑排序四 拓扑排序的方法五 检查AOV网中是否存在一个环六 两种思路6 1 思路一6 1 1 思路一代码
  • Altium Designer——设置电源线规则

    1 创建类来新建规则 执行菜单Design Classes 快捷键DC 将这多个网络建立一个class 执行菜单命令Design Rules 快捷键DR xff09 xff0c 进入规则设置栏 xff1b 新建个线宽规则 xff0c 在规则
  • 【Archlinux】(3) —— dwm+st+firefox+fcitx=愉快上网

    Archlinux dwm 43 st 43 firefox 43 fcitx 61 愉快上网 1 dwm窗口管理器2 ST简单终端3 firefox浏览器4 fcitx中文输入法参考资料 注意 后的命令是root用户和普通用户均可以的操作
  • idea创建maven项目产生卡死问题

    2021版idea创建maven项目时卡死问题解决 xff1a 问题描述 xff1a 在file project structure中新建maven的modules时 xff0c 点击finish后idea会卡死 xff0c 其他人有的说要
  • SpringBoot配置环境

    typora copy images to upload 微服务架构 第一个Spring Boot程序 jdk 1 8maven 3 6 1springboot 最新版IDEA 修改端口号 banner banner在线制作网站 Sprin
  • 【坑】导入项目报错Could not find com.android.tools.build:gradle:7.4.0

    报错的图没得了 xff0c 反正就是Could not find com android tools build gradle 7 4 0 这个报错解决思路 xff1a 1 首先导入项目你不要直接File Open xff0c 你要FIle
  • 通过adb命令安装卸载apk

    一 安装apk xff1a 1 正常安装APK adb install xxxx apk 2 覆盖安装APK adb install r xxxx apk 2 安装测试APK adb install t xxxx apk 3 组合使用 ad
  • 使用VNC远程连接云服务器,连接超时问题

    这里用的本地VNC工具为VNC viewer xff0c 使用的服务器为腾讯云CentOS服务器 已经在服务器端完成了图形化界面的安装以及开启vncserver xff0c 但是无法连接 已经创建完成vnc的服务器端 开启vnc命令 vnc
  • Spring框架的知识整理(项目流程)以及SSM框架的整合

    前言 上一篇文章我们发表Mybatis框架的学习心得 xff0c 以及针对一个项目而言说了一些流程 Spring学习的时候我们需要知道它的两个核心功能Ioc Aop xff0c 本文今日对Ioc做重点解释 Ioc功能阐述 Ioc 主要是一个
  • Ubuntu安装文件

    安装Java 首先在官网下载linux版本的jdk 然后传给linux xff0c 在解压到 usr local目录下 xff0c 在进入 url local目录 xff0c 并完成环境配置 tar zxvf jdk 8u331 linux
  • 快速排序(java实现)

    快速排序的思想 在一个无序的数组中 xff0c 取最后的一个数字为基准值 xff0c 在经过一次排序后 xff0c 使得改无效而的数组中 xff0c 小于基准值的在左侧 xff0c 等于基准值的在中间 xff0c 大于基准值的在右侧 假设一
  • 使用websocket实现服务端主动发送消息到客户端

    平时我们都是由客户端浏览器主动发送请求到服务端 xff0c 然后服务器处理请求后返回结果 xff0c 服务器无法主动向客户端浏览器发送消息 但是在某些业务场景下我们需要由服务器主动发送消息到客户端浏览器 xff0c 如当客户用户下订单后 x
  • Day01-Vue的基本格式

    创建Vue实例传入的options 我们在创建Vue的时候 xff0c 会传入一个对象options 这个options包含哪些选项 xff1f 目前掌握这些选项 el 类型 xff1a string HTMLElement xff08 表
  • LAMP架构超详细搭建步骤

    LAMP介绍 xff1a Linux 43 Apache 43 Mysql MariaDB 43 Perl PHP Python一组常用来搭建或者服务器的开源软件 xff0c 本身都是各自独立的程序 xff0c 但是因为常被放在一起使用 x
  • ViewBinding的简单使用

    我们知道ButterKnife已经过时 首先开启viewBinding xff1a android viewBinding enabled 61 true 之后在Activity中操作 span class token keyword pa

随机推荐

  • linux系统下防火墙的使用以及开通端口

    1 基本使用 启动 xff1a systemctl start firewalld 关闭 xff1a systemctl stop firewalld 查看状态 xff1a systemctl status firewalld 开机禁用 x
  • 如何让自己电脑的cmd看起来更美观

    一 快速切换cmd字体颜色 xff08 暂时性 xff09 打开cmd输入color 02 二 永久性切换cmd文字颜色 打开cmd xff0c 在标题栏处鼠标右键选择属性 选择颜色 xff0c 切换自己喜欢的颜色 xff0c 点击确定即可
  • Android 音频开发——Radio Hal服务(三)

    nbsp nbsp nbsp nbsp nbsp nbsp nbsp 上一篇文章主要介绍了 BroadcastRadioService 的启动 这一篇我们介绍以下Radio Hal 层的服务 一 Radio模块的加载 nbsp nbsp n
  • java锁策略和synchronized锁机制

    一 常见的锁策略 1 乐观锁 vs 悲观锁 锁的实现者 xff0c 预测接下来的锁冲突概率大不大 xff0c 根据这个概率决定接下来该做什么 乐观锁 xff1a 预测冲突不大 xff0c 做的工作少一些 xff0c 效率更高一些 悲观锁 x
  • 【蓝桥杯java-学习笔记】单词中出现次数最多的字母和次数

    字符串 输入描述 输入一行包含一个单词 xff0c 单词只由小写英文字母组成 hello 输出描述 输出两行 xff0c 第一行包含一个英文字母 xff0c 表示单词中出现得最多的字母是哪 个 如果有多个字母出现的次数相等 xff0c 输出
  • 解决Use ‘docker scan‘ to run Snyk tests against images to find vulnerabilities and learn how to fix

    解决方法 在终端输入 xff1a sudo export DOCKER SCAN SUGGEST 61 false
  • 子集全排列组合数问题(带你轻松拿捏十一道OJ题)

    目录 一 子集 二 子集II 三 全排列 四 全排列II 五 字符全排列 六 字符串大小全排列 七 组合总和 八 组合总和II 九 组合总和III 十 组合总和IV 十一 递增子序列 一 子集 剑指 Offer II 079 所有子集 力扣
  • 操作系统笔记(本科必修课)

    1 操作系统概论 1 1 定义 操作系统是计算机系统中的一个系统软件 xff0c 是一些程序模块的集合 能以尽量有效 合理的方式组织和管理计算机的软 硬件资源 xff0c 合理的组织计算机的工作流程 xff0c 控制程序的执行并向用户提供各
  • linux远程登录

    ssh实验 1 两台机器 xff1a 第一台机器作为客户端 xff0c 第二台机器作为服务器 xff0c 在第一台使用rhce xff08 我用的是user1用户 xff09 用户免密登录第二台机器 2 禁止root用户远程登录和设置三个用
  • Spring的工作流程

    经过十多天的学习 xff0c 我的脑海中开始对spring框架有了基本的认识 首先我了解了spring框架的几个基本的常见的类 xff1a BeanFactory BeanDefinition BeanFactoryPostProfesso
  • 【爬虫】2.5 BeautifulSoup使用 CSS 语法查找元素

    1 使用 CSS 语法 BeautifulSoup 除了可以使用 find 与 find all 函数查找 HTML 文档树的结点元素外 xff0c 还可以采用 CSS 类似的语法来查询 xff0c 规则是 xff1a tag select
  • Spring Bean生命周期执行流程

    Spring Bean生命周期执行流程 2023 3 31 Spring 生命周期可以分为五个阶段 xff1a 创建前准备 创建实例 依赖注入 容器缓存 销毁实例 创建前准备阶段 这个阶段主要的作用是 xff1a Bean 在开始加载之前
  • github注册以及安装教程

    github注册以及安装教程 首先 xff0c 我们了解一下github gitHub 是一个面向开源及私有软件项目的托管平台 xff0c 因为只支持 git 作为唯一的版本库格式进行托管 xff0c 故名 gitHub github 于
  • Android 音频开发——Radio服务调用(四)

    nbsp nbsp nbsp nbsp nbsp nbsp nbsp 在 Android 音频开发 Radio服务 二 中介绍了 BroadcastRadioService 的启动流程 这里我们看一下 APP 如何一步步调用到 Radio
  • photoshop照片尺寸

    photoshop 一寸照片的尺寸是多少像素 常用的1寸照片大小是2 5 3 5cm的 但是 xff0c 像素多少要取决于用途是什么了 如果是冲洗的话分辨率一般用到300dpi xff0c 那就是295 412 如果是网上传看的话分辨率一般
  • ubuntu18.04安装Chrome

    简单5步安装Chrome 1 参考 xff1a https blog csdn net Diana Z article details 89474991 1 下载 sudo wget http www linuxidc com files
  • 2022牛客多校第一场A、C、D、G、I、J

    A Villages Landlines 题意 xff1a 在一条横轴上给定 n n n 个点横坐标 x s x s
  • MATLAB矩阵操作1——删除全0列和nan列

    MATLAB矩阵操作1 删除全0列和nan列 1 对全0列或行的删除2 对全为NAN列的删除3 对存在NAN列的删除 1 对全0列或行的删除 clear a 61 0 0 0 NaN 0 NaN NaN NaN 0 0 0 5 0 0 Na
  • Spring框架的知识点

    spring框架是 一个开源的容器性质的轻量级框架 主要有三大特点 xff1a 容器 IOC 控制反转 AOP 面向切面编程 DI 依赖注入 spring框架有哪些优点 xff08 三大优点 xff09 xff08 1 xff09 容器 x
  • 6.存储系统与辅存(cache的映射方式的各种问题解析)

    存储系统体系结构 6 1 存储系统6 2 程序访问的局部性原理6 3 主存地址到cache地址的映射6 4 cache的映像方式全相联映像方式直接映像方式组相联映像方式 6 1 存储系统 衡量存储器有三个指标 xff1a 容量 速度 价格