建立基于磁盘存储设备的FAT文件系统 - 图文

更新时间:2024-03-19 13:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

操作系统课程设计报告

设计题目: 建立基于磁盘存储设备的 FAT文件系统

学号姓名: 2012217166孙铭银

成 员: 孙铭银(组长)

邵俊熙、油梦瑶

2015 年 1 月 15 日

一. FAT文件系统简介 ................................................................................................................. 3 二、课程设计要求、目的 ............................................................................................................... 5 三、课程设计的任务 ....................................................................................................................... 5 四、FAT文件系统设计及操作 ....................................................................................................... 5

4.1、FAT文件系统的整体布局 .............................................................................................. 5 4.2、FAT32的保留区 ............................................................................................................. 6

4.2.1、引导扇区 .............................................................................................................. 6 4.2.2、引导代码 .............................................................................................................. 8 4.2.3FSINFO、信息扇区 ................................................................................................ 8 4.3 、FAT32的FAT表 .......................................................................................................... 10

4.3.1、 FAT表概述 ....................................................................................................... 10 4.3.2、FAT表的特性 ..................................................................................................... 10 4.3.3 、FAT表的使用 ................................................................................................... 11 4.3.4 、其他说明 ........................................................................................................... 12 4.4、 FAT32的数据区 .......................................................................................................... 12

4.4.1、 根目录 ............................................................................................................... 12 4.4.2、子目录 ................................................................................................................ 13 4.4.3、目录项 ................................................................................................................ 14

五、 部分实验代码 ....................................................................................................................... 22 六、实验结果分析 ......................................................................................................................... 31 七、实验总结 ................................................................................................................................. 32 八、实验效果截屏 ......................................................................................................................... 32

操作系统课程设计

---建立基于磁盘存储设备的FAT文件系统

一.FAT文件系统简介

要建立基于磁盘存储设备的FAT文件系统,首先我们得知道到底文件系统是什么东西? 文件系统会在你把文件存放到某个目录下时记录下你文件的信息(文件存放的起始簇号,文件大小,文件创建、修改、访问、保存的时间等等),当你下次要打开那个文件时,文件系统就根据已知的文件信息去寻找它,找到后,你就又可以读,写,修改,移动你的文件了,并且文件系统会同时更新。

文件系统是为了长久的存储和访问数据而为用户提供的一种基于文件和目录的存储机制。我们都知道,在使用硬盘存储数据之前,首先要进行分区(当然你也可以不分区),然后对分区(或整个硬盘)进行格式化,其实格式化的过程就是在分区内建立文件系统的过程。一个文件系统由系统结构和按一定规则存放的用户数据组成。日常,我们都有这样的经历,在windows下当我们要格式化一个分区或是其他存储介质时,windows会弹出一个对话框,上面有这样一些选择内容:容量、文件系统、分配单元大小、卷标等等。其中文件系统的下拉菜单中就有几种不同的文件系统共供户选择,一般我们都会选择默认、FAT32或NTFS文件系统,当我们按下格式化按钮后,操作系统就开始为这个分区建立你所选择的文件系统。

一般情况下文件系统均有以下共性: 1. 数据单元

数据在写入磁盘或从磁盘读取数据时每次操作的数据量称为数据单元,它的大小在建立文件系统时确定。数据单元在不同的文件系统中有不同的称呼:例如在FAT和NTFS文件系统中称作“簇(Cluster)”,ExtX中称作“块(Block)”等。一个数据单元由若干个连续的扇区组成,大小总是2的整数次幂个扇区。

2. 坏数据单元

坏数据单元也就是包含缺陷扇区的数据单元。 3. 逻辑文件系统地址

磁盘上的一个扇区在不同的情况下会有不同的地址表达形式。 &每个扇区都会有一个LBA地址,也就是物理地址 &每个物理卷内的扇区又有一个物理卷地址 &在逻辑卷内部的扇区会有一个逻辑卷地址 。

4. 逻辑文件地址 对于每个文件来说,将它按所在文件系统中的数据单元大小为单位进行分割,分割后的每一个部分由0开始编号,这个编号就是其对应数据单元的逻辑文件地址。一个文件前后相邻的两个数据单元在物理上的存储地址可能是不连续的,但它的逻辑文件地址一定是连续的。

