进程的创建与并发执行-带答案版课案.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程的创建与并发执行-带答案版课案

实验二 进程管理 2.1 进程的创建与并发执行 1.实验目的 (1) 加深对进程概念的理解,理解进程和程序的区别。 (2) 认识并发进程的实质。分析进程争用资源的现象,学习解决进程互斥的方法。 (3) 理解系统调用和用户命令的区别。 2.实验类型:验证型 3.实验学时:2 4.实验原理和知识点 (1) 实验原理:程序的并发执行具有随机性和不可再现性。程序并发执行会导致资源共享和资源竞争,各程序向前执行的速度会受资源共享的制约。程序的动态执行过程用进程这个概念来描述。由于向前推进的速度不可预知,所以多个进程并发地重复执行,整体上得到的结果可能不同。但要注意,就其中某单个进程而言,其多次运行结果是确定的。 (2) 知识点:进程、子进程、并发执行的特性; 5.实验环境(硬件环境、软件环境): (1)硬件环境:Intel Pentium III 以上CPU,128MB以上内存,2GB以上硬盘 2)软件环境:。fork()系统调用头文件#include unistd.h unix standard header /*是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数*/ 函数原型 pid_t fork(void); /*是Linux下的进程号类型,也就是Process ID _ Type 的缩写。其实是宏定义的unsigned int类型*/ 函数fork的功能是创建子进程。调用fork的进程称为父进程。子进程是父进程的一个拷贝,它继承了父进程的。==-1:创建失败。 ==0: 程序在子进程中。 0:程序在父进程中。(是子进程的进程号)编程时要抓住返回值。 图2.1 fork()创建进程示意图 (2) wait()系统调用头文件:#include sys/wait.h 函数原型:pid_t wait(int *status); 函数wait的功能是等待子进程结束。发出wait调用的进程只要有子进程,就会睡眠直到子进程中的一个终止为止。若没有子进程,则该调用立即返回。 函数参数status是子进程退出时的状态信息。()系统调用头文件: 函数原型:pid_t (void); 函数wait的功能是。 返回值:目前进程的进程ID。 (4) 其他系统调用 在终端中编译gcc –o e201 e201.c 运行 ./e201 此时,程序为死循环,在该终端中无法继续输入命令执行,于是,我们可以暂时不管这一个终端,而是再新建一个终端,然后键入 ps –e,列出当前所有进程 观察屏幕,是否有两个名为e201的进程。比较它们的进程号,判别哪个是父进程,哪个是子进程。 程序中的while(1);语句是为了不让程序退出来,以便于你观察进程状态。用kill命令把这两个进程终止。可见,第一个终端如下图所示,已经从死循环中解救出来了。 当然,最简单粗暴的方法不是关闭相关进程,而是直接通过ctrl+c 强制结束。 对图2.1的程序稍加改进,可看见两个进程的进程号。 (2)编写一段程序,使用系统调用fork()创建两个进程p1和p2。p1显示字符b,p2显示字符c,父进程显示字符a,父进程和两个子进程并发运行。观察并记录屏幕上的显示结果用while语句控制fork()直到创建成功。用if语句判别是在子进程中还是在父进程中。#include stdio.h void delay(int x) /* 延时函数 */ { int i,j; for(i=0;ix;i++) for(j=0;jx;j++) ; } int main() { int p1,p2; while((p1=fork())==-1); /* 创建子进程p1 */ if(p1==0) /* 子进程p1创建成功 */ { delay(4096); /* 子进程p1延时*/ putchar(b); /* 子进程p1显示字符b */ }lse{ while((p2=fork())==-1); /* 创建子进程p2 */ if(p2==0) /* 子进程p2创建成功 */ { delay(2048); /* 子进程p2延时*/ putchar(c); /* 子进程p2显示字符c */ }else putchar(a); /* 父进程显示字符a */ } return 0; } 按向上的光标键、回车运行刚才的程序。快速重复

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档