视频字幕
在传统的连续分配存储方式中,程序必须作为一个整体连续存放在内存中,这带来了许多局限性。程序员在编写程序时,自然地将程序分为代码段、数据段、堆栈段等不同的逻辑部分。分段存储管理正是基于这种程序的逻辑结构,将程序分成若干个段,每个段都有自己的名字和长度,可以独立地进行存储管理。这种方式更符合程序员的思维习惯,也便于实现程序段的共享和保护。
分段存储管理中,逻辑地址采用二维结构,由段号和段内偏移组成。系统维护一个段表,记录每个段的段号、段长和基址信息。地址转换过程分为四个步骤:首先用段号作为段表的索引,找到对应的段表项;然后获取该段的基址和段长;接着检查段内偏移是否超出段长,进行越界检查;最后计算物理地址,即基址加上段内偏移。例如,逻辑地址为段号0、偏移100时,查段表得到基址2000,最终物理地址为2100。
分段存储管理需要专门的硬件支持。CPU中设置了段表寄存器组,包括段表基址寄存器STBR和段表长度寄存器STLR。STBR存放段表在内存中的起始地址,STLR存放段表的长度。当CPU执行地址转换时,首先提取逻辑地址中的段号和偏移,然后检查段号是否超出段表长度,如果超出则产生中断。接着利用STBR和段号计算段表项的内存地址,访问段表获取段的基址和长度信息,最后进行越界检查并计算最终的物理地址。这种硬件支持使得地址转换过程高效可靠。
分段存储管理方式具有明显的优缺点。其优点包括:符合程序的逻辑结构,使程序设计更加自然;便于编程和调试,程序员可以按逻辑功能组织代码;便于实现段的共享和保护,不同进程可以共享相同的代码段;支持段的动态增长,适应程序运行时的需求变化。然而,分段存储也存在缺点:会产生外部碎片,降低内存利用率;段表需要占用额外的内存空间;地址转换过程增加了系统开销。正是由于这些局限性,现代操作系统发展出了段页式存储管理,结合了分段和分页的优点,成为主流的内存管理方式。
通过本节的学习,我们全面了解了基本分段存储管理方式。分段存储管理按照程序的逻辑结构将程序分成若干个段,采用二维逻辑地址结构,通过段表记录每个段的信息。整个管理流程包括程序逻辑分段、建立段表、硬件地址转换和内存访问四个关键步骤。分段存储管理具有逻辑清晰、硬件支持完善、支持动态管理等优点,但也存在外部碎片的问题。正是在分段存储管理的基础上,现代操作系统发展出了段页式存储管理,更好地解决了内存管理的各种问题,成为当今主流的内存管理技术。