5. 分配策略 【1】第一可用分配策略,即当为一个文件分配了一个存储单元后还要继续为其分配时,操作系统会重新从文件系统的起始处搜索可以使用的空间。

举例说明,加入我们现在有一个文件需要4个储存单元,文件系统内的1、2、3、5、10号储存单元已经有数据放在那了,4、6、7、8、9号储存单元空闲,按照第一分配策略为这个文件的4个部分分配空间时步骤如下:

<1>第一部分分配到4号储存单元,如下图所示:

<2>为文件第一部分分配好储存位置后,又从1号储存单元开始向后寻找空位置,找到6号后分配给文件的第二部分,如下图:

<3>为文件第二部分分配好储存位置后,又从1号储存单元开始向后寻找空位置,恰好这个时候,2号储存单元的文件内容被删除了,就把2号位置分配给文件的第三部分,

<4>为文件第三部分分配好储存位置后,又从1号储存单元开始向后寻找空位置,找到7号后分配给文件的第四部分。

至此,这个文件的四个部分就分配好了,这四部分的储存位置就是4-6-2-7。

【2】下一可用分配策略,即为文件分配了一个储存单元后并不再回到卷开始处重新寻找可用空间,而是直接向后进行搜索。以上文件的四个部分利用下一可用分配策略分配的最后结果如下图所示:

【3】最佳分配策略,即在为文件分配空间时,会尽可能找到足够的连续空间以避免其片段化。对于之前的例子使用最佳分配策略时,最后结果如下图:

6. 松弛空间

松弛空间分为两种,一种是数据的结尾与为其分配的空间结束处的未使用部分,还有一种就是位于分区结尾的卷松弛空间。

7. 元数据

任何文件和目录都会有一个名字,我们将其统称为“文件名”。除了文件名外,文件或目录还有其他

一些描述信息,如大小,时间信息,是否加密或压缩,储存位置信息等,我们将这些描述信息统称为文件或目录的元数据。

二、课程设计要求、目的

在现代计算机系统中用到大量的程序和数据由于内存容量有限且不能长期保存故而平时总是把他们以文件的形式存放在外村中需要时可随时将他们调入到内存。如果用户直接管理外存上的文件不仅要求用户熟悉外存的特性了解各种文件的属性以及他们在外存上的位置而且在多用户的环境下还必须能保持数据的安全性和一致性。显然这是用户多不能胜任、也不愿意承担的工作。取而代之的是操作系统中又增加了文件管理功能即构成一个文件系统负责管理在外存上的文件并把对文件的存取、共享和保护等手 段提供给用户。这不仅方便了用户保证了文件的安全性还可以有效的提高系统资源的利用率。

课程设计不仅要求我们紧扣课本知识熟练的掌握课FAT文件系统实现原理上而且要求最终的软件实现有很好的人机交互界面从多方面考查我们的学习、实践能力。让我们在实践中去认识FAT文件系统的实现原理加深对文件系统存储、数据的安全性和一致性理解在实践中去完善自己的理论知识纠正理论学习过程中出现的错误。

三、课程设计的任务

1、首先分配一定容量的磁盘存储空间作为文件存储空间。 2、建立相应的文件系统使用FAT文件系统。

3、为该文件系统设计相应的数据结构来管理目录、磁盘空闲空间、已分配空间等。 4、提供文件的创建、删除、移位、改名等功能。

5、提供良好的界面可以显示磁盘文件系统的状态和空间的使用情况。 6. 提供虚拟磁盘转储功能可将信息存入磁盘还可从磁盘读入内存。

四、FAT文件系统设计及操作

4.1、FAT文件系统的整体布局

如图:

表链以描述它所占用的簇情况。

10. 对文件或目录进行操作时,他们所对应的FAT表项将会被清空,设置为0以表示其所对应的簇处于未分配状态。

4.3.3 、FAT表的使用

