我想知道为什么会这样。我找到的所有与文件大小有关的链接都表明文件大小与物理 RAM 的大小或处理器可以寻址的大小大致相同。我使用的是 32 位。
kcore
当我需要string
RAM 来查找已删除的文本时,我有时会使用它。
/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
输出lspci
Ubuntu 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 版本。