资源描述:
《实验二 进程管理 - Welcome to SCTS & CGCL!.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验三进程管理1.目的和要求通过进程的创建、控制和通信的设计达到下述目的:(1)加深对进程概念的理解,明确进程和程序的区别;(2)进一步认识并发(共行)执行的概念,区别顺序执行和并发(共行)执行;(3)分析进程争用临界资源的现象,学习解决进程互斥的方法;(4)了解UNIX或Linux系统中进程通讯的基本原理。2.实验内容(1)进程的创建编制一段程序,使用系统调用fork()创建两个子进程,这样在此程序运行时,在系统中就有一个父进程和两个子进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,子进程分别显示字符b和字符c。试观察,记录并
2、分析屏幕上进程调度的情况。(2)进程的控制修改已编制的程序,将每个进程输出一个字符修改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析出现问题的原因,进一步理解各个进程争夺临界资源的情况。如果在程序中使用系统调用locking()来给每一个进程加锁,可以实现进程之间的互斥,试观察并分析出现的现象。(3)进程的软中断通讯编制一段程序,实现进程的软中断通讯:使用系统调用fork()创建两个子进程;再使用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键);在捕捉到中断信号后,父进程用系统调用kill()向两个子进程发
3、信号;子进程捕捉到信号后分别输出下列信息后终止:Childprocess1iskilledbyparent!Childprocess2iskilledbyparent!父进程等待两个子进程都终止以后,输出如下信息后终止:Parentprocessinkilled!(4)进程的管道通讯编制一段程序,实现进程的管道通讯:使用系统调用pipe()建立一条管道线;两个子进程分别循环向这条管道写一句话:Child1issendingamessage!Child2issendingamessage!而父进程则循环从管道中读出信息,显示在屏幕上。3.实验环境
4、(1)PC兼容机(2)Linux系统4.实验提示(1)用4个基本系统调用实现进程的创建,执行和自我终止:①fork()创建一个子进程。用它创建的子进程是fork调用者进程(即父进程)的复制品,即进程映象。除了进程标识数以及与进程特性有关的一些参数外,其它与父进程相同,与父进程共享文本段和打开的文件,并都受进程调度程序的调度。如果创建进程失败,则fork()返回值为-1;若创建进程成功,则从父进程返回值是子进程号,从子进程返回的值是0,返回值在R0。m=fork()。②wait()父进程处于阻塞(或等待)状态,等待子进程执行完成终止后继续工作。其
5、返回值R0为等待子进程的子进程号。n=wait()。③exit()子进程自我终止,释放所占资源,通知父进程可以删除自己。此时它的状态变成P_state=SZOMB。④getpid()获得进程的标识数(进程号),一般是正整数。P=getpid()。编程示例:例1:编写一个程序,父进程生成一个子进程,父进程等待子进程wait(),子进程执行完成后自我终止exit(),并唤醒父进程。父、子进程执行时打印有关信息。main(){inti,j,k;if(i=fork())//非零值{j=wait();printf("Parentprocess!");
6、printf(“i=%dk=%d”,i,k);}else{k=getpid();printf("Childprocess!");printf(“i=%dk=%d”,i,k);}}例2.编写一个程序,输入两个整数并求和输出,然后创建一个子进程,当进程调度程序调度到父进程或子进程时特输出不同的信息。main(){inti,j,k,sum;scanf("%d%d",&j,&k);sum=j+k;printf("sum=%d",sum);while((i=jork())==-1)printf(“i=%d”,i);if(i)print
7、f("Itisparentprocess!");elseprintf("ItisChildprocess!");}实验题1.编写一个程序,用fork()创建2个子进程。让每个进程在屏幕上显示一个字符:父进程显示字符a,子进程分别显示字符b和字符c。先对例1和例2进行运行,了解各个系统调用的使用,再做本实验题1。观察,记录并分析屏幕上进程调度的情况。(1)进程的“软中断”通信它可用于同一用户的进程之间通信。其方式是:一个进程通过系统调用kill(pid,sig)向同一用户的其它进程pid发送一个软中断信号;另一进程通过系统调用signal
8、(sig,func)捕捉到信号sig后,执行予先约定的动作func,从而实现这两个进程间的通信。①发送信号kill(pid,sig),本进程将指定信号