文件系统 文件时间记录在哪里_文件系统基础总结

1 相关概念

文件系统的管理功能,是通过把它所管理的程序和数据组织成一系列文件的方法来实现的。文件是指具有文件名的若干相关元素的集合。元素通常是记录,而记录又是一组有意义的数据项的集合。因此,基于文件系统的概念,可以把数据分成数据项,记录和文件三级。

2 文件的逻辑结构

2.1 有结构的文件

记录式文件中,每个记录都用于描述实体集中的一个实体,各记录有着相同或不同数目的数据项。记录的长度可以分为定长和不定长两类。根据用户和系统管理上的需要,可采用多种方式来组织这些记录,形成下述的几种文件:

(1)顺序文件

由一系列记录按某种顺序排列所形成的文件。其中的记录通常是定长记录,因而能用较快的速度查找文件中的录。

优点:顺序文件应用的场合是对记录进行批量存取,也只有顺序文件才能存储在磁带上。

缺点:

a)在交互应用的场合,如果用户程序要求查询或者修改某个记录,文件系统需要顺序查找目标记录,大文件场景下,性能可能很差。

b)增加或者删除困难。为了解决这一问题,可以为顺序文件设置一个运行记录文件(Log File),或称为事务文件(Transaction File),把试图增加,删除或者修改的信息记录于其中,规定每隔一定时间,将运行记录文件与原来的主文件加以合并,产生一个按关键字排序的新文件。

(2)索引文件

当记录为可变长度时,通常为之建立一张索引表,并为每个记录设置一个表项,以加快对记录的建索速度。索引表是按照记录键排序的,因此索引表本身是一个定长记录的顺序文件,从而也就可以方便地实现直接存取。

bccc1966b15424b39767ceb8e6226f36.png

查找过程中,首先根据用户提供的关键字,并利用二分查找的方法检索索引表,从中找到相应的表项:再利用该表项中给出的指向记录的指针值,去访问所需的记录。每当要向索引文件中增加一个记录时,变须对索引表进行修改。

由于索引表有较快的检索速度,故它主要用于对信息处理的及时性要求比较高的场合。这种管理方式的缺点:提高了存储的费用。

(3)索引顺序文件

将数据进行分组,为文件建立一张索引表,为每一组记录中的第一个记录设置一个表项。

674ab2879f4cd19b6a8129b224f39c82.png

这种文件保持了顺序文件的特点,记录按照某种顺序进行排列。克服了变长记录的顺序文件不能随机访问,以及不便于插入和删除的缺点。它引入了两个特征:

a)引入了文件索引表,通过该表可以实现对索引顺序文件的随机访问;

b)增加了溢出文件,用来记录新增加的,删除和修改的记录。

对于文件比较大的场景,建索速度依然比较慢,此时可以建立多级索引,加快速度。

2.2 无结构文件

大量的源程序,可执行文件,库函数等都使用无结构文件的形式,即流式文件。unit系统中,所有的文件全被看做是流式文件,即使是有结构文件,也被视为流式文件,系统不对文件进行格式处理。

3 文件目录

为了能够对文件进行正确的操作,需要有一定的管理结构,我们称之为"文件控制块"。把文件控制块的有序集合称为文件目录,即一个文件控制块就是一个文件目录项。通常,一个文件目录也是一个文件,称为目录文件。

3.1 FCB

文件控制块,简称FCB,主要包括如下信息:

(1)基本类型信息

  • 文件名
  • 逻辑结构(流式文件还是记录式文件)
  • 物理结构(磁盘上的存储结构:顺序文件,索引文件或者索引顺序文件)
  • 物理位置(磁盘地址,包括设备名,起始盘块号等)

(2)存取控制类信息

包括文件主的存取权限,核准用户的存取权限以及一般用户的存取权限;

(3)使用信息

文件创建日期,文件上一次修改时间,当前使用信息:当前打开文件的进程数,是否被其他进程锁住,文件已经被修改但尚未刷新到磁盘上。

3aef5ca8a0cc4bc277575da2fffb781a.png

3.2 索引节点

