分段分页和分页分段之间的差异或相似之处?

时间:2013-05-20 05:34:36

标签: memory-management operating-system paging memory-segmentation

我正在研究组合的分页/分段系统,在我的书中有两种方法:

1.paged segmentation
2.segmented paging

我无法弄清楚两者之间的区别。我认为在分页分段中,分段被分成页面,在分段分页中,页面被分成段,但我不知道我是对还是错。同时在因特网上,仅使用一种方案来描述组合的寻呼/分段。我无法弄清楚为什么在我的课本中有两种方案。任何帮助将深表感谢。

3 个答案:

答案 0 :(得分:34)

所以,在网上大力搜索这两个术语之间的差异或相似之后,我得出了最终答案。首先,我要写下相似之处:

  • 它们(分段分页和分页分段)是一种分页/分段组合系统(分页和分段可以通过将每个分段分成页面来组合)。
  • 在两个系统中,细分都被分为几页。

现在要描述差异,我将不得不分别定义和描述每个术语:

  • 分段分页 - 分段分为页面。实现需要STR(段表寄存器)和PMT(页面映射表)。在此方案中,每个虚拟地址由段号组成该段中的页码和该页面中的偏移。段号索引到段表中,该表生成该段的页表的基址。页码索引到页面表中,每个条目都是一个页面帧。添加PFN(页面帧号)和偏移量得到物理地址.Hence寻址可用以下函数描述:
  

va =(s,p,w)其中,va是虚拟地址,| s |确定的数量   段(ST的大小),| p |确定每个段的页数(大小为   PT),| w |确定页面大小。

address_map(s, p, w)
{
pa = *(*(STR+s)+p)+w;
return pa;
}

图表在这里:

Segmented Paging

  • 分页分段 - 有时段表或页表可能太大而无法保留在物理内存中(它们甚至可以达到MB)。因此,段表也分为页面,因此页表也是如此ST页面已创建。 段号分为ST页面页面的页面编号(s1)页面偏移(s2)。所以,虚拟地址可以描述为:

va =(s1,s2,p,w)

address_map
(s1, s2, p, w)
{
pa = *(*(*(STR+s1)+s2)+p)+w;
return pa;
}

图表描述如下: Paged Segmentation

答案 1 :(得分:3)

分页的最佳特征

事实上,分页有以下好处:

  1. 快速分配(至少比分割快)
  2. 无外部碎片(此方法的最后一页遭受内部碎片
  3. 细分的最佳特征

    但是从细分中也看到了很好的行为:

    1. 共享
    2. 保护
    3. 可以合并给定的术语并创建以下术语:

      • 分段分页:虚拟地址空间分为多个分段。物理地址空间分为页面框架。
      • 分页细分:使用流程细分表的主要细分技术有时会超出界限!意味着大小变得太大而主内存没有足够的空间来保存段表。因此,段表和段号分为页面。

      分段分页的要求

      实现分段分页需要采取多个步骤:

      1. 每个段表条目代表一个页表基址。
      2. STR(段表寄存器)和PMT(页面映射表)填充了所需的值。
      3. 每个虚拟地址都包含段号页码以及该页面中的偏移
      4. 段号索引到段表格中,该表格为我们提供了该段页面表基本地址
      5. 页码索引到页面表中。
      6. 每个页面表条目都是页面框架
      7. 通过添加页面帧数偏移量,可以找到物理地址的最终结果。
      8. 分页分段的要求

        以下步骤在此方案中进行:

        1. 每个细分条目分为多个细分。
        2. 对于表示页面聚集的每个段表条目,将创建一个页表。

答案 2 :(得分:1)

细分会导致页面翻译和交换速度变慢

出于这些原因,分割在x86-64上大部分被删除。

它们之间的主要区别在于:

  • 分页将内存拆分为固定大小的块
  • 分段允许每个块的宽度不同

虽然拥有可配置的段宽度似乎更聪明,但随着您增加进程的内存大小,碎片化是不可避免的,例如:

|   | process 1 |       | process 2 |                        |
     -----------         -----------
0                                                            max

最终会随着流程1的增长而变得:

|   | process 1        || process 2 |                        |
     ------------------  -------------
0                                                            max

直到分裂是不可避免的:

|   | process 1 part 1 || process 2 |   | process 1 part 2 | |
     ------------------  -----------     ------------------
0                                                            max

此时:

  • 翻译页面的唯一方法是对进程1的所有页面进行二进制搜索,这会占用不可接受的日志(n)
  • 交换流程1第1部分可能很大,因为该部分可能很大

使用固定大小的页面:

  • 每个32位转换只执行2次内存读取:目录和页面表行走
  • 每次交换都是可接受的4KiB

固定大小的内存块更易于管理,并占据了当前的操作系统设计。

另请参阅:How does x86 paging work?

相关问题