虚拟内存1
简介
- 虚拟内存是一个概念,一个逻辑模型,是对主存的抽象
- 虚拟内存这个概念在硬件和软件侧都有涉及,此文对虚拟内存的介绍,会偏向我所认为的硬件侧的内容,至于偏软件层面的,在此不做详细介绍,到时可能会在介绍操作系统相关内容时补全
- 理论基础: 程序的空间局部性原理
作用
- 将主存视为辅存(磁盘)的缓存,在主存上只存储进程所需的数据,提高存储系统的性能
- 依靠辅存,虚拟内存可以实现一个容量比物理内存大的存储空间,允许运行一个所需内存比物理内存大的程序
- 实现进程之间的内存隔离
与 Cache(高速缓冲存储器) 的异同
同
- 提高存储系统性能
- 理论基础: 程序的空间局部性原理
异
- Cache 主要处理 CPU 和主存之间的速度差异,虚拟内存聚焦在处理容量、存储安全层面等问题
- Cache 的管理由纯硬件完成,对程序是透明的,虚拟内存由硬件和软件(操作系统)完成,对程序做了隔离,并非完全透明
- 虚拟内存未命中的损失比 Cache 大(Cache 和虚拟内存在存储系统中的不同层次)
概念结构(部分)
部分概念理解参考: 分页存储概念清晰梳理(页面、页表、页表项、页面大小、页内地址等概念)
术语
- MMU: Memory Management Unit 内存管理单元
- TLB: Translation Look-aside Buffer 转译后备缓冲器 快表
- PTE: Page Table Entry 页表项
- PPN: Physical Page Number 物理页号
- VPN: Virtual Page Number 虚拟页号
- PPO: Physical Page Offset 物理页偏移
- VPO: Virtual Page Offset 虚拟页偏移
- PA: Physical Address 物理地址
- VA: Virtual Address 虚拟地址
- PP: Physical Page 物理页
- VP: Virtual Page 虚拟页
结构
地址
-
物理地址(假设物理地址为 n 位)
-
虚拟地址(假设虚拟地址为 m 位)
地址空间是一个包含地址的有序集合,虚拟(逻辑)地址空间是系统分配给进程的运行内存空间,每个进程拥有一个独立的虚拟(逻辑)地址空间
页
- 物理内存在逻辑模型上被分为了多个固定大小的数据块,每个块被称为帧(Frame)(有被翻译成页框的,我的理解是这种管理就像框一样把内存划分开,所以称为 Frame), 在本文中统一称为页(Page)
- 每个页对应的索引称为页号
- 每个页内部的数据位置索引称为偏移量
- 对应地,虚拟地址空间也被按页划分,每页的大小与物理页大小一致
页表
一个用于完成虚拟页到物理页映射的表格,表格中的每一项称为页表项(PTE)
其中:
- 虚拟页号顺序排列,可由页表首地址(页表(基址)寄存器存储)加上偏移量得到
- 页表项内,物理页号可能为空(表示未填入),有效位为1时,表示该物理页有效; 为0时,表示该物理页无效,地址为空或有效位为0都会引发缺页中断
TLB
- 本质为高速缓存,存储的是活跃的 PTE,输入虚拟页号,若 TLB 命中,直接返回对应的物理页号
虚拟内存管理方式
段式管理
- 程序按逻辑结构分段(代码段,数据段,堆栈段等),以段为单元来分配主存
- 每个段内部大小动态灵活可变,有效利用空间,便于管理和共享
- 存在外部碎片问题
- 段表与页表结构类似,但段表内部会记录每个段的长度
页式管理
- 以页为单元来分配主存
- 每个页内部大小固定,简化分配管理
- 存在内部碎片问题
段页式管理
- 兼有段式管理和页式管理的特点
- 需要多次查表寻址
工作流程
-
一个简单直接的 CPU 物理寻址工作流程
-
虚拟内存工作流程
详细一点:
- CPU 提供数据地址(VA)
- TLB 查询
-. 命中(绿线)- 返回物理页号(PPN)
-. 未命中(红线) - 向页表查询物理页号
- 主存返回页号(PPN),同时将 PTE 存入 TLB 中
- 返回物理页号(PPN)
- MMU 地址翻译/转换(PA),向主存查找数据
- 主存传输数据给 CPU
页面替换算法
在此简要列举几种算法,在介绍操作系统涉及时可能将展开介绍
- 理想算法: 最优替换算法(OPT)
- 先进先出(FIFO)
- 改进: 第二次机会算法
- 最近最少使用页面替换(LRU, Least Recently Used)
- 最不经常使用页面替换(LFU, Least Frequently Used)
- 最近没有使用页面替换(NRU, Not Recently Used)
- 时钟算法
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Forgotten Area!