Skip to contentSkip to conversation

High Memory Address Space

DISCUSSION Leandro Tavares Carneiro 4 participants 4 messages May 3, 2002

lore
Share & tools
lore
#0 lore raw

I don't know if this is the right place for my question. In advance, i'm sorry to bother if this is don't covered for this list. If was a better place for this question, please show me. I can't find this topic in the mailing list archives. Thanks.

How is the maximum memory address space, per process or for all process, using High Memory Suport to 64Gb? Is possible to alocate more than 3GB for one process? Is much diference between kernel 2.4.x and 2.5.x in the high memory support?

Thanks in advance for any help.

Signature · 4 lines
Leandro Tavares Carneiro
Analista de Suporte
EP-CORP/TIDT/INFI
Telefone: 2534-1427
#1 lore raw
Quoted 2 lines

How is the maximum memory address space, per process or for all process, using High Memory Suport to 64Gb?

Roughly speaking, the high memory (above 896MB phys) is mapped directly into user address spaces, mapped a page at a time into the kernel virtual address space via kmap and friends into a small window.

Quoted 1 line

Is possible to alocate more than 3GB for one process?

Not really, you could shift the boundary to 3.5Gb or so in theory, and eek out a little more, but in practice that just makes you run out of kernel address space instead if you have enough memory to make it worthwhile (unless you wanted the users pages swapped out).

M.

#2 lore raw
In reply to Leandro Tavares Carneiro
Quoted 7 lines · Leandro Tavares Carneiro

How is the maximum memory address space, per process or for all process, using High Memory Suport to 64Gb? Is possible to alocate more than 3GB for one process? Is much diference between kernel 2.4.x and 2.5.x in the high memory support?

Thanks in advance for any help.

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:

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.

So, basically, if you need more address space, you need a 64-bit machine. Practically, if what you are doing won't fit in the address space provided, you should re-think how you are doing it. Usually this involves using the file-system. That's one of the things it's really good at.

Cheers,
Dick Johnson

Penguin : Linux version 2.4.18 on an i686 machine (797.90 BogoMips).

Windows-2000/Professional isn't.

#3 lore raw
In reply to Leandro Tavares Carneiro
Quoted 4 lines · Richard B. Johnson

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

Quoted 8 lines

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.

Quoted 10 lines · Richard B. Johnson

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