首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分段分页和分页分段的异同?

分段分页和分页分段的异同?
EN

Stack Overflow用户
提问于 2013-05-20 05:34:36
回答 3查看 29.5K关注 0票数 32

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

代码语言:javascript
复制
1.paged segmentation
2.segmented paging

我看不出这两者有什么区别。我认为在分页分段中,段被划分为页面,而在分段分页中,页面被划分为分段,尽管我不知道我是对还是错。同时,在互联网上,只使用一种方案来描述分页/分割的组合。我不明白为什么在我的教材里有两种方案。任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-25 16:36:59

因此,在网络上搜索这两个术语之间的差异或相似性之后,我终于找到了一个最终的answer.First,我将写下的相似性:

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

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

  • 分段分页-段分为pages.Implementation (段表寄存器)和PMT(页映射表).In。该方案的每个虚拟地址包括一个段号、该段内的页码和该page.The段号索引中的一个偏移量,该段表将生成该页号索引的页面表的基址,其中每个条目都是一个页frame.Adding --PFN(页面帧号),并且在物理address.Hence寻址中的偏移结果可以通过以下功能来描述:

va = (s,p,w),其中,va是虚拟地址,它决定段的数量(ST的大小),\x\p确定每个段的页数(PT的大小),而\x\w\x决定页的大小。

代码语言:javascript
复制
address_map(s, p, w)
{
pa = *(*(STR+s)+p)+w;
return pa;
}

图如下:

  • 分页-有时段表或页表太大,无法保存在物理内存中(它们甚至可以到达MBs).Therefore,段表也被划分为页面,从而创建了ST页的页表。将段号分解为ST s1页表的页码(S1)和页偏移量(S2),虚拟地址可描述为:

va = (s1,s2,p,w)

代码语言:javascript
复制
address_map
(s1, s2, p, w)
{
pa = *(*(*(STR+s1)+s2)+p)+w;
return pa;
}

图的描述如下:

票数 45
EN

Stack Overflow用户

发布于 2017-06-16 09:24:23

寻呼的最佳特性

事实上,分页有以下优点:

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

最佳分割特性

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

  1. 分享
  2. 保护

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

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

分段寻呼的要求

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

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

分页分割的要求

在这一计划中采取了以下步骤:

  1. 每个段条目被划分为多个段。
  2. 对于每个表示页面集合的段表条目,将创建一个页表。
票数 8
EN

Stack Overflow用户

发布于 2017-06-11 15:05:45

分割会导致较慢的页面转换和交换

由于这些原因,在x86-64上很大程度上删除了分段。

它们之间的主要区别是:

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

虽然具有可配置段宽似乎更明智,但当您增加进程的内存大小时,碎片是不可避免的,例如:

代码语言:javascript
复制
|   | process 1 |       | process 2 |                        |
     -----------         -----------
0                                                            max

随着过程1的增长,最终会变成:

代码语言:javascript
复制
|   | process 1        || process 2 |                        |
     ------------------  -------------
0                                                            max

直到分裂是不可避免的:

代码语言:javascript
复制
|   | process 1 part 1 || process 2 |   | process 1 part 2 | |
     ------------------  -----------     ------------------
0                                                            max

在这一点上:

  • 翻译页面的唯一方法是对进程1的所有页面执行二进制搜索,这需要一个不可接受的日志(N)。
  • 过程1第1部分的交换可能是巨大的,因为该部分可能是巨大的。

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

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

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

另见:How does x86 paging work?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16643180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档