|
From: John R. <jr...@Bi...> - 2005-06-01 22:37:44
|
> % cat /proc/self/maps
> 08048000-0804a000 r-xp 00000000 08:02 210862 /bin/cat
> 0804a000-0804b000 rw-p 00002000 08:02 210862 /bin/cat
> 0804b000-0804c000 rwxp 00000000 00:00 0
> 15556000-1556a000 r-xp 00000000 08:02 323984 /lib/ld-2.3.2.so
> 1556a000-1556b000 rw-p 00014000 08:02 323984 /lib/ld-2.3.2.so
> 1556b000-1569c000 r-xp 00000000 08:02 323939 /lib/libc-2.3.2.so
> 1569c000-156a1000 rw-p 00130000 08:02 323939 /lib/libc-2.3.2.so
> 156a1000-156a4000 rw-p 00000000 00:00 0
> 3fffe000-40000000 rwxp fffff000 00:00 0
> %
> MontaVista(R) Linux(R) Carrier Grade Edition 3.1
>> Linux/i686 2.4.20_mvlcge31_p2-langley5
It seems that the kernel configuration parameter TASK_SIZE in this
Linux kernel is 0x40000000 (1GB), because the stack ends there:
3fffe000-40000000 rwxp fffff000 00:00 0
This means that the user virtual address space is restricted
to 1GB (0 to 0x40000000) per process. Probably this kernel is
targeted to supporting a very large number of medium- to small-sized
simultaneous processes, using a large amount of physical RAM
(many GB). The kernel and each process share address space;
the more physical RAM, the more the kernel needs address space
to keep track of it, and to supervise many simultaneous I/O streams.
Valgrind assumes that the user virtual address space is at least
11/4 GB (0xb0000000), plus a little more. The kernel TASK_SIZE is
typically 0xc0000000 or 0xf0000000. This is common in many
desktop and small server configurations with at most a
few GB of physical RAM.
--
|