济南大学计算机专业操作系统设计报告文档格式.docx
《济南大学计算机专业操作系统设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《济南大学计算机专业操作系统设计报告文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
3.1.1程序执行基本流程5
3.1.2用户选择函数6
3.2算法思路6
3.2.1实现方法6
3.2.2设计思想7
4测试数据及程序运行情况8
4.1欢迎界面8
4.2用户选择界面8
4.3用户登录界面9
4.4帮助界面9
4.5创建目录9
4.6创建并显示文件10
4.7创建另一个目录并创建文件10
4.8写文件11
4.9读文件11
4.10显示当前目录和文件12
4.11在当前目录下创建新目录并创建文件进行读写操作12
4.12错误操作12
4.13显示子目录下的文件13
4.14退出当前操作13
4.15退出系统页面14
5实验过程中出现的问题及解决方法14
5.1关于文件的删除问题14
5.2关于多用户的权限问题14
5.3关于目录创建的问题15
5.4关于目录的修改操作问题15
6自我评析与总结15
参考文献16
1
实验内容
1.1基本要求
在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟UNIX文件系统。
(1)在现有机器硬盘上开辟20M的硬盘空间,作为设定的硬盘空间。
(2)编写一管理程序对此空间进行管理,以模拟UNIX(或Linux)文件系统,具体要求如下:
①要求盘块大小1k
正规文件
②i结点文件类型目录文件
(共1byte)块设备
管道文件
物理地址(索引表)
共有13个表项,每表项2byte
文件长度4byte
联结计数1byte
③0号块超级块栈长度50
空闲盘块的管理:
成组链接(UNIX)
或位示图法(Linux)
④每建一个目录,分配4个物理块
文件名14byte
⑤目录项信息
i结点号2byte
⑥结构:
0#:
超级块
1#~20#号为i结点区
20#~30#号为根目录区
⑦功能:
初始化
建立文件(需给出文件名,文件长度)
建立子目录
打开文件(显示文件所占的盘块)
删除文件
删除目录
显示目录(即显示目录下的信息,包括文件、子目录等)
显示整个系统信息
2数据结构设计
2.1文件结构体的定义
structFiles
{
stringfilename;
////文件名
intf_Owner;
////所有者(0~7)
stringr_time;
////文件最后修改时间
intf_size;
////文件大小
stringcont;
////文件内容
Files*next;
////指向下一个文件的指针
};
2.2文件夹结构体的定义
structFolder
intOwner;
////所有者(0~7)
stringfoldername;
////文件夹名字
stringm_time;
////文件夹创建时间
Folder*folders;
////存放文件夹指针
Files*file;
////存放文件指针
Folder*fparent;
////指向路径父节点的指针
Folder*next;
////指向同一层下一文件夹的指针
//多用户:
usr1,usr2,usr3,……,usr8(1-8个用户)、多级目录:
可有多级子目录、具有login(用户登录)、
//系统初始化(建文件卷、提供登录模块)、文件的创建:
create、文件的打开:
open、文件的读:
read、文件的写:
write、
//文件关闭:
close、删除文件:
delete、创建目录(建立子目录):
mkdir、改变当前目录:
cd、列出文件目录:
dir、退出:
logout。
2.3用户名的数组定义
stringUserName[8]={"
user0"
"
user1"
user2"
user3"
user4"
user5"
"
user6"
user7"
2.4密码的数组定义
stringPassWord[8]={"
12345"
2.5操作的数组定义
stringconstMethods[11]={"
create"
open"
read"
write"
close"
fdelete"
mkdir"
cd"
dir"
help"
logout"
3算法设计
3.1功能模块图
3.1.1程序执行基本流程
3.1.2用户选择函数
3.2算法思路
3.2.1实现方法
列出系统中的所有函数并说明函数的功能
char*Time()获取当前时间
voidMkdir(Folder*&
Target,string&
Name,intUnum)创建目录
voidCd(Folder*list,Folder*&
Name,string&
path)改变当前目录
voidDir(Folder*&
Target)列出文件目录
voidCreate(Folder*&
Name,intUnum)文件的创建
Files*Open(Folder*&
Name)打开文件
voidRead(Folder*&
Name)文件的读
voidWrite(Folder*&
Name,intUnum)文件的写
voidClose(Folder*&
Name)文件关闭
voidDelete(Folder*&
Name,intUnum)删除文件
voidlogout()退出
voidHelp()显示菜单
voidChose(Folder*&
list,Folder*&
Target,intUnum,stringpath)用户操作选择函数
voidlogin(Folder*&
Target,intUnum,stringpath)登陆
voidBegin(Folder*&
path)程序初始化函数
voidRun(Folder*&
Target,intUnum,stringpath)用户登陆选择
voidWellcome()系统欢迎界面函数
voidByebye()程序退出界面函数
voidmain()主函数
3.2.2设计思想
(1)定义全局变量
Folder*list=NULL
Folder*Target=NULL
stringpath
intUnum=0
(2)主函数模块
voidmain()
Folder*list=NULL;
Folder*Target=NULL;
stringpath;
intUnum=0;
system("
colorb"
);
Wellcome();
Begin(list,Target,path);
Run(list,Target,Unum,path);
Byebye();
cout<
<
"
输入enter键退出程序!
endl;
getchar();
}
4测试数据及程序运行情况
4.1欢迎界面
4.2用户选择界面
4.3用户登录界面
4.4帮助界面
4.5创建目录
4.6创建并显示文件
4.7创建另一个目录并创建文件
4.8写文件
4.9读文件
4.10显示当前目录和文件
4.11在当前目录下创建新目录并创建文件进行读写操作
4.12错误操作
4.13显示子目录下的文件
4.14退出当前操作
4.15退出系统页面
5实验过程中出现的问题及解决方法
5.1关于文件的删除问题
删除文件的设计刚开始因为算法设计的思想不够完善所以很久不能实现这个功能。
后来通过查阅资料然后完成了这个功能。
首先删除文件需要有权限限制,只有创建这个文件的用户才能删除目标文件。
定义pfd指针指向要被删除的目标文件pre指针指向目标文件的前一个文件,若是删除文件链表的第一个文件的话,那就直接将指向表头的指针指向第二个文件。
如果是删除最后一个文件的话,那就将pre指针直接指向NULL。
否则,将pre的next指向pfd的next,然后释放pfd指向的文件。
5.2关于多用户的权限问题
因为UNIX系统是多用户系统,所以相对于Windows系统来说,文件需要增加一个关于用户的属性,这样在对文件进行写操作和删除操作时需要对文件的用户进行查询,确定当前用户是否有权限进行写操作和删除操作。
但是对于各个用户来说,可以查看在磁盘上的各个文件,只是不能修改和删除非自己创建的文件或是文件夹。
5.3关于目录创建的问题
通过查询资料自己便有了一个想法,所谓的目录即路径,即在当前目录下创建一个新的文件夹。
那创建一个新的文件夹首先要检查这个文件夹的名字是否重名,如果重名了,则创建失败,否则则在当前目录中的文件夹的链表的末尾插入一个新的文件夹,如果当前目录下没有其他文件夹,则把该目录下的文件夹链表的头指针指向新建的文件夹。
5.4关于目录的修改操作问题
通过查阅资料我有了一个想法,修改目录,即修改当前的路径。
如果修改为C,D,E盘的话,则直接将全局变量path修改为C:
\\,D:
\\E:
\\。
如果是在当前路径下扩充下一级文件,如果要扩充的目录在当前路径下则在当前路径上加上要扩充的目录,否则找不到路径。
以链表的形式模拟链接C盘D盘E盘三个磁盘。
以链表的形式模拟链接同一目录下的各个文件夹。
以链表的形式模拟链接同一目录下的各个文件。
这三个链表是相互独立,互不影响的。
6自我评析与总结
本次的操作系统课程设计是对自己的一个提高,自己分配的题目是模拟UNIX文件系统,刚开始自己对这个茫然无知,但是自己查询资料借书自己看,慢慢的对UNIX系统有了初步的了解,同时对自己的课设任务也有了一定的认识,慢慢的觉得自己也可以做这个了。
本学期的操作系统让我对计算机的软件基础有了初步的认识,模拟UNIX文件系统也是基于操作系统的所做的一个方面的事情,要求是对于多用户进行的文件管理,对于文件要进行一般的操作比如创建,打开,读写操作,以及目录的建立和改变当前目录,通过对UNIX系统的了解,我选择了C++来设计改程序,在编写源代码的过程中,自己过对于目录的创建,还有对当前目录的修改方面还是很是不理解,但是经过自己在网上查询资料,再看别人写的源程序关于这两个方面的