操作系统上机实验报告应成龙.docx
- 文档编号:10253177
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:19
- 大小:32.71KB
操作系统上机实验报告应成龙.docx
《操作系统上机实验报告应成龙.docx》由会员分享,可在线阅读,更多相关《操作系统上机实验报告应成龙.docx(19页珍藏版)》请在冰点文库上搜索。
操作系统上机实验报告应成龙
课程设计(上机实验)报告
课程名称:
操作系统原理上机实习
学生姓名:
应成龙学号:
1403140126
所在学院:
计算机科学与技术
专业:
计算机科学与技术
指导教师:
钱景辉
2016年1月5日
课程设计(上机实验)报告填写说明
1.本报告作为指导教师对学生课程设计(上机实验)评分的依据材料之一。
此报告应在指导教师指导下,由学生在课程设计(上机实验)结束时完成,以班为单位收齐后按时交给指导教师批阅;
2.本报告内容必须用黑墨水笔工整书写或按信息学院统一设计的电子文档标准格式(可从信息学院网页上下载)打印(小4号宋体,1.5倍行距),禁止打印在其它纸上后剪贴;
3.本报告中的“设计说明书”应按论文的格式成文,并直接书写(或打印)在本报告“设计说明书”栏目内。
其内容可以结合设计题目的内容和要求,根据自己在本课程设计(上机实验)阶段所完成的工作,阐明自己所采取的设计思想和方法(硬件的设计及其电原理图分析介绍,和/或软件的算法和数据结构及其主要模块介绍、程序在测试用例下的测试运行结果等)、完成本课程设计的心得体会、设计中的不足及改进设计的设想或建议等。
说明书的篇幅应不少于2000字。
4.对硬件类课程设计,应绘制或打印硬件设计图纸或实验原理图,作为设计报告的附件。
5.软件类课程设计(上机实验)的软件文档(含软件清单和程序运行的有关结果)可以单独打印成册或上传到指导教师指定计算机,作为课程设计报告的附件。
课程设计(上机实验)报告的附件是指导教师对学生课程设计(上机实验)评分的另一个依据。
课程设计(上机实习)报告
课程设计(上机实验)题目:
文件系统的模拟设计与实现
目的与任务:
实验目的:
理解操作系统文件系统的某些工作原理,学习文件操作命令和目录操作命令的设计方法。
通过实验,使学生加深对操作系统文件系统某些问题的理解,归纳学习方法和思考方法,做到理论联系实际。
培养学生分析问题、解决问题的能力,提高学生软件设计能力和逻辑思维能力。
实验任务:
模仿MS-DOS系统设计并实现一个简单的文件系统,包括目录文件、普通文件,以及一些文件操作命令和目录操作命令。
内容和要求:
实验内容与具体要求见“《操作系统原理上机实习》实验指导书(2016修订版)”。
课程设计(上机实习)报告
设计说明书
(说明书的撰写要求请参看封里的“报告填写说明3”。
篇幅不够可附页)
一、概述
本次实验中共完成了7个任务,分别是:
4.1修改md命令
4.2修改help命令
4.3修改命令行预处理程序
4.4新增fc命令,实现两个文件的比较
4.5新增move命令,实现文件搬家及子目录改名
4.7新增batch命令,实现批处理
4.9实现copy的完善
4.16修改read命令,允许不带文件名参数(选做内容)
4.17修改write命令,允许不带“文件名”参数(选做内容)
二、具体实验过程描述
4.1修改md命令
修改md命令,增加“属性”参数,用于创建指定属性的子目录。
命令形式如下:
md<目录名>[<属性>]
属性包括R、H、S以及它们的组合(不区分大小写,顺序也不限)。
例如:
mduserrh
其功能是在当前目录中创建具有“只读”和“隐藏”属性的子目录user。
主要修改思想:
在调用ProcessPath()函数之前,对属性参数进行分析比较,并修改attrib的值,以使在调用ProcessPath()函数时将具有某种或多种属性值的attrib值传入ProcessPath()函数。
当k=2时,调用GetAttrib()函数,GetAttrib()函数将
课程设计(上机实习)报告
根据comd[2]中的内容修改attrib的值,若comd[2]中含有r则加1,若comd[2]中
开始
含有h则加2,若comd[2]中含有s则加4。
流程图:
命令格式正确
是
调用GetAttrib()函数修改attribd的值
参数个数为2
是
否
指定路径正确
是
是
新目录重名
否
在指定目录中查找空目录项(若已无空目录项,则为其分配新的盘块),找到后为新目录登记目录项。
为新目录分配1盘块,用于登记该目录的第一个目录项,即“..”目录项。
显示相关的错误信息
返回
TheDirectoryofC:
/
bin
usr
dev
boy170
abc_map203
map76
test77
qil_nanj225
5file(s)751bytes
3dir(s)313536free
C:
/>mdsjsxrw
C:
/>dir
TheDirectoryofC:
/
bin
usr
sjsx
dev
boy170
abc_map203
map76
test77
qil_nanj225
5file(s)751bytes
4dir(s)313472free
4.2修改help命令
修改help命令的显示方式和显示内容:
修改HelpComd()函数,使之提供菜单式的较详细的帮助信息。
例如可以先用菜单形式简单列出各命令名称,当用户选择某个命令的序号后,再比较详细地介绍该命令,包括命令的各种形式,每种形式的功能,以及某些举例说明等等。
具体方法:
首先利用cout语句输出改操作系统所拥有的命令,并用数字标明,供用户选择,再利用switch(n)case…语句实现具体内容的介绍。
程序的大体表达如下:
intn;cin>>n;
switch(n){
case…//具体显示命令的内容
}
命令正确?
开始
显示help命令可选菜单内容
输入1~35或-1
显示所需help信息
返回
是
否
报错
否
是
Help命令函数流程图
流程图:
设计思想:
利用switch(n)case…语句实现选择只查看需了解的操作命令。
具体方法:
首先利用cout语句输出改操作系统所拥有的命令,并用数字标明,供用户选择,提示用户可以输入相应命令对应的序号,用一个char型数组读取,然后转换为int型,若该int对应于相应的命令序号,则显示该命令的具体信息。
关键代码如下:
while(true){
cout<<"输入1-28任一数字了解更详细的功能及用法"< char cmd[10]; cin.getline(cmd,10); int k=atoi(cmd); if (k>1&&k<29) HelpExp(k);//对k进行switch选择,输出命令的相关详细信息 else{ cout<<"序号错误! "< break; } } 修改后的操作: 首先输入help命令,则会显示各种命令供选择,选择后即显示具体的命令内容。 运行结果: 现在你可以输入各种操作命令. Help——简易帮助信息. exit——退出本程序. C: />help 命令运行结果: C: />help cout<<"\n*********本系统主要的文件操作命令简述如下**********\n\n"; cout<<"(0)create ——创建新文件,文件属性是r、h或s。 \n"; cout<<" (1)open——打开文件,操作类型可为r、h或(与)s\n"; cout<<" (2)write——在指定位置写文件(有插入功能)。 \n"; cout<<"(3)read——读文件,从第m字节处读n个字节。 \n"; cout<<"(4)close ——关闭文件。 \n"; cout<<"(5)del——撤消(删除)文件。 \n"; cout<<"(6)dir——显示当前目录。 \n"; cout<<"(7)cd——改变当前目录。 \n"; cout<<"(8)md——创建指定目录。 \n"; cout<<"(9)rd——删除指定目录。 \n"; cout<<"(10)ren——文件更名。 \n"; cout<<"(11)attrib——修改文件属性(r、h、s)。 \n"; cout<<"(12)copy——复制文件。 \n"; cout<<"(13)type——显示文件内容。 \n"; cout<<"(14)rewind——将读、写指针移到文件第一个字符处\n"; cout<<"(15)fseek——将读、写指针都移到指定位置。 \n"; cout<<"(16)block——显示文件占用的盘块号。 \n"; cout<<"(17)closeall——关闭当前打开的所有文件。 \n"; cout<<"(18)uof——显示UOF(用户打开文件表)。 \n"; cout<<"(19)undel——恢复指定目录中被删除的文件。 \n"; cout<<"(20)exit——退出本程序。 \n"; cout<<"(21)prompt——提示符是否显示当前目录(切换)。 \n"; cout<<"(22)fat——显示FAT表中空闲盘块数(0的个数)。 \n"; cout<<"(23)check——核对后显示FAT表中空闲盘块数。 \n"; cout<<"(24)back——返回主界面。 \n"; cout<<"(25)fc——比较文件\n"; cout<<"(26)move——移动文件\n"; cout<<"(27)replace——替代文件\n"; while(true){ cout<<"请选择0-27任一数字了解更详细的功能及用法"; ExecComd2(); } *********本系统主要的文件操作命令简述如下********** 1: create2: open3: write4: read 5: close6: del7: dir8: cd 9: md10: rd11: ren12: attrib 13: copy14: type15: rewind16: fseek 17: block18: closeall19: uof20: undel 21: exit22: prompt23: fat24: check 25: fc24: batch 【注】本系统命令中的英文字母不区分大小写。 1~24——了解对应命令功能和使用方法。 -1——退出帮助系统. 请选择: 4.3修改命令行预处理程序 修改命令行预处理函数ParseCommand(),使以下命令行(命令与参数间无空格符)可以正确执行: cd/ cd.. dir/usr copy/usr/boymail …… 即命令名称与后边的“/”或“..”之间不需要空格也能正确执行。 实现方法: 原程序中已经给出了cd/,dir/usr之类的实现方法,可以类似的给出cd..的实现方法。 主要代码如下: for(i=0;comd[0][i]! ='\0';i++) if(comd[0][i]=='.'&&comd[0][i+1]=='.')//处理cd..等情况 break; if(comd[0][i]! ='\0')//comd[0]中存在字符串".." { if(k>0) for(j=k;j>0;j--) strcpy(comd[j+1],comd[j]);//后移 strcpy(&comd[1][0],&comd[0][i]); strcpy(&comd[1][1],&comd[0][i+1]); comd[0][i]='\0'; k++;//多出一个参数 } 命令运行结果: C: />cdusr C: /usr>cd/ C: />cdbin C: /bin>cd.. 4.4新增fc命令,实现两个文件的比较 命令形式: fc<文件名1><文件名2> 命令功能: 逐个字节比较指定的两个文件,若相同,显示“文件内容相同”字样;若不同,显示第一个不同字节的位置和各自的内容。 若文件不存在则报错。 设计思想: 分别查找文件名1和文件名2的指定路径,若路径正确,则进行文件的首块号查找,如果两个文件都能找到,则按字节进行比较,找到第一个字节不同的位置,如果两个文件大小相等且查询到最后一个字节,则两文件内容相同。 流程图: 开始 否 命令格式正确吗? 是 调用ProcessPath()查找两文件的指定路径 指定路径正确吗? 否 是 调用FindFCB()查找两文件的首块号 显示错误信息 否 文件存在吗 是 fc命令函数流程图 返回 将文件内容进行比较并输出结果 命令执行结果: C: />fcboyusr/boy 文件/boy与文件/usr/boy内容不一样! 文件/boy的第一个不同的字节为 文件/usr/boy的第一个不同的字节为 C: />fcboytest 文件/boy与文件/test内容不一样! 文件/boy的第一个不同的字节为H 文件/test的第一个不同的字节为d C: />fcboyboy 文件/boy与文件/boy内容一样! 4.5新增move命令 设计思想: 先判断要移动的文件是否存在且非空,然后判断目标文件是否存在且非空,若都是,则将要移动的文件的盘块逐个移入目标文件。 具体方法: 利用processpath和FindFCB分别取要移动的文件的所在目录的首块号和其文件的首块号,若取不到,说明不存在或者为空,报错。 然后用Check_UOF函数判断要移动的文件是否已经在UOF,若是,说明文件已经打开,此时不能移动,报错。 然后判断是否已经输入目标文件名,若否,则输入目标文件名,然后用getblock()得到盘块号,移动。 运行结果如图: 将C目录下的boy移动至新建的user目录下。 现在你可以输入各种操作命令. Help——简易帮助信息. exit——退出本程序. C: />dir TheDirectoryofC: / bin usr
dev
boy170
abc_map203
map76
test77
qil_nanj225
5file(s)751bytes
3dir(s)313536free
C:
/>mduser
C:
/>moveboyuser
C:
/boy=>C:
/bin/boy[ok]
C:
/>diruser
TheDirectoryofC:
/user
..
boy170
1file(s)170bytes
1dir(s)313280free
C:
/>
4.7新增batch命令,实现批处理
命令形式:
batchbatchfile
开始
命令功能:
从磁盘文件batchfile逐行读入命令行执行,直到batchfile中所有命令行都执行完毕为止。
否
命令格式正确吗?
是
调用ProcessPath()查找文件的指定路径
指定路径正确吗?
否
是
调用FindFCB()查找文件的首块号
显示错误信息
否
文件存在吗
是
按行取出文件中命令依次执行
返回
batch命令函数流程图
设计思想:
该命令是实现批处理,参数为一个存放了多条命令的文件,执行该命令时,相当于依次执行了多条命令,所以要多文件进行读取,每一行为一条命令,所以每读一行执行一次命令。
命令执行结果:
C:
/>batchtest
dir
typemap
cdusr
dir
open/boy
cduser/ma
typeqil_nanj
cd/
uof
…省略一些命令执行结果
文件名文件属性首块号文件长度状态读指针写指针
/boy普通40170打开1171
C:
/>closeboy
关闭文件/boy成功。
C:
/>
4.9完善copy命令
1.改正某些缺陷
目前参考程序中的copy命令不能处理如下情况:
假设当前目录是/usr,执行如下命令之一
copyboy/
copyboy..
上述2条命令应该是将当前目录/usr中的文件boy复制到其父目录(根目录)中,文件名仍为boy。
但系统不能正确执行,而显示“目标文件名错误”的信息。
正确的功能应该是:
●若当前目录中不存在文件boy,则报错;
●第2个命令若当前目录是根目录,因根目录没有父目录,故应报错;
●若当前目录的父目录中已经存在名为boy的文件,也报错(或询问用户是否覆盖)。
●其他情况上述命令都应能正确执行。
请按此要求修改copy命令处理程序,使之在上述命令形式也能正确执行。
设计思想:
添加函数copy()和函数FindBlankFCB()分别用于文件的复制和寻找首块号为s的目录中的空目录项,其中FindBlankFCB()用于实现copy()功能。
然后在CopyComd()函数中判断copyboy/和copyboy..形式的命令,如果是上述的命令,则将当前目录/usr中的文件boy复制到其父目录(根目录)中,文件名仍为boy。
若不是则直接调用copy()函数。
命令执行结果:
C:
/>copyusr/boy/
存在文件与目标文件同名。
4.11修改del,copy等命令,使其可以使用通配符*
修改某些命令,使其可以使用统配符“*”。
例如:
del*——删除当前目录中的所有文件
attrib*——显示当前目录中所有文件和子目录的属性
copy*<目标目录>——将当前目录中的所有文件复制到目标目录中(同名复制)
设计思想:
使用通配符*操作就是对当前目录下所有符合条件的文件执行相应的操作,获取当前目录下所有文件名借鉴了已给函数DirComd()中遍历当前目录下所有文件或目录的方法,但是最终没能实现这项命令的功能。
4.16修改read命令,允许不带文件名参数(选做内容)
修改read命令处理函数ReadComd(),使其可以使用如下命令形式:
(1)read——读当前操作文件,从读指针位置开始读到文件尾部(新增形式)
(2)read<文件名>——读指定文件,从读指针位置开始读到文件尾部
(3)read<文件名>|pm——读指定文件,从指定位置m开始读到文件尾部
(4)read<文件名>|ln——读指定文件,从读指针位置开始读n个字节
(5)read<文件名>|pm|ln——读指定文件,从指定位置m开始读n个字节
(6)read|pm|ln——读当前操作文件,从指定位置m开始读n个字节(新增形式)
(7)read|pm——读当前操作文件,从指定位置m开始读到文件尾部(新增形式)
(8)read|ln——读当前操作文件,从读指针位置开始读n个字节(新增形式)
上述命令中,“|p”表示“位置”,“m”表示某个整数。
“|L”表示“长度”,“n”也代表某个整数。
(下同)
设计思想:
如果k<0或者k>3时,参数的个数太多或太少报错,根据参数个数来判断有无文件名参数,然后进行相应的文件读操作
流程图:
开始
Y
参数太多或太少,报错
k<或k>3
N
在uof中找到当前正在访问的文件,将其文件名赋给FileName,并置haveFileName为false表示无文件参数
Comd[1][0]=’|’或k=1
Y
N
将comd[1]的值赋给FileName
根据命令要求读信息
返回
命令执行结果:
运行结果如图:
打开boy文件,进行read无参数操作。
现在你可以输入各种操作命令.
Help——简易帮助信息.
exit——退出本程序.
C:
/>openboy
文件/boy打开成功。
C:
/>read
Helloboy.
WelcometoNanjingUniversityofTechnology.
WelcometoSchoolofInfomationScienceandEngineering.
WelcometoDepartmentofComputerScienceandTechnology.
C:
/>
C:
/>read
sdfgdgsehew
4.17修改write命令,允许不带“文件名”参数(选做内容)
修改write命令处理函数WriteComd(),允许其命令中不带“文件名”参数。
这样,除了参考程序中提供的以下5种命令形式:
write<文件名>——在写指针当前所指位置写,写入内容代替原内容(改写方式)
write<文件名>|pn——在文件开头第n个字节处写,改写方式
write<文件名>|ins——在写指针所指位置写,写入处开始的原内容后移(插入方式)
write<文件名>|pn|ins——在文件开头第n个字节处写,插入方式
write<文件名>|app——在文件尾部写(添加方式)
又新增加如下5种不带文件名的命令形式:
write——在写指针当前所指位置写,写入内容代替原内容(代替方式或改写方式)
write|pn——在文件开头第n个字节处写,改写方式
write|ins——在写指针所指位置写,写入处开始的原内容后移(插入方式)
write|pn|ins——在文件开头第n个字节处写,插入方式
write|app——在文件尾部写(添加方式)
运行结果:
打开boy文件
C:
/>openboy
文件/boy打开成功。
C:
/>write
请输入写入文件的内容(最多允许输入2560个字节):
/n12345678
写文件/boy成功.
C:
/>read
Helloboy.
WelcometoNanjingUniversityofTechnology.
WelcometoSchoolofInfomationScienceandEngineering.
WelcometoDepartmentofComputerScienceandTechnology./n12345678
C:
/>
课程设计(上机实习)报告
指导教师意见
内容及要求
评定等级
优
良
中
及格
不及格
独立完成全部工作量
设计说明书质量
创新素质,综合能力
编程能力,软件质量
遵守纪律,出勤率
综合得分
对学生课程设计(上机实验)的评语:
指导教师:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 上机 实验 报告 成龙