Page table queries

Rajat Sharma fs.rajat at gmail.com
Sat Feb 19 04:52:35 EST 2011


> so after the setting of user space virtual address the physical memory can
> be directly addreseed by just doing a page table translation in user space
> and kernel doesn't need to be involved.As it has already created the page
> table and returned the corresponding page.Am i right?

Right. Basically this translation is done by CPU while executing any
portion of user program code segment instruction which tries to access
this mapped memory region (vma). Note that this is user vma getting
accessed in user mode, so access is allowed at RPL=3, with smooth
access :). However if page is not mapped, it will result in page fault
exception which traps into kernel and calls nopage method of vma. So,
kernel is involved only for establishing the mapping on demand.

You can say it is equivalent to accessing any other user data segment
in application space, e.g. accessing heap (malloced area). If page is
not already mapped into the heap, it traps into kernel with page fault
and page fault handler of heap (nopage method of vma) will allocate a
page-frame and assign it to vma. So, you can see the equivalence
between two. Only difference comes from kernel handlers for first time
mapping page-frames (RAM or device memory).

Rajat

On Sat, Feb 19, 2011 at 3:02 PM, anish singh
<anish198519851985 at gmail.com> wrote:
>
>
> On Sat, Feb 19, 2011 at 2:44 PM, Rajat Sharma <fs.rajat at gmail.com> wrote:
>>
>> > So, in the start, the page might have kernel mode address, but in the
>> > end it has user mode address. But kernel is still the one that tracks
>> > all the page...be it anonymous or non anonymous ones.
>>
>> Not really. In this particular case of .nopage (page fault handler) of
>> vma, we already have a user space virtual address for the faulty page,
>> we just need it to map it with a physical page frame (RAM or device
>> memory). Just allocate a physical page frame without any address,
>> caller for .nopage will take care of properly setting its user space
>> virtual address (page->va). So, no association with kernel space
>> virtual address is required, e.g. it can be high memory page too
>> without any kernel mapping.
>>
> so after the setting of user space virtual address the physical memory can
> be directly addreseed by just doing a page table translation in user space
> and kernel doesn't need to be involved.As it has already created the page
> table and returned the corresponding page.Am i right?
>>
>> Rajat
>>
>> On Sat, Feb 19, 2011 at 2:10 PM, Mulyadi Santosa
>> <mulyadi.santosa at gmail.com> wrote:
>> > Hi :)
>> >
>> > I'll try to help...
>> >
>> > On Sat, Feb 19, 2011 at 13:10, anish singh <anish198519851985 at gmail.com>
>> > wrote:
>> >> As i understood whenver a user space program is run it is represented
>> >> in
>> >> kernel using VMA which is managed by struct mm_struct
>> >> and whenever the program is trying to read/write to a memory location
>> >> in
>> >> user space it will be directed to physical address using PAGE TABLE
>> >> translation done by struct mm_struct(done in kernel space).Am i right?
>> >
>> > i think not "done" but mm_struct points to PGD that represent's the
>> > whole process address space. Using information provided there, MMU
>> > does translation.
>> >
>> >> Suppose a simple driver wants the user to directly access its device
>> >> memory
>> >> then we use mmap.This mmap associates a set of user space virtual
>> >> address
>> >> with device driver memory and it is done by creating kernel page tables
>> >> for
>> >> the user space virtual addresses.Is the page table translation done
>> >> everytime whenever user space does read/write to the device memory??
>> >
>> > if it's recently translated, quite likely it is already cached in TLB
>> > (translation look aside buffer)
>> >
>> >> In .nopage function call we return the page associated with the
>> >> physical
>> >> address which the user wants to associate with user space virtual
>> >> address.Is
>> >> the page address returned by the nopage function same as seen by the
>> >> user or
>> >> will it be converted to user space virtual address(range between 0-2
>> >> GB)?
>> >
>> > AFAIK, nopage is one of the functions that handle minor page fault, no?
>> >
>> > Anyway, memory allocation, usually start by kernel allocates a page.
>> > Then it is "handed" to user space memory allocator.
>> >
>> > So, in the start, the page might have kernel mode address, but in the
>> > end it has user mode address. But kernel is still the one that tracks
>> > all the page...be it anonymous or non anonymous ones.
>> >
>> > Does it help? :)
>> >
>> >
>> >
>> > --
>> > regards,
>> >
>> > Mulyadi Santosa
>> > Freelance Linux trainer and consultant
>> >
>> > blog: the-hydra.blogspot.com
>> > training: mulyaditraining.blogspot.com
>> >
>> > _______________________________________________
>> > Kernelnewbies mailing list
>> > Kernelnewbies at kernelnewbies.org
>> > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>> >
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies at kernelnewbies.org
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
>



More information about the Kernelnewbies mailing list