操作系统实验二(进程管理)_第1页
操作系统实验二(进程管理)_第2页
操作系统实验二(进程管理)_第3页
操作系统实验二(进程管理)_第4页
操作系统实验二(进程管理)_第5页
已阅读5页,还剩29页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.. .. ..操作系统进程管理实验实验题目:(1)进程的创建编写一段程序 ,使用系统调用 fork( )创建两个子进程 。当此程序运行时,在系统中有一个父进程和两个子进程活动 。让每一个进程在屏幕上显示一个字符 :父进程显示字符 “a”;子进程分别显示字符 “b”和字符“c”。试观察记录屏幕上的显示结果 ,并分析原因。2)进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕上出现的现象,并分析原因。(3)编制一段程序,使其实现进程的软中断通信。要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键);当捕捉到中断信号后,父进程调用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Childprocess1iskilledbyparent!Childprocess2iskilledbyparent!父进程等待两个子进程终止后,输出如下的信息后终止:Parentprocessiskilled!在上面的程序中增加语句signal(SIGINT,SIG_IGN)和signal(SIGQUIT,SIG_IGN),观察执行结果,并分析原因。4)进程的管道通信编制一段程序,实现进程的管道通信。使用系统调用pipe()建立一条管道线;两个进程P1和P2分别向管道各写一句话:Child1issendingamessage!Child2issendingamessage! 而父进程则从管道中读出来自于两个子进程的信息 ,显示在屏幕上。要求父进程先接收子进程 P1发来的消息,然后再接收子进程 P2发来的消息。实验源程序及报告 :. 专业.专注 ... .. ..(1)、进程的创建#include<stdio.h>intmain(intargc,char*argv[]){intpid1,pid2; /*forkfirstchildprocess*/if((pid1=fork())<0){printf("ProcessCreateFailed!");exit(-1);}if((pid1=fork())==0). 专业.专注 ... .. ..{printf("b\n");}/*forksecondchildprocess*/if((pid2=fork())<0){printf("ProcessCreateFailed!");exit(-1);}if((pid2=fork())==0){. 专业.专注 ... .. ..printf("c\n");}/*parentprocess*/else{wait(NULL);printf("a\n");exit(0);}return0;}. 专业.专注 ... .. ..(2)、进程的控制#include<stdio.h>intmain(intargc,char*argv[]){intpid1,pid2;/*forkfirstchildprocess*/if((pid1=fork())<0){printf("ProcessCreateFailed!");exit(-1);}if((pid1=fork())==0). 专业.专注 ... .. ..{printf("ThisismyUnixOSprogram!\n");}/*forksecondchildprocess*/if((pid2=fork())<0){printf("ProcessCreateFailed!");exit(-1);}if((pid2=fork())==0){. 专业.专注 ... .. ..printf("ThisisthesecondChildprocess!\n");}/*parentprocess*/else{wait(NULL);printf("ThisistheParentprocess\n");exit(0);}return0;}. 专业.专注 ... .. ..(3)编制一段程序,使其实现进程的软中断通信 。#include<stdio.h>#include<signal.h>#include<unistd.h>#include<sys/types.h>intwait_flag;voidstop();main(){intpid1,pid2; signal(3,stop);while((pid1=fork())==-1);if((pid1=fork())>0). 专业.专注 ... .. ..{while((pid2=fork())==-1);if((pid2=fork())>0){wait_flag=1; signal(SIGINT,stop);sleep(5);kill(pid1,16);kill(pid2,17);wait(0);wait(0);printf("\nParentprocessiskilled.\n");. 专业.专注 ... .. ..exit(0);}else{wait_flag=1;signal(17,stop);printf("\nChildprocess2iskilledbyparent.\n");exit(0);}}else. 专业.专注 ... .. ..{wait_flag=1;signal(16,stop);printf("\nChildprocess1iskilledbyparent.\n");exit(0);}}voidstop(){wait_flag=0;}. 专业.专注 ... .. ..(4)进程的管道通信#include<unistd.h>#include<signal.h>#include<stdio.h>intpid1,pid2;intmain(){intfd[2];charOutPipe[100],InPipe[100];pipe(fd);while((pid1=fork())==-1);. 专业.专注 ... .. ..if(pid1==0){lockf(fd[1],1,0);sprintf(OutPipe,"\nChildprocess1issendingmessage!\n");write(fd[1],OutPipe,50);sleep(5);lockf(fd[1],0,0);exit(0);}else{. 专业.专注 ... .. ..while((pid2=fork())==-1);if(pid2==0){lockf(fd[1],1,0);sprintf(OutPipe, "\n Child process 2 is sendingmessage!\n");write(fd[1],OutPipe,50);sleep(3);lockf(fd[1],0,0);exit(0);}. 专业.专注 ... .. ..else{wait(0);read(fd[0],InPipe,50);printf("%s\n",InPipe);wait(0);read(fd[0],InPipe,50);printf("%s\n",InPipe);exit(0);}}. 专业.专注 ... .. ..return0;}三、程序注释:(1)进程的创建源代码:#include<stdio.h>intmain(intargc,char*argv[]){intpid1,pid2;/*调用fork函数创建进程 1*/if((pid1=fork())<0). 专业.专注 ... .. ..{/*fork()返回值为负数,则创建进程失败*/printf("ProcessCreateFailed!");exit(-1);}/**/*fork()返回值为 0,则创建子进程成功且当前进程为子进程**/if((pid1=fork())==0){printf("b\n"); //子进程1输出’b’;}. 专业.专注 ... .. ../**/*创建子进程 2***/if((pid2=fork())<0)/*fork() 返回值为负数,则创建进程失败 */{printf("ProcessCreateFailed!");exit(-1);}/**/*fork()返回值为 0,则创建子进程成功且当前进程为子进程**/. 专业.专注 ... .. ..if((pid2=fork())==0){printf("c\n"); //子进程2输出’c’;}/*fork()返回值大于 0,则当前进程为父进程 */else{wait(NULL);printf("a\n"); //父进程输出’a’;exit(0);}. 专业.专注 ... .. ..return0;}2)进程的控制源代码:#include<stdio.h>intmain(intargc,char*argv[]){intpid1,pid2;/*调用fork函数创建进程 1*/if((pid1=fork())<0). 专业.专注 ... .. ..{/*fork()返回值为负数,则创建进程失败*/printf("ProcessCreateFailed!");exit(-1);}/**/*fork()返回值为 0,则创建子进程成功且当前进程为子进程**/if((pid1=fork())==0){printf("ThisismyUnixOSprogram!\n"); //子进程1输出句子;}. 专业.专注 ... .. ../**/*创建子进程 2***/if((pid2=fork())<0)/*fork() 返回值为负数,则创建进程失败 */{printf("ProcessCreateFailed!");exit(-1);}/**/*fork()返回值为 0,则创建子进程成功且当前进程为子进程**/. 专业.专注 ... .. ..if((pid2=fork())==0){printf("ThisisthesecondChildprocess!\n"); //子进程2输出句子;}/*fork()返回值大于 0,则当前进程为父进程 */else{wait(NULL);printf("ThisistheParentprocess\n");// 父进程输出句子 ;exit(0);}. 专业.专注 ... .. ..return0;}(3)编制一段程序,使其实现进程的软中断通信 。源代码:(软中断用 Ctrl+| 实现)#include<stdio.h>#include<signal.h>#include<unistd.h>#include<sys/types.h>. 专业.专注 ... .. ..intwait_flag;voidstop();//stop() 是自己定义的 Signal()触发的自定义函数main(){intpid1,pid2;// 定义两个进程号参数signal(3,stop);//Signal() 触发软中断while((pid1=fork())==-1);// 程序等待成功创建子进程事件的发生if((pid1=fork())>0){while((pid2=fork())==-1);. 专业.专注 ... .. ..if((pid2=fork())>0){ /*当前进程为父进程 ,父进程发出两个软中断信号 Kill子进程*/wait_flag=1;signal(SIGINT,stop);sleep(5);kill(pid1,16);kill(pid2,17);wait(0); //等待子进程死信号wait(0);printf("\nParentprocessiskilled.\n");// 接收到子进程死信号后 ,杀死父进程exit(0);. 专业.专注 ... .. ..}else{/**/*当前进程为子进程 ,则发送子进程 Kill信号,杀死该子进程 2**/wait_flag=1;signal(17,stop);printf("\nChildprocess2iskilledbyparent.\n");exit(0);}}. 专业.专注 ... .. ..else{ /**/*当前进程为子进程 ,则发送子进程 Kill信号,杀死该子进程 1**/wait_flag=1;signal(16,stop);printf("\nChildprocess1iskilledbyparent.\n");exit(0);}}voidstop(){/**. 专业.专注 ... .. ../*自定义函数,供signal()调用**/wait_flag=0;}(4)进程的管道通信源代码:#include<unistd.h>#include<signal.h>. 专业.专注 ... .. ..#include<stdio.h>intpid1,pid2; //定义两个进程号参数intmain(){intfd[2]; /*定义一个数组作为 sys_pipe()的参数*/charOutPipe[100],InPipe[100];pipe(fd); /*调用sys_pipe()创建管道线*/while((pid1=fork())==-1);if(pid1==0). 专业.专注 ... .. ..{/**/**根据sys_pipe()函数的定义 fd[1]用于向管道写数据*/lockf(fd[1],1,0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论