概述
4.4、基本分段存储管理方式
如果说推动存储管理方式从固定分区到动态分区分配,进而又发展到分页存储管理方式的主要动力,是提高内存利用率,那么,引入分段存储管理方式的目的,则主要是为了满足用户(程序员)在编程和使用上多方面的要求,其中有些要求是其它几种存储管理方式所难以满足的。(每一段的大小可以是不一样的,即其段长可以不一致)
4.4.1、分段
在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。为了实现简单起见,通常可用一个段号来代替段名,每个段都从0开始编址,并采用一段连续的地址空间。段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。整个作业的地址空间由于是分成多个段,因而是二维的,亦即,其逻辑地址由段号(段名)和段内地址所组成。
分段地址中的地址具有如下结构:
4.4.2、段表
为使程序能正常运行,亦即,能从物理内存中找出每个逻辑段所对应的位置,应像分页系统那样,在系统中为每个进程建立一张段映射表,简称“段表”。每个段在表中占有一个表项,其中记录了该段在内存中的起始地址(又称为“基址”)和段的长度。段表是用于实现从逻辑段到物理内存区的映射。
4.4.3、地址变换机构
为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址和段表长度TL。在进行地址变换时,系统将逻辑地址中的段号与段表长度TL进行比较。若S>TL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起始地址,然后,再检查段内地址d是否超过该段的段长SL。若超过,即d>SL,同样发出越界中断信号;若未越界,则将该段的基址d 与段内地址相加,即可得到要访问的内存物理地址。
图4-3 分段系统的地址变换过程
假设段表的起始地址为F和段表长度为M,从逻辑地址A到物理地址E之间的地址变换如下:
(1)从逻辑地址A中取出前几位为段号S,后几位为段内偏移量W。
(2)比较段号S和段表长度M,若S≥M,则产生越界中断,否则转向下一步。
(3)段表中段号S对应的段表项地址 = 段表起始地址F + 段号S×段表项长度,取出该段表项的前几位得到段长C,后几位得到段的起始地址b。若段内偏移量W≥C,则产生越界中断,否则转至下一步。
(4)计算物理地址E = b+ W。
(5)用得到的物理地址E去访问内存。
例如,假设段号0的起始地址为210,段长为500,计算逻辑地址A=430的物理地址E的过程如下:
S=0;W=430,查找得到段号0的表项的起始地址为210,段长为500,因为430<500,所以该逻辑地址是合法的,则物理地址E = 210 + 430 = 640。
4.4.4、分页和分段的区别
由上所述不难看出,分页和分段系统有许多相似之处。比如,两者都采用离散分配方式,且都要通过地址映射机构来实现地址变换。但在概念上两者完全不同,主要表现在下述三个方面。
(1) 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
(2) 页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。
(3) 分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
最后
以上就是标致歌曲为你收集整理的第四章 存储器管理(3)——基本分段存储管理方式的全部内容,希望文章能够帮你解决第四章 存储器管理(3)——基本分段存储管理方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复