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

news2025/1/11 21:48:34

物理寻址

主存(内存)

  • 计算机主存也可以称为物理内存,内存可以看成由若干个连续字节大小的单元组成的数组
  • 每个字节都有一个唯一的物理地址(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, 分配的是不同的物理地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1037381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Django — 会话

目录 一、Cookie1、介绍2、作用3、工作原理4、结构5、用途6、设置7、获取 二、Session1、介绍2、作用3、工作原理3、类型4、用途5、设置6、获取7、清空信息 三、Cookie 和 Session 的区别1、存储位置2、安全性3、数据大小4、跨页面共享5、生命周期6、实现机制7、适用场景 四、P…

掌动智能浅析故障注入测试的好处与实践方法

在现代技术环境中,系统面临各种潜在的威胁和故障,如硬件故障、网络问题、软件错误等。为了应对这些挑战,开发团队需要确保系统在逆境中依然能够提供可靠的服务。故障注入测试是一种模拟现实故障和异常情况的方法,旨在提高系统的鲁…

vue3+ts+java使用WebSocket传输数据

一、环境 系统:win11 IDE:vscode 框架:electron22.0.0vite2vue3typescript4.8.4springboot2.2.5jdk1.8 二、websocket介绍 2.1 由来 WebSocket未出现之前,浏览器和服务器之间的通信是通过Web的poll技术进行通信,就…

牛客java训练题 day1

9.24 day1 Q 1. this 指针是用来干什么的? 2.基类和派生类分别是指什么? 3.为什么方法中不能写静态变量 4. 解释一下ASCII码和ANSI码和两者的区别 5.简述j ava.io java.sql java.awt java.rmi 分别是什么类型的包 6. 看下面一段代码:…

分类预测 | Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预测

分类预测 | Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现NGO-CNN-SVM北方苍鹰算法优化卷积支持向量机分类预…

安全防御第二次作业

1. 防火墙支持那些NAT技术,主要应用场景是什么? 防火墙支持几乎所有的NAT技术,包括源NAT、目标NAT、双向NAT等,主要应用场景是保护内部网络免受外部网络的攻击 NAT技术可以将IP数据报文头中的IP地址转换为另一个IP地址&#xff…

暴力递归转动态规划(七)

题目 LeetCode原题-最长回文子序列 给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。 子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。 示例 1: 输入&a…

【【萌新的FPGA学习之按键控制LED实验】】

按键控制LED实验 在写这篇文章之前我必须对我的错误表示深刻的道歉 因为我之前的文章自己也是边看边学给大家带来了大的困扰 抱歉抱歉 我们这里讲述一下综合和仿真的关系 其实我们更多的是应该关注仿真下得到的波形情况 然后分析 对于综合,综合的最大的目的还是看功…

计算机等级考试—信息安全三级真题二

目录 一、单选题 二、填空题 三、综合题 一、单选题

数据结构的奇妙世界:实用算法与实际应用

文章目录 数据结构和算法的基本概念数据结构数组链表栈队列树图 算法 常见的数据结构和算法排序算法快速排序示例 数据结构的应用数据库管理系统图像处理网络路由 数据结构和算法的性能分析时间复杂度空间复杂度 如何更好地编写代码避免常见错误结论 🎉欢迎来到数据…

Qt地铁智慧换乘系统浅学( 三 )最少路径和最少换乘实现

本算法全都基于广度优先 概念最短路径实现所用容器算法思路 最少换乘实现所需容器算法思路 成果展示代码实现判断是最短路径还是最少换乘最短路径代码实现最少换乘代码实现根据所得List画出线路 ui界面的维护(前提条件)界面初始化combox控件建立槽函数 概…

把Eclipse整个文件夹添加到Microsoft Defender的排除项中

一.原因: Windows 10卫士显著降低了Eclipse的速度,原因是Windows 10卫士扫描JAR文件。这个问题已经报告给微软了。在此之前,解决此问题的一个方法是将Eclipse根目录添加到Windows 10 Defender的排除列表中,详细步骤在这里共享。 …

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— JS基础(五)

接受自己原本的样子&#xff0c; 比努力扮演另一个轻松多了。 思维导图 对象 什么是对象 对象使用 遍历对象 索引号是字符串型&#xff0c;不推荐遍历数组。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><me…

docker实现mysql主从复制(巨详细!!!)

docker实现mysql主从复制&#xff08;巨详细&#xff01;&#xff01;&#xff01;&#xff09; 新建主机服务容器实例3307进入/mydata/mysql-master/conf目录下新建my.cnf修改完配置后重启master实例进入mysql-master容器master容器实例内创建数据同步用户新建 服务器容器实例…

【论文阅读】内存数据库并发控制算法的实验研究

内存数据库并发控制算法的实验研究 原文链接jos.org.cn/jos/article/pdf/6454 摘要 并发控制算法的基本思想归纳为"先定序后检验”&#xff0c;基于该思想对现有各类并发控制算法进行 了重新描述和分类总结&#xff0c;于在开源内存型分布式事务测试床 3TS 上的实际对比实…

Tune-A-Video论文阅读

论文链接&#xff1a;Tune-A-Video: One-Shot Tuning of Image Diffusion Models for Text-to-Video Generation 文章目录 摘要引言相关工作文生图扩散模型文本到视频生成模型文本驱动的视频编辑从单个视频生成 方法前提DDPMsLDMs 网络膨胀微调和推理模型微调基于DDIM inversio…

动手学深度学习(pytorch版)第二章-2.3线性代数Note-linear-algebra

类型 标量&#xff1a;仅包含一个数值被称为标量 向量&#xff1a;向量可以被视为标量值组成的列表 矩阵&#xff1a;正如向量将标量从零阶推广到一阶&#xff0c;矩阵将向量从一阶推广到二阶。 A torch.arange(20).reshape(5, 4) A.T //转置 张量&#xff1a;是描述具有…

[36c3 2019]includer

[36c3 2019]includer 题目描述&#xff1a;Just sitting here and waiting for PHP 8.0 (lolphp). 首先来了解一下临时文件包含之PHP - compress.zlib:// 在 php-src 里可以找到和 compress.zlib:// 有关的代码 | code 注意到 STREAM_WILL_CAST&#xff0c;涉及到 cast 经常…

企业微信-通用开发参数回调设置

公司业务需要开发企业微信&#xff0c;注册三方服务商审核通过后&#xff0c; 开始配置开发信息。本篇中记录在调试url验证中遇到错误及解决方式。 目录 准备工作 下载php加解密库 下载文件说明 设置白名单 设置路径 参数说明 设置ip 回调处理 回调类型&#xff1a; …