【操作系统笔记】内存寻址
物理寻址
主存(内存)
- 计算机主存也可以称为物理内存,内存可以看成由若干个连续字节大小的单元组成的数组
- 每个字节都有一个唯一的物理地址(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 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...