文件检索过程中需要查找文件目录,由于文件目录也存储在磁盘上。数据量比较大的场景,检索文件目录需要读取的磁盘的次数会比较多。为了优化,unix系统将文件名和文件描述信息拆分,即将文件描述信息单独形成一个称为索引节点的数据结构,简称I节点。因此,文件目录中的每个目录项仅由文件名和指向该文件所对应i节点的指针构成。

5cf944a96b1234c97d27c3e60cd5341c.png

(1)磁盘上的索引节点

每个文件都包含唯一的一个磁盘索引节点,包括以下内容:

  • 文件主标识符,标识文件的拥有者
  • 文件类型:正规文件,目录文件或者特殊文件
  • 存取权限:各类用户对文件的存取权限
  • 物理地址:每个索引节点包含13个地址项,具体功能如下:

其中iaddr[0]-iaddr[9]来存放直接地址。如果每个盘块大小为4KB,当文件大小不大于40KB时,便可直接从索引节点中读出该文件的全部盘块号。

iaddr[10]提供一次间接地址,一级索引到间址块,系统将配置给文件的多个盘块号记录其中,文件最大允许长度4MB;

iaddr[11]提供二次间接地址,文件最大允许的长度是4GB;iaddr[12]提供三次间接地址,所允许的最大文件长度是4TB;

  • 文件长度:以字节为单位的长度
  • 文件连接数:所有指向该文件名的指针计数
  • 文件存取时间:本文件最近被进程存取的时间,最近被修改的时间以及索引节点最近被修改的时间;

(2)内存索引节点

  • 索引节点的编号,用于标识内存索引节点
  • 状态,i节点上是否被上锁或被修改
  • 访问计数,每当有一进程访问i节点时,将访问计数加1,访问完再减1
  • 文件所属文件系统的逻辑设备号
  • 链表指针,设置有指向空闲链表指针和散列队列指针

3.3 目录结构

(1)单级目录结构

在整个文件系统中建立一张目录表,每个文件占一个目录项。

5af6e1d5b39f561a746d144298f54631.png

存在的问题:

a)查找速度慢;

b)不允许重名;

c)不便于实现文件共享

(2)两级目录

为每个用户建立一个单独的文件目录UFD(User File Directory),在系统中再建立一个主文件目录MFD(Master File Directory)。在主文件目录中,每个用户目录文件都占有一个目录项,包括用户名和指向该用户目录文件的指针。

56a0217068c29585e0746db9a025d766.png

解决了单级目录的问题,但不能满足多个用户共享文件的需求;

(3)多级目录

对于大型文件系统中,通常采用三级或者三级以上的目录结构,主目录在此被称为根目录。

2e183edaf1b6b24269a8f8a5562cb56b.png

多级目录较两级目录而言,查找速度更快;但在多级目录中查找一个文件,需要按照路径名逐级访问中间节点,这就增加了磁盘的访问次数,无疑影响查询速度。目前大多数操作系统如UNIX,Linux和Windows系列都采用了多级目录结构。

4 外存的分配方式

4.1 连续分配

连续分配(Continuous Allocation)要求为每一个文件分配一组相邻接的盘块,这种分配方式保证了逻辑文件中的记录顺序与存储器中文件占用盘块的顺序的一致性。随着文件建立时空间的分配和文件删除时空间的回收,将使磁盘空间分割成许多小块,此即外存的碎片。

e80477bba0c6c6bb86bb0365685841d9.png

优点:

a)顺序访问容易

b)顺序访问速度快

缺点:

a)要求有连续的存储空间,产生较多的外部碎片,严重降低了外存空间的利用率;如果定期地利用紧凑的方法来消除碎片,则又需要话费大量的机器时间;

b)必须实现知道文件的长度

4.2 链接分配

分为隐式链接和显示链接两种形式

4.2.1 隐式链接

在文件目录的每个目录项中,都必须含有指向链接文件的第一个盘块和最后一个盘块的指针。每个盘块中都包含有一个指向下一个盘块的指针,如图所示:

a38f6b4c66257afc6293f7416cc6c9f7.png

主要问题:

(1)只适用于顺序访问,随机访问比较低效;

(2)只通过一个链接指针来将一大批离散的盘块链接起来,其可靠性较差,只要有一个指针出现问题,将导致整个链的断开。

