操作系统原理实验指导书Word格式.docx
- 文档编号:21646267
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:46
- 大小:569.66KB
操作系统原理实验指导书Word格式.docx
《操作系统原理实验指导书Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统原理实验指导书Word格式.docx(46页珍藏版)》请在冰豆网上搜索。
17.FindFCB()函数程序流程图15
18.ProcessPath()函数程序流程图17
四、实验任务18
4.1修改md命令18
4.2修改Help命令或命令行预处理程序18
1.修改help命令的显示方式和显示内容18
2.修改命令行预处理程序18
4.3新增fc命令,实现两个文件的比较18
4.4新增replace命令,实现文件取代18
4.5新增move命令,实现文件“搬家”及子目录改名19
4.6新增batch命令,实现批处理19
4.7修改close、type等命令,允许不带文件名参数21
4.8完善copy命令22
1.改正某些缺陷22
2.允许覆盖同名文件(选做内容)22
4.9增加输出重定向功能(选做内容)22
1.type命令的输出重定向形式22
2.dir命令的输出重定向形式23
4.10修改del、copy等命令,使其可以使用统配符*(选做内容)23
4.11修改copy命令,增加合并复制功能(选做内容)23
4.12修改程序,实现多磁盘文件系统(选做内容)24
4.13修改磁盘块容量(选做内容)24
4.14修改undel命令(选做内容)25
1.删除文件恢复表udtab不用数组存储,而直接存储在磁盘空间25
2.修改undel命令的执行方式并增强其功能25
3.采用类似于Windows的回收站方案26
4.15修改read命令,允许不带文件名参数(选做内容)26
4.16修改write命令,允许不带“文件名”参数(选做内容)26
4.17修改write命令,增加“删除”方式(选做内容)27
五、模拟文件管理系统中操作命令使用说明27
六、学生应提交的实验材料33
6.1《实验报告》33
6.2源程序清单及其可执行文件33
6.3程序测试、运行的结果33
一、实验目的
理解操作系统文件系统的某些工作原理,学习文件操作命令的设计方法。
通过实验,使学生加深对操作系统文件系统某些问题的理解,归纳学习方法和思考方法,做到理论联系实际。
培养学生分析问题、解决问题的能力,提高学生软件设计能力和逻辑思维能力。
二、实验要求与内容
2.1实验题目
模拟文件管理系统的设计
设计实现一个简单的模拟文件管理系统,包括目录文件、普通文件,以及一些文件操作命令和目录操作命令(例如可以模仿DOS的有关命令)。
具体要求如下列2.2和2.3。
2.2初始目录结构
程序初始化时构造如图1所示的目录结构。
图中auto是(普通)文件(初始化时假设是空文件),其余都是子目录(目录文件)。
2.3系统操作命令简介
在模拟文件管理系统中,要求可以实现如下操作:
⏹改变当前目录:
cd[<
目录名>
]。
当前目录(工作目录)转移到指定目录下。
指定目录不存在时,给出错误信息。
若命令中无目录名,则显示当前目录路径。
⏹创建文件:
create<
文件名>
[<
属性>
创建一个指定名字的新文件,即在目录中增加一目录项,不考虑文件的内容。
对于重名文件给出错误信息。
⏹删除文件:
del<
。
删除指定的文件,即清除其目录项和回收其所占用磁盘空间。
对于只读文件,删除前应询问用户,得到同意后方能删除。
当指定文件正在使用时,显示“文件正在使用,不能删除”的信息,当指定文件不存在时给出错误信息。
⏹显示目录:
dir[<
[<
]]。
显示“目录名”指定的目录中文件名和第一级子目录名。
若指定目录不存在,则给出错误信息。
⏹创建目录:
md<
在指定路径下创建指定目录,若没有指定路径,则在当前目录下创建指定目录。
对于重名目录给出错误信息。
⏹删除目录:
rd目录名。
若指定目录为空,则删除之,否则,给出“非空目录不能删除”的提示。
不能删除当前目录。
⏹打开文件:
open<
若指定文件存在且尚未打开,则打开之,并在用户打开文件表(UOF)中登记该文件的有关信息。
若指定文件已经打开,则显示“文件已打开”的信息;
若指定文件不存在,则给出错误信息。
只读文件打开后只能读不能写。
⏹写文件:
write<
位置>
][insert]。
在文件的指定位置处写入新内容。
⏹读文件:
read<
位置m>
字节数n>
从已打开文件中读指定内容并显示。
⏹关闭文件:
close<
若指定文件已打开,则关闭之,即从UOF中删除该文件对应的表项。
若文件未打开或文件不存在,分别给出有关信息。
⏹显示文件内容:
type<
显示指定文件的内容。
⏹复制文件:
copy<
源文件名>
<
目标文件名>
命令功能:
为目标文件建立目录项,分配新的盘块,并将源文件的内容复制到目标文件中。
⏹文件改名:
ren<
原文件名>
新文件名>
将指定文件的名字改为“新文件名”。
若原文件不存在,给出错误信息。
若原文件存在,但正在使用,也不能改名,同样显示出错信息。
应检查新文件名是否符合命名规则以及是否存在重名问题。
⏹显示、修改文件或目录属性:
attrib<
文件属性>
若命令中无“文件属性”参数,则显示指定文件的属性;
若命令中有“文件属性”参数,则修改指定文件的属性。
此命令对目录名同样适用。
2.4几点说明
⏹命令中的目录名和文件名可以统称为路径名,支持绝对路径(又称全路径)和相对路径;
⏹路径名是由目录结构中各级目录文件名和普通文件名(必定是最后一个名)用分隔符“/”连接而成的字符串组成。
其中以字符“/”开始的路径名是绝对路径,表示从根目录开始;
不是以字符“/”开始的路径名是相对路径,表示从当前目录开始。
当前目录又称工作目录。
⏹本系统规定,名字(文件名或目录名)的命名规则如下:
(1)名字长度不能超过FILENAME_LEN-1个字节,即10个字符(符号常数FILENAME_LEN为11)。
允许输入的名字超过10个字符,但只有前10个字符有效;
(2)名字一般由字母(区分大小写)、数字、下划线等组成,名字允许是汉字;
(3)名字不能包含以下16个字符之一:
"
*+,/:
;
=>
?
[\]|space(空格)
(4)名字中允许包含字符“.”,但它不能是名字的第一个字符,故“.”、“.abc”、“..”和“..abc”等等都是不合法的名字。
“..”代表父目录是例外,但它并非由用户通过键盘输入的名字,故不需要符合名字的命名规则。
⏹本系统中,命令名(如dir)和命令参数中的有关关键字(如append或app、insert或ins等)不区分大小写。
文件名和目录名中的字母是区分大小写的。
⏹命令格式中,“<
...>
”代表某个字符串,“[]”中内容为可选项。
三、设计方案
本系统提供的参考程序在C++环境中开发,下面介绍系统的设计方案。
3.1采用FAT文件格式
文件在磁盘上的组织采用FAT文件格式,为了设计程序方便,本系统的FAT表用整型数组FAT[K]表示(K为总盘块数,本系统中假定K=5000,即共有5000个盘块),而实际的操作系统,FAT表是存储在磁盘中的,当系统启动时装入内存。
FAT[0]中存储空闲盘块数。
磁盘空间用字符数组Disk[K][SIZE](其中SIZE为每个盘块的字节数,即盘块的容量)表示。
本系统设定磁盘块容量为64。
3.2目录项(FCB)结构
本模拟系统的文件目录项(FCB)结构如下:
文件名
属性
首块号
文件长度
(11字节)
(1字节)
(2字节)
structFCB//每个目录项16个字节
{
charFileName[11];
//文件名最多10个字符且以'
\0'
结尾
charFattrib;
//文件属性
shortintAddr;
//文件首块号
shortintFsize;
//文件长度
};
◆为简单,本系统不考虑文件扩展名,文件名为1~10个字符,以结尾标记'
存储(实际操作系统目录项中文件名一般没有结尾标记),命令中输入的文件名若超过10个则截取前10个字符。
◆文件属性为1个字节,其二进制位对应的属性如下图所示。
D7
D6
D5
D4
D3
D2
D1
D0
1表示目录
0/1
1表示系统
1表示隐藏
1表示只读
◆文件的首块号Addr=0代表空文件(此时文件长度Fsize=0)。
文件名(目录名)的第一个字符的ASCII码为0E5H或00H,代表空目录项。
其中0E5H是目录项被删除后的标志,00H代表该目录项从未使用过。
◆每个目录项占用16个字节,因系统中假设磁盘块大小SIZE=64,因此,每个盘块可存储4个目录项。
◆除根目录外,每个目录中的第一个目录项存储父目录的FCB(该目录项的名字为“..”),其地址是父目录的首块号,它的作用是相当于指向父目录的指针,用于实现从该目录退回父目录。
目录项“..”是在创建目录时,由系统自动建立的,它不能被rd命令删除。
3.3根目录
本系统假设根目录存储在1~30号盘块中,即存储在Disk[1]~Disk[30]的盘快中。
因每个盘块可存储4个目录项,故本系统根目录中的文件目录项及子目录项最多共计120个。
从31号盘块开始为文件区,用于存储文件及子目录。
本系统初始化时,图1所示的目录树的磁盘分配情况如图2所示。
3.4主要函数
系统参考程序的主要函数如下:
main()主函数
AttribComd()attrib命令处理函数
CdComd()cd命令处理函数
CloseComd()close命令处理函数
CopyComd()copy命令处理函数
CreateComd()Create命令处理函数
DelComd()del命令处理函数
DirComd()dir命令处理函数
MdComd()md命令处理函数
OpenComd()open命令处理函数
RdComd()rd命令处理函数
ReadComd()read命令处理函数
RenComd()ren命令处理函数
TypeComd()type命令处理函数
UndelComd()undel命令处理函数
WriteComd()write命令处理函数
ParseCommand()分析、分解命令行
ExecComd()执行命令
FindPath()查找指定目录路径的首块号
FindFCB()查找指定文件(或目录)的首块号
ProcessPath()将路径名分离成目录路径与文件名两部分
3.5用户已打开文件表(UOF)
设置一张“用户已打开文件表”(UOF),用于记录用户当前正在使用文件的情况。
本系统允许用户最多同时打开或建立S个文件,故用户已打开文件表UOF共有S个登记栏。
用户请求打开或建立一个文件时,相应的文件操作把有关该文件的信息登记到UOF中。
UOF表项的结构如下:
structUOF//定义用户打开文件表的结构
charfname[PATH_LEN];
//文件全路径名
charattr;
//文件属性,1=只可读;
0=可读写
shortintfaddr;
//文件的首块号
shortintfsize;
//文件大小(字节数)
FCB*fp;
//指向该文件的目录项指针
shortintstate;
//状态:
0=空表项;
1=新建;
2=打开
shortintreadp;
//读指针,指向某个要读的字符位置,0=空文件
shortintwritep;
//写读指针,指向某个要写读的字符位置
本程序中,用户打开文件表用数组UOFuof[S]表示,其中S=32,即最多允许同时打开32个文件。
读指针和写指针用于指出对文件进行存取的当前位置。
fp指向该UOF登记项对应的文件的目录项。
系统启动时,UOF常驻内存,退出系统时,UOF不需要保存。
3.6程序中有关变量的说明
1.当前目录curpath数据结构
structCurPath{
shortintfblock;
//当前目录的首块号
charcpath[PATH_LEN];
//当前目录路径字符串
当前目录用全局变量curpath存储:
CurPathcurpath;
根目录的路径字符串cpath是“/”,首块号为1。
2.删除文件恢复表udtab数据结构
structUnDel{//恢复被删除文件信息表的数据结构
chargpath[PATH_LEN];
//被删除文件的全路径名(不含文件名)
charufname[FILENAME_LEN];
//被删除文件名
shortufaddr;
//被删除文件名的首块号
shortfb;
//存储被删除文件块号的第一个块号(链表头指针)
//首块号也存于fb所指的盘块中
与实际系统不同,为简化程序设计,本系统的被删除文件恢复表用(全局变量)数组udtab存储,定义为:
UnDeludtab[DM];
程序中DM值为40,即最多保存40个被删除文件的信息(若删除文件数超过40个时,总是保持最新的40个被删除文件信息)。
一个被删除文件恢复后,其在udtab表中的信息将被删除。
退出系统时该表可存于文件UdTab.dat中。
3.全局变量ffbp和Udelp
shortUdelp;
它是udtab表的第一个空表项的下标,系统初始化时为0。
当Udelp=DM时,表示表已满,需清除最早的表项(后续表项依次前移)。
系统退出存盘时,其值保存到0号盘块Disk[0]中,以便下次启动系统使用。
shortffbp;
它是分配盘块时FAT表的起始指针(下标),这样使得分配盘块类似于分区存储管理的“循环首次适应”分配算法,这有利于被删除文件的恢复。
系统退出存盘时,其值也保存到0号盘块Disk[0]中。
4.全局数组comd[8][PATH_LEN]
charcomd[8][PATH_LEN];
它在分析命令时使用,其中comd[0]存放命令字符串,comd[1],...,comd[7]用于存放命令参数。
5.全局数组temppath[PATH_LEN]
chartemppath[PATH_LEN];
用于临时存储文件的路径名(绝对路径名而非相对路径名)。
例如,设当前目录为/usr,执行命令openuser/boy时,系统将文件boy的全路径名(即绝对路径名)"
/usr/user/boy"
,存放在temppath中,在登记UOF表项时,再将temppath存储到表项的fname域中。
其他一些命令处理过程中也会用到temppath。
3.7主要函数的流程图
1.主函数main()的流程图
主函数main()的流程图如图3所示。
2.create命令流程图
创建新文件的命令格式如下:
create<
]
命令中的“文件属性”规定了文件的使用权限,分为“只读”、“隐藏”、“系统”等,分别用“r”、“h”、“s”的形式表示,程序内部分别用1、2、4表示(参见3.2节的介绍),它们可以组合使用,例如“rh”表示“只读”且“隐藏”属性的文件,其属性值为3,又如“rhs”表示“只读”且“隐藏”且“系统”属性的文件,其属性值为7。
若命令中无可选项“文件属性”,则创建的文件是属性值为0的普通文件,即不是只读文件,也不是隐藏文件,也不是系统文件。
create命令中的“文件名”允许是绝对路径名或相对路径名,例如命令
create/usr/user/boy
表示在根目录的usr子目录中的user子目录中建立文件boy,该文件为普通文件。
又如
createbin/mailrh
表示在当前目录中的bin子目录中建立文件mail,该文件为“只读”且“隐藏”属性的文件。
执行create命令时,当路径不存在或有同名文件,则分别给出错误信息。
create命令处理函数CreateComd()的简化流程图如图4所示。
3.cd命令流程图
命令形式:
改变当前目录,即把指定目录变为当前目录(工作目录)。
若命令中无目录名,则显示当前目录路径名。
cd命令的处理函数为CdComd(),其简单流程图如图5所示。
4.del命令流程图
del<
del命令的处理函数为DelComd(),其简单流程图如图6所示。
5.dir命令流程图
dir[<
][<
如果命令中没有指定目录名,则显示当前目录下的相应内容。
若命令中无“属性”参数,则显示指定目录中“非隐藏”属性的全部文件名和第一级子目录名;
若命令中有“属性”参数,则仅显示指定属性的文件名和目录名。
属性参数的形式是“|属性符号”,其中属性符号有r、h和s三种(不区分大小写),分别表示“只读”、“隐藏”和“系统”三种属性,它们可以组合使用且次序不限。
例如“|rh”,表示要求显示同时具有“只读”和“隐藏”属性的文件和目录名。
dir命令显示文件名时,同时显示该文件长度;
显示目录名时,同时显示“<
DIR>
”的字样。
命令使用举例:
dir/usr|h显示根目录下usr子目录中全部“隐藏”属性的文件名和子目录名
dir..显示当前目录的父目录中全部“非隐藏”属性的文件和子目录名(包括“只读”、“系统”属性的文件和目录名也显示)。
dir命令的处理函数为DirComd(),其简单流程图如图7所示。
6.md命令流程图
在指定目录路径下创建指定子目录。
若没有指定路径,则在当前目录下创建指定子目录。
md命令的处理函数为MdComd(),其简单流程图如图8所示。
7.rd命令流程图
rd<
删除子目录。
若指定目录为空(仅有一个“..”目录项的目录为空目录),则删除之,否则,给出“非空目录不能删除”的提示。
rd命令的处理函数为RdComd(),其简单流程图如图9所示。
8.open命令流程图
打开文件。
open命令的处理函数为OpenComd(),其简单流程图如图10所示。
9.close命令流程图
关闭文件。
close命令的处理函数为CloseComd(),其简单流程图如图11所示。
10.write命令流程图
[insert]]。
向文件中写入信息。
命令中若无“位置”参数,则在写指针所指位置写入文件内容;
若提供“位置”参数,则在对应位置写入内容。
位置可以是整数n,是指在文件的第n个字节处开始写入(位置从1开始编号)。
“位置”参数可以是“append”(前3个字符有效,不区分大小写),表示在文件尾部写入信息;
参数“insert”(前3个字符有效,不区分大小写)表示新写入的内容插入到对应位置,对应位置开始的原内容后移。
若无参数“insert”,写入内容代替文件原先的内容(改写方式)。
写入内容中的“\n”代表“回车”符。
写入完毕调整文件长度和写指针值。
若文件未打开或文件不存在,分别给出错误信息。
本系统约定:
刚打开的文件,其写指针指向文件末尾。
目前参考程序的write命令只有“插入”和“改写”两种功能,尚未提供“删除”功能。
write命令的处理函数为WriteComd(),其简单流程图如图12所示。
11.read命令流程图
从已打开的文件中读文件内容并显示。
若无“位置”参数,则从读指针所指位置开始读。
若有“位置”参数,则从指定位置处开始读。
位置m是指从文件开头第m个字节处读(m从1开始编号)。
若无“字节数n”参数,则从指定位置读到文件末尾;
若有“字节数n”参数,则从指定位置开始读n个字节。
read命令的处理函数为ReadComd(),其简单流程图如图13所示。
12.copy命令流程图
若目标文件与源文件所在的目录相同,则只能进行更名复制,此时目标文件名不能省;
若目标文件与源文件所在的目录不同,则既可更名复制也可同名复制,同名复制时目标文件名可省。
例如,命令
copymailemail
(1)若当前目录中不存在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 原理 实验 指导书