王 红
(潍坊学院,山东 潍坊 261061)
Linux文件系统结构分析*
王 红
(潍坊学院,山东 潍坊 261061)
阐述了Linux系统的文件结构类型,指出了EXT2是在Linux系统中最为常用的文件系统。分析了EXT2文件系统的磁盘布局、索引结点及目录结构,研究了EXT2系统实现按名存取的方法,文件读取速度更高效。
EXT2文件系统;索引结点;混合索引;文件目录
Linux系统的一个重要的特征就是支持多种不同的文件系统,如:EXT、FA T、EXT2、EXT3、SYSV等。目前,Linux主要使用的文件系统是EXT2和EXT3文件系统,也是Linux用户最常用的文件系统。各种Linux的系统发布都将EXT2作为操作系统的基础。EXT2文件系统支持标准UNIX文件类型:普通文件、目录文件、特别文件和符号链接。
EXT2和其他逻辑块文件一样,由逻辑块序列组成,根据用途划分,这些逻辑块通常有:引导块、超级块、inode区及数据区等。
EXT2将其所占的逻辑分区划分为块组,由一个引导块和其他块组组成,每个块组又由超级块、组描述符表、块位图、索引节点位图、索引节点表、数据区构成,如图1所示。
图1 EXT2磁盘布局在逻辑空间的映像
每个块中保存的这些信息是有关EXT2文件系统的备份信息。当某个块组的超级块或inode受损时,这些信息可以用来恢复文件系统。
EXT2文件系统中的数据是以数据块的方式存储在文件中的。这些数据块的大小相同,其大小在EXT2创建时设定。磁盘上存储文件的基本单位是簇。一个簇也称为一个磁盘块,它通常是2n个磁盘扇区大小。
EXT2文件系统用一个inode数据结构描述系统中的每一个文件,定义系统的拓扑结构。一个inode描述了一个文件中的数据占用了哪些块以及文件的访问权限、文件的修改时间和文件的类型。EXT2文件系统中的每一个文件都用一个inode描述,而每一个inode都用一个独一无二的数字标识。文件系统的inode都放在一起,在inode索引表中。
EXT2块组中组描述符中的项称为组描述符,用于描述某个块组的整体信息。每个块组都有一个相应的组描述符来描述它,所有的组描述符形成一个组描述符表,并在使用时被调入块高速缓存。
EXT2中每个块组有两个位示图块,一个用于表示数据块的使用情况,叫数据块位图;另一个用于表示索引结点的使用情况,叫索引结点位图。位图中的每一位表示该组中一个数据块或一个索引块的使用情况,用0表示空闲,用1表示已分配。
在Linux的EXT2文件系统中,索引结点inode分为两类,即磁盘索引结点和内存索引结点,通常也分别叫做EXT2 inode和VFS inode。
(1)磁盘索引节点
磁盘索引节点是指存放在磁盘上的索引节点。每个文件有唯一的一个磁盘索引节点,它主要包括以下内容:
文件所有者标识号:指拥有该文件的文件主或同组的标识符。
文件类型:指明文件是普通文件、目录文件还是特别文件等类型。
文件物理地址:指出数据文件所在的物理块号。如在Linux系统中,通过15个地址项来表明文件所在的物理块号。
文件存取权限:用户对文件的操作类型,如读、修改、执行等。
文件大小:文件所占有的字节个数。
文件连接计数:指明系统中共享该文件的进程个数。
文件存取时间:指出该文件最近被进程存取的时间、最近被修改的时间及索引节点最近被修改的时间等。
(2)内存索引节点
内存索引节点是指存放在内存的索引节点。当文件打开时,要将磁盘索引节点复制到内存索引节点中,便于以后使用。内存索引节点包括以下内容:
索引节点编号:标识内存索引节点。
索引节点状态:指示该节点是否已被修改或已被上锁。
访问计数:当进程访问该节点时,访问计数加1,访问完再减1。
链接指针:指向空闲链表和散列队列的指针。
逻辑设备名:含有该文件的文件系统的逻辑设备名。
表1 Linux系统的文件目录
Linux系统的目录结构采用了将文件名与文件描述信息分开的方法。文件目录由文件名和该文件的索引节点号构成,一个目录项共占16B。其中,文件名占14个字节,索引节点号(或索引节点指针)占2个字节。因此,1KB的盘块中可以存放64(1K/16)个目录项,这样就节省了系统查找及访问文件的时间。在一个共有640个FCB的文件目录中查找一个文件时,平均只需启动磁盘5次,因此大大减少了系统开销。如表1所示为一个文件目录的实例。
Linux系统文件的物理结构采用混合索引方式,对分配给文件的磁盘块进行管理。在Linux文件系统的索引节点中存在一项i.addr[14],用于存放该文件的磁盘块号。如图2所示为Linux系统的混合索引文件结构。
(1)直接寻址。i.addr[0]—i.addr[9]这10项用于直接存放该文件所占用的磁盘块号,文件的前10个磁盘块号依次放入其中。如果磁盘块的大小为1KB,则当文件长度不大于10K时,操作系统可采用直接索引文件的方式对文件进行访问,直接从索引节点中找出该文件所在的磁盘块号,访问速度较快。
(2)一次间接寻址方式。i.addr[10]项中存放的磁盘块号所指向的磁盘块再用来存放下一级的磁盘块号。假设一个磁块大小为1KB,每个磁盘块号占4个字节,则一个磁盘块可存放256个(1KB/4B)磁盘块号。这样,通过一次间接寻址,i.addr[10]项就引出了256个磁盘块号,所以,这一级可支持的文件长度为256K。
(3)二次间接寻址方式。i.addr[11]存放的磁盘块号采用两级索引的方式,如果沿用以上的假设,则该项可引出2562个磁盘块,可支持的文件长度为2562K。
(4)三次间接寻址方式。i.addr[12]存放的磁盘块号采用三级索引的方式,如果仍沿用以上的假设,则该项可引出2563个磁盘块,可支持的文件长度为2563K。
由以上分析可以看出,UNIX系统对于长度较小的文件具有较快的读写速度,同时又具有支持大文件的功能。
图2 Linux的混合索引文件结构
Linux系统文件实现了按名查找。通过文件名访问文件的过程如下:通过文件名查找文件目录,找到该文件的索引结点号;通过索引结点号查找索引节点区,找到该文件的索引点;根据索引结点中提供a.addr,找到该文件在磁盘的相应的块号序列;根据块号,找到文件内容。
FA T文件系统与NTFS文件系统目录的比较:FAT文件系统直接以文件控制块作为文件目录,这样文件系统目录相应较大,查询速度较慢。以索引结点作为文件目录,对于一些小的文件系统是可以的,但是对较大型的文件系统就不适用了。Linux系统的文件目录为:文件名、索引结点号。这使得Linux系统的文件目录更小,查询速度更快。
由于Linux系统的EXT2文件系统采用了合理巧妙的文件系统结构,以及目录结构,使得该文件系统多项性能得到优化。采用EXT2系统,能够大大改善磁盘I/O速度,提高I/O组织的灵活性及编程效率。因此,EXT2文件系统为开发嵌入式系统及实时应用系统提供了广泛的基础和手段。
[1]陈向阳.Linux实用大全[M].2版.北京:科学出版社,1998.
[2]陈莉君,康华.Linux操作系统原理与应用[M].北京:清华大学出版社,2006.
[3]陆松年.操作系统教程[M].北京:电子工业出版社,2010.
[4]William Stallings.操作系统:精髓与设计原理[M].陈渝,译.北京:电子工业出版社,2006.
(责任编辑:肖恩忠)
TP316
A
1671—4288(2011)02-0029-03
符、文件存取权限、文件物理地址、文件长度、文件连接系数、文件存取时间等一些文件的重要信息。
2010-12-26
王红(1966-),女,山东昌乐人,潍坊学院计算机与通信工程学院副教授。