UNIX内核的文件数据结构

2014-07-16 00:36:39   最后更新: 2014-07-16 00:36:39   访问数量:1177




UNIX 系统支持在不同进程间共享打开的文件

 

内核使用三种数据结构表示打开的文件,他们之间的关系决定了在文件共享方面一个进程可能对另一个进程的影响:

  1. 每个进程在进程表中都有一个记录项,其中包含一张打开的文件描述符表,可将其视为一个矢量,每个描述符占用一项,包含:
    1. 文件描述符标志
    2. 指向文件表项的指针

  2. 内核为所有打开的文件维护一张文件表,每个表项包含:
    1. 文件状态标志(读、写、读写、同步、非阻塞等)
    2. 当前文件偏移量
    3. 指向v节点的指针

  3. 每个打开的文件(或设备)对应一个 v 节点结构,包含 v 节点信息和 i 节点信息

如下图所示:

 

  • v 节点信息包含了文件类型和完成各种操作函数的指针
  • i 节点信息是在打开文件时从磁盘载入内存的,包含文件的所有者、长度、所在设备、指向实际数据块的指针等信息

每个已打开的文件描述符对应一个由内核维护的文件表,而文件表所指向的每一个v节点表对应一个文件,因此当多个进程共享同一个文件时,他们各自的文件表即指向同一个v节点表,而他们在自己的文件表中记录对于此文件各自的当前偏移量

多个文件描述符也可能指向同一个文件表项(使用 dup 函数),比如在 fork 后产生的父子进程中每一个打开文件描述符共享同一个文件表项

 






技术帖      操作系统      龙潭书斋      apue      unix环境高级编程      文件共享      进程间通信      文件系统      i节点      v节点      文件描述符     


京ICP备15018585号