logo资料库

操作系统课程设计报告-建立基于磁盘存储设备的FAT文件系统.docx

第1页 / 共29页
第2页 / 共29页
第3页 / 共29页
第4页 / 共29页
第5页 / 共29页
第6页 / 共29页
第7页 / 共29页
第8页 / 共29页
资料共29页,剩余部分请下载后查看
建立基于磁盘存储设备的FAT文件系统
一、课程设计目的
二、课程设计的任务
三、相关原理及算法描述
3.1文件系统设计原理
3.2文件系统中文件基本操作:
3.2文件系统中目录基本操作:
3.3文件系统的存储利用的是显示链接存储方式
四、开发环境
五、程序流程图
5.1系统功能图
5.2文件的基本操作流程图(新建、删除、重命名)
六、程序实现---数据结构
课 程 设 计 设计题目: 建立基于磁盘存储设备的 FAT 文件系统 学生姓名: 利 强 学 号: 2012217376 专业班级: 物联网 2 班 指导教师: 田卫东 2015 年 1 月 16 日
建立基于磁盘存储设备的 FAT 文件系统 一、课程设计目的 文件操作不是独立的,它和文件系统的其他部分密切相关,若要实现文件操作就离不开 文件的目录结构、文件的组织结构和磁盘空间的管理。 在现代计算机系统中,用到大量的程序和数据,由于内存容量有限,且不能长期保存, 故而平时总是把他们以文件的形式存放在外存中,需要时可随时将他们调入到内存。如果用 户直接管理外存上的文件,不仅要求用户熟悉外存的特性,了解各种文件的属性,以及他们 在外存上的位置,而且在多用户的环境下,还必须能保持数据的安全性和一致性。显然,这 是用户多不能胜任、也不愿意承担的工作。取而代之的是操作系统中又增加了文件管理功能, 即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取、共享和保护等手段提 供给用户。这不仅方便了用户,保证了文件的安全性,还可以有效的提高系统资源的利用率。 课程设计不仅要求我们紧扣课本知识,熟练的掌握课 FAT 文件系统实现原理上,而且要 求最终的软件实现有很好的人机交互界面,从多方面考查我们的学习、实践能力。让我们在 实践中去认识 FAT 文件系统的实现原理,加深对文件系统存储、数据的安全性和一致性理解, 在实践中去完善自己的理论知识,纠正理论学习过程中出现的错误。因此,虽然是文件操作 的模拟实现,但还是必须模拟一部分文件的组织结构、目录结构和磁盘空间管理的实现。 二、课程设计的任务 1、首先分配一定容量的磁盘存储空间,作为文件存储空间。 2、建立相应的文件系统,使用 FAT 文件系统。 3、为该文件系统设计相应的数据结构来管理目录、磁盘空闲空间、已分配空间等。 4、提供文件的创建、删除、移位、改名等功能。 5、提供良好的界面,可以显示磁盘文件系统的状态和空间的使用情况。 6、提供虚拟磁盘转储功能,可将信息存入磁盘,还可从磁盘读入内存。
三、相关原理及算法描述 3.1 文件系统设计原理 本次设计的基于磁盘存储设备的 FAT 文件系统利用的是多级目录管理方式,分别由一级 二级文件目录 UFD( User File Directory )、根目录目录 MFD( Master File Diretory )构成。其中 UFD 由用户的所有文件块组成,在 MFD 中每个用户目录文件占用一个目录项,其中目录项 中包括用户名和指向用户目录文件的指针,其基本构成如图所示: 用户文件(一级二级)目录项的基本信息包括基本信息、地址信息、访问控制信息、使用信 息。 1. 基本信息  文件名:通常在不同系统中允许不同的最大长度。可以修改。有些系统允许 同一个文件有多个别名;  别名的数目;  文件类型:可有多种不同的划分方法,如:  有无结构(记录文件,流式文件)  内容(二进制,文本)  用途(源代码,目标代码,可执行文件,数据)  属性 attribute(如系统,隐含等)  文件组织(如顺序,索引等) 2. 地址信息  存放位置:包括哪个设备或文件卷 volume,以及各个存储块位置;
 文件长度:以字节、字或存储块为单位。可以通过写入或创建、打开、关闭 等操作而变化。 3. 访问控制信息  文件所有者(属主):通常是创建文件的用户,或者改变已有文件的属主;  访问权限(控制各用户可使用的访问方式):如读、写、执行、删除等; 4. 使用信息  当前目录所或文件的起始盘快号  当前文件/目录的长度 在两级目录结构中,如果用户希望有自己的用户文件目录,可以请求系统为自己建立一 个用户文件目录;有了自己的 UFD 后,用户可以根据自己的需要创建新文件。每当此时, OS 只需要检查该用户的 UFD,判定在该 UFD 中是否已有同名的另一个文件。若有,用户必 须为新文件重命名;若无,便在 UFD 中建立新目录项,将新文件名及其有关的属性填入到 目录项中,并置其状态位为 1,。当用户要删除一个文件时,OS 也只需要查找该用户的 UFD, 从中找到指定文件的目录项,在回收该文件所占用的存储空间后,将该目录项删除。 3.2 文件系统中文件基本操作: 创建文件:创建一个新文件时,系统首先要为新文件分配必要的外存空间,并在文件系 统的目录下,为止建立一个目录项。目录项中应记录新文件的文件名以及其在外存的地址等 属性。 删除文件:当已不再需要某文件时,可将它从文件系统中删除。在删除时,系统应该先 从目录中找到删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。 3.2 文件系统中目录基本操作: 创建目录:为了实现用户对文件的按名存取,系统首先利用用户提供的文件名,对文件 目录进行查询,找出当前打开的文件目录表里是否有重名的目录,以及目录名是否合格,一 旦合格,则依照目录的路径将目录的信息存进/*目录结构*/content; 中,依次完成信息的存 储; 打开目录:依据用户的输入的路径名,一次进行解析,将找到目录路径,返回该目录所 在块号 dn 和盘块内项数 bn*,显示目录内容,其中包括名称 扩展名 起始盘块 长度信息。
