当前位置: 首页 > news >正文

超标量处理器设计笔记(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 内存。

没有使用虚拟存储器的系统:
image.pngl200

使用虚拟存储器的系统:
image.pngl200

地址转换

虚拟地址空间的划分以 为单位,典型大小为 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 最少被使用的。这样就可以取到数据

image.pngl200

单级页表

PT (Page Table) 页表:VPN 到 PFN 的转换表
页表存放在物理内存中

  • 虚拟地址来寻址,页表寻址的内容是虚拟地址对应的物理地址
  • 页表寄存器 (Page table register PTR):指示页表在物理存储器的位置
  • 每次操作系统将程序调入到物理存储器时,更新 PRT

通过 VA[31:12] 索引到 Page Table Register 中的对应的项,由此获得 PFN
Page Offset 由于页面大小和 frame 大小一致,所以直接平移
Valid 表示 VPN 对应的内容在物理存储器中

image.pngl200

Page Table 只需要 18+1 (valid) = 19 位,但由于物理存储器的数据位宽为 32bits,所以表项也是 32bits,多余的位可以用来表示其他信息,比如说页面的属性信息(可读、可写等)
这样页面大小为 32 bits * 2^20 = 4B * 1M = 4MB,放在物理内存里

程序状态包含:该程序页表、PC、通用寄存器。
该程序通常成为进程,可以保存好信息(页表只需要保存页表对应的 PTR 保存即可,mapping 信息可以用 store 指令完成)后暂停,过段时间再恢复,继续执行。不同进程使用的物理内存不会产生冲突了。

打开一个程序,操作系统会分配物理内存的空间、创建页表和堆栈,。当进程不存在时,物理内存的空间便会得到释放。

[!Note] 程序、进程、线程的关系
进程是操作系统进行资源分配的最小单元,
线程是操作系统进行运算调度的最小单元。

执行一次程序则会产生一个进程,多次多个,一个进程可以包含多个线程。
进程之间不会互相影响,线程之间公用地址空间,会互相干扰和影响。

image.pngl200

由于页表空间需要 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 的连续地址空间,即便只用了其中一项

image.pngl200

image.pngl200

案例

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

image.pngl200

最好情况:虚拟地址是连续的

一个二级 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 的空间)

增加级数

当位数过多时,可以采用增加级数的方式
优点:级数越多,页表对物理空间的占用越少
缺点:需要逐级访问次数越多,时序越紧张
image.pngl200

Page Fault

Page fault: 访问 PT 时,valid 位为 0,表示该页面在硬盘里,没有取到内存中

Page fault 通常由操作系统完成

  • 发生 Page fault 时,访问硬盘时间很长,即便用软件处理需要几百条指令,但相比访问硬盘时间微乎其微
  • 在替换物理内存的 frame 时,软件可以根据实际情况实现灵活替换算法

但是 valid=0 时,此时系统只知道 VA,怎么找对应的硬盘位置呢?
硬盘中会为一个进程的所有页开一个空间,也就是Swap 空间,同时会有一个表格来记录每个页在硬盘的存储位置。

image.pngl200

为了处理 Page Fault,处理器在硬件上提供的支持

  • 发生 page fault,产生异常,并且跳转到异常处理程序的入口地址
  • 写物理地址之后,标记 dirty
  • 访问物理地址时,标记 Use,该位会被操作系统周期性清零

程序保护

操作系统需要访问物理内存的所有空间,所以一般不使用页表
物理内存专门有一块给操作系统使用,不允许别的进程访问
比如:

32 位 MIPS 处理器,将 4GB 的虚拟存储空间分为 kseg0\1\2 和 kuseg 四个区域。
Kseg0 区域的属性是 unmapped,不经过页表转换
操作系统的内核指令和数据位于 kseg0 上,用户进程只能使用 kuseg

ARM 处理器会使用二级页表的方法,第二级页表的 PTE 都有一个 AP 部分
Privileged : 可以访问处理器所有资源,操作系统处于该模式下
User: 普通用户程序下
image.pngl200

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

相关文章:

