欢迎来到天天文库
浏览记录
ID:38173853
大小:443.50 KB
页数:4页
时间:2019-05-24
《惠州学院操作系统实验一》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验一进程的创建与并发执行一、实验目的(1)熟悉Linux工作环境和GCC工具(2)加深对进程概念的理解,明确进程和程序的区别(3)进一步认识并发进程的实质和特征二、实验器材微型计算机、Ubuntu版本的Linux系统三、实验内容任务1:进程创建编写一段程序,让父进程产生两个子进程,父进程显示字符“a”、两个子进程,分别显示字符“b”、“c”。运行程序,观察并分析运行结果。程序源代码如下:#includemain(){intp1,p2;while((p1=fork())==-1)
2、;//父进程创建第一个进程,直到成功if(p1==0)//0返回给子进程1putchar('b');//P1的处理进程else//正数返回给父进程(子进程号){while((p2=fork())==-1);//父进程创建第二个进程,直到成功if(p2==0)//0返回给子进程2putchar('c');//P2的处理过程elseputchar('a');//P2创建完成后,父进程的处理过程}}程序运行截图如下:程序运行结果分析:首先进程main作为父进程创建第一个进程p1,此时存在p1和main两
3、个进程,分别为父进程和子进程,所以它们的p1分别为大于0和等于0。这两个进程分别执行下面的if函数体。当子进程执行时,打印出50000次childA;当父进程执行时,又创建了一个新的子进程p2,接下去的执行和原先的p1和main进程相同。所以最终系统中存在了4个进程,其中一个进程为终端,另外3个进程分别打印属于自己的内容。任务2:将上述的输出字符改为输出较长的字符串,观察进程并发执行,分析执行结果。程序源代码如下:#includemain(){intp1,p2,i;while((
4、p1=fork())==-1);//父进程创建第一个进程,直到成功if(p1==0)for(i=0;i<50000;i++)printf("childA%d",i);else{while((p2=fork())==-1);//父进程创建第二个进程,直到成功if(p2==0)for(i=0;i<50000;i++)printf("childB%d",i);else//P2创建完成后,父进程的处理过程for(i=0;i<50000;i++)printf("parent%d",i);}}程序
5、运行结果截图如下:运行结果分析:首先进程main作为父进程创建第一个进程p1,此时存在p1和main两个进程,分别为父进程和子进程,所以它们的p1分别为大于0和等于0。这两个进程分别执行下面的if函数体。当子进程执行时,打印出50000次childA;当父进程执行时,又创建了一个新的子进程p2,接下去的执行和原先的p1和main进程相同。所以最终系统中存在了4个进程,其中一个进程为终端,另外3个进程分别打印属于自己的内容。一、思考题解答(包括需要改写的程序的源码及适当注释)1.当新创建进程开始执行
6、时,指令指针的起始位置在哪里?答:创建新进程之后,此时有main和p1两个进程,它们分别根据他们是子进程还是父进程执行不同的if函数体,所以指令指针的起始位置在“if(p1==0)”这一句。2.如果将任务1改为:编写一段程序,让父进程创建一个子进程,然后父进程显示字符“a”;子进程创建一个子子进程,然后显示字符“b”;子子进程显示字符“c”。如何改写源程序?(实验报告上给出完整的源码,并在机器上运行。)答:修改后的源代码如下:#includemain(){intp1,p2;whi
7、le((p1=fork())==-1);//父进程创建一个子进程,直到成功if(p1==0)//0返回给子进程{//P1的处理过程while((p2=fork())==-1);//子进程创建子子进程,直到成功if(p2==0)putchar('c');//子子进程P2的处理过程elseputchar('b');}else{putchar('a');//子子进程创建完成后,父进程的处理过程}}修改后的运行结果如下:
此文档下载收益归作者所有