【问题标题】:Differences or similarities between Segmented paging and Paged segmentation?Segmented paging 和 Paged segmentation 的异同?
【发布时间】:2013-05-14 15:17:06
【问题描述】:

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

1.paged segmentation
2.segmented paging

我无法区分两者之间的区别。我认为在分页分段中,段被分成页面,在分段分页中,页面被分成段,虽然我不知道我是对还是错。同时在互联网上,仅使用一种方案来描述组合的寻呼/分段。我不明白为什么在我的课本中有两种方案。任何帮助将不胜感激。

【问题讨论】:

  • 我不确定(因为我从来没有听说过分段分页),但是将页面分成段并没有任何意义,因为页面的整个想法是它们是最小的部分在分页系统中可以调入或调出的内存。不用说,它用得不多:)。不过,我相信您对分页分段的解释是正确的。
  • 你的意思是“分段”和“分页”吗?

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


【解决方案1】:

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

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

现在要描述差异,我必须分别定义和描述每个术语:

  • Segmented paging-将Segment分页。实现需要STR(segment table register)和PMT(page map table)。在该方案中,每个虚拟地址由一个段号,该段内的页号和该页内的偏移量。段号索引到段表中,该段表产生该段的页表的基地址。页编号索引到页表中,每个条目是一个页框。将PFN(页框号)和偏移量相加得到物理地址。因此可以通过以下函数来描述寻址:

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

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

图表在这里:

  • 分页分段- 有时段表或页表可能太大而无法保存在物理内存中(它们甚至可以达到 MB)。因此,段表也分为页,因此是 ST 页的页表被建造。 segment number分为page no.(s1)page offset(s2)的ST pages的页表。所以,虚拟地址可以描述为:

va = (s1,s2,p,w)

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

图表说明在这里:

【讨论】:

  • 想知道这个信息的来源,因为它与here所说的有些不同
  • 嘿@0decimal0,在分段分页图中,分段表应该被分段表替换吗?
【解决方案2】:

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

由于这些原因,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 的所有页面进行二进制搜索,这需要不可接受的 log(n)
  • 进程 1 第 1 部分的交换可能很大,因为该段可能很大

但是对于固定大小的页面:

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

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

另请参阅:How does x86 paging work?

【讨论】:

    【解决方案3】:

    分页的最佳特性

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

    1. 快速分配(至少比分段快)
    2. 无外部碎片(此方法中的最后一页存在内部碎片

    分割的最佳特征

    但是从分割中也可以看出一个很好的行为:

    1. 分享
    2. 保护

    给定的术语,可以组合并创建以下术语:

    • 分段分页:将虚拟地址空间划分为段。物理地址空间被划分为页框。
    • 分页分割:使用进程段表的主要分割技术有时会超出范围!这意味着大小变得太大并且主内存没有足够的空间来保存段表。因此段表和段号被分页。

    分段寻呼的要求

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

    1. 每个段表条目代表一个页表基地址。
    2. STR(Segment Table Register) 和 PMT(Page Map Table) 填充了所需的值。
    3. 每个虚拟地址都由一个段号页码和该页内的偏移量组成。
    4. 段号索引到段表中,它为我们提供了该段的页表基地址
    5. 页码索引到页表中。
    6. 每个页表条目都是一个页框
    7. 通过添加页帧号偏移量可以找到物理地址的最终结果。

    分页分段的要求

    在此方案中发生以下步骤:

    1. 每个段条目分为多个段。
    2. 对于代表页面集合的每个段表条目,都会创建一个页表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      相关资源
      最近更新 更多