一个文件的起始簇号记录在它的目录项中,该文件的其他簇则用一个簇链结构记录在FAT表中。如果要寻找一个文件的下一簇,只需要查看该文件的目录项中描述的起始簇号所对应的FAT表项,如果该文件只有一个簇,则此处的值为一个结束标记;如果该文件不止一个簇,则此处的值是它的下一个簇的簇号。 下面说明使用FAT表寻找簇地址的过程:

下面我们尝试分析一个真实的例子。首先在SD卡的根目录下建立一个名为ycy.txt的文本文件,如下图所示:

我们现在来尝试读取起始于3号簇的文件:

第一步:由该文件的目录项中得知它的第一簇存储在3号簇,到3号簇读取它的内容后,查看3号FAT表项。

第二步:3号表项内的表项值为4,即存储文件的下一个簇为4号簇,读取4号簇中的内容,查看4号簇对应的4号FAT表项。

第三步:4号表项内的表项值为5,即存储文件的下一个簇为5号簇,读取5号簇中的内容,查看5号簇对应的5号FAT表项。

第四步:5号表项内的表项值为6,即存储文件的下一个簇为6号簇,读取6号簇中的内容,查看6号簇对应的6号FAT表项。

第五步:6号表项内的表项值为7,即存储文件的下一个簇为7号簇,读取7号簇中的内容,查看7号簇对应的7号FAT表项。

第六步:7号表项内的表项值为8,即存储文件的下一个簇为8号簇,读取8号簇中的内容,查看8号簇对应的8号FAT表项。

第七步:8号表项内的表项值为9,即存储文件的下一个簇为9号簇,读取9号簇中的内容,查看9号簇对应的9号FAT表项。

第八步:这时发现9号FAT表项中的值已是结束标志:0x0FFFFFFF,说明9号簇已经是最后一簇了。

4.3.4 、其他说明

要找一个簇的FAT表项,只要用它的簇号乘以每个FAT表项的字节数即可。Winhex提供了直接跳转到某个指定FAT表项的功能,单击position|go to FAT Entry,即可弹出转到FAT项对话框,在对话框输入目标FAT项号码后单击OK,光标即会在该FAT项的第一个字节上闪烁。

文件系统大小的上限取决于FAT项的大小。簇链中的每个FAT项记录着下一个簇的簇地址,FAT项所能表示的数字有一个上限,这个上限值也就是文件系统中的最大簇号。FAT32文件系统的FAT项只使用了32bit的28bit,因此只能描述268435456个簇(实际上还要少于这个值,因为这其中还包括用作结束标记和坏簇标志的保留值)。

4.4、 FAT32的数据区

数据区时真正用于存放用户数据的区域。数据区紧跟在FAT2之后,被划分成一个个的簇。所有的簇从2开始进行编号。也就是说,2号簇的起始位置就是数据区的起始位置。

4.4.1、 根目录

虽然原则上FAT32允许根目录位于数据去的任何位置,但通常情况下它都位于2号簇。 1. 定位根目录

在FAT文件系统中,寻找第一簇(即2号簇)的位置也就是寻找数据区的开始位置,这并不是一件容易的事,因为它不是位于文件系统开始处,而是位于数据区。在数据区前面是保留区域和FAT区域,这两个区域都不使用FAT表进行管理。因此,数据区以前的区域只能使用扇区地址(逻辑卷地址),而无法使用簇地址。 要想定位一个FAT32文件系统的数据起始处,可以通过引导扇区的相关参数计算出来。1.从引导扇区的偏移0x0E~0x0F字节处得到保留扇区

2.从偏移0x10字节处得到FAT表的个数。

3.从偏移0x24~0x27字节处得到每个FAT表的大小扇区数。4.利用如下公式计算: 保留扇区数 + 每个FAT表大小扇区数 × FAT表个数 = 数据区起始扇区号

要想计算其他已知簇号的扇区号,还要由引导扇区的偏移0x0D字节处查找到每个簇大小扇区数,并使用如下公式计算:

某簇起始扇区号 = 保留扇区数 + 每个FAT表大小扇区数 × FAT表个数 + (该簇簇号 - 2) × 每簇扇区数 4. 根目录分析

根目录在文件系统建立时即已被创建,其目的就是存储目录(也称文件夹)或文件的目录项。每个目录项的大小为32个字节。

