操作系统 || 虚拟内存VM

本文详细介绍了操作系统中的虚拟内存概念,包括物理寻址与虚拟寻址的区别,虚拟内存作为缓存和内存管理工具的作用,以及地址翻译的过程。通过页表进行虚拟地址到物理地址的转换,并阐述了缺页异常处理和页面调度。虚拟内存提供了每个进程独立的地址空间,简化了内存管理和保护了进程间的地址隔离。
摘要由CSDN通过智能技术生成

本文来自《深入理解操作系统》第九章

虚拟内存

对主存的抽象概念,虚拟内存是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,为每一个进程提供一个大的,一致的、私有的地址空间。

  • 三大能力
  1. 将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,高效的使用了主存
  2. 为**每一个进程提供了一致的地址空间,**简化了内存管理
  3. 保护了每一个进程的地址空间不被其他进程破坏

物理寻址、虚拟寻址

物理寻址

物理寻址计算机主存被组织成一个由M个连续的字节大小的单元组成的数组,每字节都有一个唯一的物理地址(Physical Address )

图所说明的是一条加载指令:读取从物理地址4处开始的4字节,当CPU执行这条加载指令时,会生成一个有效物理地址,通过内存总线传递给主存主存取出物理地址4处开始的4字节,并返回给CPU,cpu将其存放在寄存器中

虚拟寻址

虚拟

CPU生成一个虚拟地址(Virtual Address)访问主存,这个虚拟地址在被送到内存之前先转换成适当的物理地址,将一个虚拟地址转换为物理地址的任务叫做地址翻译(Address translation).CPU芯片上叫做内存管理单元(Memory Management Unit,MMU),利用存放在主存的查询表来动态翻译虚拟地址,查询表的内容由操作系统管理

  • 地址空间
    地址空间(Address Sapce)是一个非负整数地址的有序集合
    CPU从一个有N=2n个地址的地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间:{0,1,2,…N-1}
    一个地址空间的大小是由表示最大地址所需要的位数来描述的,一个包含N=2n个地址的虚拟地址空间就叫做n位地址空间,32位或64位虚拟地址空间

虚拟内存作为缓存的工具

在任意时刻,虚拟页面的集合被分成三个不相交的子集:

  • 未分配的:VM系统还未分配的页。未分配的块没有任何数据和他们向关联,不占用磁盘空间
  • 缓存的:当前已缓存在物理内存中的已分配页
  • 未缓存的:未缓存在物理内存中的已分配页

1

  • DRAM缓存

DRAM比SRAM慢大约10倍,磁盘比DRAM慢大约100 000倍,因此DRAM缓存的不命中比SRAM中的不命中要昂贵的多,因为DRAM缓存的不命中由磁盘来服务,SRAM缓存不命中由基于DRAM的主存来服务

  • 页表

同任何缓存一样,虚拟内存系统必须有某种方法来判定一个虚拟页是否缓存在DRAM中的某个地方。如果是,系统还必须确定这个虚拟页存放在哪个物理页中。如果不命中,系统必须判断这个虚拟页存放在磁盘的哪个位置,在物理内存中选择一个牺牲页,并将虚拟页从磁盘复制到DRAM中,替换这个牺牲页。

页表将虚拟页映射到物理页, 每次地址翻译硬件将一个虚拟地址转换为物理地址是,都会读取页表,操作系统负责维护页表的内容,以及在磁盘和DRAM之间来回传送页0

在这里插入图片描述

有效位表明该虚拟页当前是否被缓存在DRAM中

  • 设置了有效位,地址字段就表示DRAM中相应的物理页的起始位置,这个物理页中缓存了该虚拟页
  • 没有设置有效位,表明这个空地址表示该虚拟页还未被分配,否则指向该虚拟页在磁盘上起始位置
  • 缺页
    DRAM缓存不命中称为缺页
    在缺页之前我们的示例页表的状态。CPU引用了VP 3中的一个字,VP 3并未缓存在DRAM中。地址翻译硬件从内存中读取PTE3,从有效位推断出 VP 3未被缓存,并且触发一个缺页异常。
    0接下来,内核从磁盘复制VP3到内存中的PP 3,更新PTE 3,随后返回。当异常处理程序返回时,它会重新启动导致缺页的指令,该指令会把导致缺页的虚拟地址重发送到地址翻译硬件。但是现在,VP3已经缓存在主存中了,那么页命中也能由地址翻译硬件正常处理了。
    在这里插入图片描述

  • 在磁盘和内存之间传送页的活动叫做交换(Swapping)或页面调度(paging)。页从磁盘换入(页面调入)DRAM和从DRAM换出(页面调出)磁盘

局部性

在任意时刻,程序将趋于在一个较小的活动页面集合上工作,这个集合叫做工作集,或常驻集合。
在最开始,将工作集页面调入到内存中后,接下来对这个工作集的引用将导致命中,不会产生额外的磁盘流量

如果工作集的大小超出物理内存的大小,程序将会产生抖动,此时页面将会不断换进换出

虚拟内存作为内存管理的工具

1多个虚拟页面可以映射到同一个共享物理页面上。

VM简化了链接和加载,代码和数据共享,以及应用程序的内存分配

地址翻译

  • 页表地址翻译
    1

  • 页面命中时,cpu硬件执行的步骤:
    1.处理器生成一个虚拟地址,并把它传送给MMU
    2.MMU生成PTE地址,并从高速缓存/主存请求得到它
    3.高速缓存/主存向MMU返回PTE
    4.MMU构造物理地址,并把它传送给高速缓存/主存
    5.高速缓存/主存返回请求的数据字给处理器
    2

  • 缺页要求和操作系统内核协作完成

1.处理器生成一个虚拟地址,并把它传送给MMU
2.MMU生成PTE地址,并从高速缓存/主存请求得到它
3.高速缓存/主存向MMU返回PTE
4.PTE中的有效位是零,所以MMU触发了一次异常,传递CPU中的控制到操作系统内核中的缺页异常处理程序。
5.缺页处理程序确定出物理内存中的牺牲页,如果这个页面已经被修改了,则把它换出到磁盘。
6.缺页处理程序页面调人新的页面,并更新内存中的PTE。
7.缺页处理程序返回到原来的进程,再次执行导致缺页的指令。CPU将引起缺页的虚拟地址重新发送给MMU。因为虚拟页面现在缓存在物理内存中,所以就会命中,在 MMU执行了图9-13b中的步骤之后,主存就会将所请求字返回给处理器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值