7.外部存储器,Cache,虚拟存储器
目录
一. 外部存储器
(1)磁盘存储器
1.磁盘的组成
2.磁盘的性能指标
3.磁盘地址
4.硬盘的工作过程
5.磁盘阵列
(2)固态硬盘(SSD)
二. Cache基本概念与原理
三. Cache和主存的映射方式
(1)全相连映射
(2)直接映射
(3)组相联映射
四. Cache的替换算法
(1)随机算法(RAND)
(2)先进先出算法(FIFO)
(3)近期最少使用算法(LRU)
(4)最不经常使用算法(LFU)
五. Cache的写策略
(1)Cache写命中
1.写回法
2.全写法
(2)Cache写不命中
1.写分配法
2.非写分配法
六. 虚拟存储器
(1)页式存储器
(2)虚拟存储器
1.页式虚拟存储器
2.段式虚拟存储器
3.段页式虚拟存储器
一. 外部存储器
计算机的外存储器又称为辅助存储器,目前主要使用磁表面存储器。
所谓“磁表面存储”,是指把某些磁性材料薄薄地涂在金属铝或塑料表面上作为载磁体来存储信息。磁盘存储器、磁带存储器和磁鼓存储器均属于磁表面存储器。
(1)磁盘存储器

磁表面存储器的优点:
- 存储容量大,位价格低
- 记录介质可以重复使用
- 记录信息可以长期保存而不丢失,甚至可以脱机存档
- 非破坏性读出,读出时不需要再生
磁表面存储器的缺点:
- 存取速度慢
- 机械结构复杂
- 对工作环境要求较高
1.磁盘的组成
存储区域:一块硬盘含有若干个记录面,每个记录面划分为若干条磁道,而每条磁道又划分为若干个扇区,扇区(也称块)是磁盘读写的最小单位,也就是说磁盘按块存取。

硬盘存储器由磁盘驱动器,磁盘控制器和盘片组成。
- 磁盘驱动器:核心部件是磁头组件和盘片组件,温彻斯特盘是一种可移动头固定盘片的硬盘存储器。
- 磁盘控制器:是硬盘存储器和主机的接口,主流的标准有IDE、SCSI、SATA等。
2.磁盘的性能指标
①磁盘的容量:一个磁盘所能存储的字节总数称为磁盘容量。磁盘容量有非格式化容量和格式化容量之分。
- 非格式化容量是指磁记录表面可以利用的磁化单元总数。
- 格式化容量是指按照某种特定的记录格式所能存储信息的总量。
②记录密度:记录密度是指盘片单位面积上记录的二进制的信息量,通常以道密度、位密度和面密度表示。
- 道密度是沿磁盘半径方向单位长度上的磁道数;
- 位密度是磁道单位长度上能记录的二进制代码位数;注意:磁盘所有磁道记录的信息量一定是相等的,并不是圆越大信息越多,故每个磁道的位密度都不同。
- 面密度是位密度和道密度的乘积。

③平均存取时间:平均存取时间=寻道时间(磁头移动到目的磁道)+旋转延迟时间(磁头定位到所在扇区)+传输时间(传输数据所花费的时间)。

④数据传输率:磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率。
假设磁盘转数为r(转/秒),每条磁道容量为N个字节,则数据传输率D=rN。
3.磁盘地址

4.硬盘的工作过程
硬盘的主要操作是寻址、读盘、写盘。每个操作都对应一个控制字,硬盘工作时,第一步是取控制字,第二步是执行控制字。
硬盘属于机械式部件,其读写操作是串行的,不可能在同一时刻既读又写,也不可能在同一时刻读两组数据或写两组数据。

5.磁盘阵列
RAID ( Redundant Array of lnexpensive Disks,廉价冗余磁盘阵列)是将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储、并行访问,具有更好的存储性能、可靠性和安全性。RAID的分级如下所示。在RAID1~RAID5的几种方案中,无论何时有磁盘损坏,都可以随时拔出受损的磁盘再插入好的磁盘,而数据不会损坏。
- RAID0:无冗余和无校验的磁盘阵列。RAID0把连续多个数据块交替地存放在不同物理磁盘的扇区中,几个磁盘交叉并行读写,不仅扩大了存储容量,而且提高了磁盘数据存取速度,但RAID0没有容错能力。
- RAID1:镜像磁盘阵列。RAID1是为了提高可靠性,使两个磁盘同时进行读写,互为备份,如果一个磁盘出现故障,可从另一磁盘中读出数据。两个磁盘当一个磁盘使用,意味着容量减少一半。
- RAID2:采用纠错的海明码的磁盘阵列。
- RAID3:位交叉奇偶校验的磁盘阵列。
- RAID4:块交叉奇偶校验的磁盘阵列。
- RAID5:无独立校验的奇偶校验磁盘阵列。


