资源描述:
《操作系统实验报告-观察进程的并发性.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、评语:课中检查完成的题号及题数:课后完成的题号与题数:成绩:指导教师:实验报告一实验名称:观察进程的并发性日期:2011.5.7班级:学号:姓名:一、实验目的:通过创建子进程,观察父子进程的并发执行过程,区别顺序执行和并发执行;明确进程和程序的区别;加深对操作系统进程概念和进程并发特性的理解。二、实验内容:进程的创建。编制一段程序,使用系统调用fork()创建两个子进程,在此程序运行时,系统中就有一个父进程和两个子进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,两个子进程分别显示字符b和子符c。试观察、记录并分析屏幕上进程调度和并发执行的情况。若在
2、程序中使用系统调用nice()^改变各进程的优先级,观察岀现的现象.三、项目要求及分析:为了体现岀进程的并发性,首先在父进程创建一个子进程,进程里利用循环方式输岀字符“b”,然后在父进程里乂创建子进程2,进程2里循环输岀字符“c”,在父进程里循环输出字符‘务”。这样程序运行时,父子进稈之间并发执行,并输岀相应的字符。对于nice()函数的应用,我主要是先输出子进程1的优先级,然后用nice函数修改子进程的优先级,然后观察运行结果。对于子进程2也用nice函数修改了其优先级,再观察运行结果。四、具体实现:4.1流程图开始fork。创建子进程1fork。创建子进程2迪
3、程循习瀚出"a"•為子进程结束结束4.2添加函数的代码1)进程之间的并发性#include#include#include#includeintmain(){intij,k;intpid=fork();//newfirstthreadif(pid==0)//firstthread{for(j二();jv5;j++)printf(nfirst:bttj=%dnj);sleep(l);exit(O);elseif(pid>0)//mainthread{intpi=fbrk(
4、);//newsecondthreadif(pi==O)//secondthread{for(k=0;k<5;k++){printf("second:ctk=%d",k);sleep(l);}exit(O);}elseif(pi>0)//mainthread{for(i=0;i<5;i++){printf("main:atti=%d'i);sleep(l);}waitpid(pid,0,0);//waitfirstthreadoverwaitpid(pi,0,0);//waitsecondthreadoverprintf(”mainthreadex
5、itr");exit(O);}else//secondthreadfailed{perror("functionfork()error!r");exit(l);}}else//firstthreadfailed{perror(nfunctionfork()error!r");exit(l);}return0;}2)nice函数的应用#include#include#include#includeintmain(){inti,j,k;intoldpri,newp
6、ri;intpid=fork();//newfirstthreadif(pid==O)//firstthread{printf("parentpidis%d",getppid());oldpri=getpriority(PRIO_PROCESS,getpid());printfC'firstthreadoldpriority=%du,oldpri);newpri=nice(5);printf("firstthreadnewpriority=%dn,newpri);for(j=0;j<5;j++){printf(ufirst:bttj=%d,j
7、);sleep(l);}exit(O);}elseif(pid>0)//mainthread{intpi=fbrk();//newsecondthreadif(pi==O)//secondthread{nice(2);for(k=0;k<5;k++){printf("second:ctk=%dn,k);sleep(l);}exit(O);}elseif(pi>0)//mainthread{for(i=0;i<5;i++){printf("main:atti=%d",i);sleep(l);waitpid(pid,O,O);//waitfirstthr
8、eadov