[操作系统OS]第四章:虚拟内存

起源

程序规模的增长大于存储器容量的增长,导致了内存使用紧张。所以我们需要一种更大,更快,更便宜,非易失性的存储技术,于是我们把硬盘的空间也用上(扮演内存的作用),将不常用的内容从内存中转移到硬盘上。
那么在计算机系统中,特别是在多程序运行的环境上,出现内存不够用的情况,应该如何解决?

  • 如果程序太大,超过了内存的容量,可以采用 手动的覆盖(overlay) 技术,只把需要的指令和数据保存在内存中
  • 如果是程序太多,超过了内存的容量,可以采用 自动的交换(swapping) 技术,把不常用的程序放到硬盘中存储
  • 如果想在有限容量的内存中,以更小的页粒度为单位装入更多更大的程序,可以采用 自动的虚拟存储技术

一、覆盖技术

在较小的可用内存中运行较大的程序。常用于多道程序系统,与分区存储管理配合使用。
需要程序按照其自身逻辑结构,划分为若干个功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后来运行。

  • 必要部分(常用功能)的代码和数据 -常驻内存
  • 可选部分(不常用功能)在其它程序模块中实现,平时存放在硬盘中,在需要使用时通过代码调用装入内存
  • 不存在调用关系的模块不必同时装入内存,从而可以相互覆盖,即这些模块共用一个分区


通过以上方式将原190K的程序占用压缩到了110K,也可以使用另外一种覆盖方法压缩到100K。虽然这种方式大幅度压缩了占用内存的空间,但使用了时间换空间的方法,需要花费大量的时间在将程序模块从硬盘中载入到内存中。并且要使用这种方式需要程序员来把一个大的程序划分为若干个小的功能模块,并确定各个模块之间的覆盖关系,增加了编程的工作量。


二、交换技术

多个程序在内存中时,让正在运行的程序或需要运行的程序获得更多的内存资源。
操作系统将暂时不运行的一个进程的整个空间的内容送到硬盘,从而获得空出内存空间(swap out 操作)
将硬盘中的某个进程的空间内容读入到内存中(swap in 操作)

需要注意的是:

  • 只有当内存空间不够或有不够的危险时才执行换出操作(swap out)
  • 硬盘用作虚拟内存的空间必须足够大,可以存放所有用户进程的所有内存映像的拷贝,必须能对这些内存映像进行直接存取
  • 因为换出换入后的内存位置不一定相同,所以最好采用动态地址映射的方法(页表)

和覆盖技术的区别:

  1. 覆盖只能发生在那些相互之间没有调用关系的程序模块之间,而交换技术是以在内存中的程序大小为单位来进行的,所以不需要程序员给出各个模块之间的逻辑覆盖结构。
  2. 覆盖需要人为的手动编写管理一个程序覆盖操作的程序,而交换操作可以由操作系统或者相应的管理程序来进行管理无需手动管理但增加了处理器开销。

三、虚拟内存管理技术(虚存技术)

因为覆盖和交换技术仍不够方便和完善,所以诞生了虚存技术,它的目标为:
像覆盖技术一样,不是把程序的所有内容都放在内存中且可以实现将进程的部分内容在内存和硬盘之间的交换,且像交换技术一样可以由操作系统自动来完成,无须程序员干涉。
可行性分析如下:

程序的局部性原理

  • 时间局部性:一个数据的一次访问和下次访问都集中在一个较短的时间里
  • 空间局部性:当前访问的数据和附近的几个数据都集中在一个较小区域内

程序的局部性原理表明,从理论上来说,虚拟存储技术是能够实现的。

基础概念

基本特征


逻辑地址上的不连续性是由换入和换出操作引起的。在内存中,操作系统内核是常驻的,不能被换出。

具体实现


其中的MMU是内存管理单元,该部件集成在CPU内部,主要是将虚拟地址转换为物理地址。

  • 请求调页】CPU查询MMU中的页表需要拿到对应物理地址时,根据标记为判断是否存在,如果不存在(因为装载内存只载入部分页面,所以读着读着就会出现不存在的情况),就会向操作系统发送一条缺页中断请求。操作系统根据当前产生异常的地址,去硬盘中寻找是哪块数据需要被调用放入到内存中去,找到数据后放到相应的内存物理页中之后,使得该程序可以继续执行。
  • 【页面置换】当运行时发现内存不够用了,那么就有操作系统将内存中不常用页换出到硬盘中去,将需要的页载入到内存中去。

为了实现请求调页和页面置换功能,需要在页表表项中增加几个标记位:

访问位可以帮助我们来做页的置换操作。

注意:这里没有偏移量,因为是以页为单元拉取外存硬盘中的数据覆盖到内存中,所以不需要偏移量,不是精确寻址(这里的不是寻址操作)

通过查页表时的标识位驻留位为0,后触发缺页中断,上述步骤为操作系统执行。

后备存储 - Backing Store


其实就是提供虚拟内存的磁盘空间部分叫做后备存储,以下四个是哪几种类型的数据会被放到后备存储中。

虚拟内存性能


由此可见,一个好的置换算法是提高虚拟内存性能的关键因素。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值