模拟实现文件系统操作系统课程设计Word文档格式.docx
《模拟实现文件系统操作系统课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《模拟实现文件系统操作系统课程设计Word文档格式.docx(12页珍藏版)》请在冰点文库上搜索。
![模拟实现文件系统操作系统课程设计Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/fee51d44-066d-422c-af3a-39d8fcd8d9ad/fee51d44-066d-422c-af3a-39d8fcd8d9ad1.gif)
总结
1.3课程设计思想:
模拟实现文件系统问题是一个经典的关于文件的处理问题,包括:
实现文件的建立、打开、删除、关闭、复制、读、写、查询等功能。
设计思想如下:
1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。
2.文件物理结构可采用显式链接或其他方法。
3.磁盘空闲空间的管理可选择位示图或其他方法。
如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。
4.文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。
目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。
5.设计一个较实用的用户界面,方便用户使用。
要求提供以下相关文件操作:
(1)具有login(用户登录)
(2)系统初始化(建文件卷、提供登录模块)
(3)文件的创建:
create
(4)文件的打开:
open
(5)文件的读:
read
(6)文件的写:
write
(7)文件关闭:
close
(8)删除文件:
delete
(9)列出文件目录:
dir
(10)退出:
logout
1.4软硬件运行环境及开发工具:
a)程序设计语言:
C++
b)计算机及操作系统:
PC机,WindowsXP
c)开发平台:
MicrosoftVisualC++6.0
d)运行平台:
第二章概要设计
2.1流程图
模拟实现文件系统的主要流程图如下:
2.2用到的原理
1.本系统初始化了十个用户,每个用户初始化五个文件,最多可拥有十个文件,所以每个用户在此基础上可为自己再创建五个文件,也可以在删除文件后再创建。
2.系统使用create,open,read,write,close,delete,dir和exit来创建文件,打开文件,读文件,写文件,关闭文件,删除文件和显示文件。
3.程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。
另外,为打开文件设置了运行文件目录(AFD)。
4.为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作
第三章详细设计
本次课程设计采用的是c++语言编写,部分主要程序代码如下:
#include"
stdio.h"
#include<
stdlib.h>
conio.h>
string.h>
#definegetpch(type)(type*)malloc(sizeof(type))
#defineNULL0
#defineUserNumber10
#defineUserFNumber10
#defineUserOFNumber5
structfname{
charfname[1];
intflag;
}fnameA[26]={'
a'
0,'
b'
c'
d'
e'
f'
g'
h'
i'
j'
k'
l'
0,
'
m'
n'
o'
p'
q'
r'
s'
t'
u'
v'
w'
x'
y'
z'
0};
structafd{
charopname[10];
/*打开文件名*/
charopfprotect[3];
/*打开保护码*/
intrwpoint;
/*读写指针*/
}AFD[UserOFNumber];
/*用户打开的文件*/
typedefstruct{
charfname[10];
/*用户文件名*/
/*文件存在标志*/
intfprotect[3];
/*文件保护码r\w\t*/
intflength;
}ufd,UF[UserFNumber];
/*用户文件*/
structmdf{
charuname[10];
/*用户名*/
UFUdir;
/*用户文件目录*/
}UFD[UserNumber];
/*用户*/
voidintFSystem(){
inti,j,k,l;
strcpy(UFD[0].uname,"
a"
);
strcpy(UFD[1].uname,"
b"
strcpy(UFD[2].uname,"
c"
strcpy(UFD[3].uname,"
d"
strcpy(UFD[4].uname,"
e"
strcpy(UFD[5].uname,"
f"
strcpy(UFD[6].uname,"
g"
strcpy(UFD[7].uname,"
h"
strcpy(UFD[8].uname,"
i"
strcpy(UFD[9].uname,"
j"
for(i=0;
i<
10;
i++){
for(k=0;
k<
5;
k++){
doj=rand()%26;
while(fnameA[j].flag);
strcpy(UFD[i].Udir[k].fname,fnameA[j].fname);
fnameA[j].flag=1;
UFD[i].Udir[k].flength=rand()%2048+1;
UFD[i].Udir[k].flag=1;
UFD[i].Udir[k].fprotect[0]=rand()%2;
UFD[i].Udir[k].fprotect[1]=rand()%2;
UFD[i].Udir[k].fprotect[2]=rand()%2;
}
for(j=0;
j<
26;
j++)fnameA[j].flag=0;
for(l=0;
l<
l++){
strcpy(AFD[i].opname,"
"
AFD[l].flag=0;
AFD[l].opfprotect[0]=0;
AFD[l].opfprotect[1]=0;
AFD[l].opfprotect[2]=0;
AFD[l].rwpoint=0;
voidCreate(inti){intk;
k++){if(!
UFD[i].Udir[k].flag)break;
if(k>
=10){printf("
一个用户不能拥有超过10个文件\n\n"
return;
}
printf("
请输入你想创建的文件名:
scanf("
%s"
UFD[i].Udir[k].fname);
请输入文件长度:
%d"
&
UFD[i].Udir[k].flength);
只读?
(1yes,0no):
UFD[i].Udir[k].fprotect[0]);
可写?
UFD[i].Udir[k].fprotect[1]);
可执行?
UFD[i].Udir[k].fprotect[2]);
return;
voidDelete(inti){charfile[10];
intk;
请输入你想删除的文件名:
file);
k++){
if(UFD[i].Udir[k].flag&
&
!
strcmp(UFD[i].Udir[k].fname,file))
{
UFD[i].Udir[k].flag=0;
break;
elseprintf("
出错\n"
voidmain(){inti,n=0;
charm[10];
charlogin[10];
intFSystem();
printf("
欢迎使用\n"
1.本系统模拟文件管理2.系统已初始化10个用户,\n用户名分别是a~j,每个用户已分配五个文件\n"
**本系统的命令包括如下:
\n"
**创建文件(create)\n"
**删除文件(delete)\n"
**打开文件(open)\n"
**关闭文件(close)\n"
**读取文件(read)\n"
**编写文件(write)\n"
**显示文件目录(printufd)\n"
**显示打开文件目录(dir)\n"
**退出(exit)\n"
lgin:
请输入用户名(a~j):
login);
if(!
strcmp(login,"
exit"
))return;
i++){if(!
strcmp(UFD[i].uname,login))break;
if(i>
=10){printf("
该用户名不存在!
gotolgin;
printUFD(i);
for(;
n!
=1;
){
请输入命令:
scanf("
m);
if(strcmp(m,"
create"
)==0)Create(i);
elseif(strcmp(m,"
delete"
)==0)Delete(i);
open"
)==0)Open(i);
close"
)==0)Close;
read"
)==0)Read();
write"
)==0)Write();
elseif(strcmp(m,"
printufd"
)==0)printUFD(i);
dir"
)==0)printAFD();
)==0)n=1;
elseprintf("
}
Saving....\n"
getch();
}
第四章调试与操作说明
4.1用户登陆界面
4.2创建文件界面
4.3删除文件界面
4.4退出界面
第五章课程设计总结与体会
在设计过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题。
在对自己所编写的源程序段的纠错的过程中,使我更好的理解了操作系统中文件系统的理论知识,同时在编程时用到了模块化的设计思想,这种编程方法可以使我们的编程变的更简单,可以使我们的查错与纠错变的更方便。
总的来说通过这次的设计的学习使我学到了很多在平时的学习中学不到的很多东西,对操作系统有了更深一层的了解,同时也提高了编程语言的应用能力,由于时间紧,故还有很多的方面需要改进。
以后的学习还得更加努力。
课程设计的目的就是使自己对学过的知识的理解得到加深,同时巩固对知识的掌握,最终要把知识转化为实际的应用。
在本次课程设计的过程中,我充分的感受到了学习一种新的知识以及把这种新的知识消化为己之所有,特别是要转化为实际应用根本是两个不同层次的概念,这也启迪了我今后无论学习什么,都应该在知其然的基础上深入研究,要知其所以然,如果要更进一步就要积极的把知识转化为应用。
第六章致谢
在这次课程设计中,我得到了同学的热忱帮助。
首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。
在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。
同时也感谢学院为我提供良好的做毕业设计的环境。
最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学
第七章参考文献
[1]汤子瀛《计算机操作系统》(修订版)西安电子科技大学出版社2001
[2]张尧学史美林《计算机操作系统教程》实验指导清华大学出版社2000
[3]费翔林,骆斌.操作系统教程(第4版)[M].北京:
高等教育出版社,2009.