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

【操作系统笔记】内存寻址

物理寻址

主存(内存)

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

在这里插入图片描述
在这里插入图片描述

总线的分工

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分段寻址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

虚拟寻址

在这里插入图片描述
在这里插入图片描述

虚拟寻址(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中。

多级页表 - 压缩页表占用内存的大小

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多级页表如何寻址

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分页寻址总结

在这里插入图片描述

  1. 每个程序都有自己的虚拟页表
  2. 当 CPU 执行程序 2 的时候,CR3 寄存器会切换到对应程序 2 的虚拟页表的基地址,MMU 负责将程序代码段或数据段的虚拟地址通过多级页表翻译成对应的物理地址
  3. 不同的应用程序可以使用相同的虚拟地址,但是最终经过MMU翻译之后,会得到不同的物理页号PPN, 分配的是不同的物理地址

相关文章:

【操作系统笔记】内存寻址

物理寻址 主存(内存) 计算机主存也可以称为物理内存,内存可以看成由若干个连续字节大小的单元组成的数组每个字节都有一个唯一的物理地址(Physical Address)CPU访问内存前,先拿到内存地址,然后…...

webpack自定义loader解析指定后缀名文件

案例&#xff1a; webpack自定义loader解析.chenjiang后缀名的文件 整体目录&#xff1a; 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载板&#xff0c;板卡具有1个FMC&#xff08;HPC&#xff09;接口&#xff0c;1路PCIe x8主机接口、1个RJ45千兆以太网口、2个QSFP 40G光纤接口。板卡采用Xilinx的高性能Kintex UltraScale系列FPGA作为实时处理器&#xff0…...

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 的浏览器&#xff08;如 Chrome、Opera 和 Microsoft Edge&#xff09;中的工具&#xff0c;用于帮助开发人员调试和研究网站。 借助 Chrome DevTools&#xff0c;开发人员可以更深入地访问网站&#xf…...

【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文件&#xff1a; behaviors:waffle:trainer_type: ppo #训练器类型&#xff0c;默认ppo。还有sac和pocahyperparameters:batch_size: 64 # 梯度下降每次迭代的经验数。应确保该值总是比 buffer_size小几倍。 在使用连续动作的情况下&#x…...

【python数据分析基础】—pandas中loc()与iloc()的介绍与区别

文章目录 前言一、loc[]函数二、iloc[]函数三、详细用法loc方法iloc方法 总结共同点不同点 前言 我们经常在寻找数据的某行或者某列的时常用到Pandas中的两种方法iloc和loc&#xff0c;两种方法都接收两个参数&#xff0c;第一个参数是行的范围&#xff0c;第二个参数是列的范…...

ad18学习笔记十一:显示和隐藏网络、铺铜

如何显示和隐藏网络&#xff1f; Altium Designer--如何快速查看PCB网络布线_ad原理图查看某一网络的走线_辉_0527的博客-CSDN博客 AD19(Altium Designer)如何显示和隐藏网络 如何显示和隐藏铺铜&#xff1f; Altium Designer 20在PCB中显示或隐藏每层铺铜-百度经验 AD打开与…...

全国职业技能大赛云计算--高职组赛题卷④(私有云)

全国职业技能大赛云计算--高职组赛题卷④&#xff08;私有云&#xff09; 第一场次题目&#xff1a;OpenStack平台部署与运维任务1 基础运维任务&#xff08;5分&#xff09;任务3 OpenStack云平台运维&#xff08;15分&#xff09;任务4 OpenStack云平台运维开发&#xff08;1…...

Camera Tunning ISP 模块面试总结

一.ISP的调试流程概述&#xff1a; 在ISP调试流程中&#xff0c;我们首先需要确认以下三个方面&#xff1a;项目需求、硬件问题确认和Sensor驱动配置确认。 项目需求方面&#xff0c;即Sensor需要出多大的分辨率去调效果&#xff1b;因为有些芯片有最大分辨率支持的限制&#x…...

AOSP源码中Android.mk文件中的反斜杠符号(\)的作用和使用

简介 在AOSP&#xff08;Android Open Source Project&#xff09;源码中的Android.mk文件中&#xff0c;反斜杠符号&#xff08;\&#xff09;的主要作用是将一行代码拆分成多行&#xff0c;以提高可读性并帮助组织较长的代码块。这对于定义复杂的构建规则和变量时特别有用。…...

如何查看mysql的存储引擎

要查看MySQL中的存储引擎&#xff0c;可以使用以下两种方法&#xff1a; 1. 使用 SQL 查询&#xff1a; 您可以使用SQL查询来查看MySQL中的存储引擎。打开MySQL客户端&#xff0c;并连接到您的MySQL服务器&#xff0c;然后运行以下SQL查询&#xff1a; SHOW TABLE STATUS;这…...

FPGA project : dht11 温湿度传感器

没有硬件&#xff0c;过几天上板测试。 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&#xff1a;默认情况下&#xff0c;使用 ASCII 或 UTF-8 编码。不直接提供对多字节字符的内置支持。 QString&#xff1a;提供对多种字符编码的支持&#xff0c;包括 ASCII、UTF-8、UTF-16 等。它更适合处理国际化和本地化的字符串。 2.…...

python+vue理发店管理系统

理发店管理系统主要实现角色有管理员和会员,管理员在后台管理用户表模块、token表模块、收藏表模块、商品分类模块、热卖商品模块、活动公告模块、留言反馈模块、理发师模块、会员卡模块、会员充值模块、会员模块、服务预约模块、服务项目模块、服务类别模块、热卖商品评论表模…...

基于微信小程序的个人健康管理系统的设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…...

共聚焦显微镜在化学机械抛光课题研究中的应用

两个物体表面相互接触即会产生相互作用力&#xff0c;研究具有相对运动的相互作用表面间的摩擦、润滑与磨损及其三者之间关系即为摩擦学&#xff0c;目前摩擦学已涵盖了化学机械抛光、生物摩擦、流体摩擦等多个细分研究方向&#xff0c;其研究的数值量级也涵盖了亚纳米到百微米…...

本地Linux 部署 Dashy 并远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 转载自cpolar极点云文章&#xff1a;本地Linux 部署 Dashy 并远程访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你…...

互联网摸鱼日报(2023-09-18)

互联网摸鱼日报(2023-09-18) 36氪新闻 最前线 | 号外电摩12.68万元起订&#xff0c;配16.9度一体压铸电池包 本周双碳大事&#xff1a;CCER交易管理办法获生态环境部原则通过&#xff1b;明阳斥资100亿元加码光伏项目&#xff1b;“全路程”获2亿元D轮融资 200亿&#xff0c…...

Kotlin中函数的基本用法以及函数类型

函数的基本用法 1、函数的基本格式 2、函数的缺省值 可以为函数设置指定的初始值&#xff0c;而不必要传入值 private fun fix(name: String,age: Int 2){println(name age) }fun main(args: Array<String>) {fix("张三") }输出结果为&#xff1a;张三2 …...

在macOS使用VMware踩过的坑

目录 MAC提示将对您的电脑造成伤害/MAC OS 升级到10.15.3后vmware虚拟机黑屏 mac系统下&#xff0c;vm虚拟机提示打不开/dev/vmmon mac VMware Workstation 在此主机上不支持嵌套虚拟化 mac VMware清理虚拟机空间​​​​​​​ MAC提示将对您的电脑造成伤害/MAC OS 升级到…...

构建健壮的Spring MVC应用:JSON响应与异常处理

目录 1. 引言 2. JSON 1. 轻量级和可读性 2. 易于编写和解析 3. 自描述性 4. 支持多种数据类型 5. 平台无关性 6. 易于集成 7. 社区支持和标准化 3. 高效处理异常 综合案例 异常处理方式一 异常处理方式二 异常处理方式三 1. 引言 探讨Spring MVC中关键的JSON数据…...

那些配置服务器踩的坑

最近在配置内网&#xff0c;无外网的服务器&#xff0c;纯纯记录一下踩得坑&#xff0c;希望看到的人不要再走这条弯路。 ------------------------------------------------------------------------------------------------------------------------------- 任务&#xff…...

交换机端口镜像详解

交换机端口镜像是一种网络监控技术&#xff0c;它允许将一个或多个交换机端口的网络流量复制并重定向到另一个端口上&#xff0c;以便进行流量监测、分析和记录。通过端口镜像&#xff0c;管理员可以实时查看特定端口上的流量&#xff0c;以进行网络故障排查、安全审计和性能优…...

Spring源码分析(三) IOC 之 createBean()和doCreateBean()

a、在createBean中又是主要做了什么事情&#xff1f; 完成bean得创建&#xff0c;填充属性、循环依赖 、aop等一系列过程 1、createBean() 在createBean中主要干了3件事情 1、解析class -> resolveBeanClass() 2、验证及准备覆盖的方法,lookup-method replace-method -> …...

【鸿蒙(HarmonyOS)】UI开发的两种范式:ArkTS、JS(以登录界面开发为例进行对比)

文章目录 一、引言1、开发环境2、整体架构图 二、认识ArkUI1、基本概念2、开发范式&#xff08;附&#xff1a;案例&#xff09;&#xff08;1&#xff09;ArkTS&#xff08;2&#xff09;JS 三、附件 一、引言 1、开发环境 之后关于HarmonyOS技术的分享&#xff0c;将会持续使…...

Flink中的批和流

批处理的特点是有界、持久、大量&#xff0c;非常适合需要访问全部记录才能完成的计算工作&#xff0c;一般用于离线统计。 流处理的特点是无界、实时, 无需针对整个数据集执行操作&#xff0c;而是对通过系统传输的每个数据项执行操作&#xff0c;一般用于实时统计。 而在Flin…...

【LeetCode-中等题】150. 逆波兰表达式求值

文章目录 题目方法一&#xff1a;栈 题目 方法一&#xff1a;栈 class Solution {public int evalRPN(String[] tokens) {Deque<Integer> deque new LinkedList<>();String rpn "-*/";//符号集 用来判断扫描的是否为运算符int sum 0;for(int i 0 ; i…...

wordpress制作视频站/网络推广文案怎么写

可重入锁 / 非可重入锁读写锁 / 排它锁公平锁 / 非公平锁...

cco网站素材/免费b站软件推广网站

<bean> ***</bean> 这叫做Spring的依赖注入也叫控制反转。bean的id也就是你说的bean的id&#xff0c;通过id找你想要调用的bean <bean id"demo1Action" class"location1 of demo1"> ***</bean> <bean id"demo2Action"…...

福建住房和城乡建设网站/今日国内最新新闻

Java字符串就是Unicode字符序列&#xff0c;例如“Java”就是4个Unicode字符J&#xff0c;a&#xff0c;v&#xff0c;a组成的。 Java没有内置的字符串类型&#xff0c;而是在标准Java类库中提供了一个预定义的类String&#xff0c;每个用双引号括起来的字符串都是String类的一…...

中国最大免费h5游戏源码网站/百度云盘登录入口

因为Mac系统是基于UNIX系统的&#xff0c;因此可以在“终端”中输入一些UNIX指令来操作Mac系统。比如&#xff1a;新建文件\文件夹、打开文件\文件夹 常用的UNIX指令&#xff1a;(需要经常使用才不容易忘记) ls –l列出当前目录下的所有内容&#xff08;文件\文件夹&#xff09…...

新版wordpress增加备案/百度推广代理商利润

注意&#xff1a;禁止回退更新&#xff0c;例如&#xff1a;你是V1.5版本的、然后下载了个V1.2版本的&#xff0c;这样更新是会出问题的&#xff01; 注意&#xff1a;禁止跨版本更新&#xff0c;例如&#xff1a;你是V1.0版本&#xff0c;不要下载V1.2的更新包&#xff0c;会…...

一流的购物网站建设/国际最新新闻

文章目录1 introduction2 evaluation题目&#xff1a;TENET: A Framework for Modeling Tensor Dataflow Based on Relation-centric Notation时间&#xff1a;2021会议&#xff1a;ISCA研究机构&#xff1a;北大 1 introduction 如何描述数据流&#xff1f; 本文总结了三种形…...