操作系统模拟UNIX文件系统的设计及实现.docx

上传人:b****4 文档编号:5653244 上传时间:2023-05-08 格式:DOCX 页数:46 大小:315.35KB
下载 相关 举报
操作系统模拟UNIX文件系统的设计及实现.docx_第1页
第1页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第2页
第2页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第3页
第3页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第4页
第4页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第5页
第5页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第6页
第6页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第7页
第7页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第8页
第8页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第9页
第9页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第10页
第10页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第11页
第11页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第12页
第12页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第13页
第13页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第14页
第14页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第15页
第15页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第16页
第16页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第17页
第17页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第18页
第18页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第19页
第19页 / 共46页
操作系统模拟UNIX文件系统的设计及实现.docx_第20页
第20页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

操作系统模拟UNIX文件系统的设计及实现.docx

《操作系统模拟UNIX文件系统的设计及实现.docx》由会员分享,可在线阅读,更多相关《操作系统模拟UNIX文件系统的设计及实现.docx(46页珍藏版)》请在冰点文库上搜索。

操作系统模拟UNIX文件系统的设计及实现.docx

操作系统模拟UNIX文件系统的设计及实现

 

模拟UNIX文件系统的设计及实现

 

院系:

计算机学院二系

班级:

计07–2班

姓名:

吴勇克

合作者:

刘胜光

指导教师:

鲁静轩

 

2009年6月10日

操作系统课程设计任务书

一、题目:

银行家算法

二、设计要求

(1)吴勇克(组长)、刘胜光组成设计小组。

(2)小组成员分工协作完成。

要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。

(3)查阅相关资料,自学具体课题中涉及到的新知识。

