Re: High Memory Address Space

William Lee Irwin III
2002-05-03T17:11:06Z

On Fri, May 03, 2002 at 12:46:12PM -0400, Richard B. Johnson wrote:
> Unix/Linux on 32-bit machines use 32-bit address space. All addresses
> are virtual so some of the pages can come from anywhere, including
> so-called "high memory". The memory managment makes these pages
> appear contiguous to each task (and to the kernel itself). One of
> the Unix characteristics is that the kernel address space is
> shared with each of the process address space. This means that the
> actual process address-space does not start at 0 and extend to
> 0xffffffff. Instead it starts at an address that leaves room for
> the kernel. This split can, in principle, be changed. However
> it will result in only a few more megabytes of user address space
> and might interfere with the memory mapping of runtime libraries
> which, last time I checked, presume certain starting addresses:

Well, since the kernel is using up a whole 1GB for itself, from a
naive point of view, it might seem a target for reclamation.

On Fri, May 03, 2002 at 12:46:12PM -0400, Richard B. Johnson wrote:
> Script started on Fri May 3 12:39:03 2002
> # cat >xxx.c
> main() { return 0; }
> # gcc -c -o xxx.o xxx.c
> # ld -o xxx xxx.o
> ld: warning: cannot find entry symbol _start; defaulting to 08048074
> # exit
> exit
> Script done on Fri May 3 12:39:45 2002
> You can see that the assumed starting address is 08048074.

This is default linker script (SVR4 ABI) stuff, the portion of the process
address space reserved for the kernel extends from 3GB to 4GB in Linux.
It's fully well possible to link and run executables so that they are
loaded at the first page above the zero page, though little does it.

Cheers,
Bill