深入理解计算机系统:什么是虚拟内存?

218 阅读4分钟

之前文章简述了什么是进程?通过进程,我们可以引申出「虚拟内存」的概念。

一个系统中的进程要与其他进程共享 CPU 和主存资源,这种共享是通过操作系统的管理和调度实现的。不同的进程在不同的时间段内轮流使用 CPU,每个进程都需要访问内存中的代码,越来越多的进程需要更多的内存,那启不是多少内存都不够用?

什么是虚拟内存?

这个时候大牛提出了一种对内存抽象的概念,叫作虚拟内存(VM),处理器(CPU)通过使用一种叫作虚拟寻址的形式来引用主存(内存条)。

每个进程对应一个虚拟内存空间。

image.png

在新创建的进程后,在当前进程的虚拟内存空间中会产生一个虚拟地址,这个虚拟地址被发送到内存条之前,会经过「内存管理单元」来进行翻译,这个地址被翻译成一个物理地址,这个物理地址对应着真正存储在内存中的数据、代码。

什么是虚拟地址空间?

虚拟地址空间是一个虚拟的、抽象的地址空间,是由操作系统为每个进程创建的。地址范围取决于计算机体系结构是32位还是64位。

目的是为了提供一个独立于硬件的地址空间,让每个进程都认为自己拥有整个内存的访问权限。

什么是内存管理单元?

CPU 能够生成虚拟地址是因为它具备内存管理单元(Memory Management Unit,MMU),MMU负责地址翻译和内存管理。

MMU是 CPU 中的一个关键组件,它负责将虚拟地址映射到物理地址。操作系统配置了地址映射表,告诉 MMU 如何将虚拟地址转换为真实的物理地址。

什么是地址翻译?

地址翻译是虚拟内存系统中的一个关键过程,它负责将进程生成的虚拟地址转换为物理地址,在实际的物理内存中访问数据和指令。允许多个进程共享有限的物理内存,通过 MMU 来实现,确保每个进程都能够在虚拟内存中独立运行。

虚拟内存提供了什么功能?

  1. 自动缓存;
  2. 简化内存管理;
  3. 内存保护;

我们分别来介绍这三个主要功能:

自动缓存

之前文章写过「存储器缓存」的功能,最上层的存储器「价格贵、内存小」通过使用「局部性原理」这种解决方案来缓存「造价低、内存大」硬件的数据内容。一层一层递增,最终递增到磁盘,毕竟磁盘造价最低,容量最大。

而虚拟内存的缓存和存储器缓存有着相同的逻辑,它们这种机制都是基于局部性原理,即程序在一段时间内倾向于访问相邻的内存位置,通过自动缓存最近使用的存储在磁盘上的地址空间内容,提供了更快的内存访问速度。

简化内存管理

它将物理内存的分配和释放细节隐藏在后台,并为每个进程提供了独立的虚拟地址空间。这使得我们不需要担心内存分配、释放等问题。

每个独立的进程都拥有自己独立的读写权限和地址空间。虚拟内存系统负责有效管理这些进程所需的内存空间。

此外,虚拟内存系统还提供了一种机制来管理不同进程之间需要共享的数据,从而避免重复存储相同的数据内容。

内存保护

每个进程的虚拟地址空间都有访问权限控制,包括读取和写入权限。这确保进程不能越界访问其它进程的内存,从而提高了系统的安全性和稳定性。

A 进程访问 B 进程数据,在访问之初就会通过虚拟内存判断,是否有访问权限,是否有读写权限,例如只读、读写、执行等。


内容来源:《深入理解计算机系统》

如果您对本篇文章中提到的问题有任何疑问或想法,请在评论区留言,我将尽力回复。

微信公众号「小道研究」,获取更多关于前端技术的深入分析和实践经验。