虚拟存储器定义:是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储系统,其逻辑容量由内存容量和外村容量之和所决定 。
虚拟存储器工作情况:基于局部性原理可知,应用程序运行前仅须将那些当前要运行的少数页面或段先装入内存,其余部分暂留磁盘上。如果程序所要访问的页或段尚未调入内存,就发生缺页或缺段请求。如果此时内存已满,OS需要利用页置换功能,将内存中暂时不用的页调至磁盘上,再将需要访问的页调入内存。
虚拟储存器的特征
1>多次性:指一个作业中的程序和数据允许被多次调入内存运行,即只需当前要运行的那部分程序和数据装入内存即可开始运行。
2>对换性:在进程运行期间,允许将那些暂不使用的代码和数据从内存调至外存的对换区,待以后需要时再将它们从外存调至内存。
3>虚拟性:是指能从逻辑上扩充内存容量
请求页表数据结构:(从左置右)页号,物理块号,状态位,访问字段,修改位,外存地址
状态位:指示该页是否已调入内存,供程序访问参考
访问字段:用于记录本页在一段时间内的访问次数,或记录本页最近已有多长时间未被访问
修改位:标识该页面在调入内存后是否被修改过,因为内存中的每一页都在外存上保留了一份副本,修改后需要同步
缺页中断特点:
1>在指令执行期间产生和处理中断信号
2>一条指令在执行期间可能产生多次缺页中断
请求分页的内存分配策略:
1>固定分配局部置换:是指为每个进程分配一组固定数目的物理块,在进程运行期间不再改变。如果进程在运行中发生缺页,则只能从分配给该进程的n个页面中选出一页唤出,然后在调入一页,以保证分配给该进程的内存空间不变。
2>可变分配全局置换:是指先为进行分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加或减少。如果进程在运行中发现缺页,则将OS所保留的空闲物理块(空闲物理块队列)取出一块分配给该进程,或者以所有的空闲物理块为标的,选择一块唤出。
3>可变分配局部:首先为进行分配一定数目的物理块,但当某进程发现缺页时,只允许从该进程在内存的页面中选择一页换出,这样就不会影响其它进程的允许。如果进行频繁地发生缺页中断,则系统在为该进程分配若干附加的物理块。
物理块分配算法:
1>平均分配算法:将系统中所有可工分配的物理块平均分给各个进程
2>按比例分配算法:根据进程的大小按比例分配物理块
3>考虑优先权分配算法:为了照顾到重要的,紧迫的作业能尽快地完成,应为它分配较多的内存空间。通常把内存中可供分配的物理块分成两部分:一部分按比例分配,另一部分按进程的优先级进行分配
页面调入策略:
1.何时调入页面
1>预调页策略:将那些预计在不就之后便会访问的页面预先调入内存
2>请求调页策略:当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便立即提出请求,由OS将其所需页面调入内存。
2.从何处调入页面:请求分页系统将外存分为两部分,用于存放文件的文件区和用于存放对换页面的对换区。对换区采用连续分配的方式,文件区采用离散分配的方式,所以对换区的存储速度比文件区要高。何时调入页面分三种情况:
1>系统拥有足够的对换区空间,这时可以全部从对换区调入所需页面。在进行运行前,便须将进程相关的文件从文件区拷贝到对换区。
2>系统缺少足够的对换空间,凡是需要不需要被修改的文件,都直接从文件区调入。需要修改的文件从对换区调入和调出。
3>unix方式,与进程相关的文件都存放在文件区,凡是未运行过的页面从文件去调入。运行过的则通过对换区调入和调出。
页面置换算法:
1.最佳置换算法:一种理论上的算法,其所选择的被淘汰页面将是以后永不使用的,或许是在最长时间内不再被访问的页面。
2.先进先出页面置换算法:该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰,需要用一个指针总是指向最老的页面。
3.最近最久未使用页面置换算法:选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t。当需要淘汰一个页面时,选择现有页面中t值最大的。该算法需要为每一个页面配置一个寄存器保存时间,需要一个栈保存顺序。
4.最少使用页面算法:在使用这个算法时,需要在内存中的为每一个页面设置一个移位寄存器,用来记录该页面被访问的频率。
5.clock置换算法:
1>简单clock置换算法:为每页设置一个访问位,再将内存中所有的页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位被置为1。页面置换算法再选择一页被淘汰时,只需检查页的访问位。如果是0,则唤出;若为1,则重新置0
2>改进型clock置换算法:由于被修改过的页面,换出时所付出的代价较大(要写回磁盘)。改进型的算法新增加了一个修改位,每次检查访问位和修改位。首先第一轮检查未被访问和未被修改的,如果没有合适的,第二轮检查未被访问和已被修改,并置访问位位0,若还找不到合适的,再进行第一轮的操作。
6.页面缓冲算法:为了降低页面换进换出的频率和写回磁盘的频率(对于已经被修改过的页面,在将其换出时,应当写回磁盘),该算法在内存分配策略上采用了可变分配和局部置换方式,系统为每个进程分配一定数目的物理块,系统自己保留一部分空闲物理块。为了降低页面换进换出的速度,内存中设置了空闲页面链表和修改页面链表。
1>空闲页面链表:是系统掌握的空闲物理块,用于分配给频繁发生缺页的进程。当一个未被修改的页面要换出时,可以先不必换出,而是把它放在空闲链表的末尾,下次需要直接取
2>修改页面链表:当进程需要将一个已修改的页面换出时,系统先不必立即把它换出到外存上,而是把它挂在修改页面链表末尾,到达一定的数目在集体换出。
抖动:同时在系统中运行的进程太多,导致分配给每一个进程的物理块太少,以致频繁出现缺页,这会使得在系统中排队等待页面调进调出的进程数目增加。显然,对磁盘的有效访问也随之急剧增加,造成每个进程的大部分时间都用于页面的换进换出,进程不能再去做有效的工作,从而导致处理机的利用率也急剧下降,这时称进程处于"抖动"状态。
工作集:指在某段时间间隔里,进程实际所要访问页面的集合。
抖动的预防方法:
1.采取局部置换策略:当某进程发生缺页时,只能在分配给自己的内存空间内进行置换,不允许从其他进程取获得新的物理块,这样不会对其他进程造成影响。但这样效果不是很好,因为进程在发生抖动后,它还会长期处在磁盘IO的等待队列中。
2.把工作集算法融入到处理机调度中:在调度程序从外存调入作业之前,必须先检查每个进程咋内存的驻留页面是否足够多。如果足够多,则调入新作业;反之,为那些缺页率居高的作业新增物理块。
3.利用"L=S"准则调节缺页率:L是缺页之间的平均时间,S是平均缺页服务时间,即用于置换一个页面所需的时间。L远大于S,说明很少发生缺页;L小于S,说明频繁发生缺页。L=S时,磁盘和处理机都可达到它们的最大利用率。
4.选择暂停的进程:当多道程序度偏高时,系统必须减少多道程序的数目。优先暂停那些优先级较低或并不十分重要的进程,将它们调出到磁盘上。
请求段表机制:请求分段式管理中所需的主要数据结构式请求段表,其数据结构从左到右依次是:段名,段长,段基址,存取方式,访问字段,修改位,存在位,增补位,外存始址。除了段名,段长,段基址外,其他地段都是新增的。
1.存取方式:存取方式字段用于对该段信息进行保护
2.访问字段:用于记录该段被频繁访问的程度
3.修改位:表示该页在进入内存后是否已被修改过
4.存在位:指示该段是否已经调入内存
5.增补位:用于表示本段在运行过程中是否快做过动态增长
6.外存始址:本段在外存中的起始地址,即起始盘号
共享段表:为了实现分段共享,可在系统中配置一张共享段表,所有共享段都在共享段表中占有一个表项。在表项上面记录了共享段号,段长,内存始址,状态位,外存始址及共享计数等信息。接下去就是记录了共享此分段的每个进程的情况。
1.共享进程计数count:为记录有多少进程正在共享该段,须设置共享进程计数count,只要当count为0时,表示没有进程正在使用它,则进行回收。
2.存取控制字段:对于一个共享段,应为不同的进程赋予不同的存取权限
3.对于一个共享段,在不同的进程中可以具有不同的段号,每个进程可用自己进程的段号取访问该共享段。
分段保护:
1.越界检查:在进行地址变换时,首先将逻辑地址空间的段号与段表长度进行比较,还要检查段内地址是否大于段长。
2.存取控制检查:在段表的每个表项中都设置一个"存取控制字段",用于规定对该段的访问方式。
3.环保护机构:该机制中规定,地编号的环具有高优先权。OS核心处于0号环内;某些重要的实用程序和操作系统服务占居中环;而一般的应用程序,则被安排在外环上。在环系统中,程序的访问和调用应遵循以下规则:
1>一个程序可以访问驻留在相同环或较低特权环(外环)中的数据
2>一个程序可以调用驻留在相同环或较高特权环(内环)中的服务。