超标量处理器设计笔记(5)虚拟存储器、地址转换、page fault
虚拟存储器
- 概述
- 地址转换
- 单级页表
- 多级页表
- 案例
- 最好情况:虚拟地址是连续的
- 最差情况:每个第二级 PT 都装有一项
- 增加级数
- Page Fault
- 程序保护
概述
当程序比物理内存空间更大时,无法全部装在物理内存中,需要对程序进行切片
虚拟存储器优点(需要操作系统调度)
- 将当前使用的部分程序放到物理存储器中,其余部分放在下一级存储器里。不需要切割程序
- 如果同时运行多个程序,不需要限制每个程序在规定的地址空间
- 保护各程序的内容不会互相改写
- 将相同功能的程序可以映射到相同位置
虚拟内存的地址范围
- 32 微处理器 0 ~ 0xFFFF FFFF 4GB
- 64 微处理器 0 ~ 0xFFFF FFFF FFFF FFFF
物理存储器的地址范围
- 32 微处理器 0 ~ 0xFFF FFFF 256MB (通常是 256MB,最大 4GB 和虚拟存储器内存大小一致)
- 64 微处理器 0 ~ 0xFFFF FFFF FFFF FFFF
现在 64 位计算机,既可以用 8GB 、16GB、32GB 内存。
没有使用虚拟存储器的系统:

使用虚拟存储器的系统:

地址转换
虚拟地址空间的划分以 页 为单位,典型大小为 4KB
物理地址的划分以 frame 为单位,典型大小同样为 4KB,
程序开始执行时,每次从硬盘搬运到内存时,搬运单位为页
VA[11:0] 表示页内的位置,page offset
VPN (visual page number):VA 剩余部分用来表示哪个页
PA[11:0] 表示 frame 内的位置,frame offset
PFN (physical frame number):PA 剩余部分用来来表示哪个 Frame
当 页 大小和 frame 大小一样时,page offset 和 frame offset 不需要变化
页面大的优缺点
- 降低页面替换的频率
- 用不到这么大页时,会造成一个页内的很多空间被浪费了
- 替换的速度和成本更高
案例:
16 位处理器,其 Visual Memory Space 为 64K (2^16 = 2^4 * 2^12 = 16 * 4k),16 个页
Physical Memory Space 为 32K (2^3 * 2^12 = 8 * 4K),8 个 Frame
现在有一个程序,大于 32KB,所以其中的 32KB 部分映射到 Physical Memory Space,剩余部分映射到 Disk 中
例子 1:
Load R2, 5[R1] // 假设R1 = 0
得到的虚拟地址为 R1 + 5= 5,所以在 Visual Memory Space 中是 0~4K,Physical Memory Space 中 12~16K,具体是 12k + 5。
例子 2:
Load R2, 0[R1] // 假设R1 = 32780 32~36K之间
得到的虚拟地址为 R1 = 32780,所以在 Visual Memory Space 中是 32~36K ,Physical Memory Space 中没有,故 MMU 会产生 Page Fault,从 disk 中取出一个 Frame 替代原 Physical Memory Space 最少被使用的。这样就可以取到数据

单级页表
PT (Page Table) 页表:VPN 到 PFN 的转换表
页表存放在物理内存中
- 虚拟地址来寻址,页表寻址的内容是虚拟地址对应的物理地址
- 页表寄存器 (Page table register PTR):指示页表在物理存储器的位置
- 每次操作系统将程序调入到物理存储器时,更新 PRT
通过 VA[31:12] 索引到 Page Table Register 中的对应的项,由此获得 PFN
Page Offset 由于页面大小和 frame 大小一致,所以直接平移
Valid 表示 VPN 对应的内容在物理存储器中

Page Table 只需要 18+1 (valid) = 19 位,但由于物理存储器的数据位宽为 32bits,所以表项也是 32bits,多余的位可以用来表示其他信息,比如说页面的属性信息(可读、可写等)
这样页面大小为 32 bits * 2^20 = 4B * 1M = 4MB,放在物理内存里
程序状态包含:该程序页表、PC、通用寄存器。
该程序通常成为进程,可以保存好信息(页表只需要保存页表对应的 PTR 保存即可,mapping 信息可以用 store 指令完成)后暂停,过段时间再恢复,继续执行。不同进程使用的物理内存不会产生冲突了。
打开一个程序,操作系统会分配物理内存的空间、创建页表和堆栈,。当进程不存在时,物理内存的空间便会得到释放。
[!Note] 程序、进程、线程的关系
进程是操作系统进行资源分配的最小单元,
线程是操作系统进行运算调度的最小单元。
执行一次程序则会产生一个进程,多次多个,一个进程可以包含多个线程。
进程之间不会互相影响,线程之间公用地址空间,会互相干扰和影响。

