简单文件系统的实现的实验报告 .pdf





《简单文件系统的实现的实验报告 .pdf》由会员分享,可在线阅读,更多相关《简单文件系统的实现的实验报告 .pdf(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、杭州电子科技大学操作系统课程设计课程设计题目:简单文件系统的实现姓名:庄严班级:09056011 学号:09056012 学院:计算机学院专业:计算机科学与技术(2+2)负责老师:胡志凌完成日期: 2012-5-28 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 37 页 - - - - - - - - - 简单文件系统的实现一, 课程设计的目的1,通过具体的文件爱你存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部数据结、功能及实现过程的理解
2、二,设计要求1,在内存中开辟一个虚拟磁盘空间作为文件存储分区,在其上实现一个简单的基于多级目录的但用户单任务系统的文件系统。在退出文件系统的使用时,应将虚拟文件系统一个Windows文件的方式保存到磁盘中,以便下次再将它恢复到内存的虚拟磁盘空间中2,文件存储空间的分配可采用显示链接分配或其它方法3,空闲磁盘空间的管理可选择位示图或其它方法4,文件目录结构采用多级目录结构5,需要提供一以下操作命令i.Format ii.Mkdiriii.Rmdiriv.Ls v.Cd vi.Create vii.Open viii.Closeix.Write x.Read xi.Rm xii.Exit 三,程序
3、设计思想以及总流程图1,程序设计思想i.首先,在文件系统启动时,申请一块较大的内存,用来当作文件系统的磁盘空间ii.然后,对其进行格式化,虚拟磁盘的空间布局是仿照FA T16文件系统,结构如下:1 块2 块2 块995 块引导块 FA T1 FA T2 数据区格式化时,主要包括引导块, FA T1,FA T2,的一些初始化工作例如设置文件魔数,文件系统的信息,FA T1,FA T2 的信息等等iii.根据用户输入的命令,调用对应的函数. 2,程序流程图文件系统存在程序启动加载文件系统名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - -
4、 名师精心整理 - - - - - - - 第 2 页,共 37 页 - - - - - - - - - 文件系统不存在等待用户输入命令。 。 。四,系统各个功能的实现思想1,创建目录a)调用 do_read读入当前目录文件到内存,检查新建文件目录是否重名b)分配一个空闲的打开文件表项c)分配一个空闲的盘块d)在当前目录中问新建目录寻找一个空闲的目录项e)设置 FCB ,文件的属性信息f)创建特殊的两个目录项 .,.g)返回2,Cd 命令a)Open 指定的目录名,调用 read读入该父目录到内存b)检查新的当前目录名是否存在c)关闭原当前目录d)设置当前目录为该目录3,Rmdir 命令a)R
5、ead读入当前目录文件内容到内存,检查要删除的文件目录是否存在b)检查该目录是否为空c)检查是否已经打开,打开用close则关闭d)回收给目录文件的磁盘块e)修改该目录文件的目录项f)修改用户打开表项的长度信息g)返回4,Ls命令a)Read当前目录到内存b)读出目录文件的信息,显示到屏幕上c)返回5,Create命令a)分配一个空闲的打开文件表项b)检查新文件的父目录是否打开c)Read该父目录的文件到内存,并检测新建的文件名是否重名创建新的文件系统并格式化ls Mkdir Create Exit 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
6、- - - - - 名师精心整理 - - - - - - - 第 3 页,共 37 页 - - - - - - - - - d)检查是否有空闲盘块e)寻找空闲的目录项f)准备好新文件的 FCB g)调用 close关闭打开的父目录文件h)返回6,Rm命令a)检查要删除的文件的父目录是否已打开b)Read父目录到内存c)检查文件是否打开d)回收磁盘快e)清空该文件的目录项f)修改用户打开文件表项中的长度信息g)返回7,Open命令a)检查该文件名是否存在b)Read该父目录到内存c)检查用户打开的文件表中是否有空闲表项d)为该文件填写空白用户打开文件表项内容e)返回8,Closea)检查 fd
7、的有效性b)检查用户打开文件表表项的fcbstate字段c)回收该文件占据的用户打开文件表表项d)返回9,Write 命令a)检查 fd 的有效性b)提示用户输入写方式c)提示用户输入内容d)调用 do_write()将键入的内容写入到文件中e)返回写入的字节数五, 系统的详细过程#include #include #include #include #include #define BLOCKSIZE 1024 #define SIZE 1024000 #define END 65535 #define FREE 0 #define ROOT_BLOCKNUM 2 #define MAX_O
8、PEN_FILE 10 #define MAX_TXT_SIZE 10000 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 37 页 - - - - - - - - - typedef struct FCB char filename8; /*8B 文件名 */ char exname3; /*3B 扩展名 */ unsigned char attr ibute; /*文件属性字段 */ char retainbyte10 ; /*10B 保留字 */ unsigned
9、 short time; /*文件创建时间 */ unsigned short date; /*文件创建日期 */ unsigned short first; /*首块号 */ unsigned long length; /*文件大小 */ fcb; /* 文件分配表file allocation table */ typedef struct FAT unsigned short id; fat; /* 属性对照表位7 6 5 4 3 2 1 0 属性保留保留存档子目录卷标系统文件隐藏只读*/ typedef struct USEROPEN char filename8; /*8B 文件名
10、*/ char exname3; /*3B 扩展名 */ unsigned char attr ibute; /*文件属性字段 */ char retainbyte10 ; /*10B 保留字 */ unsigned short time; /*文件创建时间 */ unsigned short date; /*文件创建日期 */ unsigned short first; /*首块号 */ unsigned long length; /*文件大小 */ char free; /* 表示目录项是否为空0 空 1 分配 */ int father; /*父目录的文件描述符*/ int dirno;
11、 /*相应打开文件的目录项在父目录文件中的盘块号*/ int diroff; /*相应打开文件的目录项在父目录文件的dirno 盘块中的目录项序号*/ char dirMAX_OPEN_FILE80;/*相应打开文件所在的目录*/ int count; /*读写指针在文件中的位置*/ char fcbstate; /*是否修改了文件的FCB 内容,修改置 1,否则为 0*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 37 页 - - - - - - - - - ch
12、ar topenfile; /*表示该用户打开的表项是否为空,若值为0,表示为空 */ useropen; typedef struct BLOCK0 unsigned short fbnum; char information200; unsigned short root; unsigned char *startblock; block0; /*全局变量定义 */ unsigned char *myvhard; /*指向虚拟磁盘的起始地址*/ useropen openfilelistMAX_OPEN_FILE; /*用户打开文件表数组*/ useropen *ptrcurdir; /*
13、指向用户打开文件表中的当前目录所在打开文件表项的位置*/ int curfd; char currentdir80; /*记录当前目录的文件名*/ unsigned char *startp; /*记录虚拟磁盘上数据区开始位置*/ char filename=c:myfilesys; /*虚拟空间保存路径 */ unsigned char bufferSIZE; /*函数声明 */ void startsys(); void my_for mat(); void my_cd(char *dirname); void my_mkdir(char *dirname); void my_rmdir(
14、char *dirname); void my_ls(); void my_create(char *filename); void my_rm(char *filename); int my_open(char *filename); int my_close(int fd); int my_wr ite( int fd); int do_write( int fd,char *text,int len,char wstyle); unsigned short findFree(); int my_read( int fd,int len); int do_read( int fd,int
15、len,char *text); void my_exitsys(); /*函数设计 */ /*文件系统初始化 */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 37 页 - - - - - - - - - /* 原型声明 : void startsys() 功能描述:文件系统初始化 ,初始化所建立的文件系统输入:无输出:无函数功能实现算法描述:1)申请磁盘空间2)打开系统磁盘,若不存在,创建新的系统磁盘,并格式化3)初始化用户打开文件表,将表项0 分配给根目录文件使
16、用并填写根目录文件的相关信息4)将 ptrcurdir 指向该用户打开文件表项5)将当前目录设置为根目录*/ void startsys() FILE *fp; int i; myvhard=(unsigned char *)malloc(SIZE); memset( myvhard,0,SIZE); fp=fopen(filename,r); if(fp) fread(buffer,SIZE,1,fp); fclose(fp); if(buffer0!=0 xaa|buffer1!=0 xaa) printf(myfilesys is not exist,begin to creat the
17、 file.n); my_for mat(); else for(i=0;itime; openfilelist0.date=(fcb *)(myvhard+5*BLOCKSIZE)-date; openfilelist0.first=(fcb *)(myvhard+5*BLOCKSIZE)-first; openfilelist0.length=(fcb *)(myvhard+5*BLOCKSIZE)-length; openfilelist0.free=1; openfilelist0.dirno=5; openfilelist0.diroff=0; openfilelist0.count
18、=0; openfilelist0.fcbstate=0; openfilelist0.topenfile=0; openfilelist0.father=0; memset(currentdir,0,sizeof(currentdir); strcpy(currentdir,root); strcpy(openfilelist-dir0,currentdir); startp=(block0 *)myvhard)-startblock; ptrcurdir=&openfilelist0; curfd=0; /* 原型声明 : void my_for mat() 功能描述:对虚拟磁盘进行格式化
19、,布局虚拟磁盘,建立根目录文件输入:无输出:无函数功能实现算法描述:虚拟磁盘空间布局1 块2 块2 块995 块引导块FAT1 FAT2 数据区虚拟磁盘一共划分成1000 个磁盘块每块 1024 个字节,磁盘空间布局如上将数据区的第一块(即虚拟磁盘的第6 块)分配给根目录文件*/ void my_for mat() FILE *fp; fat *fat1,*fat2; block0 *b0; time_t *now; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 37
20、页 - - - - - - - - - struct tm *nowtime; unsigned char *p; fcb *root; int i; p=myvhard; b0=(block0 *)p; fat1=(fat *)(p+BLOCKSIZE); fat2=(fat*)(p+3*BLOCKSIZE); /* 引导块*/ b0-fbnum=0 xaaaa; /*文件系统魔数10101010*/ b0-root = 5; strcpy(b0-information,My FileSystem Ver 1.0 n Blocksize=1KB Whole size=1000KB Block
21、num=1000 RootBlocknum=2n); /* FAT1,FAT2 前面五个磁盘块已分配,标记为END */ fat1-id=END; fat2-id=END; fat1+;fat2+; fat1-id=END; fat2-id=END; fat1+;fat2+; fat1-id=END; fat2-id=END; fat1+;fat2+; fat1-id=END; fat2-id=END; fat1+;fat2+; fat1-id=END; fat2-id=END; fat1+;fat2+; fat1-id=6; fat2-id=6; fat1+;fat2+; fat1-id=E
22、ND; fat2-id=END; fat1+;fat2+; /* 将数据区的标记为空闲状态*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 37 页 - - - - - - - - - for(i=7;ifilename,.); strcpy(root-exname,di); root-attr ibute=40; now=(time_t *)malloc(sizeof(time_t); time(now); nowtime=localtime(now); root-
23、time=nowtime-tm_hour*2048+nowtime-tm_min*32+nowtime-tm_sec/2; root-date=(nowtime-tm_year-80)*512+(nowtime-tm_mon+1)*32+nowtime-tm_mday; root-first=5; root-length=2*sizeof(fcb); root+; strcpy(root-filename,.); strcpy(root-exname,di); root-attr ibute=40; time(now); nowtime=localtime(now); root-time=no
24、wtime-tm_hour*2048+nowtime-tm_min*32+nowtime-tm_sec/2; root-date=(nowtime-tm_year-80)*512+(nowtime-tm_mon+1)*32+nowtime-tm_mday; root-first=5; root-length=2*sizeof(fcb); root+; for(i=2;ifilename0=0; fp=fopen(filename,w); b0-startblock=p+BLOCKSIZE*4; fwrite(myvhard,SIZE,1,fp); 名师资料总结 - - -精品资料欢迎下载 -
25、- - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 37 页 - - - - - - - - - free(now); fclose(fp); /*/ /* 原型声明 : void my_exitsys() 功能描述:退出文件系统输入:无输出:无函数功能实现算法描述:*/ void my_exitsys() FILE *fp; fcb *rootfcb; char textMAX_TXT_SIZE; while(curfd) curfd=my_close(curfd); if(openfilelistcurfd.fcb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单文件系统的实现的实验报告 2022 简单 文件系统 实现 实验 报告

限制150内