2

注:仮想メモリ割り当ての概要を調べようとしています。

プロセス全体の仮想アドレス空間は、特定のサイズのページに分割されています:

  .text
  .bss
  .data

これにはヒープスペースとスタックも含まれますか?それとも常にページング不可ですか?

4

3 に答える 3

2

通常、ページングされたオペレーティングシステムでは、プロセスはアドレス空間全体をページに分割します。各線形アドレスには、最上位ビットのページ番号と最下位ビットのページ内のオフセットの2つのコンポーネントが含まれています。

たとえば、32ビットのリニアアドレスと4kBページの場合、上位20ビットはページ番号であり、下位12ビットはページオフセットです。

于 2009-12-05T10:39:01.347 に答える
2

まず、「ページ」は単にアドレス空間の領域であることに注意してください。「ページング不可」の領域(ディスクにスワップできないことを意味します)は、論理的にページに分割されますが、OSはそれらのページに異なるポリシーを実装する場合があります。

最も一般的なページサイズは4096バイトです。多くのアーキテクチャは、同時に複数のページサイズの使用をサポートしています(たとえば、4Kページと1MBページ)。ただし、ほとんどの場合、複数のページサイズを管理するコストは、これが提供するメリットよりもはるかに高いため、オペレーティングシステムは1ページサイズだけに固執することがよくあります。例外はありますが、心配する必要はないと思います。

すべての仮想ページには、読み取り可能、書き込み可能、​​実行可能ファイルなど、特定のアクセス許可が付与されています(ハードウェアサポートによって異なります)。OSはこれを使用して、セキュリティの強化、(共有メモリの)キャッシュコヒーレンシ、および物理メモリからのページのスワップを支援できます。

、およびリージョンはOSに認識されている必要.textはありません(ただし、セキュリティとパフォーマンスの理由から、ほとんどのOSはそれらを認識しています)。.bss.data

OSは、スタック/ヒープページに最初にアクセスするまで、そのページに実際にメモリを割り当てない場合があります。OSは、ヒープ/スタックスペースのより多くのページを要求するシステムコールを提供する場合があります。一部のOSは、共有メモリまたは共有ライブラリ機能を提供し、アドレス空間に表示される領域を増やします。OSによって異なります。

于 2009-12-05T10:41:25.773 に答える
1

.dataプログラムの初期化されたグローバル変数が置かれる場所です。.bss明示的な初期化子なしのグローバルが含まれます(デフォルト値は0)。ヒープとスタックは、これらとは別のメモリゾーンです。プロセスによって認識されるすべてのメモリは、ページに分割されたすべての仮想メモリです。プロセスは仮想メモリ以外は何も認識しません。

于 2009-12-05T10:25:03.877 に答える