4-2.请求段式管理
一、请求段式管理
便于共享。
1.请求段式管理中的硬件支持
(1)段表机制
段名 | 段长 | 段的基址 | 存取方式 | 访问字段A | 修改位M | 存在位P | 增补位 | 外存始址 |
---|---|---|---|---|---|---|---|---|
1)字段
存取方式:用于标识本分段的存取属性只是执行、只读,还是允许读/写
访问字段A:其含义与请求分页的相应字段相同,记录该该段被访问的频繁程度。
修改位M:用于表示该页在进入内存后是否已被修改过,供置换页面时参考。
存在位P:指示本段是否已调入内存,供程序访问时参考。
增补位:这是请求分段式管理中所特有的字段,用于表示本段在运行过程中是否做过动态增长。
外存始址:指示本段在外存中的起始地址,即起始盘块号。
(2)缺段中断机构
缺段中断的处理过程.png在请求分段系统中,每当发现运行进程所要访问的段尚未调入内存时,便由缺段中断机构产生一缺段中断信号,进入OS后由缺段中断处理程序将所需的段调入内存。缺段中断机构与缺页中断机构类似,它同样需要在一条指令的执行期间,产生和处理中断,以及在一条指令执行期间,可能产生多次缺段中断。但由于分段是信息的逻辑单位,因而不可能出现一条指令被分割在两个分段中和一组信息被分割在两个分段中的情况。缺段中断的处理过程如上图所示。由于段不是定长的,这使对缺段中断的处理比对缺页中断的处理复杂。
(3) 地址变换机制
请求段式的地址变换.png请求分段系统中的地址变换机构在分段系统地址变换机构的基础上形成的。因为被访问的段并非全在内存,所以在地址变换时,若发现所要访问的段不在内存,必须先将所缺的段调入内存,并修改段表,然后才能再利用段表进行地址变换。为此,在地址变换机构中又增加了某些功能,如缺段中断的请求及处理等。
2.分段的共享与保护
(1)共享段表
共享段表.png为实现分段共享,可在系统中配置一张共享段表,所有各共享段都在共享段表中占有一表项。表项中记录了共享段的段号、段长、内存地址、存在位等信息,并记录了共享此分段的每个进程的情况。共享段表如上图所示。
共享进程计数count。非共享段仅为一个进程所需要。当进程不再需要该段时,可立即释放该段,由系统回收该段所占用的空间。而共享段是为多个进程所需要的,当某进程不再需要时,系统并不回收该段所占内存区,仅当所有共享该段的进程全都不再需要它时,才由系统回收该段所占内存区。为了记录有多少个进程需要共享该分段,特设置了一个整型变量count。
存取控制字段。对于一个共享段,应给不同的进程以不同的存取权限。例如,对于文件主,通常允许他读和写;而对其它进程,则可能只允许读,甚至只允许执行。
段号。对于一个共享段,不同的进程可以各用不同的段号去共享该段。
(2) 共享段的分配与回收
1)共享段的分配
在为共享段分配内存时,对第一个请求使用该共享段的进程,由系统为该共享段分配一物理区,再把共享段调入该区,同时将该区的始址填入请求进程的段表的相应项中,还须在共享段表中增加一表项,填写有关数据,把count置为1之后,当又有其它进程需要调用该共享段时,由于该共享段已被调入内存,故此时无须再为该段分配内存,而只需在调用进程的段表中,增加一表项,填写该共享段的物理地址;在共享段的段表中,填上调用进程的进程名、存取控制等,再执行count:=count+1操作(即count+1操作),表明有两个进程共享该段。
注意:
当count > 1时,尽量不要淘汰;尽量不允许修改。
2)共享段的回收
当共享此段的某进程不再需要该段时,应将该段释放,包括撤消在该进程段表中共享段所对应的表项,以及执行count:= count -1操作。若结果为0,则须由系统回收该共享段的物理内存,取消在共享段表中该段所对应的表项,表明此时已没有进程使用该段;否则(减1结果不为0), 则只是取消调用者进程在共享段表中的有关记录。
(3)分段保护
1)越界检查
在段表寄存器放有段表长度信息;同样,在段表中也为每个段设置有段长字段。在进行存储访问时,首先将逻辑地址空间的段号与段表长度进行比较,如果段号等于或大于段表长度,将发出地址越界中断信号;其次,还要检查段内地是否等于或大于段表长度,将发出地址越界中断信号,从而保证了每个进程只能在自己的地址空间内运行。
2)存取控制检查
① 只读:
只允许进程对该段中的程序或数据进行读访问。
② 只执行:
只允许进程调用该段去执行,不准读该段的内容,也不允许对该段执行写操作。
③ 读/写,允许进程对该段进行读/写访问:
对于共享段而言,存取控制就显得尤为重要,因而对不同的进程,应赋予不同的读写权限。这时,既要保证信息的安全性,又要满足运行需要。
3)环保护机构
① 一个程序可以访问驻留在相同环或较低特权环中的数据。
② 一个程序可以调用驻留在相同环或较高特权环中的服务。