注:仮想メモリ割り当ての概要を調べようとしています。
プロセス全体の仮想アドレス空間は、特定のサイズのページに分割されています:
.text
.bss
.data
これにはヒープスペースとスタックも含まれますか?それとも常にページング不可ですか?
注:仮想メモリ割り当ての概要を調べようとしています。
プロセス全体の仮想アドレス空間は、特定のサイズのページに分割されています:
.text
.bss
.data
これにはヒープスペースとスタックも含まれますか?それとも常にページング不可ですか?
通常、ページングされたオペレーティングシステムでは、プロセスはアドレス空間全体をページに分割します。各線形アドレスには、最上位ビットのページ番号と最下位ビットのページ内のオフセットの2つのコンポーネントが含まれています。
たとえば、32ビットのリニアアドレスと4kBページの場合、上位20ビットはページ番号であり、下位12ビットはページオフセットです。
まず、「ページ」は単にアドレス空間の領域であることに注意してください。「ページング不可」の領域(ディスクにスワップできないことを意味します)は、論理的にページに分割されますが、OSはそれらのページに異なるポリシーを実装する場合があります。
最も一般的なページサイズは4096バイトです。多くのアーキテクチャは、同時に複数のページサイズの使用をサポートしています(たとえば、4Kページと1MBページ)。ただし、ほとんどの場合、複数のページサイズを管理するコストは、これが提供するメリットよりもはるかに高いため、オペレーティングシステムは1ページサイズだけに固執することがよくあります。例外はありますが、心配する必要はないと思います。
すべての仮想ページには、読み取り可能、書き込み可能、実行可能ファイルなど、特定のアクセス許可が付与されています(ハードウェアサポートによって異なります)。OSはこれを使用して、セキュリティの強化、(共有メモリの)キャッシュコヒーレンシ、および物理メモリからのページのスワップを支援できます。
、およびリージョンはOSに認識されている必要.textはありません(ただし、セキュリティとパフォーマンスの理由から、ほとんどのOSはそれらを認識しています)。.bss.data
OSは、スタック/ヒープページに最初にアクセスするまで、そのページに実際にメモリを割り当てない場合があります。OSは、ヒープ/スタックスペースのより多くのページを要求するシステムコールを提供する場合があります。一部のOSは、共有メモリまたは共有ライブラリ機能を提供し、アドレス空間に表示される領域を増やします。OSによって異なります。
.dataプログラムの初期化されたグローバル変数が置かれる場所です。.bss明示的な初期化子なしのグローバルが含まれます(デフォルト値は0)。ヒープとスタックは、これらとは別のメモリゾーンです。プロセスによって認識されるすべてのメモリは、ページに分割されたすべての仮想メモリです。プロセスは仮想メモリ以外は何も認識しません。