您的位置:首页 > 其它

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

2017-04-23 14:57 375 查看

需求

从固定分区到动态分区,从分区方式到分页方式发展提高了主存空间利用率。

而分段存储管理的引入,则满足用户(程序员)编程和使用上的要求,这些要求其它各种存储管理技术难以满足。

需求解析:

在分页存储管理中,经连结编辑处理得到了一维地址结构的可装配模块,这是从0开始编址的一个单一连续的逻辑地址空间,虽然操作系统可把程序划分成页面,但页面与源程序无逻辑关系,也就难以实现对源程序以模块为单位进行分配、共享和保护。

而程序还存在一种分段结构:

一个程序由若干程序段(模块)组成,例如由一个主程序段、若干子程序段、数组段和工作区段所组成

每个段都从“0”开始编址,每个段都有模块名,且具有完整的逻辑意义。

段与段之间的地址不连续,而段内地址是连续的。用户程序中可用符号形式(指出段名和入口)调用某段的功能,程序在编译或汇编时给每个段再定义一个段号。

可见这是一个二维地址结构,分段方式的程序被装入物理地址空间后,仍应保持二维,这样才能满足用户模块化程序设计的需要。

具体分段图如下所示:



基本原理

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

段号:段内地址


在分页式存储管理中,页的划分——即逻辑地址划分为页号和单元号是用户不可见的,连续的用户地址空间将根据页框架(块)的大小自动分页;而在分段式存储管理中,地址结构是用户可见的,即用户知道逻辑地址如何划分为段号和单元号,用户在程序设计时,每个段的最大长度受到地址结构的限制,进一步,每一个程序中允许的最多段数也可能受到限制.

例如,PDP-11/45的段址结构为:段号占3位,单元号占 13 位,也就是一个作业最多可分8段,每段的长度可达 8K 字节。

类似于页表及其作业表,段表及其作业表如下所示:



地址转换与存储保护

流程图如下所示:



段表表目实际上起到了基址/限长寄存器的作用。作业执行时通过段表可将逻辑地址转换成绝对地址。由于每个作业都有自己的段表,地址转换应按各自的段表进行。类似于分页存储器那样,分段存储器也设置一个段表控制寄存器,用来存放当前占用处理器的作业的段表始址和长度。

在分段式存储管理中,由于每个作业可以有几个段组成,所以可以实现段的共享,以存放共享的程序和常数。所谓段的共享,事实上就是共享分区,为此计算机系统要提供多对基址/限长寄存器。于是,几道作业共享的例行程序就可放在一个公共的分区中,只要让各道的共享部分有相同的基址 /限长值就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: