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

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

ID:52209311

大小:333.00 KB

页数:12页

时间:2020-03-25

进程的创建与并发执行-带答案版.doc_第1页
进程的创建与并发执行-带答案版.doc_第2页
进程的创建与并发执行-带答案版.doc_第3页
进程的创建与并发执行-带答案版.doc_第4页
进程的创建与并发执行-带答案版.doc_第5页
资源描述:

《进程的创建与并发执行-带答案版.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、实验二进程管理2.1进程的创建与并发执行1.实验目的(1)加深对进程概念的理解,理解进程和程序的区别。(2)认识并发进程的实质。分析进程争用资源的现象,学习解决进程互斥的方法。(3)理解系统调用和用户命令的区别。2.实验类型:验证型3.实验学时:24.实验原理和知识点(1)实验原理:程序的并发执行具有随机性和不可再现性。程序并发执行会导致资源共享和资源竞争,各程序向前执行的速度会受资源共享的制约。程序的动态执行过程用进程这个概念来描述。由于向前推进的速度不可预知,所以多个进程并发地重复执行,整体上得到的结果可能不同。但要注意,就其

2、中某单个进程而言,其多次运行结果是确定的。(2)知识点:进程、子进程、并发执行的特性;5.实验环境(硬件环境、软件环境):(1)硬件环境:IntelPentiumIII以上CPU,128MB以上内存,2GB以上硬盘(2)软件环境:linux操作系统。6.预备知识(1)fork()系统调用头文件:#includeunixstandardheader/*是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数*/函数原型:pi

3、d_tfork(void);/*是Linux下的进程号类型,也就是ProcessID_Type的缩写。其实是宏定义的unsignedint类型*/函数功能:fork的功能是创建子进程。调用fork的进程称为父进程。如图2.1所示。子进程是父进程的一个拷贝,它继承了父进程的用户代码、组代码、环境变量、已打开的文件代码、工作目录及资源限制。fork语句执行后,内核向父进程返回子进程的进程号,向子进程返回0。父子进程都从fork()的下一句开始并发执行。返回值:返回值==-1:创建失败。返回值==0:程序在子进程中。返回值>0:程序在父

4、进程中。(该返回值是子进程的进程号)编程提示:虽然子进程是父进程的一个复制品,但父子的行为是不同的。编程时要抓住内核的返回值。通过返回值,可以知道是父进程还是子进程,因而可以编写不同行为的代码。12图2.1fork()创建进程示意图(2)wait()系统调用头文件:#include函数原型:pid_twait(int*status);函数功能:wait的功能是等待子进程结束。发出wait调用的进程只要有子进程,就会睡眠直到子进程中的一个终止为止。若没有子进程,则该调用立即返回。函数参数:status是子进程

5、退出时的状态信息。返回值:成功则返回子进程号,否则返回-1。(3)getpid()系统调用头文件:unistd.h,在VC++6.0下可以用process.h函数原型:pid_tgetpid(void);函数功能:wait的功能是将父进程挂起,等待子进程终止。getpid函数用来取得目前进程的进程ID,许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。返回值:目前进程的进程ID。(4)其他系统调用exit–终止进程exec–执行一个应用程序nice–改变进程的优先7.实验内容与步骤(将所有截图换成用户名为你们自己

6、姓名的拼音,并回答所有的问题)(1)运行图2.1所示程序将图2.1中的源程序保存为e201.c在终端中编译gcc–oe201e201.c运行./e20112此时,程序为死循环,在该终端中无法继续输入命令执行,于是,我们可以暂时不管这一个终端,而是再新建一个终端,然后键入ps–e,列出当前所有进程观察屏幕,是否有两个名为e201的进程。比较它们的进程号,判别哪个是父进程,哪个是子进程。程序中的while(1);语句是为了不让程序退出来,以便于你观察进程状态。用kill命令把这两个进程终止。可见,第一个终端如下图所示,已经从死循环中解

7、救出来了。当然,最简单粗暴的方法不是关闭相关进程,而是直接通过ctrl+c强制结束。对图2.1的程序稍加改进,可看见两个进程的进程号。12(2)编写一段名为e202.c的源程序,使用系统调用fork()创建两个子进程p1和p2。p1的功能为显示字符'b',p2的功能为显示字符'c',父进程的功能为显示字符'a',父进程和两个子进程并发运行。不停的运行e202,观察并记录屏幕上的显示结果。程序设计过程:用while语句控制fork()直到创建成功。用if语句判别是在子进程中还是在父进程中。程序运行后会创建三个进程,它们分别是子进程p

8、1、p2、父进程。这三个进程并发运行。假定子进程有些任务要做,完成这些任务要花一定时间,因此,可以用一个延时函数简单地模拟这些任务。//e202.c#includevoiddelay(intx)/*延时函数*/{inti,j;fo

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。