计算机组成原理——第三章存储系统(下)

news2025/1/26 15:26:17

提示:年年岁岁花相似,岁岁年年人不同

文章目录

  • 3.4.1 磁盘存储器
  • 3.4.2 固态硬盘SSD
  • 3.5.1 Cache的基本概念和原理
  • 3.5.2 Cache和主存的映射方式
  • 3.5.3 Cache替换算法
  • 3.5.4 Cache写策略
  • 3.6.1 页式存储
  • 3.6.2 虚拟存储器


3.4.1 磁盘存储器

我们在磁性盘面上涂磁性材料的方式是一圈一圈的涂的,也就是磁道,这里绿色的圈就是磁道,为了方便主机对磁盘数据的读写,我们将磁道划分成一个个更小的扇区,每个磁盘有多个盘面 ,每个盘面也对应一个读写磁头,比如这里就是有四个盘面 ,相对位置上的磁道我们将其称为一个柱面,也就意味着一个磁盘上有多少个磁道就有多少个柱面,
请添加图片描述
尽管内侧较短,但是存储的位信息是一样的,这样就意味着越靠经内测的,它的位密度越大,越靠近外侧的它的位密度会越小,所以许多的工厂是受到这里规则的限制,旋转延迟时间也就是磁头定位到所在扇区所需要的时间,这里通常是转半圈所需要的一个时间,因为在任何扇区的概率是相同的,
请添加图片描述
请添加图片描述
无校验功能也就是当某些扇区上的数据发生损坏的时候,我们就不能恢复数据,镜像磁盘阵列也就是设置一个同样的磁盘阵列,用于防止数据的丢失,但是也就意味着空间利用率只有一半 , 四位信息位对应的三位的海明校验码,就有纠正一位错 ,发现两位错的能力,这里的技术也就会用于比如百度云这样的公司
请添加图片描述
本节回顾
请添加图片描述

3.4.2 固态硬盘SSD

这些黑色的小芯片就是用于存储数据的,是基于闪存技术,每个闪存芯片是由多个闪存块组成,而每一个块又可以拆成一个个的页,若是数据存储与固态硬盘中,则系统要读或者写的逻辑块,也就对应这里的页,当我们要写入数据的时候,但是因为是以页为单位的,并且需要擦除,若是其中已有数据,这里我们就会先将数据进行迁移之后在进行写入,但是发生了数据迁移,这样也就许哟啊闪存翻译层进行重新的映射,这也就导致了固态硬盘读的速度远远高于写的速度
请添加图片描述

3.5.1 Cache的基本概念和原理

局部性原理
由于循环结构的存在,其中的数据比如说i,也是可能在时间上循环的存取,由于局部性原理,这也就意味着,当程序是按照列优先进行访问的时候,由于空间局部性较差,也就意味着所需要的时间更长
请添加图片描述
性能分析
请添加图片描述

请添加图片描述
知识回顾
请添加图片描述

3.5.2 Cache和主存的映射方式

之前我们说过Cache保存的是主存中某些数据的副本,映射方式探讨的就是这个主体,这节将会介绍三种方式,如下图,但是全相连映射也有一个问题,就是这里我们的标记使用的也是0,1 的bit,这也就也为着这个标记可能需要的bit也很大,并且开始的时候初始化都是0,这也可能不对,因为我们可能解析为主存上0的位置的信息,所以这里我们还需要另外一个有效位,主存地址的前nbit,对比Cache中所有的块的标记,若标记匹配且有效位=1 则Cache命中,访问块内地址为某某的单元,若是未命中或者有效位=0,则正常访问主存
请添加图片描述
全相联映射
请添加图片描述
直接映射
如下图 前面的19位可以作为Cache的一个行标记,后面的三位可以反映每一个主存标记可以放在哪一个Cache行
请添加图片描述
组相联映射
每个主存块的后两位反映了分组的组号是多少,这也就意味着后两位相同的主存块号一定是在一个组内的,这也就意味着我们标记位只需要20位即可
请添加图片描述
知识回顾
请添加图片描述

