您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操作系统课程设计报告
1北京化工大学北方学院课程设计报告课程名称操作系统课程设计设计题目LinuxC程序设计专业、班级学号姓名指导教师设计时间2015.10.19——2015.11.062015年11月6日2一、引言(简要说明设计题目的目的、意义、内容、主要任务等)1.目的本次系统软件课程设计的主要目的有两个:一方面是分析设计linux源代码,另一方面是进行系统级的程序设计。2.意义:⑴通过本课题的毕业设计,熟悉了关于linux下C语言的系统软件程序设计,可以比较深入的了解和掌握基本gcc,vim等编程软件的使用和对makefile文件的使用。⑵掌握进程间的通信方式,进程控制,文件操作的方式。⑶本报告就系统的开发过程做了详细的介绍,并对系统的原理、总体设计等方面做了深入细致的讨论。3.内容采用结构化分析和设计方法,运用linuxC开发实现本次操作系统设计的4个任务。4.主要任务1、设计一个程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串。2、设计一个程序,要求复制进程,子进程显示自己的进程号(PID)后暂停一段时间,父进程等待子进程正常结束,打印显示等待的进程号(PID)和等待的进程退出状态。3、用管道实现ls|sort命令功能。4、设计一个程序,要求用户进程复制出一个子进程,父进程向子进程发出信号,子进程收到此信号,结束子进程。二、正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的有关要求。)1.需求分许(1)、设计一个程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串。(2)、设计一个程序,要求复制进程,子进程显示自己的进程号(PID)后暂停一段时间,父进程等待子进程正常结束,打印显示等待的进程号(PID)和等待的进程退出状态。(3)、用管道实现ls|sort命令功能。(4)、设计一个程序,要求用户进程复制出一个子进程,父进程向子进程发出信号,子进程收到此信号,结束子进程。2.系统设计(1)第一个任务进程间通信程序结构及主要过程本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,该程序覆盖了linuxc语言所学的除结构体外的大部分知识。本程序结构和过程思路:利用fork函数复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串(2)第二个任务进程控制程序结构及主要过程本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,该程序覆盖3了linuxc语言所学的除结构体外的大部分知识。本程序结构和过程思路如下:利用fork函数复制进程,再利用getpid函数获取子进程的进程号,同时也利用了wait函数来等待进程。(3)第三个任务结构及主要过程本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,该程序覆盖了linuxc语言所学的除结构体外的大部分知识。本程序结构和过程思路:利用fork函数复制进程,调用run_ls和run_sort函数实现linux下ls|sort命令,对当前目录进行操作。(4)第四个任务进程控制程序结构及主要过程本程序运用了顺序结构,选择结构等c语言主要结构,指针、函数调用等知识,该程序覆盖了linuxc语言所学的除结构体外的大部分知识。本程序结构和过程思路:利用fork函数复制进程,父进程打印进程信息并且signol函数通知子进程,子进程收到父进程的信号后打印结束进程的提示然后结束进程,打印信息。3.系统实现(1)进程间通信实现源代码:#includestdio.h#includestdlib.h#includestring.h#includeassert.hintmain(intargc,char*argv[]){intpd[2];/*用于保存管道文件描述符*/charout[80],str[]=helloflami!;/*str是要写入的字符串,out用于保存从管道读取的字符串*/assert(pipe(pd)!=-1);/*断言用于确定pipe()函数执行成功,如果管道创建失败,则pipe()返回-1*/if(!fork())write(pd[1],str,strlen(str));/*父线程将字符串写入管道*/else{read(pd[0],out,strlen(str));/*在子线程中从管道中读取子进程写入的字符串*/printf(%s\n,out);/*子线程中输出。*/}return0;}4(2)进程控制实现源代码:#includestdio.h#includeunistd.h#includestdlib.h#includesys/types.h#includesys/wait.hintmain(){pid_tpid,vpid;intstatus,i;pid=fork();if(pid==0){printf(子进程pid:%d\n,getpid());sleep(2);exit(3);}5else{vpid=wait(&status);i=WEXITSTATUS(status);printf(父进程pid:%d,退出状态%d\n,vpid,i);}}(3)管道实现ls|sort命令#includeunistd.hintfd[2];voidrun_ls(){close(fd[0]);6close(fd[1]);char*argv[]={ls,NULL,NULL};//传递给执行文件的参数数组,这里包含执行文件的参数char*envp[]={0,NULL};//传递给执行文件新的环境变量数组execve(/bin/ls,argv,envp);}voidrun_sort(){close(fd[0]);close(fd[1]);char*argv[]={sort,NULL,NULL};//传递给执行文件的参数数组,这里包含执行文件的参数char*envp[]={0,NULL};//传递给执行文件新的环境变量数组execve(/usr/bin/sort,argv,envp);}intmain(){pipe(fd);if(fork()0){dup2(fd[1],1);run_ls();}else{dup2(fd[0],0);close(fd[0]);close(fd[1]);pipe(fd);if(fork()0){dup2(fd[1],1);run_sort();}else{dup2(fd[0],0);run_sort();}}return0;}(4)第四个任务源代码#includesys/types.h7#includesignal.h#includestdio.h#includestdlib.h#includeunistd.hvoidhandler(intsigno){printf(thisischildprocess,pid=%d,parentid=%d\n,getpid(),getppid());}intmain(){intpid;pid=fork();if(pid0){perror(forkerror);}elseif(pid==0){signal(SIGUSR1,handler);pause();printf(childprocessexit\n);exit(0);}else{intstatus;printf(thisisparentprocess,pid=%d,parentid=%d\n,getpid(),getppid());printf(waitingforchildprocessexit\n);kill(pid,SIGUSR1);wait(&status);printf(thechildprocessexit,thereturnstatusis0x%x\n,status);pause();}return0;}5.系统测试(1)运行结果[umr@localhostDocuments]$videmo01.c[umr@localhostDocuments]$gcc-odemo01demo01.c8[umr@localhostDocuments]$./demo01helloflami!�结果分析这是一个进程控制程序,要求创建一个管道,复制进程,父进程往管道中写入字符串,子进程从管道中读取并输出字符串。经过测试,该程序基本实现了以上功能,且计算结果合理正确,满足实验要求。(2)试验过程及结果[umr@localhostDocuments]$videmo02.c[umr@localhostDocuments]$gcc-odemo02demo02.c[umr@localhostDocuments]$./demo02子进程pid:14004父进程pid:14004,退出状态3结果分析这是一个进程控制程序,要求完成复制进程,子进程显示自己的进程号(PID)后暂停一段时间,父进程等待子进程正常结束,打印显示等待的进程号(PID)和等待的进程退出状态。经过测试,该程序基本实现了以上功能,且计算结果合理正确,满足实验要求。(3)试验过程及结果[umr@localhostDocuments]$videmo03.c[umr@localhostDocuments]$gcc-odemo03demo03.c[umr@localhostDocuments]$./demo03demo01demo01.cdemo02demo02.cdemo03demo03.cdemo04demo04.c9结果分析:程序利用fork函数复制进程,调用run_ls和run_sort函数实现linux下ls|sort命令,对当前目录进行操作。基本完成程序设计要求,且结果正确合理,满足实验要求。(4)试验过程及结果[umr@localhostDocuments]$./demo04thisisparentprocess,pid=4010,parentid=3693waitingforchildprocessexitthechildprocessexit,thereturnstatusis0xa结果分析这是一个进程控制软件,要求复制一个子进程,要求父进程发送一个信号给子进程,发送时打印提示,然后子进程收到信号后打印提示结束进程,结束完成后打印测试结果。程序基本已实现程序要求,结果正确合理,满足实验要求。三、结论(应当准确、完整、明确精练;也可以在结论或讨论中提出建议、设想、尚待解决问题等。)设计过程中的感受与体会从程序的整体构思到程序的算法设计及程序的编写再到最后程序的调试,我经历了重重困难和考验,但是我并没有放弃,我运用本学期所学到的知识和课外的一些知识,从想到查再到问,最后完成了这个4个程序。在设计过程中,我不仅仅是完成了程序,更重要的是我在这次设计中巩固了linuxc所学到的知识,锻炼了自己的实践能力;另外在这次设计的过程中,我懂得了在设10计遇到困难的时候怎样去解决这个困难。从书上网上查阅资料,向比我们知识丰富的人虚心请教,这是我们解决问题的主要方法,这样也同时扩宽了我们的知识面,打破了课堂的局限,在以后的人生道路中,我们也应该保持住这种精神。只要这样我们相信今后我们的人生道路会像这次程序设计一样取得成功。以上就是我在这次程序设计过程中的感受与体会。四、参考文献[1]谭浩强.C程序设计(第三版).清华大学出版社.2005[2]杨树青,王欢.Linux环境下C编程指南.清华大学出版社.2007[3]余祥宣,崔国华,邹海明.计算机算法基础(第三版).华中科技大学出版社.2006[4]陈博,孙宏彬,於岳.Linux实用教程.人民邮电出版社.2008[5]赵克林,游祖元.C语言实例教程.西南师范大学出版社.2006五、指导教师评语签名:年月日课程设
本文标题:操作系统课程设计报告
链接地址:https://www.777doc.com/doc-7303071 .html