内核用于维护系统中打开文件的结构

    本文只是对《APUE》3.10节中关于“内核用于维护打开文件的结构”内容的提取,目的是方便记忆及后续复习或查询方便。


内核使用三种数据结构来管理打开的文件:

    1.对于每个进程,内核在进程表中维护一个文件描述符表(可视为一个数组),该表中每个表项记录了:

        a.文件描述符标志

        b.指向对应文件表表项的指针

    2.对于每个进程打开的文件,内核为每个文件维护一张文件表,该表中记录了:

        a.文件状态标志

        b.当前文件偏移量

        c.指向对应v节点表项的指针

    3.内核为系统中所有打开文件维护一张v节点表,每个打开文件(或设备)对应一个v节点(v-node)结构,该结构中包含了:

        a.文件类型(普通、链接、字符设备、块设备 等等)

        b.对此文件进行操作的函数指针

        c.该文件的i节点 [ i-node: 索引节点 ](可能是指向i节点的指针,也可能i节点就包含在v节点中)

            c.1)i节点中包含“文件的所有者”、“文件长度”、“指向文件数据块在磁盘上所在位置的指针”等信息

注:1)linux中没有使用V节点信息,而是使用了通用i节点结构,虽然两者实现不同,但概念上一样,也都指向了i节点

        2)上述3个表中,1,2是以进程为单位,3是以系统为单位


如图展示了一个进程打开标准输入与标准输出后上述各结构关系(图片摘自于《APUE》图3-7)

内核用于维护系统中打开文件的结构


下图展示了两个独立进程各自打开同一文件后,上述各表之间关系(指向相同的v节点)(图片摘自于《APUE》图3-8):

内核用于维护系统中打开文件的结构


后续若有更多相关知识点记录会在原文基础上进行扩充