Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!uwvax!astroatc!prairie!dan From: dan@prairie.UUCP (Daniel M. Frank) Newsgroups: comp.sys.intel Subject: Re: Copy-on-write Message-ID: <364@prairie.UUCP> Date: Wed, 26-Nov-86 00:04:46 EST Article-I.D.: prairie.364 Posted: Wed Nov 26 00:04:46 1986 Date-Received: Wed, 26-Nov-86 07:48:55 EST References: <362@prairie.UUCP> <867@sfsup.UUCP> <363@prairie.UUCP> Reply-To: dan@prairie.UUCP (Daniel M. Frank) Distribution: na Organization: Prairie Computing, Madison, Wisconsin Lines: 31 Yup, I was wrong about this. I missed it because I was thinking in terms of sharing the same portion of the virtual address space, instead of sharing the same pages in the physical address space. The way to get page level copy-on-write in the 386 is: 1) Map the new segment to another, unused portion of the virtual address space. 2) Copy the page table entries from the old segment's part of the page table into the new segment's part of the page table, and mark all the new entries read-only. 3) Whenever you get a fault, copy the old physical page into a new one, and replace the page table entry with one for the new page, and mark the page as writeable. This is less aesthetically pleasing than per-segment page tables, since you have to poke around a bit whenever you get a fault, to figure out whose segment it's in, and why you got the fault. It IS doable, though, and I stand corrected. One more thing: I don't think it's very appropriate to call people stupid when they are wrong, as long as they are being reasonably polite about it. -- Dan Frank uucp: ... uwvax!prairie!dan arpa: dan%caseus@spool.wisc.edu