操作系统文件系统设计文档.docx
- 文档编号:8961797
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:13
- 大小:75.15KB
操作系统文件系统设计文档.docx
《操作系统文件系统设计文档.docx》由会员分享,可在线阅读,更多相关《操作系统文件系统设计文档.docx(13页珍藏版)》请在冰豆网上搜索。
操作系统文件系统设计文档
操作系统实习
题目:
文件系统模拟设计
姓名:
温先良
班级:
计本08-1班
学号:
3081817124
指导老师:
葛云生
操作系统实习1
1.引言2
1.1设计目的2
1.2实验内容2
1.3系统开发运行环境3
二系统分析设计3
2.2基本原理3
2.3数据结构设计4
2.4程序流程图5
三程序代码以及运行结果5
四实习心得体会10
五参考文献11
1.引言
1.1设计目的
通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。
1.2实验内容
为linux系统设计一个简单的二级文件系统。
要求做到以下几点:
(1)可以实现下列几条命令(至少4条);
dir列文件目录
create创建文件
delete删除文件
open打开文件
close关闭文件
read读文件
write写文件
(2)列目录时要列出文件名、物理地址、保护码和文件长度;
(3)源文件可以进行读写保护。
提示:
(1)首先应确定文件系统的数据结构:
主目录、子目录及活动文件等。
主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。
(2)用户创建的文件,可以编号存储于磁盘上。
如file0,file1,file2...并以编号作为物理地址,在目录中进行登记
1.3系统开发运行环境
WindowsXP系统,VisualC++6.0
二系统分析设计
2.2基本原理
本系统是模拟实现多用户多的文件系统,在系统出现登录后,输入用户与口令,在用户登录系统后,可以添加2个普通用户。
普通用户的命令与系统管理员的系统命令具体实现是一样的。
此模拟系统提供了10个命令,并根据命令的含义与要求,用C/C++编程来完成所有具体操作。
该系统可以模拟完成用户的登陆和验证,新建文件,打开文件,读文件,写文件,关闭文件,删除文件,查看文件,退出系统,注销用户,切换用户等系统功能。
2.3数据结构设计
系统管理员
typedefstructuser//系统管理员
{charname[5];//登录用户名
charpassword[10];//登录密码
}user;
用户文件目录
structUFD
{charfname[5];//文件名
charproper[2];//文件属性,R或RW
intlength;//记录长度
intaddr;//文件地址
};
用户已打开文件表
structUOF
{
charfname[5];//文件名
charproper[2];//文件属性,r或rw
intlength;//记录长度
charstate[5];//状态:
new,open
intread;//读指针
intwrite;//写指针
};
主文件目录
structMFD
{charUsername[5];//用户名
structUFDUserDirec[L];//用户文件目录
structUOFOpenUser[S];//已打开文件目录
intcount;//每个用户拥有的存在的文件计数
}MFD[N];
2.4程序流程图
失败重新登录
成功
用户命令
三程序代码以及运行结果
系统管理员登陆以及验证:
boollogin(char*name,char*pwd)
{
if((strcmp(name,admin.name)==0)&&(strcmp(pwd,admin.password)==0))
{returntrue;}
returnfalse;
}
创建新用户
boolNewUser(charuser[])
{inti=0;
while(strcmp(MFD[i].Username,"")!
=0&&(i {i++;} if(i>=N){//如果用户数已满 cout<<"用户数已满.你必须删除一个用户才继续新建用户"< return0; } else{//如果用户数未满,则建立新用户 strcpy(MFD[i].Username,user); NOU++;//用户数加1 cout<<"用户"< cout<<"系统现有的用户数: "< return1; } } 注销用户 voidLogout(inta) {//注销用户,清除所有文件的登记栏 stringstr; chartemp[5]=""; for(inti=0;i {//对UFD中的文件名MFD[a].UserDirec[i].fname进行处理 str=static_cast strcpy(MFD[a].UserDirec[i].fname,str.substr(0,4).c_str()); for(intj=0;j {//对UOF中的文件名UOF[i].fname进行处理 str=static_cast strcpy(MFD[a].OpenUser[j].fname,str.substr(0,4).c_str()); //清除UOF中信息 if(strcmp(MFD[a].UserDirec[i].fname,MFD[a].OpenUser[j].fname)==0) {strcpy(MFD[a].OpenUser[j].fname,"");//清除UOF中文件名 strcpy(MFD[a].OpenUser[j].proper,"");//清除UOF中文件属性 MFD[a].OpenUser[j].length=0;//清除UOF中记录长度 strcpy(MFD[a].OpenUser[j].state,"");//清除UOF中文件状态 MFD[a].OpenUser[j].read=0;//清除UOF中读指针 MFD[a].OpenUser[j].write=0;//清除UOF中写指针 } } //清除UFD中信息 strcpy(MFD[a].UserDirec[i].fname,"");//清除UFD中文件名 strcpy(MFD[a].UserDirec[i].proper,"");//清除UFD中文件属性 MFD[a].UserDirec[i].length=0;//清除UFD中记录长度 MFD[a].UserDirec[i].addr=0;//清除UFD中文件地址 } strcpy(temp,MFD[a].Username); strcpy(MFD[a].Username,"");//清除MFD中的用户名 MFD[a].count=0;//该用户下的文件数清零 NOU--;//用户数减1 cout<<"用户"< cout<<"系统当前用户数: "< } 新建文件 voidCreate(inta){ inti=0; charfilename[5];//文件名 charproperty[3];//文件属性 chartemp[2];//文件属性的临时变量 stringstr;//临时变量 Re: cout<<"请输入创建文件名(长度为4)文件属性(r,rw): "< cout<<"文件名: ";//输入要创建的文件名 cin>>filename; if(strlen(filename)>4)gotoRe;//如果文件名长度不符合要求,则要求重新输入 loop: cout<<"文件属性(r,rw): ";//输入文件属性,读或是读写 cin>>property; strcpy(temp,property);//将属性字符串赋值给temp if(! (strcmp(temp,"rw")==0||strcmp(temp,"r")==0))//检查属性是否正确 {cout<<"文件属性设置错误.请重新设置: rorrw"< gotoloop; } //对文件名filename进行处理 str=static_cast strcpy(filename,str.substr(0,4).c_str()); //对MFD[a].UserDirec[i].fname文件名进行处理 str=static_cast strcpy(MFD[a].UserDirec[i].fname,str.substr(0,4).c_str()); while((strcmp(MFD[a].UserDirec[i].fname,filename)! =0)&&(i {i++; str=static_cast strcpy(MFD[a].UserDirec[i].fname,str.substr(0,4).c_str()); } if(i>=L){//无重名文件 if(MFD[a].count>=L)//如果用户文件目录UFD已满,则提示文件满的信息 {cout<<"用户"< <<"文件目录UFD已满."< } //当用户文件目录UFD未满时 else{ intj=0; intk=0; while(strcmp(MFD[a].UserDirec[j].fname,"")! =0&&(j {j++;} MFD[a].count++;//用户的文件计数器加1 strcpy(MFD[a].UserDirec[j].fname,filename);//UFD中登记文件名 MFD[a].UserDirec[j].length=Record;//UFD记录长度 strcpy(MFD[a].UserDirec[j].proper,temp);//UFD中文件属性 srand((unsigned)time(NULL));//产生随机数 i=rand()%100;//找一磁盘空闲块并赋值给i MFD[a].UserDirec[j].addr=i;//在UFD登记栏中置文件地址为i //提示文件在UFD中建立成功 cout<<"文件: "< "< while(strcmp(MFD[a].OpenUser[k].fname,"")! =0&&(k {k++;} //如果用户已打开文件表UOF未满 if(k strcpy(MFD[a].OpenUser[k].fname,filename);//UOF中文件名 MFD[a].OpenUser[k].length=Record;//UOF中记录长度 strcpy(MFD[a].OpenUser[k].proper,temp);//UOF中文件属性 strcpy(MFD[a].OpenUser[k].state,"new");//修改状态为建立 MFD[a].OpenUser[k].write=i;//修改写指针为i //提示文件在UOF中建立成功 //cout<<"文件: "< }//如果用户已打开文件表UOF已满,提示文件满的信息 else{// cout<<"用户已打开文件表UOF已满."< } } } else//提示文件同名,不能建立 {cout<<"文件同名不能建立"< } 打开文件 写文件 读文件 删除文件 系统帮助命令 四实习心得体会 这次操作系统实习为期三周的学习时间,虽然时间比较短,但是还是有点收获的。 实习之前,是操作系统课程学习,学习的都是课本的理论知识。 在没有接触操作系统课程之前,个人的见识真是少啊。 我以为操作系统就是WindowsXP这么一种操作系统,还没想到操作系统竟然还有这么多的呢。 课堂上讲的操作系统就是Linux操作系统,可是课本的理论知识学习的比较模糊,很多概念都不理解。 经过这次操作系统实习之后,个人在虚拟机里不断的练习Linux系统各种命令。 由于个人这次实习,所选的题目是: 文件系统模拟设计,所以个人在这方面操作比较多,经常动手练习那些Linux系统常用的文件系统命令,逐渐熟悉理解了这个文件系统的各种命令。 不过,对于Linux系统还有很多知识是不懂的,如果将来打算从事Linux系统软件开发的哇,那么还是需要慢慢学习Linxu系统的。 通过这次实习,促使个人开始接触了解这个Linux系统,也对Linux系统有了一点兴趣。 五参考文献 现代操作系统(第2版) 作者: (荷)AndrewS.Tanenbaum[作译者介绍] 译者: 陈向群马洪兵出版社: 机械工业出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 文件系统 设计 文档