实验小组OS操作系统实验一----Shell解释程序实现文档

上传人:pu****.1 文档编号:564444363 上传时间:2023-02-12 格式:DOC 页数:27 大小:1.11MB
返回 下载 相关 举报
实验小组OS操作系统实验一----Shell解释程序实现文档_第1页
第1页 / 共27页
实验小组OS操作系统实验一----Shell解释程序实现文档_第2页
第2页 / 共27页
实验小组OS操作系统实验一----Shell解释程序实现文档_第3页
第3页 / 共27页
实验小组OS操作系统实验一----Shell解释程序实现文档_第4页
第4页 / 共27页
实验小组OS操作系统实验一----Shell解释程序实现文档_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《实验小组OS操作系统实验一----Shell解释程序实现文档》由会员分享,可在线阅读,更多相关《实验小组OS操作系统实验一----Shell解释程序实现文档(27页珍藏版)》请在金锄头文库上搜索。

1、?OS操作系统实验一?:Shell解释程序(YSH0)实现文档32060624 OS实验小组2005年6月12日星期日32060624 王 克组长32060518 杜可斌32060532 徐 瑞32060621 张 劲目录:1概述22YSH0功能与设计22.1程序形式22.2内部命令和外部命令22.3重定向和管道命令22.4特殊命令键32.5程序结构图33命令行分析器设计43.1功能43.2实现54命令解释执行的实现64.1使用到的系统调用64.2程序结构65程序源代码相关说明75.1文件说明75.2主要函数说明75.3主要数据结构说明76简易测试86.1编译运行测试86.2内部命令测试96.

2、3外部命令测试96.4重定向和管道命令测试106.5测试总结107总结及感想107.132060624 王克107.232060518 杜可斌117.332060621 张劲117.432060532 徐瑞118附录118.1参考资料118.2源代码111 概述由于时间和能力的限制,这个的实验是参考实验教程上源代码及相关说明,但程序源代码的差异性在60%以上,从整体结构设计到具体的实现细节都有不同程度的改良和提高,但也可能带来一些BUG。通过对操作系统课程的学习,我们对Linux有了进一步更深入的认识,从它的使用到内核编译都有所了解。第一个实验是实现在Linux下实现一个Shell解释程序,所

3、以我们将其命名为Linux Shell 0表示一个最简单的Shell程序。它是用户与系统内核沟通的中介,为用户使用操作系统的效劳提供一个命令界面。用户在提示符下输入一个命令,Shell先解释后通过内核函数调用执行。2 YSH0功能与设计2.1 程序形式用户运行本程序,lsh0提供一个命令提示符lsh0#,程序一直等待用户输入命令,直到exit命令结束。2.2 内部命令和外部命令解释器首先支持一定的内部命令,实现特定的动作,它包括: exit:结束所有子程序并退出。 jobs:打印当前正在后台运行的作业和挂起的作业信息。本SHELL采用十分便于用户理解的格式。 fg %:把进程标识符为int的作

4、业放到前台运行。如果这个作业已经暂停,就让它继续开始运行。并开始等待此前台进程执行完毕。 bg %:在后台执行进程标识符为int的已经挂起的进程。外部命令的形式是一系列分隔的字符串。第一个字符串为可执行程序的程序名,其余的参数。它必将位于环境变量所设置的某个路径中,如果不存在那么表示命令错误。2.3 重定向和管道命令SHELL的命令大局部都是从标准输入信息并将输出信息送到标准输出。分别缩写为stdin和stdout。默认情况下,stdin为键盘,stdout为屏幕。但可使用和将输入和输出重定向到文件中,将信息存入一文件以便保存,而不送到屏幕。使用将信息从文件中输入。并且两者可以组合使用。SHE

5、LL也提供管道,利用管道可以将一个命令的输出作为另一个命令的输入来使用。这种方法比使用临时文件来连接两个命令要方便和高效的多。2.4 特殊命令键 Ctrl + Z:产生SIGTSTP信号,这个信号是让SHELL挂起在前台运行的作业。如果没有任何前台作业,那么无效。 Ctrl + C:产生SIGNT信号,这个信号是让SHELL杀死前台运行的作业的进程。如果没有任何前台作业,那么无效。2.5 程序结构图3 命令行分析器设计3.1 功能为Shell程序提供命令行的分析,并对信息进行分析存储,为解释执行做好准备。当用户在提示符后面输入命令时,输入的整行内容为一个“命令行字符串。lsh0分析器的先将保存

