COW and mprotect on non-shared memory
Ed L Cashin
ecashin at uga.edu
Thu Aug 7 08:06:49 PDT 2003
"Luoqi Chen" <lchen at briontech.com> writes:
[Ed writes]
>> That means that if I do this:
>>
>> for (i = 0; i < n; ++i) {
>> assert(!mprotect(p, pgsiz, PROT_NONE));
>> assert(!mprotect(p, pgsiz, PROT_READ|PROT_WRITE|PROT_EXEC));
>> p[i] = i & 0xff;
>> }
>>
>> ... I get n minor page faults! Pretty amazing, but I guess they
>> figured nobody does that.
...
> The first mprotect() removes the physical mapping from the page
> table, the second mprotect() doesn't do anything because the mapping
> isn't there. So when the page is accessed, a fault is needed to
> insert the mapping back to the page table.
OK, thanks. I can see that in sys/i386/i386/pmap.c. It leaves me
wondering what MAP_ENTRY_COW is for, though.
--
--Ed L Cashin | PGP public key:
ecashin at uga.edu | http://noserose.net/e/pgp/
More information about the freebsd-hackers
mailing list