(2)固态硬盘(SSD)

固态硬盘的结构:
固态硬盘以块(block)为单位"擦除",擦干净的块,其中的每页都可以写一次,读无限次。所以在修改一个页的数据时,先把块内其他页的数据复制到别的块,然后把原来块擦除,最后向其他数据复制到的块写入新页,闪存翻译层会修改地址和物理位置的映射关系。所以固态硬盘的写操作远远慢于读操作,此外固态硬盘支持随机访问。
二. Cache基本概念与原理
实际上,Cache被集成在CPU内部。Cache用SRAM实现,速度快,成本高。
程序访问的空间局部性:在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的(Eg:数组元素、顺序执行的指令代码)。
程序访问的时间局部性:在最近的未来要用到的信息,很可能是现在正在使用的信息(Eg:循环结构的指令代码)。
基于局部性原理,不难想到,可以把CPU目前访问的地址“周围”的部分数据放到Cache中。

在矩阵按行存储的情况下,程序B的表现就比程序A“差”,因为它违背局部性原理。

设为访问一次Cache所需时间,
为访问一次主存所需时间。命中率H:CPU欲访问的信息已在Cache中的比率,则缺失(未命中)率M= 1-H
Cache—主存系统的平均访问时间为(设先访问Cache,若Cache未命中再访问主存):
如果设Cache和主存同时访问,Cache找到数据立即停止访问主存:。

基于局部性原理,不难想到,可以把CPU目前访问的地址“周围”的部分数据放到Cache中。如何界定“周围”?——将主存的存储空间“分块”,如:每1KB为一块。主存与Cache之间以“块”为单位进行数据交换。

注:操作系统中,通常将主存中的一个“块”也称为—个页/页面/页框”,Cache中的“块”也称为“行”。
三. Cache和主存的映射方式
如何区别Cache和主存数据块的映射方式?

(1)全相连映射

(2)直接映射
因为是和Cache总块数取余,所以从二进制的角度看,主存块号后几位就是Cache块号,所以标记主存块号地址可以少标记几位:

(3)组相联映射
和直接映射类似:

四. Cache的替换算法

(1)随机算法(RAND)

(2)先进先出算法(FIFO)

抖动现象:频繁的换入换出现象(刚被替换的块很快又被调入)
(3)近期最少使用算法(LRU)

LRU算法基于“局部性原理”,近期被访问过的主存块,在不久的将来也很有可能被再次访问,因此淘汰最久没被访问过的块是合理的。LRU算法的实际运行效果优秀,Cache命中率高。若被频繁访问的主存块数量>Cache行的数量,则有可能发生抖动。如:1,2,3,4,5,1,2,3,4,5...
(4)最不经常使用算法(LFU)

LFU算法:曾经被经常访问的主存块在未来不一定会用到(如:微信视频聊天相关的块),并没有很好地遵循局部性原理,因此实际运行效果不如LRU。
五. Cache的写策略
解决Cache与主存内容可能不一致的情况。此时分两种情况:
(1)Cache写命中
1.写回法
写回法(write-back)——当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存(增设一个“脏位”表示其是否被修改)。写回法减少了访存次数,但存在数据不一致的隐患。

2.全写法
全写法(写直通法,write-through)——当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓冲(write buffer)。访存次数增加,速度变慢,但更能保证数据一致性。

使用写缓冲,CPU写的速度很快,若写操作不频繁,则效果很好。若写操作很频繁,可能会因为写缓冲饱和而发生阻塞。
(2)Cache写不命中
1.写分配法
写分配法(write-allocate)——当CPU对Cache写不命中时,把主存中的块调入Cache,在Cache中修改。通常搭配写回法使用。
2.非写分配法
非写分配法(not-write-allocate)——当CPU对Cache写不命中时只写入主存,不调入Cache。搭配全写法使用。
六. 虚拟存储器
(1)页式存储器
页式存储:一个程序(进程)在逻辑上被分为若干个大小相等的“页面”,“页面”大小与“块”的大小相同。每个页面可以离散地放入不同的主存块中(否则,在内存种找到连续的,空闲的块,会使得内存利用率很低)。
逻辑地址与物理地址:

