0

メモリ内のプログラムのアドレス空間マッピングについて少し混乱しています。ここにリンクがあり ます http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory それは仮想を扱います実行中のプログラムのアドレス マッピング、およびカーネル モード用に 1GB、ユーザー モード用に 3 GB をマークし、メモリ セグメントにアクセスするためのページ テーブルの使用について言及しています。

Linux は x86 アーキテクチャでのみ 4 KB のページ ファイルを使用しますが、私が間違っていなければ、プロセスはメモリから 3 GB のマップされたアドレス空間をどのように使用できますか (各プロセスが 4 GB であるというリンクを参照)。これはビット カウンターです。私にとって直感的であるか、私の理解はどこか間違っていますか?

4

1 に答える 1

0

私があなたのことを正しく理解しているかどうかはわかりません。プロセッサがマップされたファイルを管理するために 4KB ページを使用していると思われます。

実際、この 4KB は単なるページ メモリ バッファです。システムが任意のファイルからメモリにデータを読み込もうとすると、まずページ メモリ バッファ内のコンテンツを読み取り、後でバッファ内のコンテンツを実際のスタックまたはヒープに移動します。この 4KB ページ バッファは、マップされたメモリ アドレスの制御には使用されません。

マッピングされたアドレスは HANDLE のようなものだと思います。メモリの一部に格納されます。このハンドルを使用してデータを取得すると、システムはそれをカウントし、DISK 上の実際のアドレスに転送します。次に、システムはマップされたデータをページ バッファーに読み取り、最後にそれらをメモリに移動します。

詳細については、次のリンクを参照してください: http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files このブログには、メモリ管理に関する他のいくつかの優れた記事もあります。複雑ですが、本当に素晴らしいです。

于 2013-01-11T03:37:16.000 に答える