本文概述
在操作系统中, 分段是一种内存管理技术, 其中, 内存分为可变大小部分。每个部分都称为段, 可以分配给一个进程。
有关每个段的详细信息存储在称为段表的表中。段表存储在一个(或多个)段中。
段表主要包含有关段的两个信息:
- 基址:它是段的基址
- 限制:这是段的长度。
为什么需要分段?
到目前为止, 我们一直使用Paging作为主要的内存管理技术。分页更接近于操作系统而不是用户。它将一个进程分为页面的形式, 而不管一个进程可能具有需要在同一页面中加载的某些功能。
操作系统不在乎用户对线程的看法。它将相同的功能划分为不同的页面, 并且这些页面可能会或可能不会同时加载到内存中。它降低了系统的效率。
最好进行分段, 以将线程分为多个部分。每个段都包含相同类型的功能, 例如主函数可以包含在一个段中, 库函数可以包含在另一段中,
通过段表将逻辑地址转换为物理地址
CPU生成包含两个部分的逻辑地址:
- 段号
- 偏移量
段号映射到段表。将各个段的极限与偏移量进行比较。如果偏移量小于限制, 则该地址有效, 否则将引发错误, 因为该地址无效。
在有效地址的情况下, 将段的基地址添加到偏移量中以获得主存储器中实际字的物理地址。
分段优势
- 无内部碎片
- 平均分段大小大于实际页面大小。
- 减少开销
- 重定位段比整个地址空间容易。
- 与分页中的页表相比, 段表的大小较小。
缺点
- 它可以具有外部碎片。
- 很难将连续的内存分配给可变大小的分区。
- 昂贵的内存管理算法。
评论前必须登录!
注册