经过连接而组成的程序所占用的空间被称为程序的逻辑空间,在指令中,一个逻辑地址由逻辑段号拼接上段内地址组成(每段的第一个字的段内地址均默认为0)。在程序运行过程中,当用到某一段并将其调入主存时,它被分配在一片连续的主存区域,该主存区域的起始单元用于存放该段的第一个字,以后各字均依次顺序存放。图4.24 给出了由三段组成的一个程序的逻辑地址空间,其中两段已装入主存的示意表示。由此可见,段式存储管理的核心问题是变逻辑地址中的逻辑页号为主存中的一个存储区域的起始地址,这是通过在系统中设置一个段表完成的。段表也是一个特定的段,通常被保存在主存中。为访问段表,段表在主存中的起始地址被写入到一个被称为段表基地址寄存器的专用的寄存器中。段表由多个入口(表项)组成,每个表项由3部分内容构成:段起始地址,段的长度,段的装入位。段起始地址给出的是本段在主存中的起始地址,该起始地址加上段内地址就得到本段的一个字在主存中的真正地址,段的长度用于进行主存使用的合法性检查,当出现段内地址超过段的长度时,就能发现遇到主存使用越界的错误。段的装入位用于判断本段是否已装入主存。图4.25 给出了由逻辑地址到主存实际地址的转换过程。


图4.24 逻辑地址与主存占用示意表示


图4.25 逻辑地址到主存实际地址的转换

  段式存储器管理的优点是明显的。首先,段的分界与程序的自然分界相对应;其次,段逻辑上的独立性使其易于分别编译、管理、修改和保护,也便于多道程序实现对段的共享。但段长的不确定性,会给主存空间的分配与管理带来麻烦,而且容易造成在段间留下许多零碎的、难以使用的小的存储空间,浪费存储器的有效可用容量,假若碎块太多,甚至会使整个存储器都难以利用。