4.2.2 显示链接

将链接文件各个物理块的指针,显示放到一张链接表中,该表在整个磁盘上仅设置一张。凡是属于某个块的第一个盘块号,均作为文件地址被填入FCB的物理地址字段中,这种方式大大降低了访问磁盘的次数。

31e3e10ff7a666627613393e4f73960d.png

由于分配给文件的所有盘块号都放在该表中,故把该表称为文件分配表FAT(File Allocation Table);

4.2.3 FAT12

微软早期的MS-DOS中,所使用的是12位的FAT12文件系统,后来为16位的FAT16文件系统。Windows95和98操作系统中则升级为32位的FAT32。Windows NT,2000,和XP系统又进一步发展为新技术文件系统NTFS(New Technology File System)。上述几种文件系统,均采用显示链接法。

对于FAT12文件系统,接下来我们计算其容量:

每个FAT表项位12位,因此最多允许的表项4096个。如果采用以盘块作为基本分配单位,盘块大小512B,因此FAT12最大支持的磁盘容量:4096*512B= 2MB。同时一个物理磁盘支持4个逻辑磁盘分区,所以相应的磁盘最大容量仅为8MB。(每个分区中都配又两个文件分配表FAT1和FAT2,其中一个作为备份)随着技术的发展,8MB的磁盘容量不能再满足需求。

优化方法:

盘块以簇为基本单位,簇是一连串的扇区,在FAT中它是一个虚拟的扇区,簇的大小一般为2n个盘块。在MS-DOS的实际运用中,簇的容量可以仅有一个扇区(512B),两个扇区(1KB),四个扇区(2KB),八个扇区(4KB)等。

因此,如果簇包含一个扇区,磁盘容量最大时8M;包含两个扇区时,可以到达16M;包含8个扇区时,可以到达64M。

存在的问题:

a)以簇为基本的分配单位,能够降低FAT表的项数,从而减少存储空间的占用,提高文件系统的效率。但这也会造成较大的簇内零头。

b)允许的最大存储空间有限,这是最大的问题;

4.2.4 FAT16

支持的最大磁盘空间:

FAT表项最大64 * 1024 = 65536,簇内允许的盘块数为4,8,16,32,64,则FAT16最大支持的存储空间:65536 * 64 * 512 = 2048M。

存在的问题:

FAT16对FAT12的局限性有所改善,但改善很有限。当磁盘容量迅速增加时,如果再继续使用FAT16,由此所形成的簇内碎片所造成的浪费也越大。如要求存储空间到达8G,则每个簇大小为128K,这就意味着内部的零头最大可达128K。

FAT12和FAT16均不支持长文件名,受到了8个字符文件名和3个字符文件扩展名的长度限制。为了解决该问题,Windows 95之后的系统,对FAT16进行了扩展,通过一个长文件名占用多个目录项的方法,使得文件名的长度可以长达255个字符,这种扩展的FAT16也称为VFAT。

4.2.5 FAT32

FAT32是FAT系列文件系统的最后一个产品,每一簇在FAT表中的表项占据4个字节,FAT32可以表示4*1024* 1024* 1024 (即4G个)。FAT32中采用较小的簇,每个簇都固定为4KB,即用8个盘块代替FAT16的64个盘块,每个盘块仍为512B。FAT32最大支持的磁盘空间为4KB * 4G = 2TB。

三种文件系统的最大分区以及所对应的块大小如下图所示:

4b0f9ba5f4d675a8c10a22e36acfd8cc.png

由上图所述,FAT32比FAT16支持更小的簇和更大的磁盘容量,同一个磁盘容量,FAT32的磁盘簇以及簇内碎片更新,磁盘利用率更高。FAT32主要应用于Windows98及后续的Windows系统,它增强了磁盘性能,增加了可用磁盘空间,同时也支持长文件名。

存在的问题:

a)由于文件分配表比较大,运行速度比FAT16格式要慢;

b)FAT32有最小管理空间的限制,每个FAT32卷至少要有65537(64 * 1024)个簇,不支持容量小于512MB的分区。因此对于小分区,仍然需要FAT16或FAT12;

c)FAT32的单个文件长度也不能大于4GB;

