为什么 /proc/kcore 的大小比 RAM 小?

为什么 /proc/kcore 的大小比 RAM 小?

我想知道为什么会这样。我找到的所有与文件大小有关的链接都表明文件大小与物理 RAM 的大小或处理器可以寻址的大小大致相同。我使用的是 32 位。

kcore当我需要stringRAM 来查找已删除的文本时,我有时会使用它。

/proc/kcore:1.1GB

内存:2.6 GB

~ $ ll /proc/kcore
-r-------- 1 root root 1065349120 2011-12-05 09:42 /proc/kcore
~ $ sudo dd if=/proc/kcore of=/dev/null bs=1024
1040380+0 records in
1040380+0 records out
1065349120 bytes (1.1 GB) copied, 2.26191 s, 471 MB/s

~ $ free -m
             total       used       free     shared    buffers     cached
Mem:          2509       1742        766          0        132       1118
-/+ buffers/cache:        492       2016
Swap:         1051          0       1051

~ $ grep ^Mem /proc/meminfo
MemTotal:        2569640 kB
MemFree:          791548 kB

~ $ dmesg | grep Memory
[    0.000000] Memory: 2554056k/2612412k available (4940k kernel code, 57908k reserved, 2333k data, 688k init, 1703108k highmem)

~ $ sudo lspci -v -s 00:02.0
00:02.0 VGA compatible controller: Intel Corporation 82915G/GV/910GL Integrated Graphics Controller (rev 04) (prog-if 00 [VGA controller])
    Subsystem: Intel Corporation Device 4556
    Flags: bus master, fast devsel, latency 0, IRQ 16
    Memory at ffa00000 (32-bit, non-prefetchable) [size=512K]
    I/O ports at ec00 [size=8]
    Memory at c0000000 (32-bit, prefetchable) [size=256M]
    Memory at ffa80000 (32-bit, non-prefetchable) [size=256K]
    Expansion ROM at <unassigned> [disabled]
    Capabilities: [d0] Power Management version 2
    Kernel driver in use: i915
    Kernel modules: i915

完整dmesg输出lspciUbuntu pastebin


有人知道为什么会这样吗

或者- 有人看到相同的行为吗 (size(kcore) < size(RAM))?

答案1

我在我的系统上看到了同样的行为:

free -m
             total       used       free     shared    buffers     cached
Mem:          2011       1877        133          0        128        685
-/+ buffers/cache:       1063        947
Swap:         2099          1       2098

ll /proc/kcore 
-r-------- 1 root root 1016M 2011-12-06 01:09 /proc/kcore

好的,我不太确定,但这可能与 32 位系统上的 HIGHMEM/LOWMEM 问题有关。

看这个:

dmesg | grep MEM
[    0.000000] 1158MB HIGHMEM available.
[    0.000000] 887MB LOWMEM available.

通过Linux 桌面

为什么使用 highmem

目前最流行的计算机类型是 32 位 x86 架构。在这种架构下,Linux 内核传统上将 4GB 的虚拟内存地址空间分为 3GB 用于用户程序,1GB 用于内核。

....

应对高端内存

然而,许多人坚持在这样的 32 位系统上使用超过 1GB 的物理内存。这使得 Linux 内核必须经历一些有趣的过程...

基本上,该系统采用以下策略:

每当内核需要访问 896MB 物理地址以上的内存时,该内存都会被临时映射到内核虚拟内存中。

内核经常需要访问的数据分配在较低的 896MB 内存(ZONE_NORMAL)中,并且可以被内核立即访问(参见临时映射)。

...

因此,我认为我们只能通过 /proc/kcore 看到内核保留内存空间。顺便说一句,我也在使用 32 位 Ubuntu 版本。

相关内容