《操作系统实验报告进程通信管理分析解析》由会员分享,可在线阅读,更多相关《操作系统实验报告进程通信管理分析解析(9页珍藏版)》请在金锄头文库上搜索。
1、漳州师范学院实验报告班 级13网络1班学号班08990337姓名 成绩同组人实验日期课程名称:操作系统实验题目:进程通信管理实验目的与要求1 .加深理解进程并发执行的概念,认识多进程并发执行的实质;2 .观察进程争夺资源的现象,分析其进程和原因,学习解决进程互斥的 方法;3 . 了解Linux系统中多进程之间通过软中断通信以及管道通信基本原 理和应用方法;实 验 环 境 的 配 置PC兼容机。Window xp以上操作系统第1页闽南师范大学1.软中断通信编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用 signal ()让父进程捕捉键盘上来的中断信号(即按 ctrl+c键),
2、当捕捉到 中断信号后,父进程用系统调用kill ()向两个子进程发出信号,子进程捕 捉到信号后,分别输出下列信息后终止:child processl is killed by parent!child process2 is killed by parent!父进程等待两个子进程终止后,输出一下信息后终止:parentprocessis killed!程序:#include #include #include void waiting();void stop();int wait_mark;实验内容与具体步骤int main()int p1,p2;while(p1=fork()= -1);if
3、(p10) 父进程产生子进程1while(p2=fork()= -1);if(p20)父进程产生了一个子进程 2/父进程printf(parentn);wait_mark=1;将等待标志设置为 1signal(SIGINT,stop);waiting();kill(p1,16);/kill(p2,17);wait(0);wait(0);printf(parent processis killed!n); 父进程等待两个子进程终止后,输出一下信息后终止 exit(0);else子进程2printf(p2n);wait_mark=1;signal(17,stop);waiting();lockf(
4、1,1,0);printf(child process2 is killed by parent!n);lockf(1,0,0);exit(0);else子进程1printf(p1n);wait_mark=1;signal(16,stop);waiting();lockf(1,1,0);printf(child process1 is killed by parent!n);lockf(1,0,0);exit(0);void waiting()while(wait_mark!=0);void stop()wait_mark=0;理解分析:1.先创建父进程,由父进程分别产生子进程1和子进程2,依
5、次输出pl, p2, parent 。2.给父进程中断信号,父进程终止子进程,运行 stop函数wait_mark=0;跳 出 waiting 函数,输出 parent process is killed!2.修改程序,查看修改前结果跟修改后结果的区别,分析原因。. . .else signal(SIGINT, SIG_IGN); /* add this line */ signal(17,stop); . . .elsesignal(SIGINT, SIG_IGN); /* add this line */ signal(16,stop);理解分析:1.先创建父进程,由父进程分别产生子进程1
6、和子进程2,依次输出p1, p2, parent 。2. 给父进程中断信号,父进程开始终止子进程,但是由于添加了signal(SIGINT, SIG_IGN);语句,相当于使子进程忽略键入信号,此时按ctrl+c不会将子进程终止,程序可以正常运行。于是输出child process1 is killed by parent!和 child process 2 is killed by parent!2 .进程的管道通信编制一段程序,实现进程的管道通信。使用系统调用pipe()建立一条管道线两个子进程pl和p2分别向管道各写一句话:Child 1 is sendinga message!Chil
7、d 2 is sendinga message!而父进程则从管道中读出来自两个子进程的信息,显示在屏幕上。程序:#include#include#include int pid1,pid2;main()int fd3;charOutPipe100,InPipe100;pipe(fd);/fd0存管道的读入端,fd1是管道的写入端while(pid1=fork()= -1);实验内容与具体步骤if(pid1=0)/对子进程1的操作printf(p1n);lockf(fd1,1,0);/对管道写入端进行软锁sprintf(OutPipe,Child 1 is sendinga message!);
8、/Outipe数组存放Child. write(fd1,OutPipe,50);/ 把 OutPipe 的内容写入管道sleep(1);lockf(fd1,0,0);/释放对管道写入端的锁定exit(0);else/父进程产生白了子进程p1while(pid2=fork()= -1);if(pid2=0)/由p1产生子进程p2printf(p2n);lockf(fd1,1,0);/对管道写入端进行软锁sprintf(OutPipe,Child 2 is sendingamessage!);/Outipe数组存放Child. write(fd1,OutPipe,50);/把 OutPipe 的内
9、容写入管道sleep(1);lockf(fd1,0,0);/释放对管道写入端的锁定exit(0);elseprintf(parentn);wait(0);/暂停当前进程的执行read(fd0,InPipe,50);/从管道读取端读取数据存入InPipeprintf(%sn,InPipe);/ 输出 InPipe 的内容wait(0);/暂停当前进程的执行read(fd0,InPipe,50);/从上一次读取位置继续读取数据存入InPipeprintf(%sn,InPipe);/ 输出 InPipe 的内容exit(0);请理解以上程序,多次运行并分析结果,并回答以下问题。口国 印t 里的 工f
10、thtaI m t*:n 丁小中:中一力匚=:卜*?: 口口-广寻c -Y.c -0-hi* CHMlOlOCiDOSt TflM* ,曲珞部 parent Ctilld 1 is sending h imsStH和 Ltirld i. j.3 scndan. eukhhewF ixhlurIhuui rocit * . /uh y 口 P?p-arTitLbJ.ld 1 is snHf t, a He4sapel3dLi 2 lit bvriiW. t * 尊稣/ TtH16l0fiitK;F T QQ1 |C ,.”h* Pl种ai3 tpchild 1 Ie undins bbcuipf
11、rffi IT: 714 r ; n r k r # F tooEIcc w 1 卜H与亡 root匚人-哈.F 入,少1 /二rfk Tthr kJw 10:隗|匚晒吧hpw .耍典,理解分析:在该管道通信中,有时是子进程pl, p2往管道中传送数据完后父进程再从管道中读取数据,有时是子进程 pl往管道中传送数据后父进程从管道中读取数据, 然后子进程p2再往管道中传送数据,父进程再从管道中读取数据。1)管道通信的概念是什么管道通信即发送进程以 字符流形式将大量数据送入管道,接收进程可从管道接收数据,二者利用管道进行通信。2)同步和互斥的概念是什么,在程序中如何实现的同步:是指散步在不同进程之
12、间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。互斥:是指散步在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。程序中实现:1.(子进程和父进程).父进程读出之前确定管道中有数据,否则阻塞自己,这一点通过系统调用wait()函数既可以实现,当子进程结束时父进程才执行,那么此时管道中肯定有子进程写入的数据了(这可以通过进程见的同步来办到)2.(子进程之间)子进程在写入之前要确定管道中的数据已被父进程读出,否则不能写入或者阻塞自己。(这可以通
13、过进程见的互斥来间接办到,因为子进程间的互斥,所以每个子进程在执行开始都对管道pipe加锁,并且子进程在向管道中写入数据后还有调用 sleep()系统用调用睡眠若干时间,那么就可保证父进程能够从管道中读出数据, 然后下一子进程才能写入)3) 为什么要用两个wait(0)刚开始等待信号的到来,然后从管道中读出pl写进去的数据(第一个wait(0),然后在等待信号的到来,从管道中读出p2写进去的数据(第二个 wait(0) )o4) Sleep(1)的作用每把OutPipe的内容写入管道就休眠1秒,保证父进程能从管道中读出数据。漳州师院实验报告实 验 心 得1 .本次实验对于进程管理有了更 进一步的了解,但是 对一些函数 应用还是不够熟 悉2 .本次第2个实验管道通信可能会遇到运行了很多次结果都一样的情况,应该耐心多试几次,保证实验的准确性和科学性注:如果填皆内容超出表格,自行添加附 页。