前面的物理内存管理是关于如何给进程分配一块物理内存空间。非连续内存分配是在内存里找存储空间,虚拟存储是在非连续内存存储的基础上,把一部分内容放到外存里的做法,可以让应用程序可使用更大的空间。
用户看到的只是抽象的地址空间,操作系统自动做抽象地址空间映射到存储介质的使用。
内存空间不足,有三种解决方法。
- 覆盖:一个程序在所有内存空间里内存不够,程序员将一个进程分成多个模块。操作系统不知道进程内模块的逻辑关系
下图展示了覆盖技术实例。物理内存不够190k,就将这个程序分成3组,A自己一组;B、C互相无调用关系,为一组;D、E、F相互无调用关系(不会同时执行),为一组。分配存储空间:A给20k,B、C分50k,D、E、F给40k。B或C(D或E或F)调用谁就把谁放入内存,把其他的挪出去。 - 交换:是以进程为单位的交换技术。一个程序在内存空间里够用,但多道程序运行过程中其他程序占用了内存空间使这个程序内存空间不够。可以让操作系统完成
交换和覆盖的比较 - 虚拟存储技术
(1)目标
上面是虚拟的抽象的进程地址空间,下面是实际的物理内存和外存,中间由操作系统完成相应转换。只把部分进程放入内存,不像交换是以整个进程为单位;同时不需要程序员参与。
(2)局部性原理
(3)概念
(4)虚拟页式存储
之前的页式存储是把程序的所有页都加载到内存中,存储可以不连续。
虚拟页表:操作系统为每一个进程维护了一个从虚拟地址到物理地址的映射关系的数据结构,叫页表,页表的内容就是该进程的虚拟地址到物理地址的一个映射。
在页表项中多一个标志位,表示对应的这一页是否在物理内存里,如果标志位是无效就会产生缺页异常,操作系统就会接管,操作系统找页。缺页需要把现在在内存的某一页去掉,把这一页内容写到内存里。
驻留位是1,就可以找到实实在在的物理内存地址。
驻留位有效时,看修改位。修改位为1,且我想把这一页放到外存中,要把内存中修改的内容写回到外存;修改位为0,若外存中有相应内容,就只需把这页作废。
虚拟页式存储实例
X代表逻辑地址空间中的对应页号没有映射到物理内存。
(5)缺页中断的处理
缺页异常分为两种处理情况,第一种是物理内存中有空闲的帧,第二种是物理内存没有空闲帧,需要把别的帧赶走。
页表项中逻辑页号有很多物理帧号却较少,把要替换的帧放到外存中后要改相应页表项的标志位。新的帧装入内存后也要把对应的页表项修改。
(6)性能
有效访问存储的时间:第一部分是读内存的时间,第二部分是缺页时从硬盘上读的时间。第二部分中,不管有没有空闲帧的空间,只要缺页就一定要访问硬盘,花费时间5000000p,还有就是,如果要把其他修改过的帧赶走,还要花时间把它写到外存中,花费时间5000000pq。
来源:CSDN
作者:润尼咔咔
链接:https://blog.csdn.net/weixin_43864534/article/details/104124041