私はページング/セグメンテーションシステムの組み合わせを研究していて、私の本ではこれに対して2つのアプローチがありました:
1.paged segmentation
2.segmented paging
両者の違いがわかりませんでした。ページ分けされたセグメンテーションではセグメントがページに分割され、ページ分けされたページングではページがセグメントに分割されたと思いますが、私が正しいか間違っているかはわかりません。一方、インターネットでは、ページング/セグメンテーションの組み合わせが1つのスキームのみを使用して説明されています。私のコースブックにこれについて2つのスキームがある理由がわかりません。任意の助けをいただければ幸いです。
したがって、これら2つの用語の違いまたは類似性をネットで精力的に検索した後、最終的な答えを見つけました。まず、similarities:を書き留めます。
differencesを説明するために、各用語を個別に定義して説明する必要があります。
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設計を支配しています。
参照: x86ページングの仕組み