Linux虚拟文件系统中索引节点的结构及其作用是什么

Linux虚拟文件系统中索引节点的结构及其作用是什么,第1张

索引节点是UNIX文件系统的一个重要部分. 通常用户不用考虑它们,但知道它们是什么确实很有必要.

索引节点是磁盘上用于描述文件的一种数据结构. 它保存了文件的大部分重要信息,包括文件数据块(用户关心的文件部分)在磁盘上的地址. 每个索引节点都有自己的标识号, 称为索引号(i-number). 实际上用户根本不需要关心文件在磁盘上的物理地址, 也不用关心索引号----除非是要找出对文件的链接. 但用户关心下列信息, 而它们都被保存在文件的索引节点中:

文件所有权: 拥有文件的用户和组

文件访问模式: 不同的用户和组是否可以读, 写或执行文件.

文件时间标记: 文件最后一次被修改的时间, 最后被访问的时间和索引节点最后被修改的时间.

文件类型: 是否为常规文件, 特殊文件或者其他类型的抽象伪装文件.

文件系统第一次被创建时(通常是磁盘第一次初始化时), 会为每一个文件系统创建若干数量的索引节点. 该数目是文件系统所能容纳的最大文件数. 只要不重新初始化文件系统, 就不能改变这个数目, 否则会损坏该文件系统上所有的数据. 很有可能(虽然很少见)文件系统会将索引节点全部用光,就像有可能用完存储空间一样----当文件系统中有很多很多小文件时,这种情况就可能发生.

使用ls –l命令会显示出在大部分信息. ls –i option显示文件的索引号. 而stat命令则可以列出索引节点中的几乎所有信息.

在linux 文件系统中,是以块为单位存储信息的,为了找到某一个文件在存储空间中存放的位置,用i 节点对一个文件进行索引。I 节点包含了描述一个文件所必须的全部信息。所以i节点是文件系统管理的一个数据结构。

文件系统三个部分,一个是超级块,存放文件系统本身的信息;一个是i节点表,文件的属性保存在这个区中;最后一个是数据区,文件的内容保存在这个区中。

扩展资料

文件属性的存储,内核先在i节点表中找到一个空的节点(假设是47,表示的是i节点表中第9个位置的i节点),将文件的属性激励进去。

文件内容的存储。一个文件的内容往往需要许多的存储块(假设是3个块)才能容纳,而这些存储块是不连续的。内核会从自由块的列表中找出3个自由的存储块,分别是块300,100,200(内核找块的顺序不一定是从小到大排的)。内核就会把数据一次复制到块300100,200中。

将文件存储文件内容的信息记录到i节点中。上面已经将文件依次放到块300,200,100中了,所以在i节点的磁盘分布区中依次记录这3个标号,代表文件存放的地方以及组合顺序。

i节点是一个64字节长的表,存储着一个文件的元数据,包括文件大小、文件所有者、文件存取许可方式,以及文件类型,磁盘地址表。

struct inode {

struct hlist_nodei_hash

struct list_headi_list /* backing dev IO list */

struct list_headi_sb_list

struct list_headi_dentry

unsigned longi_ino

atomic_ti_count

unsigned inti_nlink

uid_ti_uid

gid_ti_gid

dev_ti_rdev

unsigned inti_blkbits

u64i_version

loff_ti_size

#ifdef __NEED_I_SIZE_ORDERED

seqcount_ti_size_seqcount

#endif

struct timespeci_atime

struct timespeci_mtime

struct timespeci_ctime

blkcnt_ti_blocks

unsigned short i_bytes

umode_ti_mode

spinlock_ti_lock /* i_blocks, i_bytes, maybe i_size */

struct mutexi_mutex

struct rw_semaphorei_alloc_sem

const struct inode_operations*i_op

const struct file_operations*i_fop /* former ->i_op->default_file_ops */

struct super_block*i_sb

struct file_lock*i_flock

struct address_space*i_mapping

struct address_spacei_data

#ifdef CONFIG_QUOTA

struct dquot*i_dquot[MAXQUOTAS]

#endif

struct list_headi_devices

union {

struct pipe_inode_info*i_pipe

struct block_device*i_bdev

struct cdev*i_cdev

}

__u32i_generation

#ifdef CONFIG_FSNOTIFY

__u32i_fsnotify_mask/* all events this inode cares about */

struct hlist_headi_fsnotify_marks

#endif

unsigned longi_state

unsigned longdirtied_when /* jiffies of first dirtying */

unsigned inti_flags

atomic_ti_writecount

#ifdef CONFIG_SECURITY

void*i_security

#endif

#ifdef CONFIG_FS_POSIX_ACL

struct posix_acl*i_acl

struct posix_acl*i_default_acl

#endif

void*i_private/* fs or device private pointer */

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8509826.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存