[Chapter 3 Process]Practice 3.2 Including the initial parent process, how many processes are created by the program shown in Figure?
2013-11-21 10:23
751 查看
3.2 Including the initial parent process, how many processes are created by the program shown in Figure?
答案: 会创建8个进程。
解析:相关知识: fork函数的执行原理
fork函数执行一次, 返回两次,父进程返回子进程的PID, 子进程返回0(至于返回值为什么不同, 这与do_fork函数有关,具体是怎么一回事我还不太清楚)。程序中可利用此性质来区别程序的父进程和子进程。
当一个进程执行fork函数时, 其新建的子进程得到一份父进程用户级虚拟内存空间的拷贝, 包括文本、数据和bbs段、堆和用户栈, 子进程会得到一个和父进程相同的PCB。因为程序在操作系统中运行的时候,程序执行指令是由program counter(程序计数器)来控制的, 因为子进程PCB中的program counter信息和父进程PCB的program counter信息相同, 所以子进程会继续向后执行指令, 而不会执行父进程fork之前的指令。执行如下图显示的程序,fork出来的子进程不会执行fork之前的printf语句。
程序的运行结果:p hello
p world
现在来讲解一下3.2题的程序。画进程图。 假设在return 0之前printf一个hello
当程序运行到第一个fork时, 创建一个子进程c1, 在上面的进程图中, 用垂直的箭头表示父进程创建了一个子进程, 与垂直箭头相连的线代表新建的子进程的进程线。 在子进程c1中, 会继续向下执行剩余的两个fork, 在执行剩余两个fork中的第一个时, 又会创建一个子进程c2, 而子进程c2会继续向下执行剩余的最后一个fork, c2又会创建一个新的子进程c3, c3执行printf, 之后return 0,c3进程结束, c2之后也会执行printf并return 0结束。 图中的进程都是按照程序运行的逻辑画出来的。 所以, 包含最初的父进程在内, 一共有8个进程。
答案: 会创建8个进程。
解析:相关知识: fork函数的执行原理
fork函数执行一次, 返回两次,父进程返回子进程的PID, 子进程返回0(至于返回值为什么不同, 这与do_fork函数有关,具体是怎么一回事我还不太清楚)。程序中可利用此性质来区别程序的父进程和子进程。
当一个进程执行fork函数时, 其新建的子进程得到一份父进程用户级虚拟内存空间的拷贝, 包括文本、数据和bbs段、堆和用户栈, 子进程会得到一个和父进程相同的PCB。因为程序在操作系统中运行的时候,程序执行指令是由program counter(程序计数器)来控制的, 因为子进程PCB中的program counter信息和父进程PCB的program counter信息相同, 所以子进程会继续向后执行指令, 而不会执行父进程fork之前的指令。执行如下图显示的程序,fork出来的子进程不会执行fork之前的printf语句。
程序的运行结果:p hello
p world
现在来讲解一下3.2题的程序。画进程图。 假设在return 0之前printf一个hello
当程序运行到第一个fork时, 创建一个子进程c1, 在上面的进程图中, 用垂直的箭头表示父进程创建了一个子进程, 与垂直箭头相连的线代表新建的子进程的进程线。 在子进程c1中, 会继续向下执行剩余的两个fork, 在执行剩余两个fork中的第一个时, 又会创建一个子进程c2, 而子进程c2会继续向下执行剩余的最后一个fork, c2又会创建一个新的子进程c3, c3执行printf, 之后return 0,c3进程结束, c2之后也会执行printf并return 0结束。 图中的进程都是按照程序运行的逻辑画出来的。 所以, 包含最初的父进程在内, 一共有8个进程。
相关文章推荐
- 简单 javascript 跨域iframe 操作
- 老技术,UrlRewriter实现全站伪静态
- 主机修改IP等相关信息后,SSH(SCP)其他主机报错
- Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍
- MySQL存储过程学习笔记
- android 比较靠谱的图片压缩
- OpenStack_Havana_Install_guide的keystone脚本2
- Hadoop家族
- 不能执行已释放的Script代码”错误的原因及解决办法
- 韩顺平网页设计第三十三讲
- allergo 命令
- 按键抖动与处理
- javascript 数组排序函数sort和reverse
- 实现一个冒泡提示的浮点数编辑框
- 详解Android中AsyncTask的使用
- Inno Setup入门(一)——最简单的安装脚本
- 解魔方的机器人-零基础攻略(序)
- 小腿抽筋非缺钙,中医效方简便廉
- web应用,大的用户量该如何解决性能问题
- 视图的优缺点