操作系统常问问题
1️⃣ 什么是虚拟地址?
操作系统 为每个进程都分配了独立的 虚拟地址。并且,操作系统提供一种机制,将不同进程的虚拟地址和不同的物理内存地址映射起来。如果程序要访问虚拟地址,就由操作系统转换成不同的物理内存地址。
之后,进程持有的虚拟内存地址会通过 CPU 芯片中的 MMU 的映射关系,将其转换成物理内存地址。
2️⃣ 操作系统是如何管理虚拟地址与物理地址之间的关系?
主要有两种方式,分别是 内存分段 和 内存分页
3️⃣ 分段机制下,虚拟地址和物理地址是如何映射的?
分段机制下的虚拟地址由两部分组成,段选择因子 和 段内偏移量。
段选择因子 最重要的就是 段号,用作 段表 的索引。其中 段表 保存了 段的基地址 以及 段的界限地址。通过 段基地址 加上 段内偏移量 得到 物理内存地址。
4️⃣ 分页机制下,虚拟地址和物理地址是如何映射的?
分页是把整个虚拟和物理内存空间切成一段段固定尺寸的大小。 这样一个连续并且尺寸固定的内存空间,叫做页 Page。
分页机制下的虚拟地址分为两部分,页号 和 页内偏移。页号 作为 页表 的索引,页表 包含物理页在物理内存的 基地址,这个 基地址 加上 页内偏移 就形成了 物理内存地址。
5️⃣ 多级页表机制下,虚拟地址和物理地址是如何映射的?
多级页表机制下的虚拟地址分为三部分,全局页目录项 PGD , 上层页目录项 PUD ,中间页目录项 PMD,页表项,页内偏移。
多级页表虽然解决了空间上的问题,但是 虚拟地址 到 物理地址 的转换带来了 时间开销,
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 GYu的妙妙屋!
