[操作系统]第五课

本文详细介绍了操作系统中扩大内存的三种方法:覆盖技术、交换技术和虚拟存储技术。覆盖技术需要程序员手动划分,适用于早期DOS系统;交换技术由操作系统自动进行,以进程为单位;虚拟存储技术结合了覆盖和交换的优点,以页或段为单位,允许程序大于内存。文章还讨论了虚拟内存的目标、局部性原理及其在分页、分段内存管理下的实现,强调了虚拟内存如何通过部分交换和大的用户空间提高内存利用率。
摘要由CSDN通过智能技术生成

课程来源《操作系统_清华大学(向勇、陈渝)》

其实操作系统书上列出了三种扩大内存的方法:覆盖技术、交换技术、虚拟存储技术

先说覆盖与交换的区别 覆盖技术必须是同一进程里的几个独立的程序段进行相互覆盖,也就是这几个独立的程序段互相无调用关系,互相无关。并且他的覆盖机制是由用户在编写程序时需要用户自己编写出来的,这就使用户自身担负加大。

而交换技术是完全由操作系统进行交换的,互相交换的可以是不同的程序里的程序段,或不同进程也可以交换,这就和覆盖技术有区别了 。

再说 交换 与 虚拟 ,他们的原理相似,都是将内外存的程序段进行交换,但他们的区别是: 交换技术是以进程为单位,若进程所需内存大于系统内存 ,则此进程无法进行。而虚拟存储是以页或段为单位,是把进程再分为页或段对内存进行分化,若进程所需内存大于系统内存,进程也可以运行,因为该进程的一部分可换到外存上。

总的来说覆盖是进程内部的,而 交换 和虚拟 可进行 进程间互换,而虚拟可以继续把进程在内存划分成页或段。

内存管理方法:
固定加载地址的内存管理、固定分区的内存管理、非固定分区的内存管理和交换内存管理。还有分页内存管理和分段内存管理。

1.虚拟内存的起因

起因、覆盖技术、交换技术、虚拟技术(目标、程序局部性原理、基本概念、基本特征、虚拟页式内存管理)

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

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

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

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

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) 覆盖模块从外存装入内存,实际是以时间来换空间。

3.交换技术

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

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

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

在这里插入图片描述

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

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

swap in重定位:再次换入的内存地址一定要在原来位置上吗?
不一定,可能已被占用,要正确寻址,需要动态地址映射,虚拟地址一样,物理地址不一样。更新页表就好了,程序访问的都是虚地址,因此对程序没影响

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

4.虚拟技术

覆盖和交换都有缺点。
覆盖技术:需要程序员自己把整个程序划分为若干个小的功能模块,并确定各个模块之间的覆盖关系,增加了程序员的负担;
交换技术:以进程作为交换的单位,需要把进程的整个地址空间都换进换出,增加了处理器的开销。

虚拟技术目标:
像覆盖技术那样,不是把程序的所有内容都放在内存中,因而能够运行当前的空闲内存空间还要大的程序。但做的更好,由操作系统自动来完成,无须程序员的干涉;
像交换技术那样,能够完成进程在内存与外存之间的交换,因而活得更多的空闲内存空间。但做得更好,只对进程的部分内容在内存和外存之间进行交换。

Physical Memory + Disk = Vitual Memory

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

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

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

程序的局部性原理表明,从理论上来说,虚拟存储技术是能够实现的,而且在实现了以后应该是能够取得一个满意的效果的。

虚存机制:
在分页、分段内存管理的硬件支持下,在装入程序时,只把当前需要执行的部分页或段装入内存,就可以开始执行;
当执行到指令或数据不在内存上时(缺页、缺段异常),由处理器通知操作系统,若有空余空间则将相应的页面或段调入内存,继续执行;
另一方面,os将内存中暂时不用的页、段调出保存在外存上以腾出空间。

虚存技术基本特征:
1.大的用户空间:内存可以小,硬盘必须足够。提供给用户的虚拟空间=物理内存+硬盘。
2.部分交换:swap in /swap out 是对部分虚拟地址空间进行的
3.不连续:物理内存分配的不连续,虚拟空间使用的不连续(内外存)

具体实现:
多采用虚拟页式内存管理,即在页式存储管理的基础上,增加了请求调页和页面置换功能。

在这里插入图片描述
只装入部分页面即可启动程序,如果要运行的程序和数据不在内存即页表某项invalid,则会抛出异常,向系统发出缺页中断请求,OS根据产生异常的地址找到对应在外存中的页面调入,使得继续运行。

页表项:
在这里插入图片描述

示例:

在这里插入图片描述

例子:第一个操作:把虚拟地址0读入寄存器中
最底下,2代表驻留位是1,页帧号是2,页面大小4k,物理地址2*4096=8192
第二个操作:把虚拟地址32780读入,对应第8个32k-36k,X说明缺页,抛出缺页异常

在这里插入图片描述

对缺页中断的处理:
(1) 如果在内存中有空闲的物理空间,则分配一个物理页帧f,然后转4,否则2
(2) 采用某种页面置换算法,选择一个被替换的物理页帧,其对应逻辑页为q,没修改过可直接释放,如果修改位是1则要写回外存
(3) 把q的对应页表项驻留位设为0
(4) 把需要访问的页面p装入到物理页面f中
(5) 修改p对应页表项,驻留位为1,物理页帧好置为f
(6) restart,重新运行被中断的指令。

在何处保存未被映射的页?
能简单地被识别,在二级存储器中的页;
交换空间(磁盘/文件):特殊格式,用于存储未被映射的页面swap file

硬盘也有多种方式存储,数据,代码,动态库—>后备存储中的前三个,动态产生的数据,是没与文件直接对应的内存内容→硬盘上专门开一个区swap file

后备存储(backing store),二级存储
数据:一个虚拟地址空间的页面可以被映射到一个二级存储中文件的某个位置;
代码段:映射到可执行二进制文件;
动态加载的共享库程序段:映射到动态调用的库文件
其他段:可能被映射到交换文件(swap file)

虚拟内存性能:
为了便于理解分页开销,使用有效存储器访问时间的概念
—–effective memory access time(EAT)
EAT = 访存时间 * 页表命中几率(即1-page fault) + page fault处理时间 * page fault 几率
page fault处理时间* page fault 几率= 总的磁盘访问时间 = 单次访问磁盘时间(读/写)page fault 几率 (1 + dirty page几率)
如果有修改,还要将修改位为1的页面读出到外存

开销决定于p,所以程序必须有局部性特点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值