当前位置:文档之家› 模拟实现单级目录、单级索引的索引文件系统

模拟实现单级目录、单级索引的索引文件系统

课程设计报告课程名称操作系统课程设计课题名称模拟实现单级目录、单级索引的索引文件系统专业计算机科学与技术班级学号姓名指导教师周铁山2012年1 月6日湖南工程学院课程设计任务书课程名称操作系统课程设计课题模拟实现单级目录、单级索引的索引文件系统专业班级学生姓名学号指导教师周铁山审批任务书下达日期2013 年 1 月 2 日任务完成日期2013年 1 月 6 日计算机10级《操作系统课程设计》任务书一、课程设计的性质和目的操作系统课程设计是计算机专业的专业课程,通过课程设计使学生进一步巩固课堂所学知识,全面熟悉、掌握操作系统的基本设计方法和技巧,进一步提高分析问题、解决问题及上机操作能力,为将来从事计算机工作打下一定的专业基础。

二、设计课题课题一:模拟实现单级目录的FAT文件系统基本思路:用二进制文件空间模拟磁盘空间,用文件块操作模拟磁盘块操作。

基本设计要求:1、实现如下文件系统功能(过程或函数):a、挂载文件系统FILE *OPENSYS(char *filename);b、卸载文件系统int CLOSESYS(FILE *stream);c、显示目录void LISTDIR(void);d、建立文件int FCREA TE(char *filename);e、删除文件int FDELETE(char *filename);f、打开文件int FOPEN(char *filename);g、关闭文件int FCLOSE(int fileid);h、文件块读int FREAD(void *ptr, int n, int fileid);i、文件块写int FWRITE(void *ptr, int n, int fileid);j、判断文件结束int FEOF(int fileid);k、获取文件指针long FGETPOS(int fileid);l、设置文件指针int FSETPOS(int fileid, long offset);m、取得文件长度long FGETLEN(char *filename);2、提供文件系统创建程序3、有功能检测模块4、为简化程序设计,假定目录区域大小固定。

文件系统空间划分:可以使用的C语言文件操纵函数:FILE *fopen(const char *filename, const char *mode);int fclose(FILE *stream);int fseek(FILE *stream, long offset, int whence);long ftell(FILE *stream);size_t fread(void *ptr, size_t size, size_t n, FILE *stream);size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);课题二:模拟实现单级目录、单级索引的索引文件系统使用链接域将同一文件的各索引块按顺序连接起来;其余各项同课题一。

三、课程设计报告要求1、设计报告要求A4纸打印成册;2、使用学院统一的封面;3、课程设计报告每人一份,必须包含如下几个方面的内容:1)基本设计思想;2)主要数据结构;3)主要实施流程;4)所有源代码;5)课程设计总结与体会。

四、分组及选题办法1、按学号顺序一人一组,学号为奇数者为课题一,偶数者为课题二。

2、成绩考核按个人课题完成情况、设计报告质量及对课程设计的态度等综合评定。

五、设计进度安排1、讲课及上机调试时间安排:上课时间:2013.01.02~2013.01.04上机时间:2013.01.02~2013.01.042、其余时间:查阅资料,确定方案,设计课题相关程序。

3、个人答辩,交课程设计报告。

主要数据结构提示:1、单级目录FAT文件系统:1)常量#define BlockSize 512#define DirSize 322)保留扇区结构struct ReserveBlock{int sysblocknum; /*文件系统总扇区数*/int resblocknum; /*保留扇区扇区数*/int fatblocknum; /*FAT表扇区数*/int rootblocknum; /*根目录区扇区数*/char fillchar[BlockSize-4*sizeof(int)];/*填充字节*/};3)目录结构struct DirBlock{char filename[11]; /*文件名限长11个字符*/char fillchar[DirSize-4*sizeof(int)-sizeof(long int)-11]; /*填充字节*/long filelen; /*文件长度*/int year,month,day; /*日期*/int firstblockaddr; /*文件首块扇区号*/};4)FCB(文件控制块)结构struct FCBBlock{int fileid; /*文件标识*/struct DirBlock fileinfo; /*目录信息*/long filepos; /*文件读写指针*/int fdtblockaddr; /*目录项所在块号*/int fdtblockindex; /*目录项所在块内序号*/struct FCBBlock *next;/*指向下一个文件控制块的指针*/};2、单级目录单级索引文件系统:1)常量#define BlockSize 512#define DirSize 322)保留扇区结构struct ReserveBlock{int sysblocknum; /*文件系统总扇区数*/int resblocknum; /*保留扇区扇区数*/int mapblocknum; /*字节映像图扇区数*/int rootblocknum; /*根目录区扇区数*/char fillchar[BlockSize-4*sizeof(int)]; /*填充字节*/};3)目录结构struct DirBlock{char filename[11]; /*文件名限长11个字符*/char fillchar[DirSize-4*sizeof(int)-sizeof(long int)-11]; /*填充字节*/long filelen; /*文件长度*/int year,month,day; /*日期*/int firstindexaddr; /*文件首索引块扇区号*/};4)索引块结构struct IndexBlock{int dataaddr[BlockSize/sizeof(int)-1]; /*数据块块号数组*/int nextindexaddr; /*本文件下一索引块块号*/};5)索引节点结构struct IndexNode{struct IndexBlock block; /*索引块数据*/int blockaddr; /*本节点索引块块号*/struct IndexNode *nextnode; /*指向下一索引节点的指针*/ };6)FCB(文件控制块)结构struct FCBBlock{int fileid; /*文件标识*/struct DirBlock fileinfo; /*目录信息*/long filepos; /*文件读写指针*/int fdtblockaddr; /*目录项所在块号*/int fdtblockindex; /*目录项所在块内序号*/struct FCBBlock *next; *指向下一个文件控制块的指针*/struct IndexNode *firstindexnode; /*指向第一个索引节点的指针*/};目录一、程序的功能 (1)二、程序的基本设计思路 (1)三、主要的数据结构 (2)四、主要实施流程 (3)五、程序调试及其运行结果 (4)六、设计总结与心得体会 (6)七、附录(源程序清单) (6)一、程序的功能该程序主要模拟实现单级目录的FAT文件系统,该系统要求能实现对文件的创建、删除、读、写、打开、关闭以及能显示目录等操作,在创建文件时,系统首先为新文件分配所需的外存空间,并且在文件系统的相应目录中,建立一个目录项,该目录项记录了新文件的文件名及其在外存中的地址等属性。

