操作系统 分段

操作系统 分段

在操作系统中,分段是一种内存管理技术,将内存分成变量大小的部分。每个部分被称为一个段,可以分配给一个进程。

关于每个段的详细信息存储在一个称为段表的表中。段表存储在一个(或多个)段中。

段表主要包含两个关于段的信息:

  1. 基址:段的基地址
  2. 限制:段的长度

为什么需要分段

到目前为止,我们一直使用分页作为我们的主要内存管理技术。分页更加接近于操作系统,而不是用户。它将所有进程分段成页的形式,而不考虑一个进程可以有一些需要加载在同一页的相关部分。

操作系统不关心用户对进程的视图。它可能将相同的功能分段成不同的页面,这些页面可能会或可能不会同时加载到内存中。这降低了系统的效率。

最好使用分段将进程分成段。每个段包含相同类型的功能,例如主函数可以包含在一个段中,库函数可以包含在另一个段中。

操作系统 分段

通过段表将逻辑地址转换为物理地址

CPU生成一个包含两个部分的逻辑地址:

  1. 段号
  2. 偏移量

    例如:

假设使用16位地址,其中4位用于段号,12位用于段偏移量,因此最大段大小为4096,可以引用的段的最大数量为16。

当程序加载到内存中时,分段系统试图找到足够大的空间来容纳进程的第一个段,空间信息是从内存管理器维护的空闲列表中获得的。然后它尝试为其他段找到空间。一旦为所有段定位到足够的空间,就会将它们加载到各自的区域。

操作系统还为每个程序生成一个段映射表。

操作系统 分段

在程序执行过程中,借助段映射表和硬件辅助,操作系统可以轻松地将逻辑地址转换为物理地址。

段号 映射到段表。与偏移量进行比较来判断该地址是否有效。如果偏移量小于限制,则地址有效;否则,将抛出错误,因为地址无效。

对于有效地址,将段的基地址与偏移量相加以获取主内存中实际单词的物理地址。

上图显示了在分段的情况下如何进行地址转换。

分段的优势

  1. 无内部碎片
  2. 平均段大小大于实际页面大小
  3. 开销较小
  4. 重新定位段比重新定位整个地址空间更容易
  5. 段表比分页中的页表要小

分段的劣势

  1. 可能存在外部碎片
  2. 为变长分区分配连续内存较困难
  3. 内存管理算法较昂贵

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程