• APUE学习笔记——3.10文件共享


    基本概念

    内核使用3个数据结构描述一个打开的文件进程表、文件表、V节点表
    首先了解3种数据结构的概念
        1 进程表
            每一个进程有一个进程表。进程表里是一组打开的文件描述符,如标准输入0,标准输出1,标准错误2...
        2 文件表
            进程打开一个文件时,内核就为该文件创建一个文件表。
            进程表对文件表一般是 一对多的关系    文件表对文件描述符也是一对多的关系(可能多个文件描述符指向同一文件表)
    (这里解释下为什么进程表和文件表一对多的关系只是一般情况下,有什么特殊情况呢?  当父进程fork一个子进程时,复制了它的进程表,导致多个进程表对一个文件表)
             文件表中包含了文件状态标志、当前偏移量、和V-node pointer表项
                文件状态标志如:read,  write,  append,  sync, nonblocking等等
                偏移量好理解,就不多解释了(它在write时会变化)
                V-node pointer就是指向V-node表的指针
            
        3 V节点表(Linux只有i节点表)
            每一个没打开的文件有一个V节点表。V-node table实际上跟进程关系不大,主要跟被打开的文件相关。一个打开的文件只有一个v-node表,所有打开它的进程共用此表
            文件表对V节点表示多对一的关系。
            V-node表主要是描述了文件信息、数据的访问入口

    一个进程打开多个文件


        如《APUE E3rd》的Figure3.7所示,一个进程打开多个文件。
        文件描述符0和1各通过一个文件表打开一个文件
        注:可能文件描述符0和3指向同一个文件表

    多个进程打开一个文件

        
        如《APUE E3rd》中figure 3.8所示,两个进程打开同一个文件。
        两个进程使用的文件表都是进程独有的。也就是说一个文件表虽然是内核维护的,但它至属于某一个特定进程。
            
  • 相关阅读:
    24.最优布线问题(kruskal算法)
    24.最优布线问题(kruskal算法)
    Algs4-1.4.11为StaticSETofInts添加一个实列方法howMany()
    Algs4-1.4.9预测程序运行时间
    Algs4-1.4.10二分查找找出元素所在的最小索引
    Algs4-1.4.7统计算术运算与比较次数
    Algs4-1.4.8计算输入文件中相等的整数对的数量
    Algs4-1.4.6给出以下代码段的运行时间的增长数量级
    Algs4- 1.4.4参照表1.4.4为TwoSum建立一和类似的表格
    Algs4-1.4.2修改ThreeSum防止两个int值相加可能溢出
  • 原文地址:https://www.cnblogs.com/Windeal/p/4284664.html
Copyright © 2020-2023  润新知