【发布时间】:2015-09-01 23:49:33
【问题描述】:
一些内核库(例如 rpc)在内核中打开一个套接字,并与文件描述符 (FD) 相关联。任何访问代码的进程都可以使用这些。鉴于对于任何进程,FD 都存储在其文件描述符表中的 task_struct 中,这些内核 FD 存储在哪里以及它们是如何计算的? 这些不是由进程特别创建的(例如,这些 FD 是在 module_init 中创建的)。这些 FD 的值是如何分配的,进程 FD 以 0、1、2 开头并且可以重叠这些?
这也扩展到任何其他类型的 FD:文件、管道等。
【问题讨论】:
-
每个进程有一个单独的文件描述符表。
-
是的,这就是问题所在。在内核中创建套接字时,任何进程上下文都可以使用它。你如何区分?
-
每个进程的文件描述符用于查找对系统范围文件表的引用。来自
open手册页:“对 open() 的调用会创建一个新的打开文件描述,即系统范围的打开文件表中的一个条目......文件描述符是对这些条目之一的引用”。所以在不同进程(甚至在同一个进程内)的两个文件描述符可以引用同一个文件条目(不管描述符值是相同还是不同)。你是这个意思吗? -
不,我的问题是指 FD 的内核模式创建。这些内核模式 FD 可以被任何进程使用。
-
不确定我明白你的意思。从
open返回的FD由内核分配和管理。只是它为每个进程分配它,然后用作间接获取真正的文件条目。
标签: linux linux-kernel kernel kernel-module vfs