【操作系统笔记】内存寻址
物理寻址
主存(内存)
- 计算机主存也可以称为物理内存,内存可以看成由若干个连续字节大小的单元组成的数组
- 每个字节都有一个唯一的物理地址(Physical Address)
- CPU访问内存前,先拿到内存地址,然后,通过内存地址访问内存中数据指令


总线的分工
- 数据总线:负责传输实际数据的
- 地址总线:负责传输数据地址的,用来确定到底把数据传输到哪里去,是内存的某个位置,还是某一个 I/O 设备
- 控制总线:负责传输控制信号的,用于控制对于总线的访问







分段寻址









虚拟寻址


虚拟寻址(Virtual Addressing):
- CPU 通过虚拟地址 (Virtual Address,VA)来访问主存
- 虚拟地址(比如:段选择子 + 段内偏移) 在送到内存之前,先转换成适当的物理地址
- 将一个虚拟地址转换为物理地址的过程称为地址转换(Address Translation)

使用虚拟寻址的方式,可以起到内存保护的作用,使得每个程序的内存相互隔离,一个程序的内存不会被其他的程序破坏,从而可以实现,在内存中同时存储多个程序。
当然,虚拟寻址不止这一点优点,它还可以降低用户程序对内存使用的复杂度:


如果用户自己管理物理内存,太过于复杂,容易出现内存冲突问题,引入虚拟地址后,不同用户程序的虚拟地址是相互独立隔离的,用户只需要关心如何分配虚拟地址即可,由操作系统负责管理物理内存。
地址空间
地址空间 (address space)是一个非负整数地址的有序集合,比如{0, 1, 2, 3, 4…}
一个程序拥有的虚拟地址也是一个非负整数地址的有序集合,所以,我们可以称为虚拟地址空间。

相对虚拟地址空间,还有一个物理内存地址空间,物理内存地址空间的大小就是物理内存的容量 M 个字节,所以物理地址空间为:{0, 1, 2, 3…M-1}
主存中的每个字节都有:一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。

ELF 文件最后留下的两个问题:
问题一:如果说32位系统的话,最大内存容量为4G,这个其实还好,但是64位系统的最大内存容量为256T,这个也太恐怖了,根本都没见过这么大的内存,那为什么可以支持这么大的内存地址呢?
- 解决方案:使用虚拟地址
问题二:所有的用户空间的内存被一个程序占据了吗?那其他程序需要内存的话,怎么办?
- 两个程序可以使用相同的虚拟地址,虚拟地址可以被随便使用,最终由操作系统做内存映射,转换为物理地址。



分页寻址
分段寻址的缺点:
-
外部碎片导致内存利用率降低,假如有60M内存的碎片,没有被使用,此时如果有一个程序需要50M内存,就会放不下
-
分段机制并不是一个高效管理内存的机制

分段寻址出现的原因:
-
当时在8086处理器引入分段的目的是为了解决 16位 CPU 寻址 20位内存的问题
32 位处理器,可以寻址 4G 内存
64 位处理器,可以寻址更大的内存
分页
-
虚拟内存分成若干个大小相同的虚拟页(Virtual Page, VP)
-
物理内存分成若干个大小相同的物理页(Physical Page, PP),也可以称为页帧(PF)
-
VP的大小 == PP的大小, PP的大小可以是:4KB、8KB、16KB…一般是 2 的幂


地址翻译 页表+MMU

如何确定某个虚拟页存放在哪一个物理页:
- 页表:页表维护了虚拟页到物理页的映射关系,页表中的每一项叫页表项 PTE
- 一个虚拟地址被分成两部分,其中低 X 位用来表示页内偏移 VPO(页大小=2^X),剩余的部分用来表示虚拟页号 VPN
- 在页表中查找虚拟页号 VPN 对应的物理页号 PPN,然后由物理页号 PPN + 页内偏移(VPO==PPO)得到对应的物理地址

