The problem of insufficient virtual addresses arises when the physical memory is larger than
4 GB. This is because, with 32 bit addressing you can have only 4 GB of virtual addresses, but
the physical addresses go beyond this if you have more than 4 GB of physical memory.
This lack of virtual address applies to user address space rather than the kernel address space.
A kernel that is larger than 1 GB is really huge and I don't think you would ever need more than
1 GB. In fact on my machine the loaded kernel image occupies around 8 MB. Although the run
time memory usage might be considerably higher.
In case if you have more than 4 GB of physical memory you need to use Physical Address
Extension(PAE). Which allows a virtual address space of 64 GB. In this scheme kernel still gets
only 1 GB of virtual addresses between 3GB to 4GB and they are mapped directly to the first
giga byte of the physical memory as before. The extra virtual addresses are used for user space
addressing.
Hope this helps, Rithin.
Tyler wrote:
Hi all,
The virtual adress space is divided into 2 parts (0-3GB for the processes/3-4GB for the kernel). This means that the kernel can only adress 1 GB.
On systems with big amounts of Ram, there's the problem of insufficent virtual adress (1GB), the problem of HighMem.
But I don't understand this problem in fact. Because the virtual adresses used in kernel mode are only for the kernel. And all the kernel structures are always loaded into the RAM (never on the swap), right ? So, with the problem posed, this means that sometimes, the kernel is bigger than 1 GB of memory ??
-- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/
-- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/