1、进程A和进程B共享页面,代码如下:
if (!(pid=fork())) {
压栈操作;//子进程B
}
if (pid>0){
压栈操作;//父进程A
}
2、我们假设现在系统有一个用户进程A,他自己对应的程序代码已经载入内存中,此时该进程内存中所占用的页面引用计数都为”1“,接下来他开始执行,通过调用fork函数创建一个新进程(进程B)。在新进程创建的过程中,系统将进程A的页表项全部复制给进程B,并设置进程B的页目录项。此时这两个进程就共享页面,被共享页面的引用计数累加为2,并将此共享页面全部设置为”只读“属性,即无论是进程A还是进程B,都只能对这些共享的页面进程读操作,而不能进行写操作。执行代码如下:
int copy_page_tables(unsigned long from,unsigned long to,long size)
{
......
for( ; size-->0 ; from_dir++,to_dir++) {
......
for ( ; nr-- > 0 ; from_page_table++,to_page_table++) {
this_page = *from_page_table;
if (!(