セグメンテーションにより、ページの翻訳とスワッピングが遅くなる
これらの理由により、セグメンテーションは 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 のすべてのページに対してバイナリ検索を実行することです。これには許容できないログ (n) が必要です
- そのセグメントが巨大になる可能性があるため、プロセス1パート1のスワップアウトは巨大になる可能性があります
ただし、固定サイズのページの場合:
- すべての 32 ビット変換は、ディレクトリとページ テーブル ウォークの 2 つのメモリ読み取りのみを行います。
- すべてのスワップは許容可能な 4KiB です
固定サイズのメモリ チャンクはより管理しやすく、現在の OS 設計を支配しています。
参照: x86 ページングはどのように機能しますか?