操作系统学习5

                      虚拟存储器

1.      引言:

1>    因为有写作业很大,已经超过了内存的总容量。这样的大作业会装不入内存,导致无法运行。另外,有一大批的作业要运行,这一批的总内存需求量大雨了内存的总容量。所以只能将少部分作业装入内存先运行,另一些驻留在外存之中。为了决解这些问题,一个方面是直接的增加内存容量,另一方面则引入了虚拟存储技术。

2>    虚拟存储是一种技术,并没有实际的参加了内存的容量,而是逻辑上增加了内存的容量。

3>    程序运行的局部性原理:

1 程序执行时除了少量的转移和过程调用指令外,大多数都是顺序执行的

2 过程调用会使程序执行轨迹由一部分转至另一部分,但是过程调用的深度不会超过5.

3 程序中存在许多的循环,虽然只由少数的指令组成,但是会被多次执行。

4 程序中还有很多的数据结构的处理,这些处理局限在很小的范围之内。局限性又分时间局限性(指令执行后短时间内可能再次执行)和空间局限性(某段空间访问 后,不久之后,其附近的储存单元也可能被访问)

4>    虚拟存储技术的原理:程序在运行时,没有必要完全的装入内存,而是把需要执行或马上要执行的也和段装入内存,其余留在外存,在将要执行前再装入内存。执行完的也和段,且很久不会执行或不再执行,就把它在放入外存。这时用户会认为,他所使用的内存比实际内存要大。

5>    虚拟存储的特征:多次性(会多次的访问外存)、对换性(作业的程序和数据不必常驻于内存)、虚拟性(逻辑上扩充了内存大容量)

6>    实现方法:

1分页式请求系统:要有请求分页的页表机制、缺页中断机构、地址变换机构的硬件支持,还要有请求分页的软件。之后就是把要用或马上用的调入内存,暂时不用的 放入外存。

   2 分段式请求系统:要有请求分段的段表机制、缺段中断机构、地址变换机构的硬件支持。再加软件支持。之后就是和分页差不多的方式了。

2.      请求分页存储管理方式:

1>    硬件支持:

1请求页表机制:请求页表中有页号、物理块号、状态位P(表示该页是否已经调入内存)、访问字段(记录该页在一段时间的访问次数)、修改位(标识该页在调入之 后是否被修改过,若是,则写入外存)

2 缺页中断机构:CPU每执行一条指令会看是否有中断。没有则继续执行下一条指令。

3 地址变化机构:在分页管理的基础上增加了一些功能,如处理缺页中断、以及从内存中换出一页。

2>    请求分页中的内存分配

1最小物理块数的确定

2 内存分配策略:固定分配局部置换和可变分配全局变换以及可变分配局部置换

3物理块的分配算法:平均分配、按比例额分配、考虑优先权的分配。

3>    页面的调入策略

1 何时调入:预测也策略和请求页策略

2 从何处调入:系统对换空间充足、系统对换空间不足、UNIX方式。

缺页率:访问成功的次数为S,访问失败的次数为F。则缺页率为f=F/S+F。

3.  页面置换算法:

1> 概念:

当要访问的页面不存在时,而内存也没有剩余的空间,则就要从内存中选出一页和药访问的页面置换。但是置换不是随意的置换的,不适当的置换会发生程序的抖动 (刚被还出的页马上又要被访问)。所以要置换就要遵循一定的算法。

2> 最佳置换算法:

这是一种理论的算法,不可能实现的。是其所选择置换出来的页面是永不使用的,或是很长一段时间不会使用的,因为一个进程又若干个页面,哪一个页面会很久不 会访问的,这无法判断,所以,这个算法无法实现

3>    先进先出算法:

把调入内存的页面按先后顺序放入一个队列之中,每次进行页面置换时,总是置换的是队首的元素。这个算法不能保证常用页面被保护。

4>    最近最久为使用算法(LRU):

这是根据页面调入内存的使用情况而定的,无法预测未来是否会使用置换出去的页面。他是根据程序的局部性原理得来的,是一种比较好的算法。

