覆盖与交换
1. 覆盖与交换
覆盖, 交换, 虚拟存储技术常用于实现内存空间的扩充
1.1 覆盖技术
覆盖技术的思想:将程序分为多个段,常用的段常驻内存,不常用的段在需要的时候调入内存
内存中分为一个"固定区" 和若干个"覆盖区",常用的段放在固定区,不常用的段放在覆盖区
缺点:必须由程序员声明覆盖结构, 对用户不透明, 增加了用户的编程负担,覆盖技术只用于早期的操作系统中。
1.2 交换技术
交换技术的思想:内存空间紧张时, 系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(即进程在内存与磁盘间动态调度)
1、应该在外存(磁盘)的什么位置保存被换出的进程?
2、什么时候应该交换?
3、应该换出哪些进程?
1.具有对换功能的操作系统中,通常把磁盘空间分为文件区和对换区两部分。文件区主要用于存放文件,主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式;对换区空间只占磁盘空间的小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式。总之,对换区的I/o速度比文件区的更快。
2.交换通常在许多进程运行且内存吃紧时进行,而系统负荷降低就暂停。例如:在发现许多进程运行时经常发生缺页,就说明内存紧张,此时可以换出一些进程;如果缺页率明显下降,就可以暂停换出。
3.可优先换出阻塞进程;可换出优先级低的进程;为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时。
2. 虚拟内存
虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。
2.1 传统存储管理方式的特征、缺点
1、一次性:作业必须一次性全部装入内存后才能开始运行
- 作业很大时,无法装入导致大作业无法运行
- 大量作业要求运行时内存无法容纳所有作业,导致多道程序并发度下降
2、驻留性:一旦作业被装入内存,就会一直驻留在内存中,直到作业运行结束,这样会导致内存中驻留大量的,暂时用不到的数据,浪费内存资源。
2.2 高速缓冲技术的思想
将近期会频繁访问到的数据放到更高速的存储器中,暂时用不到的数据放在更低速存储器中。
2.3 虚拟内存的定义和特征
- 在程序装入时,将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行。
- 在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息由外存调入内存,然后继续执行程序。请求调页/段
- 内存空间不够时, 操作系统负责将内存中暂时用不到的信息换出到外存。页面置换
- 在用户看来,就有一个比实际内存大很多的内存,这就叫虚拟内存。
虚拟内存的最大容量是由计算机的地址结构(CPU的寻址范围)确定的
虚拟内存的实际容量 = min(内存容量+外存容量,CPU寻址范围)
特征:
多次性:无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存。
对换性:在作业运行时无需一直常驻内存,而是允许在作业运行过程中,将作业换入、换出。
虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量远大于实际容量。
2.4 虚拟内存的实现
请求分页存储管理
页表机制
缺页中断机构
在请求分页操作系统中,每当要访问的页面不在内存时,便产生一个缺页中断, 然后由操作系统的缺页中断处理程序处理中断。
此时缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒, 放回就绪队列。
- 如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项
- 如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存,未修改过的页面不用写回外存。
缺页中断是因为当前执行的指令想要访问目标页面未调入内存而产生的,因此属于内中断(故障) 。
页面置换算法
1. 最佳置换(Optimal, OPT)
1.1 基本思想
置换以后不再被访问,或者在将来最迟才回被访问的页面,缺页中断率最低。但是该算法需要依据以后各业的使用情况,而当一个进程还未运行完成是,很难估计哪一个页面是以后不再使用或在最长时间以后才会用到的页面。所以该算法是不能实现的。但该算法仍然有意义,作为很亮其他算法优劣的一个标准。
1.2 算例
采用固定分配局部置换的策略,嘉定系统为某进程在内存中分配了3个物理块,页面访问顺序为2、3、2、1、5、2、4、5、3、2、5、2。假定系统未采用预调页策略,即未事先调入任何页面。
进程运行时,一次将2、3、1三个页面调入内存,发生3次缺页中断。当第一次访问页面5时,产生第4次缺页中断,根据OPT算法,淘汰页面1,因为它在以后不会在使用了;第5次缺页中断时,淘汰页面2,因为它在5、3、2三个页面中,是在将来最迟才会被页面访问的页面。
以此类推:
注意:第4次中断时将最后不会访问的1剔除,将最后才访问的3放入最下面的内存块中,以后的调度过程中,最后不会访问或最后才被访问的页面总是放在最下面的内存块中。内存块从上到下依次存放最先访问的页面。
中断次数为6,缺页中断率为6/12*100% = 50%。
2. 先进先出置换算法(First In First Out, FIFO)
2.1 基本思想
置换最先调入内存的页面,即置换在内存中驻留时间最久的页面。按照进入内存的先后次序排列成队列,从队尾进入,从队首删除。但是该算法会淘汰经常访问的页面,不适应进程实际运行的规律,目前已经很少使用。
2.2 算例
仍然以OPT算例为例子。
中断次数为6,缺页中断率为9/12*100% = 75%。
2.3 Belady异常
一般来说,分配给进程的物理块越多,运行时的缺页次数应该越少,使用FIFO时,可能存在相反情况,分配4个物理块的缺页竟然比3个物理块的缺页次数还多!
例如:进程访问顺序为0、2、1、3、0、2、4、0、2、1、3、4。 M=3时,缺页中断9次。
缺页中断率9/12*100% = 75%。
M=4时,缺页中断10次。缺页中断率10/12*100% = 83.3%。
3 最近最久未使用置换算法(Least Recently Used, LRU)
3.1 基本思想
置换最近一段时间以来最长时间未访问过的页面。根据程序局部性原理,刚被访问的页面,可能马上又要被访问;而较长时间内没有被访问的页面,可能最近不会被访问。
LRU算法普偏地适用于各种类型的程序,但是系统要时时刻刻对各页的访问历史情况加以记录和更新,开销太大,因此LRU算法必须要有硬件的支持。
3.2 算例
仍然以OPT算例为例子。
中断次数为6,缺页中断率为7/12*100% = 58.3%。
堆栈实现LRU:
系统使用特殊的堆栈来存放内存中每一个页面的页号。每当访问一页时就调整一次,即把被访问页面的页号从栈中移出再压入栈顶。因此,栈顶始终是最新被访问页面的页号,栈底始终是最近最久未被访问的页号。当发生缺页中断时,总是淘汰栈底页号所对应的页面。
标签:操作系统,中断,内存空间,访问,内存,进程,缺页,虚拟内存,页面 From: https://www.cnblogs.com/wxk1213/p/16936759.html