5.4.3 “抖动”的预防方法
这些方法几乎都是采用调节多道程序度来控制“抖动”发生的。
1.采取局部置换策略。
即使该进程发生了“抖动”,也不会对其它进程产生影响,于是可把该进程“抖动”所造成的影响限制在较小的范围内。但在某进程发生“抖动”后,它还会长期处在磁盘 I/O 的等待队列中,使队列的长度增加,这会延长其它进程缺页中断的处理时间。
2.把工作集算法融入到处理机调度中
当调度程序发现处理机利用率低下时,它将试图从外存调入一个新作业进入内存,在从外存调入作业之前,必须检查每个进程在内存的驻留页面是否足够多。如果都足够多,此时便可以从外存调入新的作业,不会因新作业的调入而导致缺页率的增加;反之,如果有些进程的内存页面不足,则应首先为那些缺页率居高的作业增加新的物理块,此时将不再调入新的作业。
3.利用“L=S”准则调节缺页率
其中L是缺页之间的平均时间,S是平均缺页服务时间,即用于置换一个页面所需的时间。如果是L远比S大,说明很少发生缺页,磁盘的能力尚未得到充分的利用;反之,如果是L比S小,则说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。只有当L与S接近时,磁盘和处理机都可达到它们的最大利用率。理论和实践都已证明,利用“L=S”准则,对于调节缺页率是十分有效的。
4.选择暂停进程
基于某种原则选择暂停某些进程。将它们调出到磁盘上,以便腾出内存空间分配给缺页率发生偏高的进程。
5.5 请求分段存储管理方式
5.5.1 请求分段中的硬件支持
1.请求段表机制
除了段名(号)、段长、段在内存中的起始地址外,还增加了以下诸项:
1)存取方式:根据信息的属性对分段实施保护。如果该字段为两位,则存取属性是只执行、只读和允许读/写。
2)访问字段 A:记录该段被访问的频繁程度。
3)修改位 M:表示该段在进入内存后是否已被修改过。
4)存在位 P:指示本段是否已调入内存。
5)增补位:表示本段在运行过程中是否做过动态增长。
6)外存始址:指示本段在外存中的起始地址,即起始盘块号。
2.缺段中断机构
每当发现运行进程所要访问的段尚未调入内存时,便由缺段中断机构产生一缺段中断信号,进入 OS 后由缺段中断处理程序将所需的段调入内存。缺段中断机构与缺页中断机构类似,它同样需要在一条指令的执行期间,产生和处理中断,以及在一条指令执行期间,可能产生多次缺段中断。但由于分段是信息的逻辑单位,因而不可能出现一条指令被分割在两个分段中和一组信息被分割在两个分段中的情况。由于段不是定长的,这使对缺段中断的处理要比对缺页中断的处理复杂。
3.地址变换机构
上图中的段表的的起始编号是从 1 开始的。
5.5.2 分段的共享与保护
1.共享段表
为了实现分段共享,可在系统中配置一张共享段表,所有各共享段都在共享段表中占有一表项。记录了共享段的信息和共享
此分段的某个进程的情况。
1)共享进程计数 count。非共享段仅为一个进程所需要。而共享段是为多个进程所需要的,当某进程不再需要而释放它时,系统并不立即回收该段所占内存区,而是检查 count 是否为 0,若不是 0,则表示还有进程需要它,仅当所有共享该段的进程全不再需要它使,此时 count 为 0,才由系统回收该段所占的内存区。
2)存取控制字段。对于一个共享段,应给不同的进程以不同的存取权限。
3) 段号。对于一个共享段,在不同的进程中可以具有不同的短号,每个进程可用自己进程的段号去访问该共享段。
2.共享段的分配与回收
1)共享段的分配。
在为共享段分配内存时,对第一个请求使用该共享段的进程,由系统为该共享段分配一物理区,再把共享段调入该区,同时将该区的始址填入请求进程的段表的相应项中,还须在共享段表中增加一表项,填写有关数据,把 count 置为 1。之后,当
又有其它进程需要调用该共享段时,由于该共享段已被调入内存,故此时无须再为该段分配内存,而只需在调用进程的段表中增加一表项,填写该共享段的物理地址;以及在共享段的段表中,填上调用进程的进程名、存取控制等,再执行 count = count+1 操作。
2)共享段的回收。
当共享此段的某进程不再需要该段时,应将该段释放,包括撤消在该进程段表中共享
段所对应的表项,以及执行 count = count-1 操作。若结果为 0,表明此时已没有进程在使用该段,则须由系统回收该共享段的物理内存,以及取消在共享段表中当前调用进程所对应的表项。否则(减 1 结果不为 0),只是取消调用者进程在共享段表中的有关记录。
3.分段保护
1)越界检查。
越界检查时利用地址变换机构来完成的。①短号和段表长度的比较。②段内地址和段长的比较。
2)存取控制检查。
存取控制检查是以段为基本单位进行的。在段表的每个表项中都设置了一个“存取控制”字段,用于规定对该段的访问方式。对于共享段而言,存取控制就显得尤为重要。
3)环保护机构。
这是一种功能较完善的保护机制。在该机制中规定:低编号的环具有高优先权。OS 核心处于 0 环内;某些重要的实用程序和操作系统服务占居中间环;而一般的应用程序则被安排在外环上。在环系统中,程序的访问和调用应遵循以下规则:
1)一个程序可以访问驻留在相同环或较低特权环中(较之编号高的环)的数据。类似于读。
2)一个程序可以调用驻留在相同环或较高特权环中(较之编号低的环)的服务。类似于执行。