3.3 文件系统的存储利用的是显示链接存储方式 文件存取:实现“按名存取”。即用户只需向系统提供所需访问的文件的名字,便能快速 准确地找到文件在外存上的存储位置。这是目录管理最基本的功能,也是本文件系统向用户 提供的最基本的服务。 提高对目录的检索速度。通过合理地组织目录结构的方法,可加快对目录的检索速度, 而且本系统利用结构体,设置指针对于下一块的物理位置进行了指定,利用自己优化的算法, 可以快速而准确的找到目标位置,从而提高了对文件的存取速度。这是在设计一个大、中型 文件系统时所追求的主要目标。 文件内存显示。利用指针化数组,将各文件所申请的内存放入到数组中,然后利用对数 组的快速遍历,来查询被占用的内存地址,同时利用逻辑地址将他们在画面中显示出来,而 且是动态刷新。 显式链接。把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。该表 在整个磁盘中仅设置一张,表的序号是物理盘块号,从 0 开始,直至 N-1;N 为盘块总数。 在每个表项中存放链接指针,即下一个盘块号。在该表中,凡是属于某一文件的第一个盘块 号,或者说是每一条链的链首指针所对应的盘块号,均作为文件地址被填入相应文件的 FCB 的“物理地址”字段中。由于查找记录的过程是在内存中进行的,因而不仅显著的提高了检索 的速度,而且大大减少了访问磁盘的次数。 3.4 文件目录项的详细设计 根据 FAT 模拟系统中储存的内容,当使用者在列表控件中选中某个用户,并单击功能 选择中用户信息按钮(或选中用户后单击右键,单击显示的菜单上的用户信息)后,显示用 户信息的对话框。在用户对话框中,显示此用户当前文件的总数,并可以对用户中的文件进 行新建文件、删除文件、重命名和刷新的功能。 四、开发环境 VC++ 6.0
五、程序流程图 5.1 系统功能图 由于分配给文件的多有盘块号都放在该表中,故把该表称为文件分配表 FAT(File Allocation Table)。MS-DOS、Windows 及 OS/2 等操作系统都采用了 FAT。 登入界面选择功能项 建 立 目 录 显 示 目 录 内 容 建 立 文 件 打 开 文 件 读 文 件 写 文 件 删 除 文 件 改 变 文 件 属 性 磁 盘 文 件 信 息 显 示
5.2 文件的基本操作流程图(新建、删除、重命名) 六、程序实现---数据结构 /*目录结构*/ typedef struct { char name[3]; /*文件或目录名*/ char type[2]; /*文件类型名*/ char attribute; /*属性*/ char address; /*文件或目录的起始盘块号*/ char length; /*文件长度,以盘块为单位*/ }content;
/*已打开文件表中读写指针的结构*/ typedef struct { int dnum; /*磁盘盘块号*/ int bnum; /*盘块内第几项*/ }pointer; /*已打开文件表项类型定义*/ typedef struct { char name[20]; char attribute; 型*/ int number; int length; int flag; 表示写操作方式打开文件*/ pointer read; 盘块号,bnum 为"0"*/ pointer write; 块号,bnum 为"0",打开时为文件末尾*/ }OFILE; /*文件绝对路径名*/ /*文件的属性,用 1 个字节表示,所以用了 char 类 /*文件起始盘块号*/ /*文件长度,文件占用的字节数*/ /*操作类型,用"0"表示以读操作方式开文件,用"1" /*读文件的位置,文件刚打开时 dnum 为文件起始 /*写文件的位置,文件建立时 dnum 为文件起始盘 /*已打开文件表定义*/ struct { OFILE file[n]; /*已打开文件表*/ int length; /*已打开文件表中登记的文件数量*/ }openfile;
分享到:
收藏