nachos Lab7实习报告.docx
- 文档编号:5608743
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:13
- 大小:312.17KB
nachos Lab7实习报告.docx
《nachos Lab7实习报告.docx》由会员分享,可在线阅读,更多相关《nachos Lab7实习报告.docx(13页珍藏版)》请在冰豆网上搜索。
nachosLab7实习报告
shell实现实习报告
目录
内容一:
总体概述3
内容二:
任务完成情况3
任务完成列表(Y/N)3
具体Exercise的完成情况3
内容三:
遇到的困难以及解决方法13
内容四:
收获及感想13
内容五:
对课程的意见和建议13
内容六:
参考文献13
内容一:
总体概述
本次实习需要实现用户程序shell。
shell是提供使用者使用界面的软件(命令解析器),他接收用户命令,然后调用相应的应用程序。
本次shell实现的基础是前面已经完成的相关功能。
注意到nachos已经实现简单的shell,我们只需要在此基础上进行相关的修改。
内容二:
任务完成情况
任务完成列表(Y/N)
Exercise
Y
具体Exercise的完成情况
设计实现一个用户程序shell,通过./nachos-xshell进入用户交互界面中。
在该界面中可以查询支持的功能、可以创建删除文件或目录、可以执行另一个用户程序并输出运行结果,类似Linux上跑的bash。
你实现的越完善,碰到的问题越多,学到的也会越多。
本实验所修改的代码包括内核和用户程序两部分。
首先,需要解析输入的命令,这部分现有程序已经完成
Write(prompt,2,output);
Read(&buffer[i],1,input);
因为在Lab6中,我没有考虑标准输入和标准输出的问题,所以需要修改exception.cc处理read系统调用和处理write系统调用的部分
针对处理read系统调用的部分,如果系统调用的第3个参数是0(表示标准输入),那么读取从用户界面输入的字符串存入相应的位置
if(fd==0){
for(inti=0;i content[i]=getchar(); } 针对处理write系统调用的部分,如果系统调用的第3个参数是1(表示标准输出),那么输出缓冲区字符串到用户界面 if(fd==1){ for(inti=0;i putchar(content[i]); } 执行./nachos-x../test/shell,shell启动 然后,确定需要实现的命令 功能 命令 使用方法 执行用户程序 x x用户程序 显示当前路径 pwd pwd 列出当前目录 ls ls 切换当前路径 cd cd路径 创建文件 nf nf文件名 创建文件夹 nd nd文件夹名 删除文件 df df文件名 删除文件夹 dd dd文件夹名 显示帮助信息 h h 退出 q q 部分指令的实现依赖已经实现的系统调用,部分指令的实现需要新的系统调用,添加系统调用的流程 (1)syscall.h中定义系统调用接口、系统调用号; (2)start.s中添加链接代码; (3)exception.cc中增加系统调用的处理过程. 执行用户程序x 基本思路是通过已经实现的系统调用Exec执行用户程序,通过已经实现的系统调用Join等待用户程序执行结束 shell.c if(buffer[0]=='x'&&buffer[1]==''){ newProc=Exec(buffer+2); Join(newProc); } 测试结果如下,用户程序正常执行 显示当前路径pwd 基本思路是添加系统调用Pwd,基于C函数system实现显示当前路径 syscall.h #defineSC_Pwd11 voidPwd(); start.s Pwd: addiu$2,$0,SC_Pwd syscall j$31 .endPwd exception.cc shell.c if(buffer[0]=='p'&&buffer[1]=='w'&&buffer[2]=='d' &&buffer[3]=='\0') Pwd(); 列出当前目录ls 基本思路是添加系统调用Ls,基于C函数system实现显示当前路径 syscall.h #defineSC_Ls12 voidLs(); start.s Ls: addiu$2,$0,SC_Ls syscall j$31 .endLs exception.cc shell.c if(buffer[0]=='l'&&buffer[1]=='s'&&buffer[2]=='\0') Ls(); 显示当期路径,列出当前目录,结果符合实际 切换当前路径cd 基本思路是添加系统调用Cd,基于C函数chdir实现切换当前路径 syscall.h #defineSC_Cd13 voidCd(char*name); start.s Cd: addiu$2,$0,SC_Cd syscall j$31 .endCd exception.cc shell.c if(buffer[0]=='c'&&buffer[1]=='d'&&buffer[2]=='') Cd(buffer+3); 首先切换到上级目录(..),然后切换到目录test,结果符合实际 创建文件nf 基本思路是通过已经实现的系统调用Create创建文件 shell.c if(buffer[0]=='n'&&buffer[1]=='f'&&buffer[2]=='') Create(buffer+3); 删除文件df 基本思路是添加系统调用Remove,基于已经实现的Remove函数实现文件的删除,删除文件时使用添加的系统调用Remove syscall.h #defineSC_Remove14 voidRemove(char*name); start.s Remove: addiu$2,$0,SC_Remove syscall j$31 .endRemove exception.cc shell.c if(buffer[0]=='d'&&buffer[1]=='f'&&buffer[2]=='') Remove(buffer+3); 在文件夹Lab7创建删除部分文件,结果符合实际 创建文件夹nd 基本思路是添加系统调用CreateDir,基于C函数mkdir实现文件夹的建立 syscall.h #defineSC_CreateDir15 voidCreateDir(char*name); start.s CreateDir: addiu$2,$0,SC_CreateDir syscall j$31 .endCreateDir exception.cc shell.c if(buffer[0]=='n'&&buffer[1]=='d'&&buffer[2]=='') CreateDir(buffer+3); 删除文件夹dd 基本思路是添加系统调用RemoveDir,基与C函数rmdir实现文件夹的删除 syscall.h #defineSC_RemoveDir16 voidRemoveDir(char*name); start.s RemoveDir: addiu$2,$0,SC_RemoveDir syscall j$31 .endRemoveDir exception.cc shell.c if(buffer[0]=='d'&&buffer[1]=='d'&&buffer[2]=='') RemoveDir(buffer+3); 在文件夹Lab7创建删除部分文件和文件夹,结果符合实际 需要说明的是,如果使用C函数remove,可以利用统一的命令实现文件的删除和文件夹的删除,并且文件夹的删除是递归的。 显示帮助信息h 基本思路是添加系统调用Help,显示帮助信息 syscall.h #defineSC_Help17 voidHelp(); start.s Help: addiu$2,$0,SC_Help syscall j$31 .endHelp exception.cc shell.c if(buffer[0]=='h'&&buffer[1]=='\0') Help(); 退出q 基本思路是通过已经实现的系统调用Exit退出shell shell.c if(buffer[0]=='q'&&buffer[1]=='\0') Exit(0); 测试结果如下,shell正常退出 内容三: 遇到的困难以及解决方法 困难: 通过C程序与Linux系统交互 我选择使用Linux文件系统完成实习,nachos已经实现的相关函数相对有限,其中文件/文件夹的建立和删除以及相关信息的查询实际上可以通过C的相关函数完成,当然,我们也可以使用nachos的文件系统完成实习,在这样的情况下,我们主要依靠Lab5文件系统实习和Lab6系统调用实习实现的相关函数 内容四: 收获及感想 前面的实习顺利完成并且深入理解后,本次实习并不是特别困难,只需要实现shell用户程序并且添加部分系统调用即可 内容五: 对课程的意见和建议 我觉得课程形式好,互动强,使我受益匪浅。 我觉得课程形式好,互动强,使我受益匪浅。 助教认真负责,知识充分,为课程付出很多,助教辛苦了: -D 内容六: 参考文献 [1]nachos中文教程 [2] NachOS实验报告(4个全) [3] Nachos的shell实现 [4] Nachos实验代码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- nachos Lab7实习报告 Lab7 实习 报告