超标量处理器设计笔记(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&#xff1…...

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决定&#xff0…...

fastadmin框架同时使用 阿里云oss和阿里云点播

背景 项目的实际需求中既要用到阿里云oss产品又用到阿里云点播系统&#xff0c;实现完美的统一。设置两个地址downUrl&#xff0c;thirdCode。分别代表阿里云oss上传路径和阿里云点播系统vId。 实现 默认框架你已经集成好阿里云oss集成工作&#xff0c;前端html页面实现 <…...

Java-JMX 组件架构即详解

JMX架构由三个主要组件构成&#xff1a; ‌MBeans&#xff08;Managed Beans&#xff09;‌&#xff1a;代表可管理的资源&#xff0c;是JMX的核心。MBean可以是Java类或接口&#xff0c;提供了管理操作的接口&#xff0c;如获取系统信息、设置参数等。‌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校园物品租赁网

项目介绍&#xff1a; 使用javassmmysql开发的校园物品租赁网&#xff0c;系统包含管理员、用户角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;用户管理&#xff1b;物品管理&#xff08;物品种类、物品信息、评论信息&#xff09;&#xff1b;订单管理&#xff1…...

Spring Boot中实现JPA多数据源配置指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本文详细介绍了在Spring Boot项目中配置和使用JPA进行多数据源管理的步骤。从引入依赖开始&#xff0c;到配置数据源、创建DataSource bean、定义实体和Repository&#xff0c;最后到配置事务管理器和使用多数据…...

服务器加固

1.服务器密码复杂度 密码最小长度&#xff0c;密码复杂度策略 vim /etc/pam.d/system-auth --------------- #密码配置 #ucredit&#xff1a;大写字母个数&#xff1b;lcredit&#xff1a;小写字母个数&#xff1b;dcredit&#xff1a;数字个数&#xff1b;ocredit&#xff1a;…...

探索CSS中的背景图片属性,让你的网页更加美观

导语&#xff1a;在网页设计中&#xff0c;背景图片的运用能够丰富页面视觉效果&#xff0c;提升用户体验。本文将详细介绍CSS中背景图片的相关属性&#xff0c;帮助大家更好地掌握这一技能。 一、背景图片基本属性 1、background-image 该属性用于设置元素的背景图片。语法如…...

Oracle的打开游标(OPEN_CURSORS)

一、OPEN_CURSORS 概述 OPEN_CURSORS 指定会话一次可以拥有的打开游标&#xff08;私有 SQL 区域的句柄&#xff09;的最大数量。可以使用此参数来防止会话打开过多的游标。 OPEN_CURSORS参数说明 特性 描述 参数类型 Integer 默认值 50 修改方式 ALTER SYSTEM PDB级别…...

数值分析—数值积分

研究背景 积分的数学解法为牛顿莱布尼兹公式&#xff0c;数学表示为 ∫ a b f ( x ) d x F ( b ) − F ( a ) \int_{a}^{b} f(x)dxF(b)-F(a) ∫ab​f(x)dxF(b)−F(a)&#xff0c;但应用该方法有如下困难&#xff1a; 1&#xff0c; f ( x ) f(x) f(x)的原函数有时不能用初等函…...

克服大规模语言模型限制,构建新的应用方法——LangChain

大模型 大模型的出现和落地开启了人工智能(AI)新一轮的信息技术革命&#xff0c;改变了人们的生 活方式、工作方式和思维方式。大模型的落地需要数据、算力和算法三大要素。经过几 年发展&#xff0c;大模型的数据集(包括多模态数据集)制作已经形成了规约&#xff0c;Meta、Go…...

计算机网络 —— HTTPS 协议

前一篇文章&#xff1a;计算机网络 —— HTTP 协议&#xff08;详解&#xff09;-CSDN博客 目录 前言 一、HTTPS 协议简介 二、HTTPS 工作过程 1.对称加密 2.非对称加密 3.中间人攻击 4.引入证书 三、HTTPS 常见问题 1.中间人能否篡改证书&#xff1f; 2.中间人能否调…...

React第十七章(useRef)

useRef 当你在React中需要处理DOM元素或需要在组件渲染之间保持持久性数据时&#xff0c;便可以使用useRef。 import { useRef } from react; const refValue useRef(initialValue) refValue.current // 访问ref的值 类似于vue的ref,Vue的ref是.value&#xff0c;其次就是vu…...

React第十五节useReducer使用详解差异

useReducer() 的用法注意事项 1、 概述&#xff1a; useReducer() 常用于管理复杂的状态更新逻辑&#xff0c;特别是在状态更新依赖于多个条件或动作时&#xff0c;useReducer 提供了一种更加结构化和可维护的方式来处理状态。可以将更新函数写在组件外面 它与 useState() 相…...

NanoLog起步笔记-5-客户端简要描述

nonolog起步笔记-5-客户端简要描述 客户端的简要的设计图路notify模式服务端最好分两个核 NanoLog::setLogLevel(NOTICE);从 NANO_LOG 开始NANO_LOGcompiling time的语句getNumNibblesNeeded&#xff1a;得到prompt中&#xff0c;number的数量countFmtParams&#xff1a;得到所…...

Flink:入门介绍

目录 一、Flink简介 2.1 Flink 架构 2.2 Flink 应用程序 运行模式 二、Flink 集群 部署 2.1 本地集群模式 2.1.1 安装JDK​编辑 2.1.2 下载、解压 Flink 2.1.3 启动集群 2.1.4 停止集群 2.2 Standalone 模式 2.2.0 集群规划 2.2.1 安装JDK 2.2.2 设置免密登录 2…...

目标跟踪领域经典论文解析

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在…...

网络编程 | TCP套接字通信及编程实现经验教程

1、TCP基础铺垫 TCP/IP协议簇中包含了如TCP、UDP、IP、ICMP、ARP、HTTP等通信协议。TCP协议是TCP/IP协议簇中最为常见且重要的通信方式之一&#xff0c;它为互联网上的数据传输提供了可靠性和连接管理。 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议…...

SAP导出表结构并保存到Excel 源码程序

SAP导出表结构并保存到Excel,方便写代码时复制粘贴 经常做接口,需要copy表结构,找到了这样一个程程,特别有用。 01. 先看结果...

Linux下redis环境的搭建

1.redis的下载 redis官网下载redis的linux压缩包&#xff0c;官网地址:Redis下载 网盘链接&#xff1a; 通过网盘分享的文件&#xff1a;redis-5.0.4.tar.gz 链接: https://pan.baidu.com/s/1cz3ifYrDcHWZXmT1fNzBrQ?pwdehgj 提取码: ehgj 2.redis安装与配置 将包上传到 /…...

wordpress主题在线汉化插件下载/今日军事新闻头条新闻

待续转载于:https://www.cnblogs.com/abdw/p/7264402.html...

免费动漫软件app下载大全/嘉兴关键词优化报价

租下店面后的第一件事情就是装修了&#xff0c;装修就面临着一大笔钱要出去了&#xff0c;但是你也要面临着种种装修陷阱&#xff0c;下面小编就带大家了解下店面装修大概多少钱&#xff0c;带大家避开装修陷阱&#xff0c;感兴趣的一起来了解吧。店面装修大概多少钱店面装修根…...

wordpress 緩慢/石家庄seo外包公司

SpringBoot项目解决 log4j2 核弹漏洞&#xff01; 事件情况 北京时间12月9号深夜&#xff0c;Apache Log4j2被曝出一个高危漏洞&#xff0c;攻击者通过jndi注入攻击的形式可以轻松远程执行任何代码。随后官方紧急推出了2.15.0和2.15.0-rc1新版本修复&#xff0c;依然未能完全…...

上海网站建设最好的公司/公司网站的推广方案

Toggle就是开关的意思&#xff0c;ToggleButton就是一个开关按钮组件&#xff0c;在BB10 Cascades中可以在QML中直接加入一个ToggleButton来作为开关&#xff0c;该该控件显示出来是这个样子的&#xff1a; 如果是选中状态&#xff0c;或者说是“打开”状态显示出来是这个样子的…...

安徽网站备案要多少时间/天津天狮网络营销课程

&#x1f347;JDBC 1、JDBC基础流程 加载驱动获取连接准备sql封装处理块发送sql数据返回结果处理结果关闭资源 public class Test01 {public static void main(String[] args) throws ClassNotFoundException, SQLException {//加载驱动Class.forName("oracle.jdbc.driv…...

做网站靠广告能赚钱吗/百度关键词推广方案

mod 运算与乘法逆元 %运算 边乘边mod 乘法 除法 mod 希望计算5/2%76 乘法 除法 mod 希望计算5/2%76 两边同时/x 在取mod(p)运算下&#xff0c;a/ba*bp-2 bp-2 1/b bp-2 是b的乘法逆元 6 P3811 P1082 P不为素数 Φ&#xff08;m&#xff09;欧拉函数&#xff1a; 1— m中有多少…...