Regarding high mem

Chetan Nanda chetannanda at gmail.com
Wed Oct 17 09:56:52 EDT 2012


On Oct 17, 2012 2:22 PM, "Kshemendra KP" <kshemendra at suphalaam.com> wrote:
>
>
>
>
> On Wed, Oct 17, 2012 at 2:04 PM, Chetan Nanda <chetannanda at gmail.com>
wrote:
>>
>>
>>
>> On Tue, Oct 16, 2012 at 5:47 PM, Kshemendra KP <kshemendra at suphalaam.com>
wrote:
>>>
>>>
>>>    On x86 kernel is normally split into 3GB (user) : 1 GB (Kernel)
spaces. Kernel can only directly
>>>    manipulate 1 GB (around 889 MB) from the PAGE_OFFSET (0xC0000000).
The user space
>>>    memofy below PAGE_OFFSET kernel can't directly access, it considers
this memory as
>>>    high memory. Kernel needs to kmap()/kmap_atomic() map user page and
access that region.
>>
>>
>> As per my understanding, if kernel code is running under a process
context then it can access lower 3GB address space, provided address in
0-3GB is in process address space.  And its not a high memory.
>> High memory is a virtual address space with 1GB kernel space to map RAM
pages beyond 896MB.
>
>
> One thing not clear to me is, during boot,  kernel is copied to 1st MB of
the RAM in x86 architecture as this  architecture
> has ISA mem map hole (640k -to 1MB). From 1st BM till 896MB is occupied
by the kernel. Then user space will be
> made available beyond 896 MB.  With this reasoning, it is not clear to
me, whether user space which is present
> beyond 896 MB is in high memory.

On x86 kernel will be loaded in RAM from 1st MB. But kernel code and data
will not go upto 896MB.
Kernel code + data will be loaded in ram from 1MB - end_data (IIRC). and
address space between end_data to 896Mb is used for dynamic allocation
(kmalloc ) etc...

I would recomend you to read 2nd chapter of understanding linux kernel.
This chapter contain detailed info on memory addressing used by kernel on
x86
>>
>>
>>
>>>
>>>    If the memory is above 4 GB with page extension, it is clear that
kernel can't access it as
>>>    kernel uses "void *" and/or  "unsigned long" to hold the address.
But it is not clear for me
>>>    why kernel's can't directly access memory below PAGE_OFFSET ( 0-3GB)
directly.
>>
>>
>> Kernel can access 0-3GB memory, take an example of application sending
data to kernel via system call e.g. write.
>> in Write system call pointer to the buffer will be in 0-3Gb address
space of calling application. And kernel will access this address to write
data to drivers/etc ..
>>
>>>
>>>
>>> Regards
>>>
>>> Kshemendra
>>>
>>> _______________________________________________
>>> Kernelnewbies mailing list
>>> Kernelnewbies at kernelnewbies.org
>>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>>>
Chetan Nanda
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20121017/e23523b0/attachment.html 


More information about the Kernelnewbies mailing list