3.5.3 Cache替换算法

Cache很小,主存很大,如果Cache满了怎么办?
替换算法
这也就是本小节要处理的问题,若是直接映射,则不需要考虑替换算法,因为若是对应的位置非空,则毫无选择的直接替换即可,所以替换算法只会被用到全相联和组相联映射,这节我们主要学习四种替换算法,随机算法,先进先出算法,近期最少使用,最近不经常使用
随机算法
请添加图片描述
先进先出
这里没有考虑到局部性原理,如我们写C语言中,若是第一步就使用了print 后面也可能会用到print,抖动现象:频繁的换入换出现象(刚被提替的块很快又被调入)
请添加图片描述
近期最少使用算法
做题的时候,我们可以从当前访问的一个主存块号,往前看,看哪一个是最近被访问过的,没有出现的就是要被替代的主存号,这里比起高的没有加一,是因为既是不加1,它依然是最大的数,加一毫无意义,所以我们只有四个计数器的时候,我们最大值应为3,不会达到4,Cache块的总数是2的n次方,则计数器只需n位,且Cache装满后所有的计数器的值一定不重复,命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变,未命中且还有空闲行时,新装入的行的计数器置0,其余非空闲全加一,未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余全加1
请添加图片描述
不经常使用算法
经常被访问的主存块在未来不一定会用到,(如微信视频聊天相关的块) 并没有很好的遵循局部性原理,因此实际运行效果不如最近最少使用算法
请添加图片描述
知识回顾
请添加图片描述

3.5.4 Cache写策略

CPU修改了Cache中的数据副本,如何确保主存中数据母本的一致性?
Chche写策略
这节写策略分为写命中(全写法,写回法),以及写不命中(写分配法,非写分配法),
写命中
我们可以根据脏位来确定数据是否修改过,根据标记位来确定需要写回到什么位置请添加图片描述
全写法
当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓存,访存次数增加,速度变慢,但是能保证数据的一致性,这里由于SRAM实现的写缓冲,所以cpu与写缓冲的交互式比与主存的交互要快的,并且有专门的控制电路控制下逐一写回
请添加图片描述
写不命中
请添加图片描述
多级Cache
请添加图片描述
知识回顾
请添加图片描述

3.6.1 页式存储

这个分页 更多的上是逻辑上的划分,而主存和Cache更多的是物理层面上的一个划分请添加图片描述
我们作为程序员只能是给出一个逻辑地址,而操作系统则可以根据这个逻辑地址去找相应的物理地址,下图是首先根据逻辑地址前两位找到相对应的操作系统被划分的0号页面,然后我们可以看出0号页面被划分到二号主存块中,然后根据主存块号,以及页内地址的拼接 转化成实际的物理地址,这个步骤中最重要的就是建立一个逻辑页号到主存块号之间的关系,操作系统会建立一个页表,cpu执行的机器指令中,使用的是“逻辑地址” 因此需要通过“页表”将逻辑地址转为物理地址,页表的作用:记录了每个逻辑页面存放在哪个主存块中,cpu中还会有一个重要的页表基址寄存器,这个寄存器指明了页表在主存中的存放地址,然后我们又知道每一个页表项的大小是固定的,这样我们就知道了每一个页表项所在的位置
请添加图片描述
快表的引入
类似于主存设置一个Cache,这里我们可以将页表中经常使用的页表项单独存放于一张块表中,可以加快地址的变换的速度,快表的作用是加快逻辑地址到物理地址的转化,而Cache则是加快对数据的访问

知识回顾
请添加图片描述

3.6.2 虚拟存储器