d)不能保持向下兼容

4.2.6 NTFS

NTFS(New TechnoloFile System)是一个专门为Windows NT开发的,全新的文件系统,并适用于Windows 2000、XP、2003。特点如下:

(1)使用64位磁盘地址,理论上可以支持2的64次方字节的磁盘分区;

(2)NTFS中可以很好低支持长文件名,单个文件名限制在255个字符内,全路径名为32767个字符;

(3)具有系统容错功能,即在系统出现故障或差错时,仍能够保证系统正常运行。

(4)提供数据的一致性;

磁盘组织

同FAT文件系统一样,采用簇作为磁盘空间分配和回收的基本单位。

文件组织

NTFS中,以卷为单位,将一个卷中的所有文件信息,目录信息以及可用的未分配空间信息,都以文件记录的方式记录在一张主控文件表MFT(Master File Table)中。该表示卷结构的中心,从逻辑上讲,卷中的每个文件都作为一条记录,在MFT表中占有一行,其中还包括MFT自己的这一行。每行大小固定1KB,每行称为改行所对应文件的元数据,也称为文件控制字。

在MFT表中,每个元数据将将其所对应的文件的所有信息,包括文件的内容等,都被组织在所对应文件的一组属性中。对于元数据1KB的空间,可能记录不下文件的全部信息,因此当文件较大时,元数据仅记录该文件的一部分熟悉,其余属性,如文件的内容等,可以记录到卷中的其他可用簇中。

存在的问题:

只能被Windows NT所识别,NTFS文件系统可以存取FAT等文件系统的文件,反之不行,因此NTFS缺乏兼容性。Windows的95,98,98SE和Me版本都不能识别NTFS文件系统。

4.3 索引分配

链接分配虽然解决了连续分配的问题,但又出现了下述另外两个问题:

a)不能支持高效的直接存取,要对一个较大的文件进行直接存取,必须首先在FAT中顺序查找许多盘块。

b)FAT需要占用较大的内存空间;

4.3.1 单级索引

打开一个文件,理论上只需要将该文件对应个盘块号等信息调入内存即可,不需要将整个FAT表加载至内存。索引分配方法就是基于该想法所形成的一种分配方法。它为每个文件分配一个索引块(表),再把分配给该文件的所有盘块号都记录在该索引块中,因而该索引块就是一个包含许多盘块号的数组。建立一个文件时,只需要为之建立的目录项中填上指向该索引块的指针。如图所示:

572e5396ee79806a48de3a116a646795.png

索引分配方式,支持直接访问,当要文件的第i个盘块时,可以方便地直接从索引块中找到第i个盘块的盘块号。

存在的问题:

可能要花费较多的外存空间,用于保存索引块的信息。对于小文件采用索引分配方式,其索引块的利用率是极低的。

4.3.2 多级索引

当文件较大时,索引块可能不止一个盘块,这种场景下,使用单级索引效率是比较低的。作为优化,一般采用多级索引,二级,三级等。

加入每个盘块大小为1KB,每个盘块号占4个字节,则在一个索引块中可存放256个盘块号。如此,两级索引时,最多可包含的盘块号总数:256 * 256 = 64K个盘块。因此采用两级索引,所允许的文件最大长度是64MB。倘若盘块大小为4KB,则采用单机索引所允许的最大文件长度是4MB,两级索引最大允许4GB。如果所示:

4.3.3 混合索引

unix系统中采用了这种方式,共设置13个地址项,即iaddr(0)-iaddr(12),如图所示:

074b37276e0d394866731e7317e384ee.png

(1)直接地址

iaddr(0)-iaddr(9),存放直接地址,这里的每项中所存放的是该文件数据所在的盘块的盘块号。如果每个盘块4KB,当文件不大于40KB时,便可直接从索引节点中读出该文件的全部盘块号。

(2)一次间接地址

用iaddr(10)来提供一次间接地址,即一级索引,每个盘块号如果4个字节,则最大允许的文件是4MB。

(3)多次间接地址

用iaddr(11)提供二次间接地址,即两级索引,文件最大允许长度为4GB;同理,iaddr(12)三次间接地址,所允许的文件最大长度是4TB。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值