由于页表空间需要 4MB 的连续地址来存储,一个处理器同时运行上百个进程时,则需要上百个 4MB 的连续地址来存储,非常占用空间。
所以采用多级页表的方式,来减少页表对物理存储空间的占用
多级页表
二级页表需要的空间:
32 位处理器下
- 单级页表:虚拟地址空间为 2^20 * 4B = 4MB
- 二级页表 (如果分成 2^10 等份,则需要 2^10+1 (第二级 pt 个数+第一级 pt) 个连续地址空间,每个空间大小为:2^10 * 4B = 4KB)
- 第一级表项,有 1 项,每项有 2^10 项第二级表项
- 第二级表项,有 2^10 项,每项有 2^10 项
实际上,第一级 PT 不一定填满,第二级 PT 只需要填充足够即可。
有需要时增加第二级 PT,一次增加 2^10 * 4KB = 4MB 的页面
[!Note]
PT 最少也需要 4KB 的连续地址空间,即便只用了其中一项


案例
32 位处理器下,页面大小为 4KB 下,4MB 程序的页表需要占用多大的空间呢?

最好情况:虚拟地址是连续的
一个二级 PT 能存储:2^10 * 4KB = 4MB 的程序
总共需要 1 项一级 PT,1 项二级 PT
页表占用总空间:2 * 4B * 2 ^10 = 8 KB (2 个 PT,每个 PT 占用 4B * 2^10 的空间)
最差情况:每个第二级 PT 都装有一项
一共 2^10 项二级列表,刚好 2^10 * 4KB = 4MB 的空间
页表占用总空间:2^10 * 4B * (2^10+1) = 4MB + 4 KB ( 2^10+1 个 PT,每个 PT 占用 4B * 2^10 = 4KB 的空间)
增加级数
当位数过多时,可以采用增加级数的方式
优点:级数越多,页表对物理空间的占用越少
缺点:需要逐级访问次数越多,时序越紧张

Page Fault
Page fault: 访问 PT 时,valid 位为 0,表示该页面在硬盘里,没有取到内存中
Page fault 通常由操作系统完成
- 发生 Page fault 时,访问硬盘时间很长,即便用软件处理需要几百条指令,但相比访问硬盘时间微乎其微
- 在替换物理内存的 frame 时,软件可以根据实际情况实现灵活替换算法
但是 valid=0 时,此时系统只知道 VA,怎么找对应的硬盘位置呢?
硬盘中会为一个进程的所有页开一个空间,也就是Swap 空间,同时会有一个表格来记录每个页在硬盘的存储位置。

为了处理 Page Fault,处理器在硬件上提供的支持
- 发生 page fault,产生异常,并且跳转到异常处理程序的入口地址
- 写物理地址之后,标记 dirty
- 访问物理地址时,标记 Use,该位会被操作系统周期性清零
程序保护
操作系统需要访问物理内存的所有空间,所以一般不使用页表
物理内存专门有一块给操作系统使用,不允许别的进程访问
比如:
32 位 MIPS 处理器,将 4GB 的虚拟存储空间分为 kseg0\1\2 和 kuseg 四个区域。
Kseg0 区域的属性是 unmapped,不经过页表转换
操作系统的内核指令和数据位于 kseg0 上,用户进程只能使用 kuseg
ARM 处理器会使用二级页表的方法,第二级页表的 PTE 都有一个 AP 部分
Privileged : 可以访问处理器所有资源,操作系统处于该模式下
User: 普通用户程序下

加入程序保护之后的地址转换。第二级页表控制 4KB 的页面权限,第一级控制 4MB 的页面权限