6、起来,直到它的作业执行结束。在执行一个命令行字符串时,lsh0也同时为其分配一个非负整数标识符,用来标识此作业的数据结构。当其作业执行完毕时,就删掉这个作业的整个数据结构。3.2 实现4 命令解释执行的实现4.1 使用到的系统调用pid_t for(void);int execv(const *file, char *const argv);void exit(int status);int wait(int *stat_loc);pid_t waitpid(pid_t pid; int *stat_loc, int options);int dup2(int fildes, int fide

7、s2);int pipe(int fides2);详见教程上,不再赘述了4.2 程序结构5 程序源代码相关说明5.1 文件说明文件名说明1lsh0.c程序主要源代码文件2lsh0_profile环境变量配置文件3readme.txtShell程序说明4makefileMakeFile文件,使用make命令编译5Lsh0Linux下编译得到的执行文件5.2 主要函数说明main()/*主函数, 程序入口 */ voidinitEnv();/*初始化环境*/ intreadInput();/*读入用户输入,保存到指针input中,返回读取的字符数*/ intparseInput();/*解析命令函

8、数*/ voidexecuteCmd(intcmdType);/*执行命令函数*/ voidaddToHistory(char*);/*命令添加到历史函数*/ voidhistoryCmd();/*历史命令函数*/ voidcdCmd();/*CD命令函数*/ voidjobsCmd();/*打印任务命令函数*/ voidbgCmd();/*任务后台化bg %命令函数*/ voidfgCmd();/*任务前台化函数*/ intfindProg(char*cmdBuf);/*查找外部命令函数*/ voidaddJob(intjobPid,char*name);/*添加任务函数*/ voiddel

9、Job(intjobPid);/*删除任务函数*/ voidctrlz();/*响应键盘CTRL + Z操作函数*/ voidDEBUG(char*s1,char*s2);/*调试程序时信息输出函数*/ 5.3 主要数据结构说明在这个程序中,用到的数据结构主要有循环数组和链表。/*定义历史命令信息数组*/ 循环数组 在history命令中,用数组来存放我们输入过的历史命令。假设我们设定义一个能够记录10条历史记录的数组。数组的定义如下:typedefstructhistory intstart; intend; charcmdBufHISTORYMAXBUFSIZE; history; his

10、toryhistoryCmds; 由于把作业以链表的形式保存起来,所以在处理job命令时,实际上就是对链表的操作。/*定义作业结构链表*/ typedefstructjobs pid_tpid; charcmdNameBUFSIZE; charstate10; structjobs*link; jobs; /*定义指向作业链表的头指针,尾指针*/ jobs*headJob,*endJob; headJob指针指向链表表头,endJob指针指向链表尾。 /*重定向用到的文件信息*/ typedefstructfileRedir inttype; charnameNAMESIZE; fileRed

11、ir; fileRedir*filesHISTORYMAX; 6 简易测试6.1 编译运行测试程序编译运行无错误,测试通过。6.2 内部命令测试内部命令测试正常。6.3 外部命令测试外部命令测试正常。6.4 重定向和管道命令测试重定向命令测试正常,但管道命令存在一定问题,可能造成进程死掉。6.5 测试总结通过测试,发现了许多本来没有发现的BUG,但程序的根本功能已经实现,但管道命令执行存在一定的问题,有待解决。7 总结及感想7.1 32060624 王克通过这个Linux Shell的实验让我受益匪浅,让我对Linux有了更深入的理解,特别是其BASH的执行过程。由于程序使用C语言编写,让我在

12、使用OO语言的空闲之余再度回归到了C语言,对自己编程根底的提高很有帮助。开发Linux下程序,也让我学到了许多新的东西,如使用VI,EMACES编辑,使用MAN查手册,使用GCCCC编译,使用GDB调试,以及用MAKE来组织编译文件。这让我这个一直努力使用LINUX的爱好者更加了解一LINUX下编程,而不是只停留在LINUX下的简单操作层面上。SHELL程序让我对操作系统课上学的概念有了进一步的了解,特别是内核的系统调用、进程管理及通信,管道、并发等知识得到了稳固。在完成此大作业的过程中,我也认识到了工程小组内合作的重要性,大家要合理分工,加强管理,使用版本控制软件暂用VSS及建模工具不多等。

13、小组内大家相互信任和良好的合作态度给我留下了深刻印象。我们会继续努力做好以后的实验内容!7.2 32060518 杜可斌 通过编写YSH0程序,我更加熟悉了各种SHELL命令,理解了SHELL的具体实行过程,以及其中用到的各种功能调用。同时,我也提高了自己的C语言的编程能力,并获得组织较大型程序的能力。在整个YSH0的编写过程中,OS小组成员之间,互相探讨,互相帮助,合理分工,既提高了各成员的专业水平,也促进了小组成员的团队协作能力。可以说,通过该OS实验,我们都得到了很大的提高.7.3 32060621 张劲通过这次操作系统大作业的完成,我在Linux下的编程能力得到了大大的提高,对Linux的了解也更深了一

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号