問題タブ [address-space]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
787 参照

assembly - x86-64: 正規アドレスと実際に使用可能な範囲

Intel および AMD のドキュメントによると、64 ビット モードの場合、仮想アドレスに実際に使用できるのは 48 ビットのみであり、48 ~ 63 のビットはビット 47 (符号拡張) を複製する必要があります。私の知る限り、現在のすべての CPU はこの方法で実装されていますが、(理論的には) 将来の実装で使用可能なスペースを拡張することを禁止するものは何もありません (これによってバイナリ互換性が損なわれることはありません)。

意味のあるビット数をプログラムで決定する標準的な方法はありますか? (つまり、物理アドレスの場合のように、特定の CPUID)。

実際には、妥当なアプリケーションや OS では 48 ビットで十分すぎることはわかっています。私の質問は理論的なものです。

0 投票する
2 に答える
219 参照

memory - x86_64 カーネルのメモリ レイアウトにこれほど大きな仮想アドレスがある理由

カーネルの Documentation/x86/x86_64/mm.txt は言う:

したがって、この領域には実際の物理 DRAM サイズよりも大きなアドレス マッピングは存在しないはずです。しかし、16GB DRAM とカーネル v4.2.8 を搭載した x86_64 PC では、/sys/kernel/debug/kernel_page_tables から次の結果を得ました。

仮想アドレス 0xffff88043dc00000 のページ エントリがあることがわかります。このような仮想アドレスで virt_to_phys() を使用すると 0x43dc00000 が取得されます。これは、実際の DRAM サイズよりも大きいため明らかに違法です (16GB はちょうど 0x400000000 です)。

では、これらの大きな仮想アドレスのルールは何であり、適切な物理アドレスを取得するにはどうすればよいでしょうか?

どうもありがとう!