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

问题描述 投票:23回答:3

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

1.paged segmentation
2.segmented paging

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

memory-management operating-system paging memory-segmentation
3个回答
36
投票

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

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

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

  • 分段分页 - 分段分为页面。实现需要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;
}

该图如下:

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

va =(s1,s2,p,w)

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

图表描述如下:


3
投票

分页的最佳特征

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

  1. 快速分配(至少比分割快)
  2. 没有外部碎片(此方法的最后一页遭受内部碎片)

细分的最佳特征

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

  1. 分享
  2. 保护

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

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

分段分页的要求

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

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

分页分段的要求

此方案中包含以下步骤:

  1. 每个段条目分为多个段。
  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

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

另见:How does x86 paging work?

© www.soinside.com 2019 - 2024. All rights reserved.