大きなページサイズページングのみを使用するシステムで内部断片化がどのように発生するかを理解する

大きなページサイズページングのみを使用するシステムで内部断片化がどのように発生するかを理解する

以下は、オペレーティングシステムのテキストから抜粋したものです。Calvinet al。他。

ページング方式を使用すると、外部断片化は発生しません。すべての空きフレームを必要なプロセスに割り当てることができます。ただし、内部断片化がある可能性があります。フレームは単位で割り当てられます。プロセスのメモリ要件がページ境界と一致しない場合最後に割り当てられたフレームが完全に埋められない可能性があります。。たとえば、ページサイズが2,048バイトの場合、バイトプロセスにはページとバイトが72,766必要です。フレームが割り当てられ、バイトの内部断片化が発生します。最悪の場合、プロセスにはページとバイトが必要です。フレームが割り当てられ、ほぼ全フレームが内部断片化される。351,086362,048 − 1,086 = 962n1n + 1

ここに画像の説明を入力してください。 上記のスクリーンショットは、Georgia Techの「High Performance Computer Architecture」からのものです。ここで、インストラクターは、プロセスのサイズが右の灰色の中括弧で示されるサイズまでであると言います。私たちのシステムはこれです。プロセスに2ページを割り当て、破線部分が内部断片化です。

絵

私が経験している問題は次のとおりです。上記のような状況を描きました。プロセスの仮想アドレス空間は緑色で表示されます。左側には仮想アドレスビットが表示されます。今、あなたのコンピュータでは、ページサイズは一般的に2の累乗です。したがって、ページオフセットは、いくら長くてもページサイズが仮想アドレス空間サイズより小さい場合、プロセスの仮想アドレス空間を均等に分割する。今度は均等に分割されている場合、仮想アドレス空間の最後の部分はスタックセグメントを持たなければなりません。

次のページサイズを使用しているとします4 MB

絵

写真はおそらくこんな感じだと思います。青色の部分は内部の破片であると推測されます。ヒープとスタックの間の大きな間隔は、メインメモリにフレームが割り当てられていないので、心配する必要はありません。しかし、スタックのサイズとコード、データ、ヒープの部分によって異なる可能性があると思います。ページに正しく配置されているのか、内部断片化があるのか​​を単純に言うことはできないようです。最後のフレームの最後の部分だけを占有してはいけません。これは唯一の内部断片化です。。しかもどうカルバンテキストサイズを計算するプロセスは何ですか?

ベストアンサー1

答えは、次のようにテキストで定義されているように内部断片化が発生しない状況に自分自身を置くことです。

プロセスのメモリ要件偶然ページ境界があります

しかし、上記では一致するように設定しました。では…破片はありません。とは別にすでに知っているように、未使用のヒープとスタックはスペースを占め、このスペースは(無害ではありますが)「断片化」と見なされるべきです。これがまさに巨大なページが欲しくない理由です。

しかし、私はメモリがこのように割り当てられていないと思います。ページには単純なメモリブロックではなく、設定できるプロパティもあります。たとえば、コードを複数のページに配置し、オペレーティングシステムに次のように通知できます。このページは読み取り専用です。(そして/または共有他のプロセスと一緒に)。ヒープではこれを行うことはできません。逆にあなたは尋ねることができますヒープページの場合施行不可能、複数のセキュリティホールが機能しないようにします。

これらの利点を享受するには、各プロセスメモリタイプに別々のページを割り当てる必要があります。

したがって、コード、静的データ、およびヒープセクションがページサイズに完全に整列する可能性はほとんどありません。はい;ここで内部断片化が発生します。

おすすめ記事