文件系统刚被创建时,还没有存储任何数据时,根目录下没有任何内容,文件系统只是为根目录分配了一个簇的空间(通常为2号簇),将结束标记写入该簇对应的FAT表项,表示该簇已经被分配使用。这时候,为根目录分配的空间没有任何内容。但如果在创建文件系统的时候是定了卷标,则会在根目录下为其建立一个卷标目录项,该目录项占用根目录中的第一个目录项位置。

下图显示了刚刚创建的FAT32文件系统的根目录,该文件系统的卷标为“YCY”。

不管是根目录还是子目录下的目录项,都具有以下的基本特性:

1. 为文件或子目录分配的第一个簇的簇号记录在它的目录项中,其他后续簇则由FAT表中的FAT表链进行跟踪。

2. 目录项中除记录子目录或文件起始簇号外,还记录它的名字、大小(子目录没有大小)、时间值等信息。

3. 每个子目录或文件除具有一个端文件目录项外,还会有长文件名目录项。

4. 短文件名目录项固定占用32字节,长文件名目录项则根据需要占用1个或者若干个32字节。 5. 对于同一个子目录或文件,它的长文件名目录项存放在它的短文件名目录项之前,如果长文件名目录项占用多个32字节,则按倒序存放于段文件名目录项之前。

下面我们在根目录下新建一个子目录“YCY目录”和一个文本文件“YCY.txt”,看看根目录的内容如下:

4.4.2、子目录

在FAT32文件系统中,除根目录在创建文件系统时即被建立并分配空间外,其他所有的子目录都是在使用过程中根据需要建立的。新建一个子目录时,在其父目录中为其建立目录项,在空闲空间中为其分配一个簇并对该簇进行清零操作,同时将这个簇号记录在它的目录项中。如果在根目录下创建一个子目录,我们就称这个子目录为根目录的子目录,称根目录为这个子目录的父目录。 创建子目录时,在为其父目录分配的簇中建立目录项,目录项中描述了这个目录的起始簇号。在为子目录建立目录项的同时,也在为子目录分配的簇中,使用前两个目录项描述它与父目录的关系。

下面我们在根目录下建立一个子目录yatou。

分配的簇中所记录的内容

我们看到,虽然该子目录下并没有再建立任何下级子目录和文件,但却在其占用的簇空间中建立了两个目录项,第一个是“.”目录项,它描述该子目录本身的一些信息;第二个是“..”目录项,它描述的是该子目录的父目录(也就是根目录)的相关信息。通过这种方式,就在子目录和父目录之间建立起了联系。在子目录中建立下一级子目录或文件时,为下级子目录或文件建立的目录项将从第三个目录项开始写入。 提示:子目录和根目录不同之处只在于根目录是在创建文件系统时就建立了的,如果没有卷标和内容,分配给根目录的簇空间内没有任何内容。 而子目录实在存储过程中根据需要由用户建立的,随着子目录建立的同时,会在为其分配的簇空间开始处建立两个目录项来描述子目录本身和其父目录的信息,以使字符目录间建立联系。

4.4.3、目录项

在FAT32文件系统中,根据结构不同可以讲目录项大致分为四种:卷标目录项、“.”目录项和“..”目录项、短文件名目录项、长文件名目录项。短文件名目录项是最重要的数

据结构,其中存放着有关子目录或文件的短文件名、属性、起始簇号、时间值以及内容大小等信息。在FAT32文件系统中,将子目录看作是一种特殊的文件。 1. 短文件名目录项

短文件名目录项是FAT文件系统中非常重要的一种数据结构。之所以称其为短文件名目录项,是因为它所记录的文件名延续了DOS时代的8.3格式,即8个字符的名字加上3个字符的扩展名:

?a. 如果文件名不足8个字符,用0x20进行填充。

b.超过8个字符时则会被截短,因为短文件名目录项中没有足够的空间记录超出的部分。截短的方法是取文件名的前6个字符加上“~1”(如果有同名文件,则会依次递增该数值),然后加上其扩展名。

c.如果是子目录,则将扩展名部分用“0x20”进行填充。

