os 请求分段存储管理方式

在分页基础上建立的请求分页式虚拟存储器系统,是以页面为单位进行换入、换出的。而在分段基础上所建立的请求分段式虚拟存储器系统,则是以分段为单位进行换入、换出的。它们在实现原理以及所需要的硬件支持上都是十分相似的。在请求分段系统中,程序运行之前,只需先调入少数几个分段(不必调入所有的分段)便可启动运行。当所访问的段不在内存中时,可请求 OS 将所缺的段调入内存。像请求分页系统一样,为实现请求分段存储管理方式,同样需要一定的硬件支持和相应的软件。

请求分段中的硬件支持

为了实现请求分段式存储管理,应在系统中配置多种硬件机构,以支持快速地完成请求分段功能。与请求分页系统相似,在请求分段系统中所需的硬件支持有段表机制、缺段中断机构,以及地址变换机构。

请求段表机制

在请求分段式管理中所需的主要数据结构是请求段表。在该表中除了具有请求分页机制中有的访问字段 A 、修改位 M 、存在位 P 和外存始址四个字段外,还增加了存取方式字段和增补位。这些字段供程序在调进、调出时参考。下面给出请求分段的段表项。
在这里插入图片描述
在段表项中,除了段名(号)、段长、段在内存中的起始地址(段基址)外,还增加了以下字段:

  • (1)存取方式。由于应用程序中的段是信息的逻辑单位,可根据该信息的属性对它实施保护,故在段表中增加存取方式字段,如果该段为两位,则存取属性是只执行、只读和允许读/写。
  • (2)访问字段 A 。其含义与请求分页的相应字段相同,用于记录该段被访问的频繁程度。提供给置换算法选择换出页面时参考。
  • (3)修改位 M 。该字段用于表示该页在进入内存后是否已被修改过,供置换页面时参考。
  • (4)存在位 P 。该字段用于指示本段是否已调入内存,供程序访问时参考。
  • (5)增补位。这是请求分段式管理中所特有的字段,用于表示本段在运行过程中是否做过动态增长。
  • (6)外存始址。指示本段在外存中的起始地址,即起始盘块号。

缺段中断机构

在请求分段系统中采用的是请求调段策略。每当发现运行进程所要访问的段尚未调入内存时,便由缺段中断机构产生一缺段中断信号,进入 OS 后,由缺段中断处理程序将所需的段调入内存。与缺页中断机构类似,缺段中断机构同样需要在一条指令的执行期间产生和处理中断,以及在一条指令执行期间,可能产生多次缺段中断。但由于分段是信息的逻辑单位,因而不可能出现一条指令被分割在两个分段中,和一组信息被分割在两个分段中的情况。缺段中断的处理过程如下图所示。由于段不是定长的,这使对缺段中断的处理要比对缺页中断的处理复杂。
os 请求分段存储管理方式_第1张图片

地址变换机构

请求分段系统中的地址变换机构是在分段系统地址变换机构的基础上形成的。因为被访问的段并非全在内存,所以在地址变换时,若发现所要访问的段不在内存,必须先将所缺的段调入内存,并修改段表,然后才能再利用段表进行地址变换。为此,在地址变换机构中又增加了某些功能,如缺段中断的请求及处理等。下图示出了请求分段系统的地址变换过程。
os 请求分段存储管理方式_第2张图片


分段的共享与保护

本章前面曾介绍过分段存储管理方式的优点是便于实现分段的共享与保护,也扼要地介绍了实现分段共享的方法。本小节将进一步介绍为了实现分段共享,还应配置相应的数据结构——共享段表,以及对共享段进行操作的过程。

共享段表

为了实现分段共享,可在系统中配置一张共享段表,所有各共享段都在共享段表中占有一表项。在表项的上面记录了共享段的段号、段长、内存始址、状态(存在)位、外存始址以及共享计数等信息。接下去就是记录了共享此分段的每个进程的情况。共享段表如下图所示,其中各项说明如下:

(1)共享进程计数 count

非共享段仅为一个进程所需要。当进程不再需要该段时,可立即释放该段,并由系统回收该段所占用的空间。而共享段是为多个进程所需要的,为记录有多少进程正在共享该分段,须设置共享进程计数 count。当某进程不再需要而释放它时,系统并不立即回收该段所占内存区,而是检查 count 是否为0,若不是0,则表示还有进程需要它,仅当所有共享该段的进程全都不再需要它时,此时 count 为0,才由系统回收该段所占内存区。