而当已经不再需要某个文件时,便可以把它从文件系统中删除。

这时执行的是与创建新文件相反的操作。

系统先从目录中找到要删除的文件项,使之成为空项,紧接着回收该文件的存储空间,用于下次分配。

通过读指针,将位于外部存储介质上的数据读入到内存缓冲区这样就实现了文件的读取,通过写指针,将内存缓冲区中的数据写入到位于外部存储介质上的文件中。

在开始使用文件时,首先必须打开文件。

这可以将文件属性信息装入内存,以便以后快速查用。

在完成文件使用后,应该关闭文件。

这不但是为了释放内存空间,而且也因为许多系统常常限制可以同时打开的文件数。

当创建文件时,先在目录表中查找是否存在此文件表,若存在则表示文件同名不能创建,否则在目录表中为此文件先建立一个目录项,保存文件的一些基本属性,如创建日期、大小、文件名等,并保存文件的首索引块扇区号,对文件读写也是先在目录项里查找文件是否存在,再根据文件的首索引块扇区号,查找对应块号中的内容对其进行读写操作,删除一个文件后回收为其分配的空间,并更新目录表、修改文件控制块。

显示目录项可以显示文件名、长度以及创建日期。

二、程序的基本设计思路模拟实现单级目录、单级索引的索引文件系统基本思路:用二进制文件空间模拟磁盘空间,用文件块操作模拟磁盘块操作。

在一个文件系统中对文件进行操作,实现文件的创建、读写等等操作。

在创建文件时先在目录项中进行查找,若创建的文件已存在,文件的创建首先检验目录是否为空,为空则把文件夹或文件连接到该目录下,不为空则把检查目录下是否有同名文件夹或文件,有则提示创建不成功,而文件夹打开是则把文件夹名称及其地址压入打开文件夹栈,文件关闭则把文件夹名称及其地址从打开文件夹栈中抛出。

文件夹和文件的删除,文件夹下没有打开的文件或文件没有打开才能删除,否则删除失败,每次操作成功都要更改目录和FCB信息。

该过程都保存在文件中,是对文件的操作。

本系统建于Windows平台,开发环境为WIN-TC。

三、主要的数据结构1.常量#define BlockSize 512#define DirSize 322.保留扇区结构struct ReserveBlock{int sysblocknum; /*文件系统总扇区数*/int resblocknum; /*保留扇区扇区数*/int mapblocknum; /*字节映像图扇区数*/int rootblocknum; /*根目录区扇区数*/char fillchar[BlockSize-4*sizeof(int)]; /*填充字节*/};3.目录结构struct DirBlock{char filename[11]; /*文件名限长11个字符*/char fillchar[DirSize-4*sizeof(int)-sizeof(long int)-11]; /*填充字节*/long filelen; /*文件长度*/int year,month,day; /*定义年月日*/int firstindexaddr; /*文件首索引块扇区号*/};4.索引块结构struct IndexBlock{int dataaddr[BlockSize/sizeof(int)-1]; /*数据块块号数组*/int nextindexaddr; /*本文件下一索引块块号*/};5.索引节点结构struct IndexNode{struct IndexBlock block; /*索引块数据*/int blockaddr; /*本节点索引块块号*/struct IndexNode *nextnode; /*指向下一索引节点的指针*/};6.FCB(文件控制块)结构struct FCBBlock{int fileid; /*文件标识*/struct DirBlock fileinfo; /*目录信息*/long filepos; /*文件读写指针*/int fdtblockaddr; /*目录项所在块号*/int fdtblockindex; /*目录项所在块内序号*/struct FCBBlock *next; /*指向下一个文件控制块的指针*/struct IndexNode *firstindexnode; /*指向第一个索引节点的指针*/}四、主要实施流程用到的某些函数流程图图一、FCLOSE函数图二、FCREATE 函数图三、FDELETE函数图四、OPENSYS 函数五、程序调试及其运行结果下面是程序调试时的一些截图。

相关主题