Solaris内核目录( 四 )



除了VFS和vnode结构,procfs实现中主要定义了两个数据结构用于描述/proc目录下文件对象 。第一个是prnode结构(/usr/include/sys/proc/prdata.h),描述那些最终链接到vnode的文件系统相关数据 。内核UFS实现定义了一个inode做为描述一个UFS文件的文件系统相关数据结构,类似的,内核procfs实现定义了一个prnode描述一个procfs文件 。/proc目录下的每个文件有一个vnode和prnode对应 。

第二个是prcommon结构,遍布整个/proc目录结构,换句话说,每个/proc/
和/proc//lwp/目录本身都对应一个prcommon结构,但是这些目录下的
文件对象并没有对应一个prcommon结构,因为访问这些文件对象时必然与一个确定的进程或者LWP相关 。prcommon结构对这些目录下的文件对象共性进行抽象 。prnode和prcommon结构定义在/usr/include/sys/proc/prdata.h文件中 。参看图2 。

--------------------------------------------------------------------------

/proc

prnode prcommon
----
---------------------------------| | | |
| |----
| |
|------------------------------------------------------
| prnode prcommon | prnode prnode prnode per-process |
lwp----| as--cred--psinfo--... file objects |
/ | | | | | | | | | | | |
/----|------|
/ prnode prcommon------------------------------------------------------
----
| | | |
----

-------------------------------------------------------------------------------
| prnode prnode prnode prnode per-lwp |
| lwpctl--lwpinfo--lwpstatus--lwpusage--... file objects |
| | | | | | | | | |
|--------|
-------------------------------------------------------------------------------

图2. prnode和prcommon结构定义

--------------------------------------------------------------------------

每个进程有自己的主/proc vnode(就是说这个vnode对应/proc/文件),进程中
每个LWP有自己的vnode对应/proc//lwp/文件,参看图3 。

--------------------------------------------------------------------------

回指到proc结构
<-------------
prnode prcommon |
--------------> --------------> ----------procdir |
| proc | | | pr_next ----|--| | prc_slot ----> ---------|
| structure | /proc | | pr_common --|--|-----------| pe_proc --
|---------| /| | pr_files ---|--|----------------| pe_next |
| | | | vnode | | pr_vnode | | |---------
一 | | p_trace --------------> ---------| | | | pe_proc |
| | p_plist | | | | |vnode | | | | | pe_next |
个 | | | | | | |structure| | | |---------
|---------| | | | | | | | | pe_proc |
多 | |--|-|v_data | | | | | pe_next |
| kthread LWP | /proc |---------| | |---------
线 |---------| /-------------| | | pe_proc |
| | | | /lwp/ vnode | | | pe_next |
程 | | t_trace -----prnode | |---------
| | | | |-> ------------- <-| | pe_proc |
进 |---------| | | | pr_next ----|--prcommon | | pe_next |
| | | | | pr_common --|--|---> ---------- |---------
程 | kthread LWP | | | | pr_files | | | prc_slot || | |
|---------| | | | pr_vnode | |---------- | | |
| | | |--------> ---------| | | | |
| | t_trace -----| | |vnode | | | |
| | | | | | | |structure| | | |
|---------| | | | | | | |--> ---array of
-------------|--|-|v_data | | | | | pointers
| |---------| |---to vnodes
|-------------| | | for all files
/proc//lwp | |---within the
/ vnode | prnode | | | Directory
|-> ------------- <-.....
| | | pr_next | prcommon | |
| | | pr_common --|------> -------------
| | | pr_files | | prc_slot | | |
| | | pr_vnode |-------------
--------> ---------|
| | |vnode | |
| | |structure| |
| | | | |
--|-|v_data | |
|---------|
-------------

图3. 一个多线程进程所涉及结构之间的关联

--------------------------------------------------------------------------

下面是在我的Sun工作站上找到的相应头文件内容:

推荐阅读