When a program calls mmap
to allocate an anonymous page, also known as a demand-zero page, what appears in the address field of the corresponding page table entry (PTE)? I am assuming that the kernel does not create a zero-initialized page in physical memory (and enter that physical page's page number into the PTE) until the requesting process actually touches the page — hence the term demand-zero. Since it would not be a disk address, and would not be 0 (which is for unallocated pages), what value would appear there? As a different but related question, how does the kernel "know" that this page is to be handled as a demand-zero page, i.e., that the fault handler should find a physical page and initialize it with 0 rather than copy a page from disk?
What is in the PTE address field for an anonymously zero-fill-on-demand mapped page?
650 Views Asked by Amittai Aviram At
1
There are 1 best solutions below
Related Questions in LINUX-KERNEL
- Check for numeric value with optional commas javascript
- CSV to XML XSLT: How to quote excape
- How can I determine the index of the same set of characters between two strings that are of different lengths?
- Max 3 digits, up to 3 decimals
- Regex for SQL insert query
- Javascript Regex to get specific string from two differently-formatted text blocks
- JavaScript differences beetween new Regex('regex', 'flags') and /regex/flags
- Java replace every Nth specific character (e.g. space) in String
- c# regex spain mobile phone
- Perl Regex: Merge multiple one-character substrings
Related Questions in VIRTUAL-MEMORY
- Check for numeric value with optional commas javascript
- CSV to XML XSLT: How to quote excape
- How can I determine the index of the same set of characters between two strings that are of different lengths?
- Max 3 digits, up to 3 decimals
- Regex for SQL insert query
- Javascript Regex to get specific string from two differently-formatted text blocks
- JavaScript differences beetween new Regex('regex', 'flags') and /regex/flags
- Java replace every Nth specific character (e.g. space) in String
- c# regex spain mobile phone
- Perl Regex: Merge multiple one-character substrings
Related Questions in PAGE-TABLES
- Check for numeric value with optional commas javascript
- CSV to XML XSLT: How to quote excape
- How can I determine the index of the same set of characters between two strings that are of different lengths?
- Max 3 digits, up to 3 decimals
- Regex for SQL insert query
- Javascript Regex to get specific string from two differently-formatted text blocks
- JavaScript differences beetween new Regex('regex', 'flags') and /regex/flags
- Java replace every Nth specific character (e.g. space) in String
- c# regex spain mobile phone
- Perl Regex: Merge multiple one-character substrings
Related Questions in ZERO-INITIALIZATION
- Check for numeric value with optional commas javascript
- CSV to XML XSLT: How to quote excape
- How can I determine the index of the same set of characters between two strings that are of different lengths?
- Max 3 digits, up to 3 decimals
- Regex for SQL insert query
- Javascript Regex to get specific string from two differently-formatted text blocks
- JavaScript differences beetween new Regex('regex', 'flags') and /regex/flags
- Java replace every Nth specific character (e.g. space) in String
- c# regex spain mobile phone
- Perl Regex: Merge multiple one-character substrings
Related Questions in DEMAND-PAGING
- Check for numeric value with optional commas javascript
- CSV to XML XSLT: How to quote excape
- How can I determine the index of the same set of characters between two strings that are of different lengths?
- Max 3 digits, up to 3 decimals
- Regex for SQL insert query
- Javascript Regex to get specific string from two differently-formatted text blocks
- JavaScript differences beetween new Regex('regex', 'flags') and /regex/flags
- Java replace every Nth specific character (e.g. space) in String
- c# regex spain mobile phone
- Perl Regex: Merge multiple one-character substrings
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Indeed, this is usually the case. Unless special cases, like for example if
MAP_POPULATE
is specified to explicitly request the page to be initialized (also called "pre-fauting").Right after
mmap
you don't even have a PTE allocated for the page (or in general, you don't have any entry at any page table level). For what the CPU is concerned, the page doesn't even exist. If you were to walk the page table you would just get to a point (at an arbitrary level) where the corresponding entry is marked as "not present".For what the CPU is concerned, the page is unallocated. At the first page fault, two things can happen:
Quoting directly from the documentation:
When a page fault occurs, the kernel page fault handler (architecture-dependent) determines to which VMA the page belongs to, and retrieves the corresponding
struct vm_area_struct
(which was created earlier either by the kernel itself or by ammap
syscall). This structure is then passed on to architecture-independent code (do_fault()
) along with the needed fault information (struct vm_fault
).The
vm_area_struct
then contains all the remaining necessary information to handle the fault (for example the->vm_file
field which is!= NULL
in case of a file-backed mapping). The field->vm_ops
points to astruct vm_operations_struct
which defines a set of function pointers to call in different occasions. In particular anonymous VMAs have->vm_ops == NULL
.For other kind of pages,
->fault()
is the function used when handling a page fault. This function knows what to check and how to actually handle the fault.Simple, just check
vma->vm_ops == NULL
and in such case you know that the page is a demand-zero anon page. Then on a page fault act as needed (read fault -> update PTE to point to global zero page, write fault -> allocate a page and update PTE).