操作系统课程设计 下载本文

计算机系综合性实验

实 验 报 告

课程名称 操作系统实验报告 实验学期 2013 至 2014 学年 第 一 学期 学生所在系部 计算机与信息管理系

年级 2011 专业班级 计算机102 学生姓名 王强 黄新潮 张蒙 学号 11030082 11030070 11030077 任课教师 陆丽娜 实验成绩

计算机系制

一个简单的文件系统的详细设计

一、实验目的

(1)阅读并调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

(2)了解设计一个n个用户的文件系统,每个用户可以保存M个文件。用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create、delete、open、close、read、write等命令。

二、实验要求

1、根据流程图阅读所给文件系统源程序,并对源程序加以注释(注释量达70%以上)。 2、修改、完善该系统,指出程序的bug。

三、文件系统功能设计

1. 功能设计

该文件系统是一个多用户、多任务的文件系统。对用户和用户的文件数目并没有上限。也就是说该系统允许任何用户申请空间,而且在其目录下的文件数目并不做任何的限制。

该系统可以支持的操作命令如下:

① bye——用户注销命令。当使用该命令时,用户退出系统,注销该用户功能设计并回到登陆界面。

命令格式: bye

② close——删除用户注册信息命令。执行该命令后,用户在系统中的所有信息,包括该用户目录下的所有文件都被删除。命令执行完成后返回登陆界面。

命令格式:close

③ create——在当前目录下创建一个文件,且该文件不能跟当前已有的文件重名。该文件的管理信息登记在用户文件信息管理模块中。执行完该命令后回到执行命令行。

命令格式:create>file1

其中:“>”符为提示符,file1为要创建的文件名。

④ delete——删除当前用户目录下的一个文件,命令执行完毕返回至命令行。 命令格式:delete>file1

其中:file1为要删除的文件名。

⑤ list——显示当前注册目录下的所有文件信息,包括文件名、文件长度、文件操作权限。

命令格式:list

⑥ chmod——改变某个文件的执行权限,但前提是该文件是该用户目录下的文件。 命令格式:chmod>file1。

其中:file1为要授权的文件名。

⑦ open——在window界面下打开某个文件。执行该命令后,文件file1将用在windows界面下的文件形式打开。用户可以在这个方式中对文件进行修改,并将修改后的内容保存。

命令格式:open>file1

其中:file1为要打开的文件名。

⑧ read——读文件信息。将文件信息读入并显示在终端上。 命令格式:read>file1

其中:file1为要读的文件名。

⑨ write——向某个文件写入新的信息。用户可以选择用覆盖原来内容的方式或和在文件的末尾追加新信息的方式写入信息。 当要退出时输入“#”即可。

(2)系统采用二级文件目录。设置主目录(MFD)和用户文件目录(UFD),分别以文件的方式保存在磁盘中。在主目录中有注册用户的用户名和另一标志该用户目录下是否有文件的指针标记。用户文件目录采用用户名作为文件名保存于磁盘,以便检索时方便对应。在用户文件目录中保存着该目录下所有文件的文件名称、保护码、文件长度。

(3)该系统大量使用高级语言中的文件操作函数,所以能实际看到文件的创建、写入、读出、删除等效果。

2. 功能设计实现总体流程

开始 选择操作用户登录 用户注册退出N 在MFD中找到该用户?结束 Y 初始化命令关键字输入操作命令创建文件删除文件打开文件改变权限保存当前主目录显示文件写文件读文件删除文件 继续操作执行? Y N 结束

3. 主要数据结构 struct UFD

{//用户文件模块 char filename[32]; //文件名 int safecode; //文件保护码 long length; //文件长度 }*curfile = NULL;

这个是用户文件模块数据结构,结构体的名字是:UFD,在结构体里面定义了三个成员,filename,safecode,length,分别用于存储用户文件的名字,文件保护码,文件的长度, *curfile = NULL;,这是一个结构体类型的指针,开始初始化为NULL.

struct MFD {//主文件模块 char username[32]; //存放用户名 bool filepoint;

//用户目录下的文件指针,false表示目录为空,true为该用户目录中有文件

}*curuser = NULL,*elseuser=NULL;

这个是主文件模块的数据结构,有两个成员,username,filepoint,分别用于存放用户名,用户目录下面的文件指针. *curuser = NULL,*elseuser=NULL;这两个是主文件的结构体变量,用于访问结构体里面的数据成员

4. 主要功能模块

1. int LoginDisplay() //登陆选项操作函数

2. bool Login(int SELETE)//用户登陆,注册函数

3. void DisplayUFD() //打印用户信息,包括用户的各个文件

4. void ByeFile(bool BOOL)//注销函数,调用次函数用户可以退出系统 5. bool ClearUserFile()//用户要将自己的注册目录从系统彻底删除 6. void ClearUserMes()//删除用户全部信息

7. void DeleteUser()//删除用户注册目录的操作 8. void CreatFile()//在当前用户目录下创建文件

9. void DeleteFile() //删除当前目录下一个文件的操作 10. bool QueryModElse(bool BOOL,bool &flag)

//查询其它用户目录下文件的文件

11. bool QueryMod(bool BOOL)//查询权限 12. bool WriteRight(int len,bool BOOL)

//查看是否已经正确地写入到该文件信息中,是则返回真值

13. void WriteLengthToFile(int Len,bool BOOL)

//将文件长度写入文件管理模块中

14. void WriteFile()//向文件写入信息的操作 15. void ReadFile()//读文件函数

16. void ChangeMod()//修改某文件的执行权限

17. void Execute(int i,int len,int cmdset)//执行命令函数

18. void Command()

//读取用户输入的命令,并将其转换成系统能识别的命令

5.小组成员及分工

负责人: 姓名 黄新潮 王强 张蒙

对源程序加以注释、修改 对源程序读取,运行,截图,完善 模 块 组长分配任务,总结实验心得,分析流程图,给组员讲解 四、文件系统功能模块详细设计流程图 1. int LoginDisplay() //登陆选项操作函数

Begin Scanf SELETE_1 0<=SELETE_1<=2? Y Return SELETE_1 End N 图1 LoginDisplay