web-dev-qa-db-ja.com

セグメント化ページングとページ化セグメンテーションの違いまたは類似点は?

私はページング/セグメンテーションシステムの組み合わせを研究していて、私の本ではこれに対して2つのアプローチがありました:

1.paged segmentation
2.segmented paging

両者の違いがわかりませんでした。ページ分けされたセグメンテーションではセグメントがページに分割され、ページ分けされたページングではページがセグメントに分割されたと思いますが、私が正しいか間違っているかはわかりません。一方、インターネットでは、ページング/セグメンテーションの組み合わせが1つのスキームのみを使用して説明されています。私のコースブックにこれについて2つのスキームがある理由がわかりません。任意の助けをいただければ幸いです。

25
0decimal0

したがって、これら2つの用語の違いまたは類似性をネットで精力的に検索した後、最終的な答えを見つけました。まず、similarities:を書き留めます。

  • 両方(セグメント化ページングとページ分割)は、ページング/セグメンテーション複合システムのタイプです(ページングとセグメント化は、各セグメントをページに分割することで組み合わせることができます)。
  • どちらのシステムでも、セグメントはページに分割されます。

differencesを説明するために、各用語を個別に定義して説明する必要があります。

  • セグメント化ページング-セグメントはページに分割されます。実装にはSTR(セグメントテーブルレジスタ)とPMT(ページマップテーブル)が必要です。このスキームでは、各仮想アドレスはセグメント番号ページ番号そのセグメント内、およびオフセットそのページ内。セグメント番号は、そのセグメントのページテーブルのベースアドレスを生成するセグメントテーブルにインデックスを付けます。ページ番号は、各エントリがページフレームであるページテーブルにインデックスを付けます。追加PFN(ページフレーム番号)とオフセットは物理アドレスになります。したがって、アドレス指定は次の関数で説明できます:

va =(s、p、w)ここで、vaは仮想アドレス、| s |セグメント数(STのサイズ)を決定します| p |セグメントあたりのページ数(PTのサイズ)を決定します| w |ページサイズを決定します。

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

ダイアグラムはここにあります:

Segmented Paging

  • ページ分割-場合によっては、セグメントテーブルまたはページテーブルが大きすぎて物理メモリに保持できないことがあります(MBに達することさえあります)。したがって、セグメントテーブルもページに分割されるため、STページのページテーブルになります。創造された。 セグメント番号ページ番号(s1)STページのページテーブルのページオフセット(s2)。したがって、仮想アドレスは次のように記述できます。

va =(s1、s2、p、w)

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

図の説明は次のとおりです。 Paged Segmentation

37
0decimal0

ページングの最良の特性

実際、ページングには次の利点があります。

  1. 高速割り当て(少なくともセグメンテーションより高速)
  2. 外部断片化なし(このメソッドの最後のページは内部断片化の影響を受けます)

セグメンテーションの最良の特徴

しかし、セグメンテーションから見られる素晴らしい振る舞いもあります:

  1. 共有する
  2. 保護

指定された用語を組み合わせて、次の用語を作成できます。

  • セグメント化ページング:仮想アドレス空間はセグメントに分割されます。物理アドレス空間はページフレームに分割されます。
  • ページ分割:プロセスセグメントテーブルを使用するメイン分割テクニックは、時々範囲外になります!サイズが大きくなりすぎ、メインメモリにセグメントテーブルを保持するための十分なスペースがないことを意味します。したがって、セグメントテーブルとセグメント番号はページに分割されます。

セグメント化ページングの要件

セグメント化ページングを実現するには、複数の手順を実行する必要があります。

  1. 各セグメントテーブルエントリは、ページテーブルのベースアドレスを表します。
  2. STR(セグメントテーブルレジスタ)およびPMT(ページマップテーブル)に必要な値が入力されます。
  3. 各仮想アドレスは、そのページ内のセグメント番号ページ番号およびオフセットで構成されます。
  4. セグメント番号は、そのセグメントのページテーブルベースアドレスを提供するセグメントテーブルにインデックスを付けます。
  5. ページ番号は、ページテーブルにインデックスを付けます。
  6. 各ページテーブルエントリはページフレームです。
  7. 物理アドレスである最終結果は、ページフレーム番号オフセットを追加することで見つかります。

ページ分割の要件

このスキームでは、次の手順が実行されます。

  1. 各セグメントエントリは複数のセグメントに分割されます。
  2. ページの収集を表す各セグメントテーブルエントリに対して、ページテーブルが作成されます。
4
hexpheus

セグメンテーションにより、ページの変換とスワッピングが遅くなります

これらの理由により、セグメンテーションは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のすべてのページでバイナリ検索を行うことです。これは、許容できないlog(n)をとります。
  • プロセス1パート1のスワップアウトは、そのセグメントが巨大になる可能性があるため、巨大になる可能性があります

ただし、固定サイズのページの場合:

  • 32ビット変換ごとに2回のメモリ読み取りのみを実行:ディレクトリとページテーブルのウォーク
  • すべてのスワップは許容可能な4KiBです

固定サイズのメモリチャンクは、より扱いやすく、現在のOS設計を支配しています。

参照: x86ページングの仕組み