学习日期:2024.6.23
内容摘要:基本分段存储管理介绍
在上一章节中,我们介绍了基本分页存储管理,而这一章节我们将介绍基本分段存储管理。
分段与分页最大的区别就是,离散分配时所分配地址空间的基本单位不同。
分段的基本概念
进程中的地址空间按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名。
内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻。因为是按逻辑功能模块划分,用户编程更加方便,程序的可读性更高。
分段系统的逻辑地址结构由段号和段内地址(段内偏移量)组成,段号的位数决定了每个进程可以分几个段,段内地址的位数决定了每个段的最大长度是多少。
段号就是“有多少个段”,段号的位数是x,就是有2^x个段,而段内地址就是一个段内有多少空间。
段表
和页表类似(详见基本分页存储管理),程序分多个段离散装入内存,为保证程序能正常运行, 就必须能从物理内存中找到各个逻辑段的存放位置,为此,需要为每个进程建立一个记录映射关系的表,称为段表。
每个段对应一个段表项。记录了该段在内存中的起始位置(又称“基址”)和段长。
各个段表项的长度相同。同页号一样,由于段表项长度相同,段号也可以是隐含的,不占存储空间
同样与页表类似,分段存储管理基于逻辑地址查询物理地址的流程:
①系统根据逻辑地址得到段号和段内地址。
②段表寄存器判断段号是否越界,越界则产生越界中断。
③查询段表,找到对应的段表项。
④检查段内地址(段内偏移量)是否超过段长,若超过则产生越界中断(在页式存储中没有这一步,因为各个段的长度不同,一定要对段内的地址进行越界检查)
⑤根据段的基址+段内地址得到物理地址。
两种管理方式的对比
页是信息的物理单位,分页的主要目的是为了实现离散分配,提高内存利用率。分页仅仅是系统管理上的需求,对用户是不可见的。
段是信息的逻辑单位,分段的主要目的是更好的满足用户需求。一个段通常包含着一组属于一个逻辑模块的信息,分段对用户是可见的,在使用低级语言编程时,需要显式的给出段名。
页的大小固定,由系统决定,而段的大小不固定,取决于用户编写的程序。
分页的用户进程地址空间是一维的,程序员只需给出一个记忆符即可标识一个地址。
分段的用户进程地址空间是二维的,程序员需要给出段名和段内地址,才能标识一个地址。
分段比分页更容易实现对信息的共享和保护。只需让进程的段表项指向同一个段即可实现共享。
访问一个逻辑地址需要几次访存?
分页(单级页表):第一次访存——查内存中的页表 第二次访存——访问目标内单元
分段:第一次访存:查内存中的段表 第二次访存——访问目标内存单元
与分页系统类似,分段系统中也可以引入快表,将近期访问过的段表项放到快表当中,可以减少一次访问,加快地址变换速度。
内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》