段式虚拟存储器
请添加图片描述
这里由于虚拟地址也是按照段号和段内地址来分的,但是由于段长不一样,这里我们需要将段表加上段长,我们的主存不会再进行分块或者分页,所以我们需要记录一下每一段的首地址
请添加图片描述
段页式虚拟存储器
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【hello Linux】Linux下 gitee 的使用

目录 1. 安装 git 2. gitee 的使用 2.1 注册 gitee 账号 2.2 创建项目:也就是仓库 2.3 下载项目到本地 3. 上传gitee三步走 3.1 三板斧第一招:git add 3.2 三板斧第二招:git commit 3.3 三板斧第三招:git push Linux&#x1f337…

【JavaEE】Spring项目的创建与使用

目录 创建Spring项目 创建Maven项目 引入依赖 使用镜像下载 下载依赖 添加启动类 使用Spring项目 创建Spring配置文件 存储Bean 取出并使用Bean(通过ApplicationContext接口) 通过id 通过class 通过classid(推荐) 取出并使用Bean(通过BeanFactory接口) Applicat…

从零入门激光SLAM(六)——ROS常用工具箱

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激…

【react 全家桶】组合组件

本人大二学生一枚&#xff0c;热爱前端&#xff0c;欢迎来交流学习哦&#xff0c;一起来学习吧。 <专栏推荐> &#x1f525;&#xff1a;js专栏 &#x1f525;&#xff1a;vue专栏 &#x1f525;&#xff1a;react专栏 文章目录09 【组合组件】1.包含关系2.特例关系问题…

P3369 【模板】普通平衡树(FHQ Treap树构建和解析)

题目描述 您需要写一种数据结构&#xff08;可参考题目标题&#xff09;&#xff0c;来维护一些数&#xff0c;其中需要提供以下操作&#xff1a; 插入 x 数删除 x 数(若有多个相同的数&#xff0c;应只删除一个)查询 x 数的排名(排名定义为比当前数小的数的个数 1 )查询排名…

【Kafka-Kerberos下执行shell命令】Kafka在Kerberos环境下如何操作shell命令

【Kafka-Kerberos下执行shell命令】Kafka在Kerberos环境下如何操作shell命令1&#xff09;jaas.conf2&#xff09;client.properties3&#xff09;执行命令当大数据集群部署了 Kerberos 认证操作之后&#xff0c;在服务器上操作 kafka shell 命令就会出现认证相关的异常&#x…

【hello Linux】Linux开发工具

目录 1. vim&#xff1a;文本编辑器 1.1 各种模式的切换 补充&#xff1a;ctrl r命令 1.2 命令模式的操作 1.3 插入模式的操作 1.4 底行模式的操作 1.5 配置vim环境 1.6 配置亲属关系 2. gcc/g&#xff1a;编译器 2.1 预处理&#xff1a; 2.2 编译&#xff1a; 2.3 汇编&#x…

Gsum: A General Framework for Guided Neural Abstractive Summarization 论文笔记

Gsum: A General Framework for Guided Neural Abstractive Summarization 论文笔记 Year: 2021 Venue: NAACL Institution: CMU Code: https://github.com/neulab/guided_summarization Overview 这篇文章力求解决的问题是如何控制文本摘要生成&#xff0c;尤其注重可信度方…

floyed 4.9

今天是周末,也就不为难自己了,学习了一下floyed算法(确实简单哈哈),这个算法也是最短路的一种 在一副图中,a到b的距离可能不是直接的ab边最短,这时候就要用到floyed的思想了,可能是a到c到b比直接a到b最短.所以我们要枚举一边才可以知道a到b的最短的路线 这就是floyed的大概 …

7年测试,从功能测试到测试开发,我总算证明了自己

我感觉我是一个比较有发言权的人吧&#xff0c;我在测试行业爬模滚打7年&#xff0c;从点点点的功能测试到现在成为测试开发工程师&#xff0c;工资也翻了几倍&#xff1b; 个人觉得&#xff0c;测试的前景并不差&#xff0c;只要自己肯努力&#xff1b;我刚出来的时候是在鹅厂…