(2)存取控制字段

对于一个共享段,应为不同的进程赋予不同的存取权限。例如,对于文件主,通常允许他读和写;而对其它进程,则可能只允许读,甚至只允许执行。

(3)段号

对于一个共享段,在不同的进程中可以具有不同的段号,每个进程可用自己进程的段号去访问该共享段。
os 请求分段存储管理方式_第3张图片

共享段的分配与回收

1)共享段的分配

由于共享段是供多个进程所共享的,因此,对共享段的内存分配方法,与非共享段的内存分配方法有所不同。在为共享段分配内存时,对第一个请求使用该共享段的进程,由系统为该共享段分配一物理区,再把共享段调入该区,同时将该区的始址填入请求进程的段表的相应项中,还须在共享段表中增加一表项,填写请求使用该共享段的进程名、段号存取控制等有关数据,把 count 置为1。当又有其他进程需要调用该共享段时,由于该共享段已被调入内存,故此时无须再为该段分配内存,而只需在调用进程的段表中增加一表项,填写该共享段的物理地址。在共享段的段表中增加一个表项,填上调用进程的该共享段在本进程中的段号、存取控制等,再执行 count = count +1操作,以表明有两个进程共享该段。以后,凡有进程需要访问此共享段的,都按上述方式在共享段的段表中增加一个表项。

2)共享段的回收

当共享此段的某进程不再需要该段时,应将该段释放,包括撤消在该进程段表中共享段所对应的表项,以及执行 count = count -1操作。若结果为0,则须由系统回收该共享段的物理内存,以及取消在共享段表中该段所对应的表项,表明此时已没有进程使用该段;否则(减1结果不为0),只是取消调用者进程在共享段表中的有关记录。

分段保护

在分段系统中,由于每个分段在逻辑上是相对独立的,因而比较容易实现信息保护。目前,常采用以下几种措施来确保信息的安全。

1)越界检查

越界检查是利用地址变换机构来完成的。为此,在地址变换机构中设置了段表寄存器,用于存放段表始址和段表长度信息。在进行地址变换时,首先将逻辑地址空间的段号与段表长度进行比较,如果段号等于或大于段表长度,将发出地址越界中断信号。此外,还在段表中为每个段设置有段长字段,在进行地址变换时,还要检查段内地址是否等于或大于段长,若大于段长,将产生地址越界中断信号,从而保证了每个进程只能在自己的地址空间内运行。

2)存取控制检查

存取控制检查是以段为基本单位进行的。为此,在段表的每个表项中都设置了一个“存取控制”字段,用于规定对该段的访问方式。通常的访问方式有:

  • (1)只读,即只允许进程对该段中的程序或数据进行读访问;
  • (2)只执行,即只允许进程调用该段去执行,但不准读该段的内容,更不允许对该段执行写操作;
  • (3)读/写,即允许进程对该段进行读/写访问。

对于共享段而言,存取控制就显得尤为重要,因而对不同的进程应赋予不同的读写权限。这时,既要保证信息的安全性,又要满足运行需要。例如,对于一个企业的财务账目,应该只允许会计人员进行读或写,允许领导及有关人员去读。而对于一般人员,则既不准读,更不能写。值得一提的是,这里所介绍的存取控制检查是基于硬件实现的,它能较好地保证信息的安全,因为攻击者很难对存取控制字段进行修改。

3)环保护机构

这是一种功能较完善的保护机制。在该机制中规定:低编号的环具有高优先权os 核心处于0号环内某些重要的实用程序和操作系统服务占居中间环;而一般的应用程序,则被安排在外环上。在环系统中,程序的访问和调用应遵循以下规则:

  • (1)一个程序可以访问驻留在相同环或较低特权环(外环)中的数据
  • (2)一个程序可以调用驻留在相同环或较高特权环(内环)中的服务

图5-15示出了在环保护机构中的调用程序和数据访问的关系。
os 请求分段存储管理方式_第4张图片

你可能感兴趣的:(#,操作系统,os,请求分段存储管理方式)