您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 山大操作系统实验-1
操作系统原理实验报告——实验一张咪软件工程四班一、实验目的加深对于进程并发执行概念的理解。实践并发进/线程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux系统中进/线程创建与控制有关的系统调用的编程和调试技术。二、实验要求编写一个多进程并发执行程序。父进程每隔3秒重复建立两个子进程,首先创建的让其执行ls命令,之后创建执行让其执行ps命令,并控制ps命令总在ls命令之前执行。三、实验软硬件环境实验环境均为Linux操作系统,开发工具为gcc和g++。四、实验思路调用fock()创建子进程。创建键盘中断信号后,使用pause()可以暂停子进程执行,继续创建新的子进程。子进程并发执行子进程可以首先通过键盘中断信号唤醒子进程。通过exec()调用族装入一个新的执行程序。在建立子进程2并且唤醒子进程1后子进程sleep(seconds=5)。这样就可以先执行ps后执行ls。。最后就是父进程的结束,程序结束。五、实验模型六、调试排错1、首先遇到的问题是,对linux的操作不熟悉,不太明白makefile怎么使用,直接用了gcc2、在创建多个子进程上遇到了问题,在fock()后又直接跟了一个fork(),这样创建的子进程是子进程的子进程,而不是父进程创建的第二个子进程。所以应该在else语句块后面,也就是主进程执行段继续创建。一般情况下,fork()按如下规则编程:main(){pid_tpid;pid=fork();if(pid0){//建立子进程失败{printf(CreateProcessfail!\n);exit(EXIT_FAILURE);}pid1=fork()pid1=0子进程1执行ps指令pid10父进程pid2=fork()pid10错误pid2=0子进程b执行lspid20父进程每隔三秒重复建立两个子进程pid20错误if(pid==0)//子进程代码;//如果需要创建子进程,可以按该方法嵌套else//父进程代码//如果需要创建子进程,可以按该方法嵌套}3、后来父进程与子进程无法重复建立,执行一次就结束了,又加了一个while循环实现重复建立,但无法退出,一直执行。又加了一个count计数变量,执行五次后停止。七、实验结果父进程首先创建了子进程a,子进程1暂停。父进程继续创建子进程b。子进程b唤醒了子进程a,子进程a进入sleep()。子进程2执行ps退出,子进程1执行ls。循环五次退出。八、代码#includepro.hintmain(intargc,char*argv[]){inti;intpid1,pid2;intstatus1,status2;char*args1[]={/bin/ls,-a,NULL};char*args2[]={/bin/ps,-a,NULL};signal(SIGINT,(sighandler_t)sigcat);intcount=0;while(count5){if((pid1=fork())==0){pause();printf(%dThisischild1running\n,getpid());status1=execve(args1[0],args1,NULL);}else{pid2=fork();if(pid20){printf(Createprocesspid2fail\n);exit(EXIT_FAILURE);}elseif(pid2==0){printf(%dThisischild2running\n,getpid());status2=execve(args2[0],args2,NULL);}else{printf(%dFather:Thisisfatherrunning\n,getpid());if(kill(pid2,SIGINT)=0){waitpid(pid2,&status2,0);sleep(3);printf(%dFather:Child2finnished\n,getpid());count++;if(kill(pid1,SIGINT)=0){waitpid(pid1,&status1,0);printf(%dFather:Child1finished.\n,getpid());}}}}}return(EXIT_SUCCESS);}#includesys/types.h#includewait.h#includeunistd.h#includesignal.h#includestdio.h#includestdlib.htypedefvoid(*sighandler_t)(int);voidsigcat(){printf(Processcontinue\n);}
本文标题:山大操作系统实验-1
链接地址:https://www.777doc.com/doc-5078990 .html