mmap how does kernel know a page is mmaped

Greg Freemyer greg.freemyer at gmail.com
Thu Jul 25 14:33:21 EDT 2013


On Thu, Jul 25, 2013 at 1:52 PM, kernel neophyte
<neophyte.hacker001 at gmail.com> wrote:
> ok,
>
> I am sorry maybe I did not ask the question correctly, all I want to know is
> how mmap works underneath, given an address X how does kernel figure out its
> a mmaped page ?
>
> -Neo
>
>
> On Thu, Jul 25, 2013 at 10:04 AM, <Valdis.Kletnieks at vt.edu> wrote:
>>
>> On Thu, 25 Jul 2013 09:14:03 -0700, kernel neophyte said:
>>
>> > Could anyone please explain, how mmap works underneath ? when kernel
>> > traveses pgd->pud->pmd->pte how does it know that a particular page is a
>> > mmaped page ? is there any special flag ?
>>
>> Why would the address mapping hardware even *care* that it's an mmap'ed
>> page, once the mapping is set up?  For that matter, why would most of
>> the kernel code care?
>>
>> Only time an mmap'ed page is any different than any other process page is
>> while the mmap is actually being set up, modified, or torn down.
>>
>> (And in fact, that's part of why getting the varions sync() calls to play
>> nice with mmap() is so hard - because an mmap'ed file page is just a page.
>> So noticing that a page got modified and knowing to do stuff like update
>> the atime and mtime of the backing file is difficult...)
>>

Neo,

First be aware this is bottom post only mailing list, as are most of
the LKML lists, so if you are going to post on the public lists you
will need to start bottom posting.

As to your question, the more specific you are the better.

There are 3 situations I can think of offhand, but I don't know which
one you are interested in:

1) Userspace does a read/write to a data page that is not memory
resident and the page is backed by a mmap'ed file.

2) Userspace does a read/write to a data page that is memory resident

3) The kernel decides a memory page is needed for another use and
needs to be sync'ed to disk if any data updates are not to be lost.

Valdis is saying for case 2) the kernel doesn't care.  The kernel is
not even in the loop.  The userspace app has the memory pages
available to it via the standard MMU mapping so the data accesses just
work.

The kernel in general only has to handle case 1) and case 3)

Greg



More information about the Kernelnewbies mailing list