On Tue, Oct 16, 2012 at 5:47 PM, Kshemendra KP <kshemendra@xxxxxxxxxxxxx> wrote:
Chetan Nanda
On x86 kernel is normally split into 3GB (user) : 1 GB (Kernel) spaces. Kernel can only directlymanipulate 1 GB (around 889 MB) from the PAGE_OFFSET (0xC0000000). The user spacememofy below PAGE_OFFSET kernel can't directly access, it considers this memory ashigh 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.
If the memory is above 4 GB with page extension, it is clear that kernel can't access it askernel uses "void *" and/or "unsigned long" to hold the address. But it is not clear for mewhy 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 ..
RegardsKshemendra
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies