您的位置:首页 > 其它

操作系统存储管理之分段存储

2018-03-26 16:08 387 查看

需求

从固定分区到动态分区,从分区方式到分页方式发展提高了主存空间利用率。 
而分段存储管理的引入,则满足用户(程序员)编程和使用上的要求,这些要求其它各种存储管理技术难以满足。

需求解析:

在分页存储管理中,经连结编辑处理得到了一维地址结构的可装配模块,这是从0开始编址的一个单一连续的逻辑地址空间,虽然操作系统可把程序划分成页面,但页面与源程序无逻辑关系,也就难以实现对源程序以模块为单位进行分配、共享和保护。
而程序还存在一种分段结构: 
一个程序由若干程序段(模块)组成,例如由一个主程序段、若干子程序段、数组段和工作区段所组成
每个段都从“0”开始编址,每个段都有模块名,且具有完整的逻辑意义。
段与段之间的地址不连续,而段内地址是连续的。用户程序中可用符号形式(指出段名和入口)调用某段的功能,程序在编译或汇编时给每个段再定义一个段号。
可见这是一个二维地址结构,分段方式的程序被装入物理地址空间后,仍应保持二维,这样才能满足用户模块化程序设计的需要。 
具体分段图如下所示: 



基本原理

段式存储管理是以段为单位进行存储分配,为此提供如下形式的两维逻辑地址: 
段号:段内地址

在分页式存储管理中,页的划分——即逻辑地址划分为页号和单元号是用户不可见的,连续的用户地址空间将根据页框架(块)的大小自动分页;而在分段式存储管理中,地址结构是用户可见的,即用户知道逻辑地址如何划分为段号和单元号,用户在程序设计时,每个段的最大长度受到地址结构的限制,进一步,每一个程序中允许的最多段数也可能受到限制. 
例如,PDP-11/45的段址结构为:段号占3位,单元号占 13 位,也就是一个作业最多可分8段,每段的长度可达 8K 字节。
类似于页表及其作业表,段表及其作业表如下所示: 


地址转换与存储保护

流程图如下所示: 


 
段表表目实际上起到了基址/限长寄存器的作用。作业执行时通过段表可将逻辑地址转换成绝对地址。由于每个作业都有自己的段表,地址转换应按各自的段表进行。类似于分页存储器那样,分段存储器也设置一个段表控制寄存器,用来存放当前占用处理器的作业的段表始址和长度。在分段式存储管理中,由于每个作业可以有几个段组成,所以可以实现段的共享,以存放共享的程序和常数。所谓段的共享,事实上就是共享分区,为此计算机系统要提供多对基址/限长寄存器。于是,几道作业共享的例行程序就可放在一个公共的分区中,只要让各道的共享部分有相同的基址 /限长值就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: