操作系统笔记(五)覆盖和交换,虚拟内存

您所在的位置:网站首页 操作系统存储在外存吗 操作系统笔记(五)覆盖和交换,虚拟内存

操作系统笔记(五)覆盖和交换,虚拟内存

2024-07-17 01:57| 来源: 网络整理| 查看: 265

5-1 虚拟内存:起因

内存越来越不够用,理想中的存储器是更大,更快,更便宜的非易失存储器。 

为了有效管理物理内存,采用了分段,分页,也许在这个基础上可以达到更大更快的理想情况,但数据随着掉电会丢失,硬件还达不到。

仍然希望将不经常访问的数据放在硬盘中,对硬件和OS要求很高。

对系统内存不够用采取的措施: (1) 早期,微软的DOS,内存仅640K,程序大—–手动覆盖(overlay),把需要的指令和数据保存在内存中 (2) 程序多,自动交换技术(swapping),暂时不能执行的程序送到外存,代价大 

(3) 以更小的页粒度单位在有限的内存中装入更多更大的程序,采用自动的虚拟存储技术

5-2 怎么更好地利用内存:覆盖技术

背景:早期,DOS,硬件只有640kb的内存,软件几十k,大的上兆。 Turbo Pascal 的overlay系统单元支持程序员控制的覆盖技术

目标:小内存中运行较大程序,常用于多道程序系统,与分区存储管理配合使用。

原理:按自身逻辑把程序分成几个功能上相对独立的模块,不会同时执行的模块可以共享同一块内存区域,按时间先后运行(分时)。

TIPS: 必要的代码和数据常驻内存,optional的不常用的在其余模块中实现,放外村,需要时放内存,不存在调用关系的模块不必同时载入内存,可以相互覆盖,共用一个分区。 

例子:A,B,C,D,E这5个函数占用空间及调用关系如左图,如B,C之间不会相互调用因此可以共用一个分区。

还可以A占一个分区20 k,B,E,F共用一个分区50k,C,D用一个:30k,总共只用100k

缺点: (1) 设计开销,程序员要划分模块和确定覆盖关系,编程复杂度增加了 

(2) 覆盖模块从外存装入内存,实际是以时间来换空间。

5-3 怎么更好地利用内存:交换技术

背景:UNIX,让OS管理而不是程序员管理,以运行的程序为单位

目标:多道程序在内存中时,让正在运行的程序或需要运行的程序有更多的内存资源。

方法:可将暂时不能运行的程序送到外存以获得空闲内存空间,操作系统在内存管理单元MMU帮助下把一个进程的整个地址空间的内容保存到外存中(换出swap out),而将外存中的某个进程的地址空间读入到内存中(换入swap in)。其大小为整个程序的地址空间(比较大,几十几百个页)。

何时交换? 硬盘操作很慢,一动系统就要等,所以要当内存空间确实不够,或者有不够的危险时换出

交换区的大小? 极端下是内存中只留一个程序,其余都在交换区。必须够大以存放所有用户进程的所有内存映像的拷贝;必须能对这些内存映像直接存取;

swap in重定位:再次换入的内存地址一定要在原来位置上吗? 不一定,可能已被占用,要正确寻址,需要动态地址映射,虚拟地址一样,物理地址不一样。

覆盖、交换的比较: 目的是一样的。 覆盖是发生在一个运行中的程序内部没有调用关系的模块之间,代价是程序员手动指定和划分逻辑覆盖结构;交换是内存中程序与管理程序或OS之间发生的,以进程作为交换的单位,需要把进程的整个地址空间都换进换出,对程序员是透明的,开销相对较大。

5-4、5 虚存技术

覆盖和交换都有缺点。

为了实现虚存,要利用程序的局部性原理(principle of locality)

程序在执行过程的一个较短时期,所执行的指令的地址,指令的操作数地址都局限于一定区域。

时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都在较短时间内;空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内。

小空间,高效

原理表明理论上虚存可以实现。程序只有一小部分在内存上,大部分在硬盘上,os在MMU帮助下完成。

E.G:编程对缺页率的影响: 一个二维数组a[i][j],C默认的先行后列排列法,每一行放在一个页面中。 甲是

for(j=0;j


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3