034
模拟文件系统的管理(操作系统课程设计)样本
(样本只提供该系统的基本情况介绍,若需要完整的设计和论文,建议您购买本系统,凡是购买本站系统的,本站均根据您的要求,把系统上的开发信息,题目等修改成符合您的要求)
本设计包含内容:源代码+毕业论文
论文大概:
华南理工大学网络教育学院
2004-2005学年度第一学期大作业(论文)
目录
一、设计思想说明 3
二、文件系统结构的说明 4
三、数据结构的说明 5
四、算法流程图 6
五、程序清单 7
六、用户手册 44
七、体会与建议 45
1 一、设计思想说明
1、 用户管理
模拟unix多个登录界面(八个用户),在系统出现登录模块(输入旧用户或新增用户)后
,输入用户与口令,在用户登录后进行系统初始化,建文件卷、将用户和口令信息保存在假定的磁盘空间里,同时备份到几个指定的文件中,供下次启动此系统时恢复用。
2.模拟磁盘:
申请1M内存空间,供最多8个用户,并对用户的模拟磁盘的目录结构,文件全部存入文件中,在下次启动时恢复到系统的目录树及相应的链表中。
3.模拟unix文件系统的命令与其命令的具体实现:
(1) login:用户登录;
(2) logout:
用户退出系统
(3) canceluser:取消一个用户
(4) modifypsw:修改用户的密码
(5) format:初始化用户卷
(6) dir:列出当前目录下的所有文件及子目录
(7) cd:显示当前的目录名
(8) cdback:退到上一级目录
(9) cdfore:
进入下一级子目录
(10) cdroot:回到根目录
(11) mkdir:新建一个子目录
(12) my_deletedir:删除一个子目录
(13) my_create:新建一个文件
(14) my_deletefile:删除一个文件
(15) clear:清屏
此模拟系统共提供了上述命令,并根据命令的含义与要求,用C++编程来完成所有具体操作。
2 二、文件系统结构的说明
目录结构用树来实现;块的空闲/占用1/0来标识;空闲块用双向链表来实现查找;占用块用单链表来实现查找;所有操作全在目录树上完成;文件/目录的加与删全是对树与链表操作。
1. 块管理层:
(1) 块回收:
inode[dir_inode[top]].b_addr[i]=-1;
int
no=inode[dir_inode[top]].b_addr[i]
freebmap(inode[no].b_addr[j]);
ifree(no); freeimap(no);
iput(no);
(2)块分配/块写:
int col=findcol(inode_i,inode_j,
imap);
imap[row][col]=1;
int
position=row*inode_i+col;
inode[dir_inode[top]].b_addr[addr]=position;
inode[dir_inode[top]].i_count++;
inode[position].i_no=position;
inode[position].i_flag=0;
inode[position].i_count++;
strcpy(inode[position].uname,
uname);
inode_name * temp=new
inode_name;
temp->i_no=inode[position].i_no;
strcpy(temp->d_name,
filename);
temp->next=NULL;
insert(temp);
2.文件控制块层:
用n=inode[k].b_addr[i]记录目前目录级数;用findin_name(n)记录文件名或目录名;用inode[n].i_flag识别是目录或文件。
如显示文件列表:int
n=inode[k].b_addr[i];if(n!=-1){cout<< findin_name(n) <<"
";
if (inode[n].i_flag ==1)
cout<<"<dir>"<<endl; else
cout<<"<file>"<<endl;
<dir>:表示找到目录,<file>表示找到文件;
3.文件管理层:(1)目录管理:cd,cdfore,cdback,mkdir,cdroot,my_deletedir,
dir
(2)文件管理:
my_create,my_deletefile,
4.命令解释层:命令输入,解释,执行,都在函数shell()中完成。根据输入的命令,调用相应的函数,并按事先规定好的流程执行。
5.用户管理层:用login,logout,canceluser来决定哪些用户在系统中。
2.1.1 三、
数据结构的说明
模拟文件系统,用记录数组表示每个节点,组成树状结构,且按下面结构组织:
(1)目录结构
struct
inode_name
{
int i_no;//号
char
d_name[name_size];//名称
inode_name *
next;//节点的后向指针
};
(2)FCB结构
struct inode
{
int
i_no;
int i_flag;
int i_count;
char
uname[name_size];
int
b_addr[addr_size];
};
(3)打开文件结构:
struct
usr_ofile
{
int fi_no;
int di_no;
int
openmode;
char uname[name_size];
};
(4)用户结构:
struct usr
{
char
name[name_size];//用户名
char
password[psw_size];//用户密码
};
3 四、算法流程图
1、 用户登录,建立文件系统
2、 对文件的操作(读、写、删除、DIR、CD等功能):
3.logout,canceluser:释放占用的内存空间,且退出系统。
shell():login-->等待输入命令—>根据命令转相应的函数按一定的步骤运行;