操作系统文件系统设计文档Word下载.docx

上传人:b****6 文档编号:22097940 上传时间:2023-02-02 格式:DOCX 页数:13 大小:75.15KB
下载 相关 举报
操作系统文件系统设计文档Word下载.docx_第1页
第1页 / 共13页
操作系统文件系统设计文档Word下载.docx_第2页
第2页 / 共13页
操作系统文件系统设计文档Word下载.docx_第3页
第3页 / 共13页
操作系统文件系统设计文档Word下载.docx_第4页
第4页 / 共13页
操作系统文件系统设计文档Word下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

操作系统文件系统设计文档Word下载.docx

《操作系统文件系统设计文档Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统文件系统设计文档Word下载.docx(13页珍藏版)》请在冰豆网上搜索。

操作系统文件系统设计文档Word下载.docx

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<

N))//查看MFD,检测用户数是否已满

{i++;

}

if(i>

=N){//如果用户数已满

cout<

<

用户数已满.你必须删除一个用户才继续新建用户"

endl;

return0;

}

else{//如果用户数未满,则建立新用户

strcpy(MFD[i].Username,user);

NOU++;

//用户数加1

用户"

user<

创建成功."

//提示当前用户创建成功

系统现有的用户数:

"

NOU<

//显示系统现有的用户数

return1;

}

注销用户

voidLogout(inta)

{//注销用户,清除所有文件的登记栏

stringstr;

chartemp[5]="

;

for(inti=0;

i<

L;

i++)

{//对UFD中的文件名MFD[a].UserDirec[i].fname进行处理

str=static_cast<

string>

(MFD[a].UserDirec[i].fname);

strcpy(MFD[a].UserDirec[i].fname,str.substr(0,4).c_str());

for(intj=0;

j<

S;

j++)//如果UFD中的文件名与UOF中的文件名相同

{//对UOF中的文件名UOF[i].fname进行处理

(MFD[a].OpenUser[j].fname);

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

temp<

注销成功"

//提示注销成功

系统当前用户数:

}

新建文件

voidCreate(inta){

inti=0;

charfilename[5];

charproperty[3];

//文件属性

chartemp[2];

//文件属性的临时变量

//临时变量

Re:

请输入创建文件名(长度为4)文件属性(r,rw):

//提示输入

文件名:

//输入要创建的文件名

cin>

>

filename;

if(strlen(filename)>

4)gotoRe;

//如果文件名长度不符合要求,则要求重新输入

loop:

文件属性(r,rw):

//输入文件属性,读或是读写

property;

strcpy(temp,property);

//将属性字符串赋值给temp

if(!

(strcmp(temp,"

rw"

)==0||strcmp(temp,"

r"

)==0))//检查属性是否正确

{cout<

文件属性设置错误.请重新设置:

rorrw"

//属性错误,重新输入

gotoloop;

//对文件名filename进行处理

(filename);

strcpy(filename,str.substr(0,4).c_str());

//对MFD[a].UserDirec[i].fname文件名进行处理

while((strcmp(MFD[a].UserDirec[i].fname,filename)!

=0)&

L))/*查用户的UFD,检测该文件是否重名*/

{i++;

}

=L){//无重名文件

if(MFD[a].count>

=L)//如果用户文件目录UFD已满,则提示文件满的信息

{cout<

用户"

MFD[a].Username

<

文件目录UFD已满."

//当用户文件目录UFD未满时

else{

intj=0;

intk=0;

while(strcmp(MFD[a].UserDirec[j].fname,"

(j<

L))/*在UFD中寻找空登记栏,并登记*/

{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中建立成功

文件:

filename<

已经成功建立\n文件数量:

MFD[a].count<

//显示建立成功

while(strcmp(MFD[a].OpenUser[k].fname,"

(k<

S))/*在UOF中寻找空登记栏*/

{k++;

//如果用户已打开文件表UOF未满

if(k<

S){//在UOF中登记文件的相关信息

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<

已经成功打开\n"

}//如果用户已打开文件表UOF已满,提示文件满的信息

else{//

用户已打开文件表UOF已满."

else//提示文件同名,不能建立

文件同名不能建立"

打开文件

写文件

读文件

删除文件

系统帮助命令

四实习心得体会

这次操作系统实习为期三周的学习时间,虽然时间比较短,但是还是有点收获的。

实习之前,是操作系统课程学习,学习的都是课本的理论知识。

在没有接触操作系统课程之前,个人的见识真是少啊。

我以为操作系统就是WindowsXP这么一种操作系统,还没想到操作系统竟然还有这么多的呢。

课堂上讲的操作系统就是Linux操作系统,可是课本的理论知识学习的比较模糊,很多概念都不理解。

经过这次操作系统实习之后,个人在虚拟机里不断的练习Linux系统各种命令。

由于个人这次实习,所选的题目是:

文件系统模拟设计,所以个人在这方面操作比较多,经常动手练习那些Linux系统常用的文件系统命令,逐渐熟悉理解了这个文件系统的各种命令。

不过,对于Linux系统还有很多知识是不懂的,如果将来打算从事Linux系统软件开发的哇,那么还是需要慢慢学习Linxu系统的。

通过这次实习,促使个人开始接触了解这个Linux系统,也对Linux系统有了一点兴趣。

五参考文献

现代操作系统(第2版)

作者:

(荷)AndrewS.Tanenbaum[作译者介绍]

译者:

陈向群马洪兵出版社:

机械工业出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1