(4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。

(5)所设计的系统应有菜单、动画和音乐。

(6)按要求写出课程设计报告,并于设计结束后1周内提交。

其主要内容包括:

封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件总体设计、详细设计、软件的调试、总结、谢启、附录:

带中文注释的程序清单、参考文献。

报告一律用A4纸打印,中文字体为宋体,西文字体用TimeNewRoma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。

总体设计应配合软件总体模块结构图来说明软件应具有的功能。

详细设计应用传统或N-S流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。

三、课程设计工作量

由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。

四、课程设计工作计划

2009年6月15日,指导教师讲课,学生根据题目准备资料;

2009年6月16日,设计小组进行总体方案设计和任务分工;

2009年16月16日~2009年6月23日,每人完成自己承担的程序模块并通过独立编译;

2009年6月23日~2009年6月29日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;

2009年6月30日,验收、撰写报告;

2009年7月2日,验收或总结。

指导教师签章

教研室主任签章

操作系统课程设计指导教师评语与成绩

指导教师评语:

 

课程设计表现成绩:

课程设计验收成绩:

课程设计报告成绩:

课程设计总成绩:

指导教师签章

2009年7月日

1.概述………………………………………………………1

2.总体设计……………………………………………..…2

3.详细设计…………………………………………………3

4.代码调试…………………………………………………9

5.总结………………………………………………………11

6.附录………………………………………………………12

7.参考文献………………………………………………………….30

一.概述

【课设原理】

UNIX采用树型目录结构,每个目录表称为一个目录文件。

一个目录文件是由目录项组成的。

每个目录项包含16B,一个辅存磁盘块(512B)包含32个目录项。

在目录项中,第1、2字节为相应文件的外存i节点号,是该文件的内部标识;后14B为文件名,是该文件的外部标识。

所以,文件目录项记录了文件内、外部标识的对照关系。

根据文件名可以找到辅存i节点号,由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。

UNIX的存储介质以512B为单位划分为块,从0开始直到最大容量并顺序加以编号就成了一个文件卷,也叫文件系统。

UNIX中的文件系统磁盘存储区分配图如下:

0#

1#

2#

K#

K+1#

K+2#

K+3#

n#

本次课程设计是要实现一个简单的模拟UNIX文件系统。

我们在磁盘中申请一个二进制文件模拟UNIX内存,依次初始化建立位示图区,I节点区,数据块区。

并给已打开的文件建立文件打开表。

【课设内容】

1.设计任务

多用户、多级目录结构文件系统的设计与实现。

可以实现下列几条命令

login

用户登录

logout

退出当前用户

dir

列文件目录

creat

创建文件

delet

删除文件及目录树

open

打开文件

close

关闭文件

read

读文件

write

写文件

mkdir

创建目录

cd

改变文件目录

format

格式化文件系统

quit

退出文件系统

2.文件系统应具有的基本功能 

 

(1)多用户 :

usr1,usr2,usr3,……,usr8  (1-8个用户) 

 

(2)多级目录:

可有多级子目录; 

 (3)具有login (用户登录) 

 (4)系统初始化(建文件卷、提供登录模块) 

 (5)文件的创建:

 create 

 (6)文件的打开:

open 

 (7)文件的读:

read 

 (8)文件的写:

write 

 (9)文件关闭:

close 

 (10)删除文件或目录:

delet  

 (11)创建目录(建立子目录):

mkdir 

 (12)改变当前目录:

cd 

 (13)列出文件目录:

dir 

 (14)退出:

logout 

二.总体设计

【算法思想】

先建立512个块,每个块对应512个字节,在建立一个有512个元素的字符数组,每个元素对应相应的块号,不管是文件或是目录都有I节点,建立自己设定数目元素的I节点表,并依次把位图区,I节点表,数据块区每个元素映射到一个二进制文件上。

在每一次的操作中如果相应元素有变动,则对应在文件中更新输出相应数据,以便下一次启动程序的时候可以快速导入上一次的数据。

【系统总体框架图】

【系统总体流程图】

三.详细设计

【各模块功能说明】

1.format模块

功能:

格式化文件系统,即初始化文件系统,相当于硬盘的格式化。

将其中原有的用户及用户下的文件系统全部还原初始状态,即没有任何用户和目录、文件,也就是按设计的文件系统格式重建新的文件系统。

2.get_blknum和release_blk模块

功能:

get_blknum找到一个空闲数据块,并修改对应位图号元素为1。

release_blk修改对应的位图元素,并把文件系统中对应的数据块清零。

 

3.init()模块

功能:

读入文件系统

4.quit()模块

功能:

退出系统

5.creat()模块

功能:

创建文件,分配一空目录项,分配磁盘块。

可用位示图。

填写该空目录项。

如文件长度(0),文件名,类型等。

6.open()模块

功能:

打开文件,并判断文件类型和打开方式。

如果文件没有在文件打开表中就在文件打开表中建立该文件项。

7.close()模块

功能:

关闭文件,删除该文件的用户打开文件表目。

8.write()模块

功能:

写文件,需要先打开文件。

并判断文件权限。

写完后修改文件系统中的对应数据区。

9.read()模块

功能:

读文件。

需先打开文件。

读入相应数据块的内容到缓冲区,然后输出。

10.delet()模块

功能:

如果参数是文件则删除文件,如果是目录则删除该目录下的所有文件和目录。

11.mkdir()

功能:

建立新的目录,先在I节点表中找到一个未使用的,并初始化该I节点,并在文件系统中对应更新输出。

12.cd()

功能:

将当前目录切换到当前目录的一个子目录下或当前目录的父目录。

程序流程图

各功能模块流程图

 

 

 

 

 

四.代码调试

1.初始化和登陆文件系统

第一次运行程序

 

2.建立新目录,显示当前目录下的文件和目录,并转到新目录下

3.建立新的文件,打开,写,读。

4.clear清屏后,dir查看当前目录下文件信息

5.返回根目录下,并删除根目录下所有子目录和文件

6.logout退出登录或quit退出程序。

 

五.总结

开始第一天构思,不断的筛选证明模拟UNIX下的内存方法,并在网络上查找相应的UNIX环境资料。

接下来几天开始实践动手,从整体框架开始构思,到各个细节端口的实现。

操作系统是计算机科学与技术专业中的一门重要基础课,目的是让我们了解操作系统的基本概念,理解计算机系统的资源如何组织,操作系统如何有效地管理这些系统资源,用户如何通过操作系统与计算机系统打交道。

通过课程设计,可以进一步理解在计算机系统上运行的其它各类操作系统,并懂得在操作系统的支持下建立自己的应用系统。

操作系统课程设计,对于训练我们掌握程序设计、熟悉上机操作和程序调试技术都有重要作用。

重点培养我们的思维能力、创新能力和排错能力。

通过课程设计,进一步融会贯通教材内容,掌握程序各功能模块的工作原理,相互联系和来龙去脉,完整地建立系统的概念。

激发我的学习热情和主动性,培养我的独立工作能力,在实践活动中,将所学知识综合运用,增长才干,并积累经验。

对编程语言又有了更深一层次的认识,并对编程能力有所加强,但还是很多的不足有待改进,对于编程来说还需要大量的实践,才能在发现问题和解决问题中前进与提高。

六.附录

源代码:

//head.h文件

#include

#include

#include

#include

#include

usingnamespacestd;

#defineBLKSIZE512//数据块的大小

#defineBLKNUM512//数据块的块数

#defineINODESIZE32//i节点的大小

#defineINODENUM32//i节点的数目

#defineFILENUM8//打开文件表的数目

//用户

typedefstruct

{

charuser_name[10];//用户名

charpassword[10];//密码

}User;

//i节点

typedefstruct

{

shortinum;//文件i节点号

charfile_name[10];//文件名

chartype;//文件类型

charuser_name[10];//文件所有者

shortiparent;//父目录的i节点号

shortlength;//文件长度

shortaddress[2];//存放文件的地址

}Inode;

//打开文件表

typedefstruct

{

shortinum;//i节点号

charfile_name[10];//文件名

shortmode;//读写模式(1:

read,2:

write,

//3:

readandwrite)

}File_table;

