Appearance
3.7 其它管理方式
一、请求分段存储管理方式
1. 基本原理
建立在基本分段机制之上
- 程序的逻辑地址空间被划分为若干个大小不同的段
- 每个逻辑段装载到一段连续的物理内存区域
- 段表记录逻辑段和物理段的对应情况
引入请求调段和分段置换机制
- 部分逻辑段载入内存
- 对换机制
- 以段作为换入或换出的基本单位
2. 硬件支持
段表机制
访问字段A:用于记录本段在一段时间内被访问的次数,或记录本段最近已有多长时间未被访问
修改位M:表示该段在调入内存后是否被修改过
状态位P:用于指示本段是否已调入内存
增补位:请求分段存储管理方式的特有字段,用于表示本段在运行过程中是否做过动态增长
外存地址:用于指出本段在外存上的地址
缺段中断机制
每当所要访问的段不在内存时,便产生缺段中断,请求OS将所缺之段调入内存。
与缺页中断类似——在指令执行期间产生和处理中断信号;以及一条指令在执行期间,可能产生多次缺段中断。但由于段是信息的逻辑单位,故不会出现一条指令被分割在两个分段中的情况。
请求分段系统中的中断处理过程:
地址转换机制
基本分段地址转换部分
缺段中断处理部分
段换出部分
请求分段系统的地址变换过程:
3. 动态链接和链接中断处理
采用请求分段存储管理方式可以实现程序的动态链接
在程序开始运行时,只将主程序段装配好并调入内存,其它各段的装配是在主程序段的运行过程中逐步完成
每当需要调用一个新段时,再将这个新段装配好,并与主程序段链接。(页式存储管理方式难以实现动态链接,其逻辑地址是一维的)
二、段页式虚拟存储技术
1. 基本原理
建立在段页式存储技术之上
- 程序的逻辑空间划分为若干大小不同的段
- 每个段划分为若干固定大小的页面
- 物理内存划分为若干固定大小的页框
- 页面可以载入任意页框——页表记录载入情况
引入请求调页和页面置换机制
- 部分页面载入内存
- 对换机制
- 以页面作为换入或换出的基本单位
地址变换
- 先查段表,再查该段的页表
- 缺段中断和缺页中断
三、共享与保护
1. 共享段表
整个系统一张
段本身信息
引用者信息
2. 共享段的分配
第一次访问
- 分配内存
- 增加共享段表
- 修改进程段表
后续访问
- 修改共享段表
- 修改进程段表
3. 共享段的回收
count=0
count≠0
4. 分段保护
越界检查
- 段号越界检查
- 段内页号越界检查
存取控制检查
- R、W、X
环保护机构
- 内环可访问外环数据
- 外环可请求内环服务
5. 信息共享示例
例如,有一个多用户系统,可同时接纳40个用户,他们都执行一个文本编辑程序(Text Editor)。如果文本编辑程序有160KB的代码和另外40KB的数据区,则总共需有8000KB的内存空间来支持40个用户。如果160KB的代码是可重入的(Reentrant),则无论是在分页系统还是在分段系统中,该代码都能被共享,在内存中只需保留一份文本编辑程序的副本,此时所需的内存空间仅为1760KB(40×40+160),而不是8000KB。
假定每个页面的大小为4KB,那么,160KB的代码将占用40个页面,数据区占10个页面。为实现代码的共享,应在每个进程的页表中都建立40个页表项,它们的物理块号都是21#~60#。在每个进程的页表中,还须为自己的数据区建立页表项,它们的物理块号分别是61#~70#、71#~80#、81#~90# 等等。
在分段系统中,实现共享则容易得多,只需在每个进程的段表中为文本编辑程序设置一个段表项。