dmesgのBIOS-e820 - アドレスからメモリ範囲を計算する方法

dmesgのBIOS-e820 - アドレスからメモリ範囲を計算する方法
kp@localhost ~]$ sudo dmesg | grep -i "e820"

次の出力が生成されます。

[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000000a0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000009d7ffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000009d80000-0x0000000009ffffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000000a000000-0x000000000a1fffff] usable
[    0.000000] BIOS-e820: [mem 0x000000000a200000-0x000000000a209fff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000000a20a000-0x000000000affffff] usable
[    0.000000] BIOS-e820: [mem 0x000000000b000000-0x000000000b01ffff] reserved
[    0.000000] BIOS-e820: [mem 0x000000000b020000-0x00000000dd082fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000dd083000-0x00000000dd1ebfff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000dd1ec000-0x00000000dd36dfff] usable
[    0.000000] BIOS-e820: [mem 0x00000000dd36e000-0x00000000dd781fff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x00000000dd782000-0x00000000de65afff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000de65b000-0x00000000deffffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000df000000-0x00000000dfffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000f8000000-0x00000000fbffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fd100000-0x00000000fdffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fea00000-0x00000000fea0ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000feb80000-0x00000000fec01fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec10000-0x00000000fec10fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec30000-0x00000000fec30fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed00000-0x00000000fed00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed40000-0x00000000fed44fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed80000-0x00000000fed8ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fedc2000-0x00000000fedcffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fedd4000-0x00000000fedd5fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000feefffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000021f37ffff] usable

たとえば、[mem 0x0000000100000000-0x000000021f37ffff]で表される実際のメモリ範囲を計算する技術を理解したいと思います。

いくつかのチュートリアルでは、0x100000000は4GiBを表し、0x3ffffffffffは16GiBを表します。しかし、私はそれがどのように機能するかを推測することはできません!

ベストアンサー1

これは16進値です。プログラマの電卓またはBashを使用して10進数に変換できます。

echo $((0x100000000))

メガバイトまたはギガバイトに変換するには、次のように分割します。

$ echo $((0x100000000/1024/1024))
4096
$ echo $((0x21f37ffff/1024/1024))
8691

したがって、0x100000000は実際には4GiBであり、0x21f37ffffは8.5GiB(8704MiB)に近いです。したがって、0x0000000100000000-0x000000021f37ffffは4GiBから8.5GiBに近い範囲です。

おすすめ記事