512Mメモリはどこから来たのですか?

512Mメモリはどこから来たのですか?

仮想マシンKaliはこのように4Gメモリを割り当てました。メモリ状態

しかし、問題があります。メモリをハッキングするために、ゲストに自己構築カーネルをインストールしました。

# uname -a
Linux 15ud490-gx76k 6.8.4+ #8 SMP PREEMPT_DYNAMIC Sat Apt 6 15:49:20 KST 2024 x86_64 x86_64 x86_64 GNU/Linux

以下のようにメモリが終わる領域を見たいです。 記憶を見て

メモリサイズは16 * 0x336000バイトです。その後、結果に基づいてホストのメモリサイズを推定した。

$ python3
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 16*0x07fff0
8388352
>>> 16*0x07fff0/1024/1024
7.999755859375
>>> 16*0x335ff0/1024/1024
51.374755859375
>>> 16*0x336000/1024/1024
51.375
>>> 521000/1024/1024
0.49686431884765625
>>> (1024*1024*4+521000+3288)*1024/1024/1024/1024 # Convert into gigabytes
4.5

ゲストに4Gのメモリを与えたのですが、上記の状況によると4.5GiBになりますね。スワップは1Gなのでこれはゴミです。

0.5Gメモリはどこから出ますか? ? ? ?

ベストアンサー1

RAM用に構築された物理メモリ空間は必ずしも連続的である必要はなく、RAMだけが物理アドレスを取得する唯一のものではありません。コンピュータには、メモリマップされたバス/デバイスがあります。

cat /proc/iomemデバイスと物理メモリ空間のマッピングを見てください。lsmem実際のアドレス空間マッピングが大幅に簡素化されました!

これは決してLinuxに限定されていません。ほとんどすべての現代のコンピュータアーキテクチャはこのように動作します。

今、あなたの特定のケースであなたが見ている追加の「実際のRAM」は実際にはありませんが、ハイパーバイザーとVMの間の通信に使用されるキャプチャされたアドレスのようです。

おすすめ記事