1️⃣ 什么是虚拟地址?

操作系统 为每个进程都分配了独立的 虚拟地址。并且,操作系统提供一种机制,将不同进程的虚拟地址和不同的物理内存地址映射起来。如果程序要访问虚拟地址,就由操作系统转换成不同的物理内存地址。

之后,进程持有的虚拟内存地址会通过 CPU 芯片中的 MMU 的映射关系,将其转换成物理内存地址。

2️⃣ 操作系统是如何管理虚拟地址与物理地址之间的关系?

主要有两种方式,分别是 内存分段内存分页

3️⃣ 分段机制下,虚拟地址和物理地址是如何映射的?

分段机制下的虚拟地址由两部分组成,段选择因子段内偏移量

段选择因子 最重要的就是 段号,用作 段表 的索引。其中 段表 保存了 段的基地址 以及 段的界限地址。通过 段基地址 加上 段内偏移量 得到 物理内存地址

4️⃣ 分页机制下,虚拟地址和物理地址是如何映射的?

分页是把整个虚拟和物理内存空间切成一段段固定尺寸的大小。 这样一个连续并且尺寸固定的内存空间,叫做页 Page

分页机制下的虚拟地址分为两部分,页号页内偏移页号 作为 页表 的索引,页表 包含物理页在物理内存的 基地址,这个 基地址 加上 页内偏移 就形成了 物理内存地址

5️⃣ 多级页表机制下,虚拟地址和物理地址是如何映射的?

多级页表机制下的虚拟地址分为三部分,全局页目录项 PGD上层页目录项 PUD中间页目录项 PMD页表项页内偏移

多级页表虽然解决了空间上的问题,但是 虚拟地址物理地址 的转换带来了 时间开销