操作系统上机实验报告.docx
- 文档编号:9342344
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:21
- 大小:237.87KB
操作系统上机实验报告.docx
《操作系统上机实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统上机实验报告.docx(21页珍藏版)》请在冰点文库上搜索。
操作系统上机实验报告
课程设计(上机试验)汇报
课程名称:
操作系统原理
学生姓名:
沈海洋学号:
所在学院:
计算机科学与技术学院
专业:
指导老师:
钱景辉
1月11日
课程设计(上机试验)汇报填写说明
1.本汇报作为指导老师对学生课程设计(上机试验)评分依据材料之一。
此汇报应在指导老师指导下,由学生在课程设计(上机试验)结束时完成,以班为单位收齐后按时交给指导老师批阅;
2.本汇报内容必需用黑墨水笔工整书写或按信息学院统一设计电子文档标准格式(可从信息学院网页上下载)打印(小4号宋体,1.5倍行距),严禁打印在其它纸上后剪贴;
3.本汇报中“设计说明书”应按论文格式成文,并直接书写(或打印)在本汇报“设计说明书”栏目内。
其内容能够结合设计题目内容和要求,依据自己在本课程设计(上机试验)阶段所完成工作,说明自己所采取设计思想和方法(硬件设计及其电原理图分析介绍,和/或软件算法和数据结构及其关键模块介绍、程序在测试用例下测试运行结果等)、完成本课程设计心得体会、设计中不足及改善设计设想或提议等。
说明书篇幅应不少于字。
4.对硬件类课程设计,应绘制或打印硬件设计图纸或试验原理图,作为设计汇报附件。
5.软件类课程设计(上机试验)软件文档(含软件清单和程序运行相关结果)能够单独打印成册或上传到指导老师指定计算机,作为课程设计汇报附件。
课程设计(上机试验)汇报附件是指导老师对学生课程设计(上机试验)评分另一个依据。
课程设计(上机实习)报告
课程设计(上机试验)题目:
文件系统模拟设计
目与任务:
了解操作系统文件系统一些工作原理,学习文件操作命令和目录操作命令设计方法。
经过试验,使学生加深对操作系统文件系统一些问题了解,归纳学习方法和思索方法,做到理论联络实际。
培养学生分析问题、处理问题能力,提升学生软件设计能力和逻辑思维能力。
设计实现一个简单文件系统,包含目录文件、一般文件,以及部分文件操作命令和目录操作命令(比如能够模仿DOS相关命令)。
1.修改md命令;
2.修改Help命令;
3.修改命令行预处理程序;
4.新增fc命令,实现两个文件比较;
5.新增batch命令,实现批处理;
6.完善copy命令,改善一些缺点。
内容和要求:
1.修改md命令:
增加“属性”参数,用于创建指定属性子目录。
命令形式以下:
md<目录名>[<属性>]。
属性包含R、H、S以及它们组合(不区分大小写,次序也不限)。
比如:
mdusrrh
其功效是在目前目录中创建含有“只读”和“隐藏”属性子目录user.
2.修改Help命令:
修改help命令显示方法和显示内容:
修改HelpComd()函数,使之提供菜单式较具体帮助信息。
比如能够先用菜单形式简单列出各命令名称,当用户选择某个命令序号后,再比较具体地介绍该命令,包含命令多种形式,每种形式功效,以及一些举例说明等等。
3.修改命令行预处理程序:
修改命令行预处理函数ParseCommand(),使以下命令行(命令与参数间无空格符)能够正确实施:
cd/,cd..,dir/usr.copy/usr/boymail即命令名称与后边“/”或“..”之间不需要空格也能正确实施。
4.新增fc命令,实现两个文件比较:
命令形式:
fc<文件名1><文件名2>
5.新增batch命令,实现批处理:
命令形式:
batchbatchfile
命令功效:
从磁盘文件batchfile逐行读入命令行实施,直到batchfile中全部命令行都实施完成为止。
6.完善copy命令,改善一些缺点:
正确功效应该是:
若目前目录中不存在文件boy,则报错;第2个命令若目前目录是根目录,因根目录没有父目录,故应报错;若目前目录父目录中已经存在名为boy文件,也报错(或问询用户是否覆盖)。
其她情况上述命令都应能正确实施。
课程设计(上机实习)报告
设计说明书
(说明书撰写要求请参看封里“汇报填写说明3”。
篇幅不够可附页)
一.修改md命令
步骤图以下:
课程设计(上机实习)报告
设计思想:
程序指令格式为mduser|rh,需改为mduserrh格式,所以可在mduser|rh中修改代码实现修改功效。
要实现此功效,只需要获取目录属性时删除判定操作符“|”过程即可。
具体方法:
在GetAttrib函数中删除以下代码:
if(str[0]!
='|')
{
cout<<"\n命令中属性参数错误。
\n";
return-1;
}
修改后操作方法:
输入 md user rh 即可正确实施
截图以下:
二.修改Help命令
步骤图以下:
课程设计(上机实习)报告
设计思想:
利用switch(n)case…语句实现选择只查看需了解操作命令。
具体方法:
首先利用cout语句输出改操作系统所拥有命令.并用数字标明,供用户选择,再利用switch(n) case…语句实现具体内容介绍。
比如:
cout<<"1.create\t";
case1:
cout<<"create<文件名>[<文件属性>]\n"
<<"——创建新文件,文件属性是r、h或s。
\n";
break;
运行效果以下:
三.修改命令行预处理程序
步骤图以下:
设计思想:
在命令行预处理函数ParseCommand()中进行修改,使以下命令行(命令与参数间无空格符)能够正确实施:
cd/,cd..,dir/usr,copy/usr/boymail
具体方法:
在ParseCommand()处理cd/,dir/usr等情况代码中增加处理“.”代码。
for(i=0;comd[0][i]!
='\0';i++){
if(comd[0][i]=='/')//处理cd/,dir/usr等情况
break;
elseif(comd[0][i]=='.'&&comd[0][i+1]=='.')
break;
}
四.新增fc命令,实现两个文件比较
步骤图以下:
设计思想:
首先利用ProcessPath()函数和FindFCB()函数查找文件目录所在首块号和文件所在首块号,判定其存在性,并统计其全路径名。
假如需要比较文件都存在话则进行比较。
具体实现:
intFcComd(intk)
{
if(k!
=2)
{
cout<<"犯错:
输入命令格式错误,请重新输入"< returnfalse; } shortinti,j=0,s1,s2,size1,size2,s,s3; charattrib='\0',*FileName,*FileName1,Buffer1,Buffer2; FCB*fcbp,*fcbp1,*fcbp2; s=ProcessPath(comd[1],FileName,k,0,'\20');//取FileName所在目录首块号 if(s<1)//路径错误 returns;//失败,返回 s1=FindFCB(FileName,s,attrib,fcbp);//取FileName首块号(查其存在性) fcbp1=fcbp; if(s1<0) { cout<<"\n要比较文件不存在。 \n"; return-1; } s3=ProcessPath(comd[2],FileName1,k,0,'\20');//取FileName1所在目录首块号 if(s3<1)//路径错误 returns3;//失败,返回 s2=FindFCB(FileName1,s3,'\40',fcbp);//取FileName首块号(查其存在性) fcbp2=fcbp; if(s2<0) { cout<<"\n要比较文件不存在。 \n"; return-2; } size1=fcbp1->Fsize;//取文件一长度 size2=fcbp2->Fsize;//取文件二长度 if(size1==0&&size2||size2==0&&size1) { cout<<"两个文件长度不一样: "< cout<<"文件"< cout<<"文件"< cout<<"两文件在第一个字节处不一样"; returnfalse; } while(s1>0&&s2>0) { for(i=0;i { if(j==size1&&j==size2)break; Buffer1=Disk[s1][i];//读第一个文件内容 Buffer2=Disk[s2][i];//读第二个文件内容 if(Buffer1! =Buffer2)//比较 {cout<<"文件"< "< cout<<"文件"< "< cout<<"第一个不一样字节位置为第"< cout<<"此时两个文件字符分别为"< returnfalse; } } if(i } if(j==size1&&j==size2) { cout<<"两文件内容相同"< cout<<"文件长度为: "< returntrue; } return1; } 效果图以下: 五.新增batch命令,实现批处理 步骤图以下: 设计思想: batch命令从磁盘文件batchfile逐行读入命令行实施,直到batchfile中全部命令行都实施完成为止。 具体方法: intBatchComd(intk) { shorti,s,size,jj=0,x=0,y=0; charattrib='\0',*FileName; chargFileName[PATH_LEN];//存放文件全路径名 FCB*fcbp; if(k! =1) { cout<<"\n命令参数中应该只有一个文件名。 \n"; return-1; } else { s=ProcessPath(comd[1],FileName,k,0,'\020');//取FileName所在目录首块号 if(s<1)//路径错误 returns;//失败,返回 } s=FindFCB(FileName,s,attrib,fcbp);//取FileName首块号(查其存在性) strcpy(gFileName,temppath); i=strlen(temppath); if(temppath[i-1]! ='/') strcat(gFileName,"/"); strcat(gFileName,FileName);//结构文件全路径名 if(s<0){ cout<<"\n文件"< \n"; return-3; } if(s==0) cout<<"\n文件"< else{ size=fcbp->Fsize; charBuffer[100][50];//分配动态内存空间 while(s>0){ for(i=0;i if(jj==size) break; if(Disk[s][i]=='\n'){ Buffer[x][y]='\0'; cout< x++; y=0; } else{ Buffer[x][y]=Disk[s][i]; y++; } } if(i { Buffer[x][y]='\0'; break; } s=FAT[s]; } for(i=0;i<=x;i++){ cout<<"\nC: ";//显示提醒符(本系统总假定是C盘) if(dspath) cout< cout<<">"; cout< k=ParseCommand(Buffer[i]);//分解命令及其参数 //comd[0]中是命令,comd[1],comd[2]...是参数 ExecComd(k);//实施命令 } } return1; } 运行结果以下: 六.完善copy命令,改善一些缺点 步骤图以下: 设计思想: 实现将目前目录/usr汉字件复制到其父目录(根目录)中,文件名仍为原名,在CopyComd()函数中修改代码。 具体方法: 修改部分代码以下 else//k=2(命令中提供目标文件)情况 { //用来判定第二个参数是否为".." if(! strcmp(comd[2],"..")){ ints=FindPath(comd[2],(char)16,1,fcbp);//找指定目录(首块号) if(s<1){ cout<<"\n路径名错误! "< return-1; } strcpy(comd[2],temppath); } //用来判定第二个参数是否为“/” if(! strcmp(comd[2],"/")){ strcat(comd[2],FileName1); } s02=ProcessPath(comd[2],FileName2,k,0,'\20');//取FileName2所在目录首块号 if(s02<1)//目标路径错误 returns02; 效果图以下所表示: 指导教师意见 内容及要求 评定等级 优 良 中 及格 不及格 独立完成全部工作量 设计说明书质量 创新素质,综合能力 编程能力,软件质量 遵守纪律,出勤率 综合得分 对学生课程设计(上机试验)评语: 指导老师: 年月日 所在专业审查意见: 责任人: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 上机 实验 报告