实验二-进程管理(linux)

实验二-进程管理(linux)

ID:27799924

大小:87.05 KB

页数:7页

时间:2018-12-06

实验二-进程管理(linux)_第1页
实验二-进程管理(linux)_第2页
实验二-进程管理(linux)_第3页
实验二-进程管理(linux)_第4页
实验二-进程管理(linux)_第5页
资源描述:

《实验二-进程管理(linux)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、实验二进程管理(Linux)一、实验类型木实验为设计性实验。二、实验目的与任务1)加深对进程概念的理解,明确进程和程序的区别。2)进一步认识并发执行的实质三、预习要求1)进程的概念2)进程控制的概念及内容3)进程的并发执行4)熟悉互斥的概念5)用到的Linux函数有:fork(),lockf()等。四、实验基本原理使用fork()系统调用来创建一个子进程,父进程和子进程并发执行,交替输出结果。使用lockf()系统调用对临界区进行加锁操作,实现对共享资源的互斥使用。五、实验仪器与设备(或工具软件)实验设备:计算机一台,软件环境要求:Linux操

2、作系统和gcc编译器。六、实验内容1)进程的创建编写一段程序,使用系统调用fork()创建两个子程序。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符子进程分别显示字符“屮和字符“cS运行程序10次,观察记录屏幕上的显示结果,并分析原因。2)进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程间的互斥,观察并分析出现的现象。(1)进程的创建参考程序如下:#

3、includemain(){intpl,p2;while((p1=fork())==-1);〃p父进程pl子进程1if(pl!=O){while(((p2=fork())==-1);//p父进程p2子进程2if(p2==0)putchar('b');elseputchar('c');}elseputchar('a');}运行结果:略cabbcabac分析:原因:Fork()函数有三个返回值:1.-1执行不成功2.0表示当前正在执行子进程3.其他数值表示当前正在执行父进程,值是子进程的进程标识符PID4.获取当前进程的标识符ge

4、tpid()5.获取当前进程的父进程的标识符getppid()(2)进程的控制参考程序如下#includemain(){intpl,p2,i;while((pl=fork())==-l);//父进程p,子进程plif(pl==O){for(i=0;i<500;i++)printf(nchild_pl_%dn,i);}elsewhile((p2=fork())==-1);//父进程p,子进程p2if(p2==0)for(i=0;i<500;i++)printf("chind_p2_%d",i);elsefor(i=0;i

5、<500;i++)printf("father_p_%d”,i);}}运行结果:略分析:由于函数printf()输出和字符吊之间不会被中断,因此字符吊内部的字符顺序输出不变。但是由于进程并发执行时的调度顺序和父进程的抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。进程加锁后的参考程序如下:#includemain(){intpl,p2,i;while((pl=fork())==-l);if(pl==O){lockf(1,1,0);for(i=0;i<500;i++)printf(Hchild_pl_%d

6、n,i);//等待一会sleep()lockf(1,0,0);}else{while((p2=fork())==-1);if(p2==0){lockf(1,1,0)for(i=0;i<500;i++)printf(Hchind_p2_%d”,i);lockf(1,0,0)elselockf(1,1,0)for(i=0;i<500;i++)printf("father_p_%dn,i);;lockf(1,0,0)}}}运行结果:略分析:学生自己完成(3)编写程序创建进程树如图1和图2所示,在每个进程屮显示当前进程识别码和父进程识别码。(选

7、做题)父进程卜子进程丿进程树图2进程树参考代码及结果如下:[root@hebin~]#cattree.c#include#includeintmain(){intpl_b,p2_c,p3_d;plb=fork?);if—(pl_b>0)printf("processfathera:pid=%dJgetpid());elseif(plb==0){printf(''childb:pid=fatheris%d11fgetpid()#getppld());p2c=fork();if(p2c==0){prin

8、tf("childc:pid=fatheris%dH,getpid(),getppid());p3_d=fork();if(p3d==0)prin

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

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

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