Linux内核fork流程
来源:互联网 发布:国家税务电子申报软件 编辑:程序博客网 时间:2024/04/29 21:36
简单记录一下内核中fork的处理流程:
首先申请内存空间,并复制父进程的PCB信息及父进程的状态寄存器值,使子进程与父进程状态保持一致。
首先申请内存空间,并复制父进程的PCB信息及父进程的状态寄存器值,使子进程与父进程状态保持一致。
然后,确定新进程的地址空间,复制父进程的LDT信息,保持父子进程的代码段,数据段位置一致。
接着,复制父进程的页目录项及页表。
来个小程序说明进程复制过程:
#include <stdio.h>#include <sched.h>int data = 10;int child_process(){ printf("Child process %d, data %d, &data = %d\n",getpid(),data, &data); data = 20; printf("Child process %d, data %d, &data = %d\n",getpid(),data, &data); while(1);}int main(int argc, char* argv[]){ if(fork()==0) { child_process(); } else{ sleep(1); printf("Parent process %d, data %d, &data = %d\n",getpid(), data, &data); while(1); } return 0;}
最后结果是当子进程修改data值之前,data内容保持一致。当子进程企图修改data值时,系统产生缺页异常,内核重新
为子进程分配内存地址,并将分配的内存与新进程的地址空间绑定。
这样在新进程看来相同的位置,其实映射到了不同的物理内存上。
这就是父子进程输出的地址相同的原因了。
- Linux内核fork流程
- Linux内核 fork 源码分析
- linux内核启动流程
- Linux内核启动流程
- 编译LINUX 内核流程
- linux内核启动流程
- linux内核启动流程
- Linux内核加载流程
- linux内核启动流程
- Linux内核启动流程
- Linux内核启动流程
- linux内核启动流程
- linux内核启动流程
- linux内核启动流程
- Linux内核启动流程
- linux内核启动流程
- Linux内核启动流程
- Linux 内核启动流程
- IE CSS Bug
- Android Camera拍照常见问题小结
- error while loading shared libraries: cannot restore segment prot after reloc: Permission denied错误原
- 贯穿你一生的14条社会生计
- mysql数据库用户权限及建库脚本
- Linux内核fork流程
- 在JS中对EL取得的URL进行编码
- 秋菜价格
- ffmpeg on Android
- 作为一个移动应用开发者,我们的创意应当避免走向低俗
- 拯救小鼠标!
- 新电脑
- Linux Shell脚本逻辑操作符简介
- dreamweaver随记---关于表格