← 返回首页

虚拟内存是什么?虚拟内存和物理内存如何映射?

虚拟内存是什么?

虚拟内存(Virtual Memory) 是计算机操作系统提供的一种内存管理机制。它的核心思想是为每个进程提供一个连续的、私有的、比实际物理内存大得多的地址空间(即虚拟地址空间)。

它的主要作用包括:

  1. 隔离与保护:每个进程都有自己独立的虚拟地址空间,进程之间无法直接访问彼此的内存,从而保证了系统的安全性和稳定性。
  2. 扩大可用内存:当物理内存不足时,操作系统会将暂时不用的数据从物理内存转移到硬盘上的“交换区”(Swap)或页面文件(Pagefile)中,从而腾出物理内存给当前活跃的进程使用。这使得系统能够运行总内存需求超过实际物理内存的程序。
  3. 简化编程模型:程序员无需关心数据在物理内存中的真实位置或碎片问题,只需使用虚拟地址即可。

 

虚拟内存和物理内存如何映射?

虚拟内存到物理内存的转换过程被称为地址翻译(Address Translation)。这个过程由硬件(MMU)和操作系统协同完成。

1. 核心硬件:MMU(内存管理单元)

CPU 内部有一个专门的硬件组件叫 MMU。当程序执行指令访问一个虚拟地址时,MMU 会负责将其动态转换为真实的物理地址。

2. 页式管理(Paging)

现代操作系统通常将虚拟内存和物理内存都划分为固定大小的块,称为页(Page)。例如,常见的页大小是 4KB。

  • 虚拟页号 + 页内偏移量 = 虚拟地址
  • 物理页框号 + 页内偏移量 = 物理地址
    (注:页内偏移量在转换前后保持不变)

3. 页表(Page Table)与 TLB

为了记录“哪个虚拟页对应哪个物理页”,操作系统为每个进程维护了一张页表。但由于页表通常非常庞大,直接查表速度太慢,因此引入了硬件缓存——TLB(Translation Lookaside Buffer,快表)。

4. 完整的映射流程

当 CPU 发出一个虚拟地址请求时,映射流程如下:

  1. 查 TLB:MMU 首先去查找 TLB。TLB 是一个高速缓存,里面存放了最近经常使用的虚拟页到物理页的映射关系。
  2. TLB 命中(TLB Hit):如果找到了对应的物理页框号,MMU 直接将其与页内偏移量拼接,生成物理地址,交给内存去读取数据。(此过程极快,通常只需几个时钟周期)。
  3. TLB 未命中(TLB Miss):如果 TLB 中没有该记录,MMU 必须去主内存中查询该进程的页表,找到对应的物理页框号。找到后,将这个映射关系更新到 TLB 中,然后再生成物理地址。
  4. 缺页中断(Page Fault):如果在查询页表时,发现该虚拟页不在物理内存中(即页表中标记为无效),硬件会触发一个缺页异常。此时 CPU 会将控制权交还给操作系统的缺页处理程序。操作系统会从硬盘的交换区将所需的数据加载到空闲的物理页框中,更新页表,然后再让程序重新执行刚才的指令。

总结来说,虚拟内存通过分页机制切分空间,利用页表记录映射关系,借助TLB加速转换,并在必要时配合磁盘交换,完美地实现了虚拟地址到物理地址的高效、安全映射。