30

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

1.paged segmentation
2.segmented paging

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

4

3 回答 3

45

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

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

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

  • 分段分页- 将段划分为页。实现需要 STR(段表寄存器)和 PMT(页映射表)。在该方案中,每个虚拟地址由段号、该段内的页号和该页内的偏移量组成。段号索引到段表中,它产生该段的页表的基地址。页号索引到页表中,每个条目是一个页框。添加 PFN(页框号)和偏移结果在物理地址中。因此寻址可以通过以下函数来描述:

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

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

图在这里:

分段寻呼

  • Paged Segmentation - 有时段表或页表可能太大而无法保存在物理内存中(它们甚至可以达到 MB)。因此,段表也被划分为页,因此创建了 ST 页的页表。段号分为页号(s1)和ST页页表的页偏移量(s2)。因此,虚拟地址可以描述为:

va = (s1,s2,p,w)

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

图表说明在这里: 分页分割

于 2013-06-25T16:36:59.893 回答
8

寻呼的最佳特性

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

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

分割的最佳特征

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

  1. 分享
  2. 保护

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

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

分段寻呼的要求

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

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

分页分段的要求

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

  1. 每个段条目被分成多个段。
  2. 对于代表页面集合的每个段表条目,创建一个页表。
于 2017-06-16T09:24:23.593 回答
3

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

由于这些原因,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

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

另请参阅:x86 分页如何工作?

于 2017-06-11T15:05:45.067 回答