虚拟内存与分页
虚拟内存为每个程序提供其自身的大型、连续地址空间,硬件和操作系统通过固定大小的页将其映射到物理内存,从而提供隔离、保护以及比实际物理内存更大的内存错觉。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
虚拟内存是一种内存管理技术,它通过页表将程序使用的虚拟地址映射到物理内存地址,将内存划分为固定大小的页,并允许页根据需要驻留在物理内存或后备存储中。
Scope
本主题涵盖通过页表进行的地址转换、缓存转换的转换旁路缓冲器(TLB)、页错误和按需分页、页替换和工作集原理,以及虚拟内存提供的保护。它处于计算机体系结构和操作系统的交界处。它不包括分页出数据的文件存储(文件系统)和片上数据缓存(缓存组织和策略),尽管它与两者都有交互。
Core questions
- 虚拟地址如何通过页表转换为物理地址?
- TLB如何加速转换,TLB未命中时会发生什么?
- 页错误时会发生什么,按需分页如何处理?
- 工作集概念如何指导页替换并防止颠簸?
Key concepts
- 虚拟地址空间和物理地址空间
- 页和页帧
- 页表
- 转换旁路缓冲器(TLB)
- 页错误和按需分页
- 页替换
- 工作集和颠簸
- 内存保护
Key theories
- 工作集模型
- 工作集是进程在最近一段时间内引用的一组页;将每个活动进程的工作集驻留在物理内存中可以避免颠簸,即过度的分页导致性能崩溃,并为替换和准入决策提供依据。
Mechanisms
程序的虚拟地址被分成页号和偏移量。页号索引页表(通常是多级的)以查找物理帧;TLB缓存最近的转换以避免每次访问都遍历页表。如果引用的页不在内存中,页错误会将控制权转移给操作系统,操作系统从后备存储中获取该页,并可能根据由局部性和工作集行为指导的替换策略逐出另一个页。
Clinical relevance
虚拟内存是现代操作系统的基础:它隔离进程以实现安全性和稳定性,允许多个程序共享物理内存,并允许运行比物理RAM更大的程序。TLB和页错误行为显著影响性能,而地址空间布局是保护和内存安全防御的基础。
History
虚拟内存起源于20世纪60年代初曼彻斯特的Atlas计算机,引入了分页和页错误机制。Denning在1968年提出的工作集模型对局部性和颠簸(thrashing)进行了原理性阐述。通过TLB和多级页表实现的硬件支持,以及后来的大页等功能,使虚拟内存普及到通用系统中。
Key figures
- Peter J. Denning
- Maurice Wilkes
- John L. Hennessy
- Abraham Silberschatz
Related topics
Seminal works
- denning1968
- hennessy2019
- silberschatz2018
Frequently asked questions
- 页错误时会发生什么?
- 当程序访问当前不在物理内存中的虚拟页时,会发生页错误。硬件会捕获并转移控制权给操作系统,操作系统在后备存储中找到该页,将其加载到空闲或被逐出的帧中,更新页表,然后恢复程序运行,就像什么都没发生过一样。
- 什么是颠簸(thrashing)?
- 颠簸是指当活动进程的组合工作集超过物理内存时,性能急剧下降,系统大部分时间都花在将数据分页进出,而不是执行有用的工作。保持工作集驻留或减少负载可以避免颠簸。