操作系统原理实验指导书.docx
- 文档编号:8510036
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:46
- 大小:569.66KB
操作系统原理实验指导书.docx
《操作系统原理实验指导书.docx》由会员分享,可在线阅读,更多相关《操作系统原理实验指导书.docx(46页珍藏版)》请在冰豆网上搜索。
操作系统原理实验指导书
计算机科学与技术专业适用
操作系统原理
实验指导书
南京工业大学信息科学与工程学院
2011年9月
目录
一、实验目的1
二、实验要求与内容1
2.1实验题目1
2.2初始目录结构1
2.3系统操作命令简介1
2.4几点说明2
三、设计方案3
3.1采用FAT文件格式3
3.2目录项(FCB)结构3
3.3根目录4
3.4主要函数4
3.5用户已打开文件表(UOF)5
3.6程序中有关变量的说明5
1.当前目录curpath数据结构5
2.删除文件恢复表udtab数据结构5
3.全局变量ffbp和Udelp5
4.全局数组comd[5][PATH_LEN]6
5.全局数组temppath[PATH_LEN]6
3.7主要函数的流程图6
1.主函数main()的流程图6
2.create命令流程图6
3.cd命令流程图7
4.del命令流程图8
5.dir命令流程图8
6.md命令流程图9
7.rd命令流程图9
8.open命令流程图10
9.close命令流程图10
10.write命令流程图11
11.read命令流程图12
12.copy命令流程图12
13.ren命令流程图14
14.attrib命令流程图14
15.undel命令程序流程图15
16.FindPath()函数程序流程图15
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字节)
(2字节)
structFCB//每个目录项16个字节
{
charFileName[11];//文件名最多10个字符且以'\0'结尾
charFattrib;//文件属性
shortintAddr;//文件首块号
shortintFsize;//文件长度
};
◆为简单,本系统不考虑文件扩展名,文件名为1~10个字符,以结尾标记'\0'存储(实际操作系统目录项中文件名一般没有结尾标记),命令中输入的文件名若超过10个则截取前10个字符。
◆文件属性为1个字节,其二进制位对应的属性如下图所示。
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
1表示目录
0/1
0
1表示系统
0/1
1表示隐藏
0/1
0/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[<目录名>]。
命令功能:
改变当前目录,即把指定目录变为当前目录(工作目录)。
指定目录不存在时,给出错误信息。
若命令中无目录名,则显示当前目录路径名。
cd命令的处理函数为CdComd(),其简单流程图如图5所示。
4.del命令流程图
命令形式:
del<文件名>。
命令功能:
删除指定的文件,即清除其目录项和回收其所占用磁盘空间。
对于只读文件,删除前应询问用户,得到同意后方能删除。
当指定文件正在使用时,显示“文件正在使用,不能删除”的信息,当指定文件不存在时给出错误信息。
del命令的处理函数为DelComd(),其简单流程图如图6所示。
5.dir命令流程图
命令形式:
dir[<目录名>][<属性>]。
命令功能:
显示“目录名”指定的目录中文件名和第一级子目录名。
若指定目录不存在,则给出错误信息。
如果命令中没有指定目录名,则显示当前目录下的相应内容。
若命令中无“属性”参数,则显示指定目录中“非隐藏”属性的全部文件名和第一级子目录名;若命令中有“属性”参数,则仅显示指定属性的文件名和目录名。
属性参数的形式是“|属性符号”,其中属性符号有r、h和s三种(不区分大小写),分别表示“只读”、“隐藏”和“系统”三种属性,它们可以组合使用且次序不限。
例如“|rh”,表示要求显示同时具有“只读”和“隐藏”属性的文件和目录名。
dir命令显示文件名时,同时显示该文件长度;显示目录名时,同时显示“
命令使用举例:
dir/usr|h显示根目录下usr子目录中全部“隐藏”属性的文件名和子目录名
dir..显示当前目录的父目录中全部“非隐藏”属性的文件和子目录名(包括“只读”、“系统”属性的文件和目录名也显示)。
dir命令的处理函数为DirComd(),其简单流程图如图7所示。
6.md命令流程图
命令形式:
md<目录名>。
命令功能:
在指定目录路径下创建指定子目录。
若没有指定路径,则在当前目录下创建指定子目录。
对于重名目录给出错误信息。
md命令的处理函数为MdComd(),其简单流程图如图8所示。
7.rd命令流程图
命令形式:
rd<目录名>。
命令功能:
删除子目录。
若指定目录为空(仅有一个“..”目录项的目录为空目录),则删除之,否则,给出“非空目录不能删除”的提示。
不能删除当前目录。
rd命令的处理函数为RdComd(),其简单流程图如图9所示。
8.open命令流程图
命令形式:
open<文件名>。
命令功能:
打开文件。
若指定文件存在且尚未打开,则打开之,并在用户打开文件表(UOF)中登记该文件的有关信息。
若指定文件已经打开,则显示“文件已打开”的信息;若指定文件不存在,则给出错误信息。
open命令的处理函数为OpenComd(),其简单流程图如图10所示。
9.close命令流程图
命令形式:
close<文件名>。
命令功能:
关闭文件。
若指定文件已打开,则关闭之,即从UOF中删除该文件对应的表项。
若文件未打开或文件不存在,分别给出有关信息。
close命令的处理函数为CloseComd(),其简单流程图如图11所示。
10.write命令流程图
命令形式:
write<文件名>[<位置>[insert]]。
命令功能:
向文件中写入信息。
命令中若无“位置”参数,则在写指针所指位置写入文件内容;若提供“位置”参数,则在对应位置写入内容。
位置可以是整数n,是指在文件的第n个字节处开始写入(位置从1开始编号)。
“位置”参数可以是“append”(前3个字符有效,不区分大小写),表示在文件尾部写入信息;参数“insert”(前3个字符有效,不区分大小写)表示新写入的内容插入到对应位置,对应位置开始的原内容后移。
若无参数“insert”,写入内容代替文件原先的内容(改写方式)。
写入内容中的“\n”代表“回车”符。
写入完毕调整文件长度和写指针值。
若文件未打开或文件不存在,分别给出错误信息。
本系统约定:
刚打开的文件,其写指针指向文件末尾。
目前参考程序的write命令只有“插入”和“改写”两种功能,尚未提供“删除”功能。
write命令的处理函数为WriteComd(),其简单流程图如图12所示。
11.read命令流程图
命令形式:
read<文件名>[<位置m>[<字节数n>]]。
命令功能:
从已打开的文件中读文件内容并显示。
若无“位置”参数,则从读指针所指位置开始读。
若有“位置”参数,则从指定位置处开始读。
位置m是指从文件开头第m个字节处读(m从1开始编号)。
若无“字节数n”参数,则从指定位置读到文件末尾;若有“字节数n”参数,则从指定位置开始读n个字节。
若文件未打开或文件不存在,分别给出错误信息。
read命令的处理函数为ReadComd(),其简单流程图如图13所示。
12.copy命令流程图
命令形式:
copy<源文件名><目标文件名>。
命令功能:
为目标文件建立目录项,分配新的盘块,并将源文件的内容复制到目标文件中。
若目标文件与源文件所在的目录相同,则只能进行更名复制,此时目标文件名不能省;若目标文件与源文件所在的目录不同,则既可更名复制也可同名复制,同名复制时目标文件名可省。
例如,命令
copymailemail
(1)若当前目录中不存在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 原理 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)