资源描述:
《软件工程_计算机软件及应用_IT计算机_专业资料》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验一进程管理—、实验目的1.学会在Linux中利用系统调用fork()创建进程。2.加深对进程概念的理解,明确进程和程序的区别。3.进一步认识在系统内进程并发执行的实质。4.分析进程竞争资源的现象,学习解决进程互斥的方法。5.掌握Linux中进程通信的基本原理。二、实验类型验证性实验。三、实验预备知识1.阅读Linux的sched.h源码文件,加深对进程管理概念的理解。2.阅读Linux的fork.c源码文件,分析进程的创建过程。四、实验内容1.进程的创建【任务】编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上
2、显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。【程序】#includemain(){/*创建子进程pl,失败时循环*//*子进程pl创建成功*/intpl,p2;while((pl=fork())==-l);if(pl==0)putchar('b');while((p2=fork())==-l);/*创建另一个子进程p2,失败时循环*/if(p2==0)/孚子进程p2创建成功勺putchar('c');elseputchar(4a,);/*父进程执行*/}【执行结果】输入正确输出实验输出【分析原因】1.进程的控
3、制【任务】修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现彖,并分析其原因。如果在程序中使用系统调用lockf()来给每个进程加锁,可以实现进程Z间的互斥,观察并分析出现的现象。【程序1】#includemain()intpl,p2,i;while((pl=fork())==-1);if(pl==0)for(i=0;i<50;i++)printf(<4child%d,i);else{while((p2=fork())==-l)if(p2==0)for(i=0;i<50;i++)printf(4tson%d,i);elsefo
4、r(i=0;i<50;i++)printfC'daughter%d”,i);【执行结果】输入正确输出实验输出【分析原因】【程序2】#include#includemain()intpl,p2,i;while((p1=fork())==-l);if(pl==O){lockf(1,1,0);/*加锁勺for(i=0;i<50;i++)printfC'child%d'',i);lockf(1,0,0);/*解锁*/}else{while((p2=fork())==-l)if(p2==0){lockf(1,1,0);for(i=0;i<50;i++)pr
5、intf(uson%d",i);lockf(1,0,0);)else{lockf(1,1,0);for(i=0;i<50;i++)printfC'daughter%d”,i);lockf(1,0,0);【执行结果】输入正确输出实验输出【分析原因】1.软中断通信【任务1】编制一段程序,使用系统调用krk()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按任意字母键和Enter键),当捕捉到川断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:childprocess1iskilledbyparent!c
6、hildprocess2iskilledbyparent!父进程等待两个子进程终止后,输出以下信息后终止:parentprocessiskilled!【程序】#include#include#include#includevoidwaiting(),stop();intwait_mark;main()intphp2;while((pl=fork())==-l);/*创建进程pl*/while((p2=fork())==-l);/*创建进程p2*/if(p2>0)PrintfC'parentrun!“);P
7、rintfC'p1=%d,pl);Printf(up2=%d,p2);wait_mark=1;getchar();/*向pl发软中断信号16*/kill(p2,17);/*向p2发软中断信号17*/sleep(5);/*父进程睡眠5秒*/wait(O);/*等待子进程结束,同步引wait(O);/*等待另一子进程结束,同步*/lockf(stdout,l,0);/*标准输出加锁*/printfC'