os课程设计任务书 联系客服

发布时间 : 星期二 文章os课程设计任务书更新完毕开始阅读b33cc4f01711cc7931b716b6

目录

一、程序的功能 ................................................ 6 二、程序的基本设计思路 ........................................ 6 三、主要的数据结构 ............................................ 7 4.1创建文件流程图 ......................................... 9 4.3 FREAD函数流程图 ...................................... 11 五、程序调试及其运行结果 ..................... 错误!未定义书签。 六、设计总结与心得体会 ....................................... 15 七、附录(源程序清单) ......................... 错误!未定义书签。

一、程序的功能

该程序主要模拟实现单级目录的FAT文件系统,该系统要求能实现对文件的创建、

删除、读、写、打开、关闭以及能显示目录等操作,在创建文件时,系统首先为新文件分配所需的外存空间,并且在文件系统的相应目录中,建立一个目录项,该目录项记录了新文件的文件名及其在外存中的地址等属性。而当已经不再需要某个文件时,便可以把它从文件系统中删除。这时执行的是与创建新文件相反的操作。系统先从目录中找到要删除的文件项,使之成为空项,紧接着回收该文件的存储空间,用于下次分配。通过读指针,将位于外部存储介质上的数据读入到内存缓冲区这样就实现了文件的读取,通过写指针,将内存缓冲区中的数据写入到位于外部存储介质上的文件中。在开始使用文件时,首先必须打开文件。这可以将文件属性信息装入内存,以便以后快速查用。在完成文件使用后,应该关闭文件。这不但是为了释放内存空间,而且也因为许多系统常常限制可以同时打开的文件数。当创建文件时,先在目录表中查找是否存在此文件表,若存在则表示文件同名不能创建,否则在目录表中为此文件先建立一个目录项,保存文件的一些基本属性,如创建日期、大小、文件名等,并保存文件的首索引块扇区号,对文件读写也是先在目录项里查找文件是否存在,再根据文件的首索引块扇区号,查找对应块号中的内容对其进行读写操作,删除一个文件后回收为其分配的空间,并更新目录表、修改文件控制块。显示目录项可以显示文件名、长度以及创建日期。

二、程序的基本设计思路

模拟实现单极目录FAT的文件系统基本思路:用二进制文件空间模拟磁盘空间,

用文件块操作模拟磁盘块操作。在一个文件系统中对文件进行操作,实现文件的创建、读写等等操作。在创建文件时先在目录项中进行查找,若创建的文件已存在,文件的创建首先检验目录是否为空,为空则把文件夹或文件连接到该目录下,不为空则把检查目录下是否有同名文件夹或文件,有则提示创建不成功,而文件夹打开是则把文件夹名称及其地址压入打开文件夹栈,文件关闭则把文件夹名称及其地址从打开文件夹栈中抛出。文件夹和文件的删除,文件夹下没有打开的文件或文件没有打开才能删除,否则删除失败,每次操作成功都要更改目录和FCB信息。该过程都保存在文件中,是对文件的操作。本系统建于Windows平台,开发环境为WIN-TC。

三、主要的数据结构

单级目录单级索引文件系统: 常量

#define BlockSize 512 #define DirSize 32 保留扇区结构

struct ReserveBlock{

int sysblocknum; /*文件系统总扇区数*/ int resblocknum; /*保留扇区扇区数*/ int mapblocknum; /*字节映像图扇区数*/ int rootblocknum; /*根目录区扇区数*/

char fillchar[BlockSize-4*sizeof(int)]; /*填充字节*/ }; 目录结构

struct DirBlock{

char filename[11]; /*文件名限长11个字符*/

char fillchar[DirSize-4*sizeof(int)-sizeof(long int)-11]; /*填充字节*/ long filelen; /*文件长度*/ int year,month,day; /*定义年月日*/ int firstindexaddr; /*文件首索引块扇区号*/ }; 索引块结构

struct IndexBlock{

int dataaddr[BlockSize/sizeof(int)-1]; /*数据块块号数组*/ int nextindexaddr; /*本文件下一索引块块号*/ };

索引节点结构 struct IndexNode{

struct IndexBlock block; /*索引块数据*/ int blockaddr; /*本节点索引块块号*/

struct IndexNode *nextnode; /*指向下一索引节点的指针*/}; FCB(文件控制块)结构

struct FCBBlock{

int fileid; /*文件标识*/ struct DirBlock fileinfo; /*目录信息*/ long filepos; /*文件读写指针*/ int fdtblockaddr; /*目录项所在块号*/ int fdtblockindex; /*目录项所在块内序号*/

struct FCBBlock *next; /*指向下一个文件控制块的指针*/ struct IndexNode *firstindexnode; /*指向第一个索引节点的指针* /}