我正在研究组合分页/分段系统,在我的书中有两种方法:
1.paged segmentation
2.segmented paging
我无法弄清楚两者之间的区别。我认为在分页分段中,段被分成页面,在分段分页中,页面被分成段,虽然我不知道我是对还是错。同时在互联网上,仅使用一种方案来描述组合的寻呼/分段。我不明白为什么在我的课本中有两种方案。任何帮助将不胜感激。
我正在研究组合分页/分段系统,在我的书中有两种方法:
1.paged segmentation
2.segmented paging
我无法弄清楚两者之间的区别。我认为在分页分段中,段被分成页面,在分段分页中,页面被分成段,虽然我不知道我是对还是错。同时在互联网上,仅使用一种方案来描述组合的寻呼/分段。我不明白为什么在我的课本中有两种方案。任何帮助将不胜感激。
所以,在网上大力搜索这两个术语之间的差异或相似之处后,我得出了一个最终答案。首先我会写下相似之处:
现在要描述差异,我将不得不分别定义和描述每个术语:
va = (s,p,w)其中,va 是虚拟地址,|s| 确定段数(ST 的大小),|p| 确定每段的页数(PT 的大小),|w| 确定页面大小。
address_map(s, p, w)
{
pa = *(*(STR+s)+p)+w;
return pa;
}
图在这里:
va = (s1,s2,p,w)
address_map
(s1, s2, p, w)
{
pa = *(*(*(STR+s1)+s2)+p)+w;
return pa;
}
图表说明在这里:
事实上,分页有以下好处:
但是从分割中也可以看出一个很好的行为:
给定的术语,可以组合并创建以下术语:
需要采取多个步骤来实现分段寻呼:
在此方案中执行以下步骤:
分段导致页面翻译和交换速度变慢
由于这些原因,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
在此刻:
但是,对于固定大小的页面:
固定大小的内存块更易于管理,并且主导了当前的操作系统设计。
另请参阅:x86 分页如何工作?