【操作系统】虚拟内存串讲

概述

  • 操作系统为每一个进程分配一个独立的虚拟内存空间,以分页系统为例,每个进程的虚拟页号都是从 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 位
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值