linux的进程技巧.ppt

新的进程通过克隆旧的进程来建立,当前进程是通过fork()系统调用来建立新的进程 当系统调用结束时,内核在系统的物理内存中为新进程分配新的task_struct结构,并为新进程要使用的堆栈分配物理页和进程标志符 父进程和子进程共享打开的文件 fork()的简单流程 如上图所示,分别使fork调用前后的两个部分 PC指向当前执行的语句,fork之前,它指向第一个printf语句,fork调用之后进程A、B一起运行,A是父进程,B是子进程-进程A的副本,执行与A一样的程序。两个pc都指向第二个printf语句。也就是AB从程序的相同点开始执行 Fork()执行的内存变动如下: 分配1页给task_struct结构 分配1页给内核堆栈 分配1页给pg_dir并且给page_tables分配一些页 硬件相关的变化 SS被置为内核堆栈(0x10) ESP被置为新分配栈的顶端(kernel_stack_page) CR3指向新分配的页目录 (由copy_page_table()完成) Idt=_LDT(task_nr)建立新的局部描述符 为新的任务状态段(tss)和局部描述符表(ldt[])装入gdt 从父进程继承剩下的寄存器 Pid_t fork(void); 由fork创建的新进程称为子进程。该函数被调用一次,会返回

文档评论(0)

1亿VIP精品文档

相关文档