精华内容
下载资源
问答
  • 主存索引节点和辅存索引节点的不同主要体现在:主存索引节点状态;设备号、索引节点号;引用计数。 主存索引节点状态——反映主存索引节点的使用情况。它指示出: 1、 索引节点是否被锁上了; 2、 是否有进程正在...

    主存索引节点和辅存索引节点的不同主要体现在:主存索引节点状态;设备号、索引节点号;引用计数。

    主存索引节点状态——反映主存索引节点的使用情况。它指示出:

    1、  索引节点是否被锁上了;

    2、  是否有进程正在等待索引节点变为开锁状态

    3、  作为对索引节点中的数据进行更改的结果,索引节点的主存表示是否与它的磁盘中的内容不同。

    4、  作为对文件数据更改的结果,文件的主存表示是否与它的磁盘中的内容不同。

    5、  该文件是否是安装点。

    设备号、索引节点号。对应辅存索引节点的位置信息。设备号是索引节点,也是该文件所在的设备的设备号;索引节点是该索引节点在辅存索引节点区中的编号。

    引用计数。指出该文件活跃引用的计数。

    (文件所有者标识号,文件类型等其他几项则与辅存i节点的内容相同。)

     

    为了提高系统效率,减少主存空间的占用。

    转载于:https://www.cnblogs.com/luo841997665/p/4673613.html

    展开全文
  • 超级块、目录项、索引节点和文件对象是VFS虚拟文件系统的4个最关键组成要素,一个inode索引节点唯一的对应一个目录文件夹或者文件,比如:/home/gliethttp/hello.c,我们想打开其中的hello.c文件,open("/home/gliethttp/...
    超级块、目录项、索引节点和文件对象是VFS虚拟文件系统的4个最关键组成要素,一个inode索引节点唯一的对应一个目录文件夹或者文件,比如:/home/gliethttp/hello.c,我们想打开其中的hello.c文件,open("/home/gliethttp/hello.c",O_RDWR);硬盘上home文件夹唯一对应一个属于home文件夹自己的硬inode索引节点片段信息,gliethttp文件夹也同样在硬盘上唯一对应一个属于gliethttp文件夹自己的硬inode索引节点片段信息,只不过home和gliethttp对应的硬inode索引节点片段信息表示的为文件夹,其中存储在该硬inode片段信息下数据区的内容只有一个文件名,hello.c则不同,虽然hello.c在硬盘上也有一个和hello.c自己唯一对应的硬inode索引节点片段信息,但是它的硬inode索引节点片段信息的数据区主要是用来对文件真实内容进行索引,而不像文件夹的数据区那样,仅仅用来存储文件夹的名字;open函数会通过path_walk()调用ext3_lookup()函数从硬盘中将home、gliethttp和hello.c,这三个硬inode索引节点片段信息,读出来,随后当即将这些硬inode索引节点片段信息分别重新组织,生成一个表达力更加丰富的,能够供内核使用起来得心应手的内核全功能inode索引节点【注意:ext3系统中用来存储文件的硬inode信息片段往往很简单,仅仅存储了一个文件必须的几个关键信息,内核要想方便快捷的对文件进行操作,必须在内核内存中基于硬盘上的硬inode索引节点片段,添加进若干操作属性集,比如:list链表等,重新构建一个更加复杂的,应用起来更加灵活的全功能inode索引节点,这个全功能inode索引节点以硬件inode信息片段为雏形,更加丰富快速的表达硬件inode片段信息对应的文件】.因为硬inode索引节点片段信息唯一对应一个文件夹或文件,那么基于硬inode索引节点片段信息的在内核内存中重新组建的全功能inode索引节点也唯一指向那个文件夹或文件,并且在ext3_lookup()组织全功能inode索引节点的时候内核会调用ext3_read_inode()为该inode分配操作该inode的特定操作函数集,比如dir文件夹的内存全功能inode索引节点对应的inode操作函数集和file文件对象操作函数集如下:
    inode->i_op = &ext3_dir_inode_operations;
    inode->i_fop = &ext3_dir_operations;
    举个驱动文件样例,对于像《Linux下LED驱动测试源码》【文章地址
    http://gliethttp.cublog.cn】驱动程序实例中使用到的
    [root@gliethttp]# mknod /dev/led c 254 0
    /dev文件夹下建立一个字符类型的名为led的字符设备文件,ext3_read_inode()函数会在内核内存中组建led文件的全功能inode索引节点的时候调用init_special_inode()为其分配操作该字符设备inode的操作函数集inode->i_fop = &def_chr_fops;这个def_chr_fops集中只实现了一个open函数调用chrdev_open(),(结构体变量:struct file_oprations def_char_fops,以及函数dev_chr_fops()等均可在目录fs/char_dev.c中找到)
    比如:《Linux下LED驱动测试(应用程序)源码》【文章地址 http://gliethttp.cublog.cn】应用程序实例中用到如下函数打开设备
    fd=open("/dev/led",O_RDWR);
    ext3硬盘文件系统上的文件led的硬inode索引节点片段会在函数ext3_lookup()中被重新组建到内核内存中,生成一个led文件对应的inode全功能索引节点,并调用chrdev_open()函数,chrdev_open()在执行时会调用kobj = kobj_lookup(cdev_map, inode->i_rdev, &idx);函数从所有注册登记到内核的字符设备驱动中,根据MAJOR主设备号查找led设备所用的驱动,如果找到,filp->f_op = fops_get(p->ops);那么将使用insmod led命令注册到内核的驱动程序对应的文件对象操作函数集合赋值给这个current进程对应的filp->f_op,
    static struct file_operations gliethttp_led_fops={
    owner: THIS_MODULE,
    ioctl: led_ioctl,
    open: led_open,
    release:led_release,
    };
    所以这时filp->f_op就等于了gliethttp_led_fops,赋值之后,filp->f_op就不再是def_chr_fops了,而被字符驱动程序的gliethttp_led_fops操作集替换了,用户再次调用open,open动作也就是被导向到直接调用led_open了,以上的inode似乎已经可以勉强的解决文件的读写问题了,但对于每次进行文件打开都要进行全功能inode信息组建,着实是一个费时费力的事情,作为高性能形象代言人--linux内核,速度和高效永远是内核开发阵营响亮的营歌,也是所有用户对linux内核的强烈感觉,故而linux引入了目录项dentry,目录项使得inode可以安全的停留在内核内存中不被轻易释放掉,一个目录项唯一对应一个由ext3_lookup()函数组建到内核内存的全功能inode索引节点,而一个全功能inode索引节点可以被若干个目录项对应,这也就使得应用更加灵活,目录项通过hash算法,将成千上万的哥们儿目录项们,打散到各个hash短链中【对于hash短链的理解可以参看《其实hash哈希原理很简单 》文章地址 http://gliethttp.cublog.cn】hash短链的引入让文件查询的速度也就被成百上千倍的得到优化提升放大,迅速的找到了一个dentry也就找到了文件夹或文件对应的inode,也就迅速的找到了那个相应的文件夹或文件,也就节省了大家不少的时间.

    综述:一个ext3文件系统硬盘上的硬inode索引节点片段信息,唯一的对应物理文件,这是内核内存中全功能inode索引节点存在的唯一硬件文件来源,硬inode索引节点片段信息存储在硬盘上,而全功能inode索引节点和目录项dentry都只是在内核内存中被临时组建起来,随着内核的运行,可能会被释放掉的硬盘上的文件在内核内存中的一个快速索引而已,至于file文件对象,也是一个纯内存对象,和硬盘文件无关,当然file对象和硬盘文件存在着的那点关系由file->f_op=inode->f_op文件对象操作集来勉强维系。
    展开全文
  • 文件索引节点

    千次阅读 2016-03-06 20:04:16
    所有的节点都有一个与之相连的索引节点索引节点是用来保存文件信息的,包含以下信息: 文件使用的设备号 索引节点号 文件访问权限 文件链接的数量(硬连接数) 所有者用户识别号 组识别号 设备文件的设备号...

    所有的节点都有一个与之相连的索引节点,索引节点是用来保存文件信息的,包含以下信息:

    文件使用的设备号

    索引节点号

    文件访问权限

    文件链接的数量(硬连接数)

    所有者用户识别号

    组识别号

    设备文件的设备号

    以字节为单位的文件容量

    包含该文件的磁盘块的大小

    该文件所占的磁盘块

    最后一次访问该文件的时间

    最后一次修改该文件的时间

    最后一次改变该文件状态的时间

    这些信息存放在系统的stat结构体中,可以通过系统调用访问stat结构来获取索引节点的相关信息。

    在stat中

    st_dev 对应于每一个文件名,代表包含这个文件名和相应的索引节点的文件系统的设备号

    st_rdev 只有字符文件设备和块设备文件才具有,表示实际设备的设备号

    展开全文
  • VFS的索引节点

    2016-07-16 11:27:30
    索引节点   文件系统处理文件所需要的所有信息都放在称为索引节点的数据结构中。文件名可以随时更改,但是索引节点对文件是唯一的,并且随文件的存在而存在。具体文件系统的索引节点是存放在磁盘上的,是一种静态...

                                                 索引节点

           文件系统处理文件所需要的所有信息都放在称为索引节点的数据结构中。文件名可以随时更改,但是索引节点对文件是唯一的,并且随文件的存在而存在。具体文件系统的索引节点是存放在磁盘上的,是一种静态数据结构,要使用他必须调入内存,填写VFS的索引节点,因此,也称VFS索引节点是动态节点。

           VFS索引节点数据结构主要域有

           struct inode

          {

                struct list_head i_hash;//指向哈希链表的指针

                struct list_head i_list;//指向索引节点链表的指针

                struct list_head i_dentry;//指向目录项链表的指针

     

                unsigned long i_ino;//索引结点号

                umode_t i_mode;//文件类型与访问权限

                kdev_t i_rdev;//实际设备标识号

                uid_t i_uid;//文件拥有者标识号

                gid_t i_gid;//文件拥有者所在组的标识号

     

                struct inode_operations *i_op; //指向对该节点操作的一组函数

                struct super_block *i_sb;//指向该文件系统超级块的指针

                atomic_t i_count;//当前使用该节点的进程数,计数为0表明该节点可以被 丢弃或者可以被重新使用

                struct file_operations *i_fop;//指向文件操作的指针

                struct vm_area_struct *i_op;//指向对该文件进行映射所使用的虚存区指针。

                unsigned long i_state;//索引节点的状态标识

                unsigned int i_flags;//文件系统的安装标志

                union{

                      struct minix_inode_info minix_i;

                      struct ext2_inode_info exit2_i;

                 }

    };

           如果索引节点所代表的并不是常规文件而是某个设备,那就有个设备号,这就是i_rdev.

           i_state域如果为DIRTY,该索引节点就是“脏的”,也就是说对应的磁盘索引节点必须被更新。每个索引节点对象总是出现在下列三个循环双向链表的某个链表中:未用索引节点链表、正在使用的索引节点链表和脏索引节点链表。这三个链表都是通过索引节点的i_list域连接在一起的。

           属于正在使用或脏链表的索引节点对象也存放在一个哈希表中。哈希表加快了对索引节点对象的搜索,前提是内核要知道索引节点号以及对应文件所在文件系统的超快对象的地址。

           与索引节点关联的方法叫做索引节点操作表,由inode_operations结构来描述

           struct inode_operations

           {

                  int (*create)(struct inode*, struct dentry *, int);创建一个新的磁盘索引节点

                  int (*link)(struct dentry *, struct inode *, struct dentry *);创建一个新的硬链接

                  int (*unlink)(struct inode *, struct dentry*);删除一个硬链接

                  int (*symlink)(struct inode *, struct dentry *, const char *);为符号连接创建一个新的索引节点

           }

            对于不同的文件系统,其每个函数的具体实现是不同的,也不是每个函数都必须实现,没有实现的函数对应的域应设为NULL

    展开全文
  • 联合索引节点结构

    2020-09-06 18:12:10
    昨天在面试中被问到“联合索引节点结构”这个问题,当时没有答出来,今天在网上查了下各家的答案。发现不少答案存在问题。评论中争论最多的点就是非叶子节点是只包括最左索引字段还是所有索引字段,经过一些资料查找...
  • 索引节点inode

    2014-03-03 19:24:00
    在Linux的文件系统中,索引节点是文件的标识,并且这个值是唯一的,两个不同的文件的索引节点值是不同的,索引节点相同的文件它们的内容是相同的,仅仅文件名不同。修改两个索引节点值相同的文件中的一个文件,另一...
  • 索引节点

    千次阅读 2012-10-25 14:49:50
    在两个位图块后面,就是索引节点表了,每个块组中的索引节点都存储在各自的索引节点表中,并且按索引节点号依次存储。索引节点表通常占好几个数据块,索引节点表所占的块使用时也像普通的数据块一样被调入块高速缓存...
  • Linux 索引节点

    千次阅读 2013-02-21 14:39:21
    索引节点inode:Linux为每个文件分配一个称为索引节点的编号,可以将inode简单理解成一个指针,它永远指向本文件在物理磁盘上的具体存储位置。系统是通过索引节点(而不是文件名)来定位每一个文件的。 硬连接:1个...
  • 索引节点高速缓存

    千次阅读 2012-10-27 12:50:37
    VFS也用了一个高速缓存来加快对索引节点的访问,和块高速缓存不同的一点是每个缓冲区不用再分为两个部分了,因为inode结构中已经有了类似于块高速缓存中缓冲区首部的域。索引节点高速缓存的实现代码全部在fs/inode.c...
  • Ext2的索引节点

    2013-02-15 00:36:31
    ... Ext2的索引节点   Ext2和Unix类的文件系统一样,使用索引节点来记录文件...当你要访问一个文件或目录时,通过文件或目录名首先找到与之对应的索引节点,然后通过索引节点得到文件或目录的信息及磁盘上的具体...
  • 根据文件路径查找索引节点 操作系统的文件管理系统的主要作用就是,当用户需要访问一个文件时,系统可以通过用户给出的文件路径找到文件的索引节点,从而找到文件,并以文件对象的实例交付给用户进程。下面就以系统...
  • 索引节点,Inode是Index Node的缩写,存储于文件系统上的任何文件都可以用索引节点来表示,所以也可以说索引节点是整个linux文件系统的基础。操作系统在读取硬盘的时候不是一个块一个块的来读取信息,因为这样做的话...
  • VFS的索引节点 链接

    千次阅读 2012-09-11 09:33:38
    文件系统处理文件所需要的所有信息都放在称为索引节点的数据结构中。文件名可以随时更改,但是索引节点对文件是唯一的,并且随文件的存在而存在。VFS索引节点的数据结构inode在/includ/fs/fs.h中定义如下(2.4.x版本...
  • inode索引节点: ①inode索引节点是一种数据结构,是VFS文件系统要求文件系统必须要实现的一个部分。以磁盘文件系统为例,inode结构体数据一般以线性的方式(数组),存储在磁盘上(一般磁盘布局是引导块、超级块、...
  • 索引节点     inode表中包含了文件系统所有文件列表     一个节点是在一个表项里,包含文件数据(元数据)。         1.文件类型,权限,UID,GID         2.链接数(指向这个文件名路径...
  • Linux 中索引节点的理解

    千次阅读 2016-01-22 20:25:29
    索引节点是指在许多类Unix文件系统中的一种数据结构。每个索引节点保存了文件系统中的一个文件系统对象的元信息数据,但不包括数据内容或者文件名。  linux中,文件查找不是通过文件名称来查找的。实际上是通过i...
  • 文件描述符与索引节点  一般来讲,使用与管理文件是通过文件名来进行的,但从应用编程的角度看,文件描述符更有用,而系统中的文件在本质上是通过 其索引节点进行管理的。  文件描述符是应用程序中表示被打开...
  • linux VFS 之三:索引节点inode

    千次阅读 2014-04-21 14:31:43
    VFS 中的每个文件、目录等都用且只用一个VFS inode表示,存放关于具体文件...具体文件系统的索引节点是存放在磁盘上的,是一种静态结构,要使用它,必须调入内存,填写VFS的索引节点,因此,也称VFS索引节点是动态节点
  • linux 文件索引节点(inode)

    千次阅读 2012-02-20 10:26:18
    1.什么是索引节点? 索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素...
  • Linux/Unix文件系统索引节点浅析

    千次阅读 2014-08-20 18:01:06
    索引节点,其英文为 Inode,是 Index Node 的缩写。索引节点是整个 Linux 文件系统的基础。存储于文件系统上的任何文件都可以用索引节点来表示。举一个例子来说,假设有一个老图书馆里面有一本登记簿,上面记录着...
  • 再用df -i查看了一下/分区的索引节点(inode),发现已经用满(已用=100%),导致系统无法创建新目录和文件。 2、问题原因分析: Inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式...
  •  Linux为每个文件分配一个称为索引节点的号码inode,可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。系统是通过索引节点(而不是文件名)来定位每一个文件。 例如:假设我们在硬盘当前目录下建立...
  • 索引节点是什么? 答:数据结构。 这个数据结构是存放shenmde
  • 索引节点详解

    万次阅读 多人点赞 2018-05-09 14:27:44
    这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。 每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。 二、inode的内容 inode包含文件的元信息,具体来说有以下内容: ...
  • PS:下面的讲解,基于Linux/Unix ... 索引节点,其英文为 Inode,是 Index Node 的缩写。存储于文件系统上的任何文件都可以用索引节点来表示。 文件系统主要分为两部分,一部分为元数据(metada...
  • df -i 查看了一下/分区的索引节点(inode),发现已经用满(已用=100%),导致系统无法创建新目录和文件。 du -sh查看某文件的大小 周末因为一个鸟程序的日志每条都疯狂输出到一个文件,直接把inode塞满了。记一下...
  • Linux文件系统索引节点inode详解

    千次阅读 2015-08-22 14:58:11
    在Linux系统中,为每个文件分配一个称为索引节点的号码inode,可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。  系统是通过索引节点(而不是文件名)来定位每一个文件。  例如:在硬盘当前目录...
  • inode节点中,记录了文件的类型、大小、权限、所有者、文件连接的数目、创建时间与更新时间等重要的信息...现在我们就来实战,Linux索引节点(inode)用完了怎么破? 1、登录到服务器上df -i 查看每块磁盘的inode使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,241
精华内容 7,296
关键字:

索引节点