Yes, to be technically very correct, process switch is a more appropriate
word to use here. Because, context switch includes the case where an
interrupt has to be serviced while a process is executing and after the
interrupt is serviced, the same process may continue execution. A process
switch on other hand involves switching to another user level process.

Having said that, words context switching & process switching are often used
interchangeably. I dont know the actual norm used in the linux kernel
discussion.

On Wed, Apr 7, 2010 at 12:33 AM, Siddu <[email protected]> wrote:

> Hi Venkat
>
> On Wed, Apr 7, 2010 at 3:58 AM, Venkatram Tummala 
> <[email protected]>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 <[email protected]>wrote:
>>
>>> Hi Peter,
>>>
>>> On Wed, Apr 7, 2010 at 1:14 AM, H. Peter Anvin <[email protected]> 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 [email protected]
>>> 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 !
>
>

Reply via email to