文章目录
- 概述
- 虚拟页管理
- 请求页表
- 物理地址的获取
- 虚拟页大小与内存块大小的探讨
概述
- 操作系统为每一个进程分配一个独立的虚拟内存空间,以分页系统为例,每个进程的虚拟页号都是从 0 开始的
- 不同的进程可以使用相同的虚拟页号,并且不会互相影响,这在物理内存上是不允许的
- 一般情况下,虚拟页大小和内存块大小相等,并且虚拟页号比物理页号多得多
- 而物理页号是由内存容量、内存块大小决定的,虚拟内存空间并不是真的从物理上扩充了内存,而是借用了外存和分页请求系统,从逻辑上扩充了内存
- 虚拟内存是基于局部性原理的,简单来说就是一个进程可能需要 10GB 的内存,而内存只有 4GB,无法支持进程运行,但是在某个时间段内,可能进程只需要 1GB,因此可以让这个进程直接运行,需要用到的页调入内存,当内存空间不够时,再将某些页面调入外存
- 在这种管理方式下,进程就好像运行在一个有 10GB 内存的计算机上,这就是“虚拟”
虚拟页管理
请求页表
- 虚拟页和物理页不是一一对应的,例如虚拟页号 0 对应的内存块号可能是 666
- 因此需要有虚拟地址到物理地址的转换机制,通过请求页表实现
- 页号:虚拟页号
- 物理块号:内存的块号
- 状态位:虚拟页是否在内存中,只有状态位有效,物理块号字段才有效
- 访问字段:记录虚拟页号在一段时间内的访问次数
- 修改位:虚拟页在调入内存后,是否有被修改
- 外存地址:虚拟页的磁盘(外存)块号
物理地址的获取
- 当进程需要访问虚拟地址 A 时,操作系统将 A 中的页号(Virtual Page,
VP
)、页内偏移量(offset
)提取出来 - 查询求页表,找到页号 = VP 的表项
- 若 VP 对应的 P 有效,那么通过(物理块号+offset)得到物理地址
- 若 VP 对应的 P 无效,则需要通过外存地址字段,将虚拟页调入内存
虚拟页大小与内存块大小的探讨
- 一般情况下,虚拟页大小和主存块大小是相等的,这样虚拟页的页内偏移量,就是主存块的块内偏移量
- 但这并不是强制规定的,两者大小可以不同(24王道考研408计算机组成原理习题 4.3(大题3,2019))
- 假设虚拟页内偏移量 k 位,虚拟页的页内偏移量和物理地址的低 k 位完全相同
- 虚拟页大小和主存块大小不相等的情况
- 虚拟地址和物理地址都按字节编址,MAR 有 32 位
- 可以看出,虚拟页的页内偏移量 12 位,而主存块内地址 6 位,显然虚拟页大小 > 主存块大小
- 那么虚拟地址页号的高 20 位,只能映射内存块号的高 20 位,内存块号剩下的 6 位需要借助虚拟地址中页内偏移量的高 6 位