操作系统实践之路——三、硬件(2.虚拟-物理地址转换)

本文详细探讨了虚拟地址与物理地址的关系,特别是MMU如何实现地址转换,以及在保护模式和长模式下的分页机制。介绍了分页模型如何提供内存空间隔离,以及操作系统如何通过MMU管理和隔离不同进程的地址空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

​ 我们都知道,CPU执行程序、处理数据都需要和内存打交道,这个打交道的方式那就是内存地址。本章则是探讨虚拟地址和物理地址之间的关系和转换机制,内存资源正是通过这些机制来管理。

一、虚拟地址与物理地址

1.1虚拟地址

​ 虚拟地址,正如其名,这个地址是虚拟的,它只是逻辑上存在的一个数据值。

​ 那么这个地址是谁产生的呢?那就是链接器。当开发软件经过编译步骤后,就需要链接成可执行文件才可以运行。而链接器的主要工作就是把多个代码模块组装在一起,并解决模块之间的引用,即处理程序代码间的地址引用,形成程序运行的静态内存空间视图。只不过这个地址是虚拟而统一的,而根据操作系统的不同,这个虚拟地址空间的定义也许不同,应用软件开发人员无需关心,由开发工具链给自动处理了。

​ 虚拟内存实际上是存储器地址空间抽象的一种实现。从进程的角度看起来就好像自己独占了整个内存,链接器链接编译产物的时候只需要从0地址开始做变量和函数地址的替换,不需要关心自己是否会把其他进程的内存单元给污染。

1.2物理地址

​ 物理地址,字面意思,这个地址是真实存在的,是内存中真正的地址。它在逻辑上只是一个数据,但这个数据可以被地址译码器等电子器件变成电子信号,这可以让地址总线查找到真正的存储单元。

1.3虚拟地址到物理地址的转换

​ 明白了虚拟地址和物理地址后,我们发现如果想要程序正常执行,那就是必须要将虚拟地址转换成物理地址。

​ 要实现转换,用软件方式太低效,用硬件方式没有灵活性,最终采用软硬件结合的方式实现,那就是MMU(内存管理单元)。MMU可以接受软件给出的地址对应关系数据,进行地址转换。

​ 逻辑上的MMU工作原理框架图如下:

在这里插入图片描述

​ 上图中展示了 MMU 通过地址关系转换表,将 0x80000~0x84000 的虚拟地址空间转换成 0x10000~0x14000 的物理地址空间,而地址关系转换表本身则是放物理内存中的。

​ 如果是虚拟地址一一对应物理地址,那么物理地址就会很快用完。但如果采用虚拟段基址一一对应物理段基址,因为段长度各不相同,所以依然不可取。最终采取一个折中方案。即把虚拟地址空间和物理地址空间都分成同等大小的块,也称为页,按照虚拟页和物理页进行转换。根据软件配置不同,这个页的大小可以设置为 4KB、2MB、4MB、1GB,这样就进入了现代内存管理模式——分页模型。

​ 分页模型框架如下图:

在这里插入图片描述

​ 上图可看出,一个虚拟页可以对应到一个物理页,由于页大小一经配置就是固定的,所以在地址关系转换表中,只要存放虚拟页地址对应的物理页地址就行了。

二、MMU

2.1什么是MMU?

​ MMU即内存管理单元,是用硬件电路逻辑实现的一个地址转换器件,它负责接受虚拟地址和地址关系转换表,以及输出物理地址。

​ 根据实现方式的不同,MMU 可以是独立的芯片,也可以是集成在其它芯片内部的,比如集成在 CPU 内部,x86、ARM 系列的 CPU 就是将 MMU 集成在 CPU 核心中的。

​ x86 CPU 要想开启 MMU,就必须先开启保护模式或者长模式,实模式下是不能开启 MMU 的。

​ 由于保护模式的内存模型是分段模型,它并不适合于 MMU 的分页模型,所以我们要使用保护模式的平坦模式,这样就绕过了分段模型。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值