为了解决长文件名的问题,FAT文件系统又增加了一种“长文件名”目录项结构。其从windows95开始,不管文件名的长度是否超过8个字符,都会同时为其创建短文件名目录项和长文件名目录项,因为短文件名不区分大小写,而长文件名则是区分大小写的。 2. 端文件名目录项的特性

每个文件或子目录都分配有一个大小为32字节的目录项,用以描述文件或目录的属性。 a.所有的目录项并不是具有相同的地址,要找到一个目录项的位置只能用分配给文件或子目录的全名进行是搜索。

?b. 目录项结构中有一个属性区域,每个文件可以设置7中属性。 ? c.每个文件或目录还有四个非关键性属性: ? 只读属性 隐藏属性 ?

系统属性 ? 存档属性 ?

c.每个目录项包括三个时间值,即建立时间、最后访问时间、最后修改时间: ? 建立时间,精确到十分之一 ? 最后访问时间,精确到日 ? 最后修改时间,精确到2秒 ?

d.一个目录项是否被分配使用它的第一个字节来描述。对于已经分配使用的目录项,它的第一个字节是文件名的第一个字符,而文件或目录被删除后,它所对应的目录项的第一个字节将被置为0xE5,这就是为什么有的FAT数据恢复工具需要用户自己输入文件名的第一个字符的原因。

3.短文件名目录项的数据结构

每个短文件名目录项占32个字节,数据结构如下图所示:

具体解释如下:

【1】0x00~0x00:1个字节,如果该目录项正在使用中,则为文件名或子目录名的第一个字符。 ?

0x00:说明该目录项未被分配使用。

0xE5:说明该目录项曾经被使用过,但是现在已被删除。目前处于未分配状态

【2】0x01~0x0A:10个字节,文件名的第2至第11个ASCII码,除扩展名外,如果文件的名字不足8个字符则用0x20进行填充。

【3】0x0B~0x0B:1个字节,所描述文件的属性 ? 0x01-只读 ? 0x02-隐藏 ? 0x04-系统文件 ? 0x08-卷标

0x0F-为此值时表示该目录项为长文件名目录项 ? 0x10-目录 ? 0x20-存档

【4】0x0C~0x0C:1字节,保留

【5】0x0D~0x0D:1个字节,文件穿件的时间,精确到创建时刻的十分之一秒 【6】0x0E~0x0F:2个字节,文件创建的时间——时分秒 两个字节的16bit被划分为3个部分: ?

0~4bit为秒,以2秒为单位,有效值为0~29,可以表示的时刻为0~58 ? 5~10bit为分,有效值为0~59 ? 11~15bit为时,有效值为0~23 下面举例说明:

如上图所示,其子目录项偏移0x0E~0x0F字节处的内容为“A1A9”,我们来计算一下。由于FAT文件系统数据采用的小端存储方式,因此“A1A9”表示成16进制为0xA9A1,换算成2进制就是1010 1001 1010 0001,我们将其分成三部分并计算它的值,如下图所示:

下面我们通过一个具体的实例来分析。首先我们在卷标为ycy的SD卡中再建立一个yatou.txt空的文本文件和一个写有数据的ycy.txt文本文件。即当前SD卡下只有三个文件:yatou(目录)、yatou.txt(空的文本文件)、ycy.txt(写有数据的文本文件)。如下图:

然后用winhex打开ycy,如下图所示:

具体分析如下:

第一个目录项描述的是卷标信息。我们从第二个目录项开始分析,它是ycy.txt的目录项。 ?

它的名字只有3个字符,因此共占用了偏移量0x00~0x02,非分配给文件名部分的0x03~0x0A字节用0x20进行填充。这里需要说明的一点是:如果文件名有汉字,则一个汉字占用两个字节。 ?

0x0B字节处的属性值为20,说明该文件时存档文件。

0x14~0x15字节处的簇号高两位为0x0000,0x1A~0x1B字节处的簇号低两位为0x0003,因此该文件起始于3号簇。

0x1C~0x1F字节处描述的是文件的大小,0x07C8,即1992字节,即1.94k,通过文件属性可知该值是正确。 5.长文件名目录项

