写在前面:
- 本系列笔记主要以《计算机操作系统(汤小丹…)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
- 视频链接:操作系统(汤小丹等第四版)_哔哩哔哩_bilibili
一、请求分段中的硬件支持
1、请求段表机制
在请求分段系统中所需要的主要数据结构是段表。由于在应用程序的许多段中只有部分段装入内存,其余的一些段仍留在外存上,故需在段表中增加若干项,以供程序在调进、调出时参考。
在段表项中,除了段名(号)、段长、段在内存中的起始地址(段基址)外,还增加了以下字段:
①存取方式。由于应用程序中的段是信息的逻辑单位,可根据该信息的属性对它实施保护,故在段表中增加存取方式字段,如果该字段为两位,则存取属性是只执行、只读和允许读/写。
②访问字段A。其含义与请求分页的相应字段相同,用于记录该段被访问的频繁程度,提供给置换算法选择换出页面时参考。
③修改位M。该字段用于表示该页在进入内存后是否已被修改过,供置换页面时参考。
④存在位P。该字段用于指示本段是否已调入内存,供程序访问时参考。
⑤增补位。这是请求分段式管理中所特有的字段,用于表示本段在运行过程中是否做过动态增长。
⑥外存始址。该字段用于指示本段在外存中的起始地址,即起始盘块号。
2、缺段中断机构
(1)在请求分段系统中采用的是请求调段策略。每当发现运行进程所要访问的段尚未调入内存时,便由缺段中断机构产生一缺段中断信号,进入OS后,由缺段中断处理程序将所需的段调入内存。
(2)与缺页中断机构类似,缺段中断机构同样需要在一条指令的执行期间产生和处理中断,以及在一条指令执行期间,可能产生多次缺段中断,但由于分段是信息的逻辑单位,因而不可能出现一条指令被分割在两个分段中,或者一组信息被分割在两个分段中的情况。
3、地址变换机构
请求分段系统中的地址变换机构是在分段系统地址变换机构的基础上形成的。因为被访问的段并非全在内存,因而在地址变换时,若发现要访问的段不在内存,必须先将所缺的段调入内存,并修改段表,然后才能利用段表进行地址变换,为此,在地址变换机构中需增加缺段中断的处理及请求等功能。
二、分段的共享与保护
1、共享段表
为了实现共享,可在内存中配置一张共享段表,所有各共享段都在共享段表中占有一表项。
①共享计数count:非共享段仅为一个进程所需要,当进程不再需要该段时,可立即释放该段,并由系统回收该段所占用的空间;而共享是为多个进程所需要的,为记录有多少进程正在共享该分段,须设置共享进程计数count,当某进程不再需要而释放它时,系统并不立即回收该段所占内存区,而是检查count是否为0,若不是0则表示还有进程需要它,仅当所有共享该段的进程全都不再需要它时,此时count为0,才由系统回收该段所占内存区。
②存取控制字段:对于一个共享段,应给不同的进程不同的存取权限。
③段号:对于一个共享段,在不同的进程中可以具有不同的段号,每个进程可用自已进程的段号去访问该共享段。
2、共享段的分配和回收
(1)共享段的分配:
①为共享段分配内存时,对第一个请求使用该共享段的进程,由系统为该共享段分配一物理区,再把共享段调入该区,同时将该区的始址填入请求进程的段表的相应项中,还须在共享段表中增加一表项,填写有关数据,把count置为1。
②之后,当又有其它进程需要调用该共享段时,无需再为该段分配内存,只需在调用进程的段表中增加一表项,填写该共享段的物理地址,同时在共享段的段表中填上调用进程的进程名、存取控制等,再执行count=count+1操作。
(2)共享段的回收:
当共享该段的进程不再需要该段时,应将该段释放,包括撤消在该进程段表中共享段所对应的表项,以及执count=count-1操作,如果结果为0,则需由系统回收该共享段的物理内存,以及取消在共享段表中该段所对应的表项,否则只取消调用者进程在共享段表中的有关记录。
3、分段保护
(1)越界检查:
①越界检查是利用地址变换机构来完成的,为此,在地址变换机构中设置了段表寄存器用于存放段表始址和段表长度信息。
②在进行地址变换时,首先将逻辑地址空间的段号与段表长度进行比较,如果段号等于或大于段表长度,将发出地址越界中断信号。此外,还在段表中为每个段设置有段长字段,在进行地址变换时,还要检查段内地址是否等于或大于段长,若大于段长,将产生地址越界中断信号,从而保证了每个进程只能在自己的地址空间内运行。
(2)存取控制检查:
存取控制检查是以段为基本单位进行的,为此,在段表的每个表项中都设置了一个“存取控制”字段,用于规定对该段的访问方式。通常的访问方式有:
[1]只读,即只允许进程对该段中的程序或数据进行读访问。
[2]只执行,即只允许进程调用该段去执行,但不准读该段的内容,更不允许对该段执行写操作。
[3]读/写,即允许进程对该段进行读/写访问。
(3)环保护机构:
①这是一种功能较完善的保护机制,在该机制中规定低编号的环具有高优先权,OS核心处于0号环内,某些重要的实用程序和操作系统服务占居中间环,而一般的应用程序则被安排在外环上。
②在环系统中,程序的访问和调用应遵循以下规则:
[1]一个程序可以访问驻留在相同环或较低特权环(外环)中的数据。
[2]一个程序可以调用驻留在相同环或较高特权环(内环)中的服务。