Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.os.linux.development.system > #813

Re: Understanding the working of Shared memory using mmap()

From Richard Kettlewell <invalid@invalid.invalid>
Newsgroups comp.os.linux.development.system
Subject Re: Understanding the working of Shared memory using mmap()
Date 2023-03-10 16:30 +0000
Organization terraraq NNTP server
Message-ID <wwvr0two9h1.fsf@LkoBDZeT.terraraq.uk> (permalink)
References <6ad837bd-745e-4b01-b19c-0acf88687d9dn@googlegroups.com>

Show all headers | View raw


Pavankumar S V <pavankumarsv96@gmail.com> writes:

> Hello, 
> As per my understanding, I can explain the working of mmap() briefly like this:
> When a process(let's call it process1) calls mmap on a regular file,
> that file is first copied to the page cache. Then the region of page
> cache which contains the file is mapped to virtual address space of
> the process1(This memory region is called memory-mapped file).
> If another process(let's call it process2) calls mmap on the same
> file, then the same page cache that was mapped to process1 will get
> mapped to the virtual address space of process2.
> When the processes wants to access the file, they simply access this
> memory mapped file which is very faster. Also the data modified by
> process1 can be seen by process2.
>
> I have a query here. Please clarify it:
> When the process1 wants to write some data to the file, it will write
> to this memory mapped file. Then these dirty pages that are private to
> the process1 should be copied to the page cache. When will the kernel
> do this copying to page cache and how frequently? Is there a way for
> the process to control it?
> (My concern is : If there is a slight delay in performing this
> copying, it will delay the process2 which is mapped to the same file
> from reading the modified data.)
> The details of copying from Page Cache to the underlying file happens
> like this as per my understanding:
> Once the Page Cache is modified, the dirty pages are eventually
> flushed to the disk automatically based on some conditions using
> pdflush threads. And the processes can also explicitly do this
> flushing using the system call msync().
> So, I want to understand how these things happen when copying from
> memory mapped file to the Page cache.

My understanding is that there is no such copy. The page in the page
cache is added directly to the process’s virtual address space. The only
copies are when flushing a dirty page to disk, or duplicating a page
during copy-on-write with a private mapping.

-- 
https://www.greenend.org.uk/rjk/

Back to comp.os.linux.development.system | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Understanding the working of Shared memory using mmap() Pavankumar S V <pavankumarsv96@gmail.com> - 2023-03-09 04:19 -0800
  Re: Understanding the working of Shared memory using mmap() Richard Kettlewell <invalid@invalid.invalid> - 2023-03-10 16:30 +0000
  Re: Understanding the working of Shared memory using mmap() Rainer Weikusat <rweikusat@talktalk.net> - 2023-03-13 17:35 +0000

csiph-web