相关文章:
超标量处理器设计笔记(5)虚拟存储器、地址转换、page fault
虚拟存储器 概述地址转换单级页表多级页表案例最好情况:虚拟地址是连续的最差情况:每个第二级 PT 都装有一项 增加级数 Page Fault 程序保护 概述 当程序比物理内存空间更大时,无法全部装在物理内存中,需要对程序进行切片 虚拟…...
SparkSQL 读写数据攻略:从基础到实战
目录 一、输入Source 1)代码演示最普通的文件读取方式: 2) 通过jdbc读取数据库数据 3) 读取table中的数据【hive】 二、输出Sink 实战一:保存普通格式 实战二:保存到数据库中 实战三:将结果保存在h…...
react 使用状态管理调用列表接口渲染列表(包含条件查询,统一使用查询按钮,重置功能),避免重复多次调用接口的方法
react开发调用api接口一般使用useEffect来监听值的变化,通过值的变化与否来进行接口调用。 比如我们要进行一个查询接口 const [pageParams, setPage] useState({name: ,id: ,});const [dataList, setDataList] useState([]);const getList async () > {const…...
Stable Audio Open模型部署教程:用AI打造独家节拍,让声音焕发新活力!
Stable Audio Open 是一个开源的文本到音频模型,允许用户从简单的文本提示中生成长达 47 秒的高质量音频数据。该模型非常适合创建鼓点、乐器即兴演奏、环境声音、拟音录音和其他用于音乐制作和声音设计的音频样本。用户还可以根据他们的自定义音频数据微调模型&…...
加油站-(贪心算法)
题目描述 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas…...
k8s-持久化存储PV与PVC(1)
1、概述 为什么 kubernetes 要持久化存储? 在 kubernetes 中部署应用都是以 Pod 的容器运行的,而 Pod 是有生命周期,一旦 Pod 被删除或重启后,这些数据也会随着丢失,则需要对这些数据进行持久化存储。 PV࿱…...
Linux Red Hat Enterprise
下载 https://developers.redhat.com/products/rhel/download 安装...
《中型 Vue 项目:挑战与成长》
一、引言 在当今的前端开发领域,Vue 作为一款渐进式 JavaScript 框架,以其强大的功能和灵活性备受开发者青睐。对于中型 Vue 项目而言,其重要性不言而喻。中型 Vue 项目通常在功能复杂度和规模上介于小型项目和大型项目之间,既需要…...
配置 DNS over HTTPS阻止DNS污染
概念介绍 DOH简介 DNS(域名系统)的主要功能是将域名解析成IP地址,域名的解析工作由DNS服务器完成。从安全角度来看,域名解析的请求传输时通常不进行任何加密,这导致第三方能够很容易拦截用户的DNS,将用…...
Facebook广告文案流量秘诀
Facebook 广告文案是制作有效 Facebook 广告的关键方面。它侧重于伴随广告视觉元素的文本内容。今天我们的博客将深入探讨成功的 Facebook 广告文案的秘密! 一、广告文案怎么写? 正文:这是帖子的正文,出现在您姓名的正下方。它可…...
22. 五子棋小游戏
文章目录 概要整体架构流程技术名词解释技术细节小结 1. 概要 🔊 JackQiao 对 米粒 说:“今天咱们玩个五子棋小游戏,电脑与你轮流在一个 nn 的网格上放置棋子(X 或 O),网格由你输入的正整数n决定࿰…...
fastadmin框架同时使用 阿里云oss和阿里云点播
背景 项目的实际需求中既要用到阿里云oss产品又用到阿里云点播系统,实现完美的统一。设置两个地址downUrl,thirdCode。分别代表阿里云oss上传路径和阿里云点播系统vId。 实现 默认框架你已经集成好阿里云oss集成工作,前端html页面实现 <…...
Java-JMX 组件架构即详解
JMX架构由三个主要组件构成: MBeans(Managed Beans):代表可管理的资源,是JMX的核心。MBean可以是Java类或接口,提供了管理操作的接口,如获取系统信息、设置参数等。MBeanServer&#x…...
unity打包web,发送post请求,获取地址栏参数,解决TypeError:s.replaceAll is not a function
发送post请求 public string url "http://XXXXXXXXX";// 请求数据public string postData "{\"user_id\": 1}";// Start is called before the first frame updatevoid Start(){// Post();StartCoroutine(PostRequestCoroutine(url, postData…...
java+ssm+mysql校园物品租赁网
项目介绍: 使用javassmmysql开发的校园物品租赁网,系统包含管理员、用户角色,功能如下: 管理员:用户管理;物品管理(物品种类、物品信息、评论信息);订单管理࿱…...
Spring Boot中实现JPA多数据源配置指南
本文还有配套的精品资源,点击获取 简介:本文详细介绍了在Spring Boot项目中配置和使用JPA进行多数据源管理的步骤。从引入依赖开始,到配置数据源、创建DataSource bean、定义实体和Repository,最后到配置事务管理器和使用多数据…...
服务器加固
1.服务器密码复杂度 密码最小长度,密码复杂度策略 vim /etc/pam.d/system-auth --------------- #密码配置 #ucredit:大写字母个数;lcredit:小写字母个数;dcredit:数字个数;ocredit:…...
探索CSS中的背景图片属性,让你的网页更加美观
导语:在网页设计中,背景图片的运用能够丰富页面视觉效果,提升用户体验。本文将详细介绍CSS中背景图片的相关属性,帮助大家更好地掌握这一技能。 一、背景图片基本属性 1、background-image 该属性用于设置元素的背景图片。语法如…...
Oracle的打开游标(OPEN_CURSORS)
一、OPEN_CURSORS 概述 OPEN_CURSORS 指定会话一次可以拥有的打开游标(私有 SQL 区域的句柄)的最大数量。可以使用此参数来防止会话打开过多的游标。 OPEN_CURSORS参数说明 特性 描述 参数类型 Integer 默认值 50 修改方式 ALTER SYSTEM PDB级别…...
数值分析—数值积分
研究背景 积分的数学解法为牛顿莱布尼兹公式,数学表示为 ∫ a b f ( x ) d x F ( b ) − F ( a ) \int_{a}^{b} f(x)dxF(b)-F(a) ∫abf(x)dxF(b)−F(a),但应用该方法有如下困难: 1, f ( x ) f(x) f(x)的原函数有时不能用初等函…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