分页寻址的地址翻译工作主要由硬件+软件配合实现:
- MMU:内存管理单元专用硬件,MMU单元负责虚拟地址到物理地址的翻译
- 页表由操作系统软件来维护

- 地址翻译工作主要是由MMU内存管理单元硬件到页表基址寄存器中查找页表后根据虚拟地址翻译成物理地址
需要注意的是MMU是一个位于CPU中的硬件单元,而页表是位于操作系统软件中的程序数据,它并不在CPU中。
多级页表 - 压缩页表占用内存的大小








多级页表如何寻址


通过每一级虚拟页表目录找到下一级页表项中的物理位置,最终找到对应的物理页号,再加上页内偏移得到物理地址(虚拟页内偏移等于物理页内偏移)



分页寻址总结

- 每个程序都有自己的虚拟页表
- 当 CPU 执行程序 2 的时候,CR3 寄存器会切换到对应程序 2 的虚拟页表的基地址,MMU 负责将程序代码段或数据段的虚拟地址通过多级页表翻译成对应的物理地址
- 不同的应用程序可以使用相同的虚拟地址,但是最终经过MMU翻译之后,会得到不同的物理页号PPN, 分配的是不同的物理地址
相关文章:
【操作系统笔记】内存寻址
物理寻址 主存(内存) 计算机主存也可以称为物理内存,内存可以看成由若干个连续字节大小的单元组成的数组每个字节都有一个唯一的物理地址(Physical Address)CPU访问内存前,先拿到内存地址,然后…...
webpack自定义loader解析指定后缀名文件
案例: webpack自定义loader解析.chenjiang后缀名的文件 整体目录: chenjiangLoader.js文件代码 // 正则匹配script标签中的内容 const REG /<script>([\s\S]*)<\/script>/;module.exports function (source) {const __source source.…...
基于Kintex UltraScale系列FPGA KU060/KU115高性能PCIe数据预处理载板(5GByte/s带宽)
PCIE702是一款基于PCIE总线架构的高性能数据预处理FMC载板,板卡具有1个FMC(HPC)接口,1路PCIe x8主机接口、1个RJ45千兆以太网口、2个QSFP 40G光纤接口。板卡采用Xilinx的高性能Kintex UltraScale系列FPGA作为实时处理器࿰…...
Cesium 地球(2)-瓦片创建
Cesium 地球(2)-瓦片创建 QuadtreePrimitive代码执行4个步骤: step1: update()step2: beginFrame()step3: render()step4: endFrame() 但并不是瓦片的创建步骤。 1、创建 QuadtreeTile 基于 step3: render() step3: render()┖ selectTilesForRendering()在 selectTilesFo…...
Selenium-介绍下其他骚操作
Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器(如 Chrome、Opera 和 Microsoft Edge)中的工具,用于帮助开发人员调试和研究网站。 借助 Chrome DevTools,开发人员可以更深入地访问网站…...
【C++从0到王者】第三十一站:map与set
文章目录 一、关联式容器二、pair键值对三、set1. set的介绍2. set的部分接口以及应用3. count4. lower_bound和upper_bound5. equal_range6. multiset容器 四、map1. map的介绍2. map的一些常见接口以及使用3. map的[]运算符重载4. 使用map改进一些题5. multimap容器 五、map和…...
生产消费者模型的介绍以及其的模拟实现
目录 生产者消费者模型的概念 生产者消费者模型的特点 基于阻塞队列BlockingQueue的生产者消费者模型 对基于阻塞队列BlockingQueue的生产者消费者模型的模拟实现 ConProd.c文件的整体代码 BlockQueue.h文件的整体代码 对【基于阻塞队列BlockingQueue的生产者消费者模型…...
Unity ML-Agents默认接口参数含义
下面的含义就是训练中常用的yaml文件: behaviors:waffle:trainer_type: ppo #训练器类型,默认ppo。还有sac和pocahyperparameters:batch_size: 64 # 梯度下降每次迭代的经验数。应确保该值总是比 buffer_size小几倍。 在使用连续动作的情况下&#x…...
【python数据分析基础】—pandas中loc()与iloc()的介绍与区别
文章目录 前言一、loc[]函数二、iloc[]函数三、详细用法loc方法iloc方法 总结共同点不同点 前言 我们经常在寻找数据的某行或者某列的时常用到Pandas中的两种方法iloc和loc,两种方法都接收两个参数,第一个参数是行的范围,第二个参数是列的范…...
ad18学习笔记十一:显示和隐藏网络、铺铜
如何显示和隐藏网络? Altium Designer--如何快速查看PCB网络布线_ad原理图查看某一网络的走线_辉_0527的博客-CSDN博客 AD19(Altium Designer)如何显示和隐藏网络 如何显示和隐藏铺铜? Altium Designer 20在PCB中显示或隐藏每层铺铜-百度经验 AD打开与…...
全国职业技能大赛云计算--高职组赛题卷④(私有云)
全国职业技能大赛云计算--高职组赛题卷④(私有云) 第一场次题目:OpenStack平台部署与运维任务1 基础运维任务(5分)任务3 OpenStack云平台运维(15分)任务4 OpenStack云平台运维开发(1…...
Camera Tunning ISP 模块面试总结
一.ISP的调试流程概述: 在ISP调试流程中,我们首先需要确认以下三个方面:项目需求、硬件问题确认和Sensor驱动配置确认。 项目需求方面,即Sensor需要出多大的分辨率去调效果;因为有些芯片有最大分辨率支持的限制&#x…...
AOSP源码中Android.mk文件中的反斜杠符号(\)的作用和使用
简介 在AOSP(Android Open Source Project)源码中的Android.mk文件中,反斜杠符号(\)的主要作用是将一行代码拆分成多行,以提高可读性并帮助组织较长的代码块。这对于定义复杂的构建规则和变量时特别有用。…...
如何查看mysql的存储引擎
要查看MySQL中的存储引擎,可以使用以下两种方法: 1. 使用 SQL 查询: 您可以使用SQL查询来查看MySQL中的存储引擎。打开MySQL客户端,并连接到您的MySQL服务器,然后运行以下SQL查询: SHOW TABLE STATUS;这…...
FPGA project : dht11 温湿度传感器
没有硬件,过几天上板测试。 module dht11(input wire sys_clk ,input wire sys_rst_n ,input wire key ,inout wire dht11 ,output wire ds ,output wire …...
std::string和QString的区别以及互转
一 区别 1.字符编码支持 std::string:默认情况下,使用 ASCII 或 UTF-8 编码。不直接提供对多字节字符的内置支持。 QString:提供对多种字符编码的支持,包括 ASCII、UTF-8、UTF-16 等。它更适合处理国际化和本地化的字符串。 2.…...
python+vue理发店管理系统
理发店管理系统主要实现角色有管理员和会员,管理员在后台管理用户表模块、token表模块、收藏表模块、商品分类模块、热卖商品模块、活动公告模块、留言反馈模块、理发师模块、会员卡模块、会员充值模块、会员模块、服务预约模块、服务项目模块、服务类别模块、热卖商品评论表模…...
基于微信小程序的个人健康管理系统的设计与实现(源码+lw+部署文档+讲解等)
前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…...
共聚焦显微镜在化学机械抛光课题研究中的应用
两个物体表面相互接触即会产生相互作用力,研究具有相对运动的相互作用表面间的摩擦、润滑与磨损及其三者之间关系即为摩擦学,目前摩擦学已涵盖了化学机械抛光、生物摩擦、流体摩擦等多个细分研究方向,其研究的数值量级也涵盖了亚纳米到百微米…...
本地Linux 部署 Dashy 并远程访问
文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章:本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