FAT32文件系统在为文件分配短文件名目录项的同时会为其分配长文件名目录项。文件系统在为文件创建长文件名(Long File Name,LFN)类型的目录项时,并没有舍弃原有的短文件名目录项,具有LFN的文件同时也有一个常规的SFN(Short File Name,短文件名)类型目录项。之所以仍然需要SFN,是因为LFN目录项只包含文件的名字,而不包括任何有关时间、大小及起始簇号等信息,这些信息仍然需要用SFN目录项来记录。 6.长文件名目录项特性

如果一个文件的文件名超过了8个字符,则会为其名字截短后为其建立短文件名。将短文件名存储在短文件名目录项中。长文件名则存放在长文件名目录项中。长文件名目录项有以下的特性:

? a.LFN和SFN目录项结构在相同位置有一个属性标志字节,LFN目录项使用一个特定的属性值,以说明它是一个长文件名项。

? b.项中的其他字节,使用UTF-16编码(UTF-16是Unicode的其中一个使用方式。 UTF是 Unicode/UCS Transformation Format,即把Unicode转做某种格式的意思),存储13个Unicode字符的文件名,每个字符占用两个字节。 ?

c. 如果文件名长于13个字符,则继续为其分配LFN项,知道够用为止。 ?

d.所有LFN都包含一个校验和,通过这个校验和将其与相应的SFN项关联起来。 ? e.一个文件的所有LFN项按倒序排列在它的SFN项前面,即文件名的第一部分距离SFN是最近的。

7.长文件名目录项数据结构

详细解释如下:

【1】0x00~0x00:1个字节,长文件名目录项的序列号,一个文件的第一个长文件名序列号为1,然后依次递增。如果是该文件的最后一个长文件名目录项,则将该目录项的序号与0x40进行“或(OR)运算”的结果写入该位置。如果该长文件名目录项对应的文件或子目录被

删除,则将该字节设置成删除标志0xE5。

【2】0x01~0x0A:5个字节,长文件名的第1~5个字符。长文件名使用Unicode码,每个字符需要两个字节的空间。如果文件名结束但还有未使用的字节,则会在文件名后先填充两个字节的“00”,然后开始使用0xFF填充。

【3】0x0B~0x0B:1个字节,长目录项的属性标志,一定是0x0F。 【4】0x0C~0x0C:保留。

【5】0x0D~0x0D:1个字节,校验和。如果一个文件的长文件名需要几个长文件名目录项进行存储,则这些长文件名目录项具有相同的校验和。

【6】0x0E~0x19:12个字节,文件名的第6~11个字符,未使用的字节用0xFF填充。 【7】0x1A~0x1B:2个字节,保留。

【8】0x1C~0x1F:4个字节,文件名的第12~13个字符,未使用的字节用0xFF填充。 8.长文件名目录项实例分析

首先我们在根目录下建立一个名字为“amp3foryatoumadebyfgd20090808summer.txt”的文件,然后用winhex来看看它的长文件名目录项,如下图:

上面看的第二幅图就是由“amp3foryatoumadebyfgd20090808summer.txt”文件的短文件名目录项和长文件名目录项组成。最下面的一个目录项就是该文件的短文件名目录项,我们可以看到,“amp3foryatoumadebyfgd20090808summer.txt”文件名被截断,取出前六个字符“AMP3FO”(注意短文件名是不分大小写的),然后加上“~1”,最后加上它的扩展名。由短文件名向上,是它的长文件名目录项。“amp3foryatoumadebyfgd20090808summer.txt”共有39个字符,每个长文件名目录项可以记录13个字符,因此需要3个长文件名目录项。

短文件名目录项向上第一个小方框卷定的目录项是它的第一个长文件名目录项,向上依次为2、3号,从每个长文件名目录项的第一个字节可以看出他们的序号。 【1】我们先来看第一个内容: ?

0x0B字节处的“0F”表示这是一个长文件名目录项。

? 0x00字节处的“01”表示这是该文件的第一个长文件名目录项。

? 0x01~0x0A字节处的10个字节为文件名的第1~5个字符“amp3f”。0x0E~0x19子接触的12个字节是文件名的第6~11个字符“oryato”,0x1C~0x1F处的4个字节是文件名的第12~13个字符“um”。

