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를 나타내고 0x3ffffffff는 16GiB를 나타냅니다. 그러나 나는 그것이 어떻게 작동하는지 추론할 수 없습니다!

답변1

이는 16진수 값입니다. 프로그래머의 계산기나 Bash를 사용하여 십진수로 변환할 수 있습니다.

echo $((0x100000000))

메가바이트 또는 기가바이트로 변환하려면 다음과 같이 나눕니다.

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

따라서 0x100000000은 실제로 4GiB이고 0x21f37ffff는 8.5GiB(8704MiB)에 더 가깝습니다. 따라서 0x0000000100000000-0x000000021f37ffff는 4GiB에서 8.5GiB에 가까운 범위입니다.

관련 정보