设备驱动中的inode(kernel-4.7)

inode是Linux文件系统中的重要概念,存储文件元信息,如创建者、日期和大小。文件数据存储在块中,inode占用硬盘空间,硬盘分为数据区和inode区。inode用尽时,即使硬盘未满也无法创建新文件。VFS中的inode结构包含权限、属主等信息,并通过inode操作列表进行各种操作。每个进程的PCB中保存文件描述符表,file结构体表示已打开文件,指向实现文件操作的内核函数。
摘要由CSDN通过智能技术生成

文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”

索引节点对象inode结构体,定义文件在linux/fs.h中


/*
 * Keep mostly read-only and often accessed (especially for
 * the RCU path lookup and 'stat' data) fields at the beginning
 * of the 'struct inode'
 */
struct inode {
    umode_t         i_mode;  //唯一的标识与一个设备文件关联,内核在i_mode中存储量文件类型
    unsigned short      i_opflags;
    kuid_t          i_uid;    //inode拥有者id 
    kgid_t          i_gid;    //inode所属群组id 
    unsigned int        i_flags;

#ifdef CONFIG_FS_POSIX_ACL
    struct posix_acl    *i_acl;
    struct posix_acl    *i_default_acl;
#endif

    const struct inode_operations   *i_op;  // 默认的索引节点操作
    struct super_block  *i_sb;    //相关的超级块 
    struct address_space    *i_mapping; //相关的地址映射 

#ifdef CONFIG_SECURITY
    void            *i_security;
#endif

    /* Stat data, not accessed from path walking */
    unsigned long       i_ino;
    /*
     * Filesystems may only read i_nlink directly.  They shall use the
     * following functions for modification:
     *
     *    (set|clear|inc|drop)_nlink
     *    inode_(inc|dec)_link_count
     */
    union {
        const unsigned int i_nlink;
        unsigned int __i_nlink;
    };
    dev_t           i_rdev;   //表示设备文件的结点,这个域实际上包含了设备号
    loff_t          i_size;   //inode所代表大少
    struct timespec     i_atime;  //inode最近一次的存取时间 
    struct timespec     i_mtime;  //inode最近一次修改时间 
    struct timespec     i_ctime; //inode的生成时间
    spinlock_t      i_lock; /* i_blocks, i_bytes, maybe i_size */
    unsigned short          i_bytes;
    unsigned int        i_blkbits;
    blkcnt_t        i_blocks;

#ifdef __NEED_I_SIZE_ORDERED
    seqcount_t      i_size_seqcount;
#endif

    /* Misc */</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值