页表:逻辑块号→主存块号。CPU执行的机器指令中,使用的是“逻辑地址”,因此需要通“页表”将逻辑地址转为物理地址。页表的作用:记录了每个逻辑页面存放在哪个主存块中。


查询页表需要进行一次访问内存的操作。仿照Cache和内存的思想:Cache——快表,存经常访问的页表项;页表——就是上面的页表。但注意区别:快表中存储的是页表项的副本;Cache中存储的是主存块的副本。
增加了快表之后,CPU访存如下:


(2)虚拟存储器
1.页式虚拟存储器
应用程序的使用:也不必调入全部数据到内存中。

- 逻辑页号:程序分页的页号。
- 主存块号:分页在运行内存中的存储位置。
- 外存块号:分页在外存(硬盘)中的存储位置。
- 有效位:分页是否被调入内存。
- 访问位:访问次数,在淘汰页时可以实现诸如LRU等算法。
- 脏位:这一页数据是否被修改过,否则写回辅存时要注意。
2.段式虚拟存储器

3.段页式虚拟存储器
把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,
程序对主存的调入、调出仍以页为基本传送单位。每个程序对应一个段表,每段对应一个页表。
虚拟地址:段号+段内页号+页内地址

相关文章:
7.外部存储器,Cache,虚拟存储器
目录 一. 外部存储器 (1)磁盘存储器 1.磁盘的组成 2.磁盘的性能指标 3.磁盘地址 4.硬盘的工作过程 5.磁盘阵列 (2)固态硬盘(SSD) 二. Cache基本概念与原理 三. Cache和主存的映射方式 ÿ…...
UITableView的style是UITableViewStyleGrouped
一般情况下,UITableViewStylePlain和UITableViewStyleGrouped是UITableView常用到的style, 之前都是用到的时候,遇到问题直接用度娘,差不多就够用了,今天在修复UI提出的间隙问题,来回改,总觉得…...
Java17新增特性
前言 前面的文章,我们对Java9、Java10、Java11、Java12 、Java13、Java14、Java15、Java16 的特性进行了介绍,对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 Java13新增特性 Java14新增特性 Java15新增特性 Java16新增特…...
VR全景技术在城市园区发展中有哪些应用与帮助
引言: 在数字化时代的浪潮中,虚拟现实(VR)全景技术逐渐融入各个领域,也为城市园区展示带来了全新的可能性。 一.VR全景技术简介 虚拟现实全景技术是一种通过全景图像和视频模拟真实环境的技术。通过相关设…...
在 SQL 中,当复合主键成为外键时应该如何被其它表引用
文章目录 当研究一个问题慢慢深入时,一个看起来简单的问题也暗藏玄机。在 SQL 中,主键成为外键这是一个很平常的问题,乍一看没啥值得注意的。但如果这个主键是一种复合主键,而另一个表又引用这个键作为它的复合主键,问…...
Ps:通过显示大小了解图像的打印尺寸
在 Photoshop 中,如果想了解文档窗口中的图像打印出来之后的实质大小,只要知道两个数值即可。 第一个数值是图像分辨率(也称“文档分辨率”)的大小,可在Ps菜单:图像/图像大小 Image Size对话框中查询或设置…...
Linux - 驱动开发 - watchdog - SMP机制下多核确活
说明 理论上:不管IC是单核还是多核,只要watchdog有被循环feed,就不会触发超时重启,因此watchdog在SMP机制下的多核环境显得比较宽松,只要任意核存活(喂狗)就不会重启设备。 实际情况 有客户反…...
概念解析 | LoRA:低秩矩阵分解在神经网络微调中的魔力
注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:基于低秩矩阵分解的神经网络微调方法LoRA LoRA:低秩矩阵分解在神经网络微调中的魔力 Low-Rank Adaptation of Large Language Models LoRA由如下论文提出,详细信息请参见论文原…...
量子计算和量子通信技术:引领潜力无限的未来
近年来,随着量子计算和量子通信技术的迅速发展,它们在各个领域的广泛应用前景引起了人们的极大兴趣。本文将深入探讨量子计算和量子通信技术的普遍应用,以及它们预示的未来,同时提出业内人士需要注意的事项。 介绍:量子…...
nodejs+vue+python+PHP+微信小程序-安卓- 电影在线订票系统的设计与实现-计算机毕业设计推荐
目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...
LightDB23.4支持mysql aes_encrypt/aes_decrypt/hex/unhex函数
背景介绍 为了兼容mysql数据库的功能,在LightDB23.4版本上支持hex/unhex/aes_encrypt/aes_decrypt函数。 函数原型如下: hex(data bytea) returns textunhex(data varchar) returns byteaaes_encrypt(data bytea, key bytea) returns byteaaes_encryp…...
uniapp——项目day04
购物车页面——商品列表区域 渲染购物车商品列表的标题区域 1. 定义如下的 UI 结构: 2.美化样式 渲染商品列表区域的基本结构 1. 通过 mapState 辅助函数,将 Store 中的 cart 数组映射到当前页面中使用: import badgeMix from /mixins/tab…...
7-爬虫-中间件和下载中间件(加代理,加请求头,加cookie)、scrapy集成selenium、源码去重规则(布隆过滤器)、分布式爬虫
0 持久化(pipelines.py)使用步骤 1 爬虫中间件和下载中间件 1.1 爬虫中间件(一般不用) 1.2 下载中间件(代理,加请求头,加cookie) 1.2.1 加请求头(加到请求对象中) 1.2.2 加cookie 1.2.3 加代理 2 scrapy集成selenium 3 源码去重…...
创建自己的nas服务,从远端拉取所需文件
一、前言 创建一个nas文件存储,然后需要的时候随时从远端或者其他终端拉取所需文件是不是一件很帅气的工作。 二、准备工作 一台服务器(云的更好),没了。 首先安装docker和docker-compose 此处省略docker的安装(改天更新)&…...
智慧化城市内涝的预警,万宾科技内涝积水监测仪
随着城市化进程的加速,伴随的是城市内涝问题日益凸显。频繁的暴雨和积水给市民的生活带来了诸多不便,也给城市的基础设施带来了巨大压力。如何解决这一问题,成为智慧城市建设的重要课题和政府管理的工作主题,只要内涝问题得到缓解…...
7-18 调用一个函数
分数 2 作者 Yiping 单位 广东东软学院 现有如下程序,请将注释后带??的代码补充完整: import mathdef normalize(normal):x normal[0]y normal[1]z normal[2]s math.sqrt(x**2 y**2 z**2)x / sy / sz / sreturn (x, y, z)if __name__ __mai…...
VB.net TCP服务端监听端口接收客户端RFID网络读卡器上传的读卡数据
本 示例使用设备介绍:WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com) Imports System.Threading Imports System.Net Imports System.Net.Sockets Public Class Form1Dim ListenSocket As SocketDim Dict As New Dictionary(Of…...
Springboot 集成 MongoDB
在SpringBoot项目中集成MongoDB后的一些基本操作。 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 本文介绍的内容是Springboot如何集成MongoDB,以及对MongoDB进行基本的增加、查询数据的操作。 提示:以下是本篇…...
AM@定积分的定义求某些类型的极限
文章目录 定积分定义求极限步骤例 定积分表示为极限 定积分定义求极限 容易从定积分的定义: ∫ a b f ( x ) d x \int_{a}^{b}f(x)\mathrm{d}x ∫abf(x)dx lim λ → 0 ∑ i 1 n f ( ξ i ) Δ x i \lim\limits_{\lambda\to{0}}\sum_{i1}^{n}f{(\xi_{i})}\Delta{x_i} λ→…...
Perl爬虫程序的框架
Perl爬虫程序的框架,这个框架可以用来爬取任何网页的内容。 perl #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use HTML::TreeBuilder; # 创建LWP::UserAgent对象 my $ua LWP::UserAgent->new; # 设置代理信息 $ua->proxy(http, ); …...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
动态规划-1035.不相交的线-力扣(LeetCode)
一、题目解析 光看题目要求和例图,感觉这题好麻烦,直线不能相交啊,每个数字只属于一条连线啊等等,但我们结合题目所给的信息和例图的内容,这不就是最长公共子序列吗?,我们把最长公共子序列连线起…...