//申明函数

voidlogin(void);

voidinit(void);

intanalyse(char*);

voidsave_inode(int);

intget_blknum(void);

voidread_blk(int);

voidwrite_blk(int);

voidrelease_blk(int);

voidpathset();

voiddel(int);

//用户命令处理函数

voidhelp(void);

voidcd(void);

voiddir(void);

voidmkdir(void);

voidcreat(void);

voidopen(void);

voidread(void);

voidwrite(void);

voidclose(void);

voiddelet(void);

voidlogout(void);

voidcommand(void);

voidquit();

//main.cpp文件

#include"head.h"

//定义全局变量

charchoice;

intargc;//用户命令的参数个数

char*argv[5];//用户命令的参数

intinum_cur;//当前目录

chartemp[2*BLKSIZE];//缓冲区

Useruser;//当前的用户

charbitmap[BLKNUM];//位图数组

Inodeinode_array[INODENUM];//i节点数组

File_tablefile_array[FILENUM];//打开文件表数组

charimage_name[10]="data.dat";//文件系统名称

FILE*fp;//打开文件指针

//创建映像hd,并将所有用户和文件清除

voidformat(void)

{

inti;

Inodeinode;

printf("Willbetoformatfilesystem...\n");

printf("WARNING:

ALLDATAONTHISFILESYSTEMWILLBELOST!

\n");

printf("ProceedwithFormat(Y/N)?

");

scanf("%c",&choice);

getchar();

if((choice=='y')||(choice=='Y'))

{

if((fp=fopen(image_name,"w+b"))==NULL)

{

printf("Can'tcreatefile%s\n",image_name);

exit(-1);

}

for(i=0;i

fputc('0',fp);

inode.inum=0;

strcpy(inode.file_name,"/");

inode.type='d';

strcpy(inode.user_name,"/");

inode.iparent=0;

inode.length=0;

inode.address[0]=-1;

inode.address[1]=-1;

fwrite(&inode,sizeof(Inode),1,fp);

inode.inum=-1;

for(i=0;i<31;i++)

fwrite(&inode,sizeof(Inode),1,fp);

for(i=0;i

fputc('\0',fp);

fclose(fp);

//打开文件user.txt

if((fp=fopen("user.txt","w+"))==NULL)

{

printf("Can'tcreatefile%s\n","user.txt");

exit(-1);

}

fclose(fp);

printf("Filesystemcreatedsuccessful.Pleasefirstlogin!

\n");

}

return;

}

//功能:

用户登陆,如果是新用户则创建用户

voidlogin(void)

{

char*p;

intflag;

charuser_name[10];

charpassword[10];

charfile_name[10]="user.txt";

do

{

printf("login:

");

gets(user_name);

printf("password:

");

p=password;

while(*p=getch())

{

if(*p==0x0d)

{

*p='\0';//将输入的回车键转换成空格

break;

}

printf("*");//将输入的密码以"*"号显示

p++;

}

flag=0;

if((fp=fopen(file_name,"r+"))==NULL)

{

printf("\nCan'topenfile%s.\n",file_name);

printf("Thisfilesystemnotexist,itwillbecreate!

\n");

format();

login();

}

while(!

feof(fp))

{

fread(&user,sizeof(User),1,fp);

//已经存在的用户,且密码正确

if(!

strcmp(user.user_name,user_name)&&

!

strcmp(user.password,password))

{

fclose(fp);

printf("\n");

return;

}

//已经存在的用户,但密码错误

elseif(!

strcmp(user.user_name,user_name))

{

printf("\nThisuserisexist,butpasswordisincorrect.\n");

flag=1;

fclose(fp);

break;

}

}

if(flag==0)break;

}while(flag);

//创建新用户

if(flag==0)

{

printf("\nDoyouwanttocreatanewuser?

(y/n):

");

scanf("%c",&choice);

gets(temp);

if((choice=='y')||(choice=='Y'))

{

strcpy(user.user_name,user_name);

strcpy(user.password,password);

fwrite(&user,sizeof(User),1,fp);

fclose(fp);

return;

}

if((choice=='n')||(choice=='N'))

login();

}

}

//功能:

将所有i节点读入内存

voidinit(void)

{

inti;

if((fp=fopen(image_name,"r+b"))==NULL)

{

printf("Can'topenfile%s.\n",image_name);

exit(-1);

}

//读入位图

for(i=0;i

bitmap[i]=fgetc(fp);

//显示位图

//读入i节点信息

for(i=0;i

fread(&inode_array[i],sizeof(Inode),1,fp);

//显示i节点

//当前目录为根目录

inum_cur=0;

//初始化打开文件表

for(i=0;i

file_array[i].inum=-1;

}

//功能:

分析用户命令,将分析结果填充argc和argv

//结果:

0-13为系统命令,14为命令错误

intanalyse(char*str)

{

inti;

chartemp[20];

char*ptr_char;

char*syscmd[]={"help","cd","dir","mkdir","create","open","read","write",

"close","delet","logout","clear","format","quit"};

argc=0;

for(i=0,ptr_char=str;*ptr_char!

='\0';ptr_char++)

{

if(*ptr_char!

='')

{

while(*ptr_char!

=''&&(*ptr_char!

='\0'))

temp[i++]=*ptr_char++;

argv[argc]=(char*)malloc(i+1);

strncpy(argv[argc],temp,i);

argv[argc][i]='\0';

argc++;

i=0;

if(*ptr_char=='\0')break;

}

}

if(argc!

=0)

{

for(i=0;(i<14)&&strcmp(argv[0],syscmd[i]);i++);

returni;

}

else

return14;

}

//功能:

将num号i节点保存到hd.dat

voidsave_inode(intnum)

{

if((fp=fopen(image_name,"r+b"))==NULL)

{

printf("Can'topenfile%s\n",image_name);

exit(-1);

}

fseek(fp,BLKNUM+num*sizeof(Inode),SEEK_SET);

fwrite(&inode_array[num],sizeof(Inode),1,fp);

fclose(fp);

}

//功能:

申请一个数据块

intget_blknum(void)

{

inti;

for(i=0;i

if(bitmap[i]=='0')break;

//未找到空闲数据块

if(i==BLKNUM)

{

printf("Dataareaisfull.\n");

exit(-1);

}

bitmap[i]='1';

if((fp=fopen(image_name,"r+b"))==NULL)

{

printf("Can'topenfile%s\n",image_name);

exit(-1);

}

fseek(fp,i,SEEK_SET);

fputc('1',fp);

fclose(fp);

returni;

}

//功能:

将i节点号为num的文件读入temp

voidread_blk(intnum)

{

inti,len;

charch;

intadd0,add1;

len=inode_array[num].length;

add0=i

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2