在Linux系统下学习一个系统函数最好的方法就是阅读其源码,首先,给出fork函数的源码
/** linux/kernel/fork.c* //--fork()用于创建子进程* (C) 1991 Linus Torvalds*//** 'fork.c' contains the help-routines for the 'fork' system call* (see also system_call.s), and some misc functions ('verify_area').* Fork is rather simple, once you get the hang of it, but the memory* management can be a bitch. See 'mm/mm.c': 'copy_page_tables()'*/#include <errno.h>#include <linux/sched.h>#include <linux/kernel.h>#include <asm/segment.h>#include <asm/system.h> //--写页面验证,若页面不可写,则复制页面extern void write_verify(unsigned long address);long last_pid=0; //--进程空间区域写前验证函数void verify_area(void * addr,int size){ unsigned long start; start = (unsigned long) addr; size += start & 0xfff; start &= 0xfffff000; start += get_base(current->ldt[2]); //--逻辑地址到线性地址的转换 while (size>0) { size -= 4096; write_verify(start); start += 4096; }}int