FL Studio21中文版D编曲数字音乐工作软件

随着现在人们的生活水平不断提高&#xff0c;我们的精神生活也越来越丰富&#xff0c;对于现在的年轻人来说&#xff0c;DJ舞曲是一个较受欢迎的领域&#xff0c;有许多年轻人对DJ这个职业感兴趣&#xff0c;想要深入了解DJ编曲这份工作&#xff0c;那么今天我们就来说一说DJ编…

聊聊ChatGPT无法取代的7个工作

ChatGPT——全世界都在谈论的非常流行的人工智能工具。自从 2022 年 11 月 30 日推出以来&#xff0c;ChatGPT 就被证明是执行复杂任务并简化它们的一体式工具。无论是通过 UPenn 的沃顿商学院 MBA 考试&#xff0c;撰写常春藤盟校入学论文&#xff0c;还是完成简单的任务&…

Django自带的Admin后台中如何获取当前登录用户

需求背景 在使用Django快速开发一个IT 电脑、显示器资产管理小系统的时候&#xff0c;遇到一个问题是&#xff0c;当变更资产设备&#xff08;新增、修改、删除&#xff09;的时候&#xff0c;能记录是谁在什么时间进行的变更。 确认的是肯定是登录状态&#xff0c;但是在使用…

算法学习|动态规划 LeetCode 647. 回文子串、516.最长回文子序列

动态规划一、回文子串思路实现代码二、最长回文子序列思路实现代码&#xff08;希望自己能总结出做过的动态规划题&#xff01;要开始回顾之前刷过的题了&#xff09; 一、回文子串 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或…

回收站数据恢复的方法技巧

​最近有网友反映将一些不经常使用的文件放入回收站后忘记了&#xff0c;清空回收站后想要再次使用文件却怎么都还原不了&#xff0c;想利用回收站数据恢复软件经恢复&#xff0c;咨询有哪些回收站数据恢复软件推荐&#xff0c;下面就给大家推荐回收站数据恢复软件使用方法。 …

数据库开发重点存档

2023春数据库开发复习 T1 视图可以用的几个场景&#xff1f; 不同表字段聚合、信息重组&#xff1a;当某个查询涉及多表连接、次数频繁时&#xff0c;可以创建视图隐藏底层表的复杂性&#xff0c;简化查询。 控制权限&#xff1a;根据不同用户的权限&#xff0c;可以建立不同…

星巴克创始人第三次重出江湖

星巴克创始人第三次出山&#xff0c;与中国有关 中国咖啡连锁竞争白热化 星巴克诞生于1985年&#xff0c;爷爷级的公司 趣讲大白话&#xff1a;百年老店不容易 【趣讲信息科技135期】 **************************** 将心注入 星巴克创始人自传 创始人的激情、执行力、团队建设很…

HttpRunner3.x 源码解析(5)-runner.py

首先看下生成的pytest文件 from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCaseclass TestCaseLogin(HttpRunner):config (Config("登录成功").variables(**{"password": "tester", "expect_foo2": "co…

17_I.MX6ULL_内部RTC

目录 I.MX6U RTC简介 相关寄存器 实验源码 I.MX6U RTC简介 实时时钟是很常用的一个外设,通过实时时钟我们就可以知道年、月、日和时间等信息。因此在需要记录时间的场合就需要实时时钟,可以使用专用的实时时钟芯片来完成此功能,但是现在大多数的MCU或者MPU内部就已经自带了…

一、Locust快速 入门

1 . 介绍 Locust 是一种易于使用、可编写脚本且可扩展的性能测试工具。 您可以在常规 Python 代码中定义用户的行为&#xff0c;而不是被困在 UI 或限制性领域特定语言中。 这使得 Locust 可以无限扩展并且对开发人员非常友好。 用普通的旧 Python 编写测试场景 如果您希望…