但是他需要很多的硬件支持:

1首先他要一个寄存器(是一个移位寄存器,记录内存中各页的使用情况,访问某物理块时,把相应的寄存器的n-1未置为1,每隔一段时间右移一位,判断时,把所 有的为看作一个整数,数值最小的就是最久没有用过的了),

2另外它还需要一个栈(保存当前使用的各个页面号,每当进程访问某个页面时,则把它的页面号从栈中移出,压入栈顶,故栈顶总是最新被访问的页面号)

5>    最少使用置换算法(LFU):

和LRU具有相同的硬件支持,但是和LRU不同的是,它的移位寄存器是没访问页面一次,最高位都会置为1,然后再每隔一段时间右移,判断时把寄存器没一位相加,而不是看寄存器数值大小,相加的数值越小,表示它越少被使用。

6>    Clock置换算法:

1 简单的Clock算法:只需为每一页设置一位访问位,再将内存中的页面通过指针链接成一个循环队列,当某页被访问时,访问位置为1,没有被访问就置为0.当药置换 页面时,只需要检查访问位,若是0,则换出,若不是,则再循环队列里循环的检查。

2 改进的Clock算法:增加一个修改位,根据修改位和访问位来选择置换的页面,修改了,就得写回内存,没有修改就不要写回内存。

7>    页面缓冲算法:

影响页面换出效率的若干因素:

1 置换算法:最重要的因素,好的算法会降低读写磁盘是频率,而差的算法,会增加页面写回的频率。

2 写回磁盘的频率:若每一个页面换出时都要写回,则增加了写回的次数,若已经建立了修改也面的链表。则在写回时,就可以一次性的写回磁盘,减少了磁盘的启动 次数

3 读入内存的频率:设置了已修改的页面链表之后,如果该链表上暂时有一批装有数据的页面,如果有进程在未将页面写回磁盘时就要访问这页面,则就可以直接的访 问内存中还未写入磁盘的数据。

4 页面缓冲算法PBA:

  它主要是降低页面换入换出的频率,使I/O磁盘的启动次数减少。它设置了两个链表:空闲页面链表(当进程要读入一个页面时,利用空闲物理块的链表的第一个位置 装入该页,当一个未被修改的页面换出时,饼不把它换出在外存上,而是挂在链表的末尾,这些页面是有数据的,要再次被使用时,直接从链访问就好。)

  和一个修改页面的链表(由已经修改的页面组成,也是为了减少页面换出的次数)

4.      抖动与工作集

1>    多道程序不是越多越好,他是在一定范围内CPU的利用率会随多到程序的数量增加而增加,而在一定范围之后CPU的范围会随着多道程序的增加而降低,原因是程序太多,因为使用了虚拟内存技术。增加了抖动

2>    工作集

概念:在某段时间里,进程所访问的页面的集合。

3>    抖动的预防方法:

1 采用局部置换策略:当进程发生缺页时,只能在自己分配的内存空间里置换。这样不会影响其他金成德执行

2 把工作集算法融入到处理机调度机制中

3 利用“L=S”的准则调节缺页率。

4 选择暂停的进程。

5.      请求分段存储管理方式

1>    硬件支持:请求段表机制、缺段中断机构、地址变换机构

2>    分段的共享和保护:

1 共享段表:每一个共享段都在表里有一个表项。包含了段的各种信息,而且有共享进程的计数器,存取控制字段,以及段号

2 共享段的回收:计数器表示了有多少个进程在共享这段,当count=0时,就可以回收这个段了。

3 分段保护:

 越界检查:利用地址变换机构来完成,保证每个进程都在自己的内存空间里运行

存取控制检查:把段标为只读,只写,或者可读可写,

 环保护机构:是一种完善的保护机制,低环号的环优先级高于高环号的环,如OS在低号环内。某些重要的程序和操作系统服务占据中间环内。一个程序可以访问相同环或低环的数据,而一个程序可以调用相同还或高环的服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值