段式存储管理
段式存储管理概述
-
在段式存储管理中,程序是由若干个段组成的。每个段具有独立且完整的逻辑意义,例如程序主程序、子程序、符号表、栈、数据等,都可以划分为不同的段。
-
每个段的长度可以不同,且每个段可以独立编写、加载和执行。段式存储管理是基于程序的逻辑结构进行划分和管理的,能够更好地适应程序的需求。
-
段式存储管理支持分段观点,使得程序的内存结构更加清晰,并便于管理,具有较强的逻辑完整性。
基本原理
-
段的划分:程序的地址空间按逻辑关系划分为多个段,每个段通常包含一个功能模块(如一个函数)。各段在内存中的分布与程序的逻辑结构相对应。
-
段的独立性:每个段在内存中都有独立的存储空间,且段与段之间的存储地址通常是不连续的,而每个段内的地址是连续的。每个段的地址空间从“0”开始编址。
- 其逻辑地址由段号和段内地址两部分所组成:
空间的分配与回收
- 当一个段无法找到足够大的空闲区时,系统可以通过移动技术合并分散的空闲区,方便装入更大的作业。
- 当作业结束后,它占用的主存空间会被回收,并登记在空闲分区表中,回收时也会检查是否有相邻的空闲分区,将其合并成一个新的空闲区进行管理。
- 段表存储在主存中,访问数据或指令时可能需要至少访问两次主存,为了提高速度,常使用高速缓冲寄存器来存储常用的段表项。
地址转换与存储保护
- 段式存储管理采用动态重定位装入作业,作业执行时通过硬件的地址转换机构实现从逻辑地址到物理地址的转换。
- 段表中的表目充当基址寄存器和限长寄存器,负责硬件的地址转换。
段的共享
- 段的共享是分段管理的突出优点,可以让多个进程共享同一段的代码或数据。进程在段表中设置相同的段名,并指定适当的读写权限。
- 例如,在多用户系统中,多个用户可以共享同一个程序段(如文本编辑程序的代码),如果该段是可重入的,代码只需在主存中保留一份。
- 在共享时,需要注意共享段的修改和置换问题,确保正在使用的共享段不会被置换出主存。共享位可以帮助判断段是否正在被使用。