【2】第二个长文件名目录项的第一个字节“02”表示这是该文件的第二个长文件名目录项,各部分字节含义由读者自行分析。

【3】第三个长文件名目录项的第一个字节为“43”,是0x40和0x03进行或运算的结果。说明这是该文件的第3个长文件名目录项,也是最后一个。

【4】 我们分别看3个长文件名目录项0x0D字节处的值——0x8B,这是长文件名目录项的校验和。说明这3个目录项同属一个长文件名目录项。

【5】 Winhex也提供了FAT长文件名目录项的模板,如下图:

9.“.”目录项和“..”目录项

前面曾经介绍过,一个子目录的起始簇,前两个目录为“.”目录项和“..”目录项,子目录通过这两个目录项及它在父目录中的目录项建立起父子目录的联系。

? a.“.”目录项位于子目录起始簇的第一个目录项位置,它用以表明该簇是一个子目录的起始簇。另外,该目录项实际上是对目录自身的描述,它记录了该子目录时间信息、起始簇号等。需要注意的是,它所记录的起始簇号也就是该子目录目前所处的位置。 ?

b.“..”目录项位于子目录起始簇的第二个目录项位置,用于描述该子目录的父目录的相关信息。

/************************************************************************/ /* 保留区(0、1号簇) */ /************************************************************************/ for (i=0;i<256*cluster_size;i++) { fseek(f,0,SEEK_CUR); fwrite((CString)fat2,4,1,f); }

for (i=0;i<256*cluster_size;i++) { fseek(f,0,SEEK_CUR); fwrite((CString)fat2,4,1,f); }

/************************************************************************/ /* 根目录(2号簇) */ /************************************************************************/ fseek(f,0,SEEK_CUR); fwrite(disk_name,32,1,f);

byte dir[]={0x00};

for (i=0;i<256*cluster_size-8;i++) { fseek(f,0,SEEK_CUR); fwrite((CString)dir,4,1,f); }

/************************************************************************/ /* 数据区4G 文件过大不宜写入 */ /* 起始位于第3簇 */ /************************************************************************/

fclose(f);

六、实验结果分析

通过实验和书本理论知识的学习清楚的认识到目录是由文件说明索引组成的用于文件

的检索特殊文件。文件目录的内容主要是文件访问和控制的信息不包括文件内容并且文件目录具有将文件名转换为该文件在外存的物理位置的功能对文件目录的管理有以下特点

(1)实现“按名存取”。即用户只须提供文件名即可对文件进行存取。这是目录管理中最基本的功能也是支件系统向用户提供的最基本的服务。

(2)提高对目录的检索速度。合理地组织目录结构可以加快对目录的检索速度而加快了对文件的存取速度。这是在设计一个大、中型文件系统时所追求的主要目标。

(3)文件共享。在多用户系统中应允许多个用户共享一个文件这样只须在外存中保留一份该文件的副本供不同用户使用以节省大量的存储空间并方便用户。

(4)允许文件重名。系统应允许不同用户对不同文件取用相同的名字以便于用户按照目已的习惯命名和使用文件。

七、实验总结

通过一个学期的学习操作系统的课程,为本次课程设计奠定了扎实的基础,通过课程设计加深了对操作系统的学习,尤其是本次课程设计的研究方向(FAT文件系统)的学习。总的来说经过这门课的学习收获还是挺大的它不但使我更了解了课本知识巩固了课本知识而且也使我的编程能力有了一定的提高。这次课程设计是对操作系统的一个总结和复习的过程,课设的过程是个自我探索、自我学习的过程,其中,我们不仅学到了专业的知识也提升了自己的学习能力。

在此次课程设计中也遇到了不少的问题和困难,但是通过自己的努力和同学的交流以及查找资料解决了这些问题。总之,通过这次操作系统课程设计,使我对文件系统有了更深一步的了解,让我对文件系统不再陌生,当然自己还有很多不足的地方,希望自己在以后的学习过程中不断的改进,这样才能让自己进步,让自己更上一层楼。

八、实验效果截屏

本文来源:https://www.bwwdw.com/article/v5t8.html

Top