- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统实验报告 实验3-1: Linux进程的创建与父子进程同步 实验目的 (1)熟悉在C语言源程序中使用Linux所提供的系统调用界面的方法; (2)掌握Linux中进程的创建方法以及调度执行情况,理解进程与程序的区别; (3)使用系统调用wait()和exit(),实现父子进程同步; (4)了解Linux提供的C编译器gcc的调用; (5)进一步掌握vi的使用。 实验内容 (1)父进程创建子进程,返回后父子进程都分别循环输出字符串“I am parent.”或“I am child.”5次,每输出一次后使用sleep(1)延时1秒,然后再进入下一次循环,如下所示。将该源程序链接后执行,观察并分析运行结果。 父进程返回后执行: for(i=0;i5;i++) { printf(“I am parent.\n”); sleep(1); } 子进程返回后执行: for(i=0;i5;i++) { printf(“I am child.\n”); sleep(1); } (2)进程家族树 在源程序中连续使用4个fork(),而不是用if()进行返回值的判段,在4个fork()语言后面输出字符“A”。观察并分析该程序编译连接执行后的输出结果。 (3)父子同步进程 修改第(1)题的程序,使用exit()和wait()实现父子进程同步,其同步方式为父进程等待子进程的同步,即:子进程先循环输出5次,然后父进程再循环输出5次.观察是否有不同的结果出现。 实验思考 观察运行结果,分析结果产生的原因。 答:当一个新的进程创建后,系统就会增加一个进程参与竞争CPU,并随时可能被操作系统调度执行 当程序中创建了子进程后,该程序的执行有什么特点?为什么? 答:条件分支的结构清晰,实现父子进程的程序分离及父子进程双方感觉不到对方的行为;因为子进程创建后复制了父进程的堆栈和数据空间,并继承了父进程的资源权限,及父进程和子进程在各自的空间中运行同一内容的程序,所以程序会运行两次。 如果连续创建多个子进程而不使用条件进行各自空间的分隔,会出现什么情况?请画出第(2)题实验的进程家族树。 Fork() Fork() Fork() Fork() Fork() Fork() Fork() Fork() Fork() Fork() Fork() Fork() Fork() Fork() Fork() 如上图所示一共出现了16个A 如何实现父子进程之间的父进程等待子进程的同步? 答:使用信号量P、V操作来实现子进程与父进程的同步,子进程终止时执行exit()向父进程发终止信号,父进程使用wait()等待子进程的终止。 实验代码 = 1 \* GB3 ①3-1-1: main() { int p1,i; while ((p1=fork())==-1); if (p10) for (i=0;i5;i++) { printf(I am parent.\n); sleep(1); } else for (i=0;i5;i++) { printf(I am child.\n); sleep(1); } } = 2 \* GB3 ②3-1-2: #include stdio.h main() { fork(); fork(); fork(); fork(); putchar(A); //每个进程都要输出‘A’ } = 3 \* GB3 ③3-1-3: main() { int p1,i; while ((p1=fork())==-1); if (p10) { wait(0); for (i=0;i5;i++) { printf(I am parent.\n); sleep(1); } } else { for (i=0;i5;i++) { printf(I am child.\n); sleep(1); } exit(0); } } 程序运行结果 = 1 \* GB3 ①3-1-1: = 2 \* GB3 ②3-1-2: = 3 \* GB3 ③3-1-3: 实验心得 经过这次实验让我有了很大的收获,明白了进程之间的运行机制和如何创建以及使父子进程同步的方法,慢慢熟悉了LINUX中子进程的操作,但是还有很多地方时不懂的,要多看点课外有关的书籍更深入
有哪些信誉好的足球投注网站
文档评论(0)