我正在研究组合的分页/分段系统,在我的书中有两种方法:
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
在此刻:
但是使用固定大小的页面:
固定大小的内存块更易于管理,并且主导了当前的OS设计。