Hi Venkat On Wed, Apr 7, 2010 at 3:58 AM, Venkatram Tummala <venkatram...@gmail.com>wrote:
> Joel, > > To make things clear, 896 MB is not a hardware limitation. The 3GB:1GB > split can be configured during the kernel build but the split cannot be > changed dynamically. > > you are correct that ZONE_* refers to grouping of physical memory but the > very concept of ZONES is logical and not physical. > > Now, why does ZONE_NORMAL has only 896MB on a 32 bit system? > > If you recall the concept of virtual memory, you will remember that its aim > is to provide a illusion to the user processes that it has all the > theoritical maximum memory possible on that specific architecture, which is > 4GB in this case, and that that is only process running on the system. The > kernel internally deals with pages, swapping in & out pages to create this > illusion. The advantage is that user processes does not have to care about > how much physical memory is actually present in the system. > > So, out of this 4GB, it was conceptually decided that 3GB is the process's > virtual address space and 1GB is the kernel virtual address space. The > kernel maps these 3GB of user processes' virtual address space to physical > memory using page tables. The kernel can just address 1GB of virtual > addresses. This 1GB of virtual addresses is directly mapped (1-1 mapping) > into the physical memory without using page tables. If the kernel wants to > address more virtual addresses, it has to kmap the high memory(ZONE_HIGHMEM) > which sets up the page tables etc. So, you can imagine this as : "Whenever a > context switch Shouldnt "context switch" be termed as "process switch" over here ..... Correct me if am wrong ! > occurs, 3GB virtual address space of the previous running process will be > replaced by the virtual address space of the newly selected process, and the > 1GB always remains with the kernel." Note that all this is virtual (That is, > conceptual), this is only an illusion. > > So, out of this 1GB of kernel virtual address space that is 1-1 mapped into > the physical memory(without requiring page tables), 0-16MB is used by device > drivers, 896MB - 1024MB is used by the kernel for vmalloc, kmap, etc which > leaves (16MB - 896MB) and this range is "called" ZONE_NORMAL. > > Giving specific emphasis to the word "called" in the previous sentence. > > In summary, the kernel can only access 896 MB of physical ram because it > only has 1GB of virtual address space available out of which the lower 16MB > is used for DMA by device drivers and the 896MB-1024MB is used to support > kmap, vmalloc etc. And note that this limitation is not because of the > hardware but this is because of the conceptualization of the division of > virtual address space into user address space & kernel address space. > > For example, you can make the split 2G-2G instead of 3G-1G. So, the kernel > can now use 2GB of virtual address space (directly mapped to 2GB of physical > memory). You can also make the split 1GB:3GB instead of 3GB:1GB as already > explained. > > Hope this clears the confusion. > > Regards, > Venkatram Tummala > > > > On Tue, Apr 6, 2010 at 1:01 PM, Joel Fernandes <agnel.j...@gmail.com>wrote: > >> Hi Peter, >> >> On Wed, Apr 7, 2010 at 1:14 AM, H. Peter Anvin <h...@zytor.com> wrote: >> > On 04/06/2010 12:20 PM, Frank Hu wrote: >> >>> >> >>> The ELF ABI specifies that user space has 3 GB available to it. That >> >>> leaves 1 GB for the kernel. The kernel, by default, uses 128 MB for >> I/O >> >>> mapping, vmalloc, and kmap support, which leaves 896 MB for LOWMEM. >> >>> >> >>> All of these boundaries are configurable; with PAE enabled the user >> >>> space boundary has to be on a 1 GB boundary. >> >>> >> >> >> >> the VM split is also configurable when building the kernel (for 32-bit >> >> processors). >> > >> > I did say "all these boundaries are configurable". Rather explicitly. >> > >> >> I thought the 896 MB was a hardware limitation on 32 bit architectures >> and something that cannot be configured? Or am I missing something >> here? Also the vm-splits refer to "virtual memory" . While ZONE_* and >> the 896MB we were discussing refers to "physical memory". How then is >> discussing about vm splits pertinent here? >> >> Thanks, >> -Joel >> >> -- >> To unsubscribe from this list: send an email with >> "unsubscribe kernelnewbies" to ecar...@nl.linux.org >> Please read the FAQ at http://kernelnewbies.org/FAQ >> >> > -- Regards, ~Sid~ A little bird which escaped the nest had to fall before it learnt to fly !