现在的位置: 首页 >> 操作系统 >> Solaris >> Solaris内核目录
添加时间:2005-8-21 来源:网教中国 作者:
Solaris内核目录

目录:

概述
◆ /proc/目录简介
◆ procfs的实现
后记

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

概述:

进程文件系统 -- procfs -- 允许像管理文件那样直接管理内核进程。

进程文件系统,procfs,是一个伪文件系统,提供了内核进程表的文件系统接口,
Jim Mauro 在这里概要介绍了procfs。

翻译本文的目的在于编写64-bit下的SLKM,欢迎对此感兴趣的朋友交流。

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

◆ /proc/目录简介

进程文件系统,procfs,是一个伪文件系统,它允许对一些非传统意义上的文件
通过标准文件I/O接口进行访问。procfs将Solaris内核进程架构进行了抽象,比如当前系统中所有运行着的进程会在/proc/目录下有所体现。系统中每个进程对应/proc/目录下的一个子目录,子目录名即相应进程号(PID),所有进程号子目录构成了/proc/目录的全部内容。

许多提供进程数据和控制点的内核数据结构在/proc//子目录下有相应反映,
比如,多线程进程中每个LWP的相关数据和控制结构体现在/proc//lwp/
中。 /proc/目录下的对象不是真实磁盘文件,这些对象位于内核内存中,用户执行ls(1)命令显示/proc/目录结构时,系统读取内核内存并返回相应内容。

通过/proc,相对简便地就可以获取进程信息,比如进程执行环境、内核资源利
用率。进程控制和procfs直接相关,procfs最初的设计目的很简单,就是为编写调试器提供一组接口,现在已经有了相当大的改进。

Solaris系统在/usr/proc/bin/目录下提供了一组工具从/proc中析取进程信息,
同时可以进行简单的进程控制。可以参看proc(1)手册页。进程状态命令ps(1)也利用了procfs接口。

下面列举可以通过/proc文件系统获取的控制和信息数据,关于这些文件的详细
信息参看proc(4)手册页。

/proc -- procfs的根目录

/proc/ -- 某一确定进程的根目录,进程PID正是子目录名

/proc//as -- 进程地址空间,即struct proc结构中p_as成员。换句话说,进
程地址空间以/proc//as文件的形式展现出来,通过这个伪文件系统接口可以访
问相应进程地址空间。

struct as * p_as; /* 进程地址空间指针 */

# ls -l /proc/53/as
-rw------- 1 root root 1458176 2月 8 17:34 /proc/53/as

struct proc结构定义在/usr/include/sys/proc.h文件中。

/proc//ctl -- 一个进程控制文件。可以只写打开该文件,然后给相应进程发
送控制信息。可以停止、启动进程,设置进程停止于某一特殊事件。这演示了procfs的强大和便捷。进程控制、事件跟踪可以通过打开相应进程的控制文件完成,只需要写入期待行为的控制信息。参看proc(4)手册了解控制信息和控制函数的详细介绍。

/proc//status -- 进程状态信息。对应/usr/include/sys/procfs.h文件里定
义的struct pstatus结构。proc(4)手册页里也有描述。这个结构中有一个成员

lwpstatus_t pr_lwp; /* status of the representative lwp */

该成员对应一个有代表性的LWP(轻量级进程)。单线程进程只有一个LWP,很容易选定这个有代表性的LWP。那些多线程进程通常有多个LWPs,一个内核函数遍历当前进程的所有LWPs,根据他们的状态选取这个有代表性的LWP。首先选取正在执行中的LWP,如果不存在这样的LWP,按照可运行、休眠、停止的顺序选取LWP。

/proc//lstatus -- lwpstatus结构数组,进程中每个LWP对应一个lwpstatus结构。struct lwpstatus结构定义在/usr/include/sys/procfs.h文件中。

/proc//psinfo -- 类似ps(1)命令提供的进程信息。对应struct psinfo结构,
类似struct pstatus结构,struct psinfo结构中有一个成员

lwpsinfo_t pr_lwp; /* information for representative lwp */

该成员的对应一个有代表性的LWP。

/proc//lpsinfo -- lwpsinfo结构数组,进程中每个LWP对应一个lwpsinfo结构

/proc//map -- 地址空间映射信息,可以用pmap(1)命令显示这些数据信息。

/proc//rmap -- 进程中保留地址空间段。用pmap -r命令显示这些数据信息。

/proc//xmap -- 扩展地址空间映射信息。用pmap -x命令显示这些数据信息。

/proc//cred -- 进程身份验证信息,对应/usr/include/sys/procfs.h文件中
定义的struct prcred结构。

/proc//sigact -- sigaction结构数组,描述和本进程相关的所有信号设置。
struct sigaction结构定义在/usr/include/sys/signal.h文件中。

/proc//auxv -- auxv_t结构数组,包含进程执行时传递给动态链接器的初始值。
auxv_t结构定义在/usr/include/sys/auxv.h文件中。

/proc//ldt -- 局部描述符表(LDT),仅存于Intel x86架构。

/proc//usage -- 进程资源利用率的相关数据,对应struct prusage结构,该
结构定义在/usr/include/sys/procfs.h文件中。

/proc//lusage -- prusage结构数组,对应各个LWP资源利用状况。

/proc//pagedata -- 进程地址空间的另外一种表现方式,可以用于跟踪页面级
的引用和修改。参看struct prpageheader结构定义。

/proc//watch -- prwatch结构数组。通过写控制文件/proc//ctl可以设
置PCWATCH操作,此时建立该文件。允许监视一个或多个地址空间范围,当访问这些
被监视页面时,产生一次陷入。

scz注:这个功能和SoftIce的BPR功能类似,adb支持这种陷入,不知是否利用了
procfs

/proc//cwd -- 到进程当前工作目录的符号链接

/proc//root -- 到进程根目录的符号链接(和上面那个什么区别)

/proc//fd -- 这是一个子目录,包含进程打开的文件句柄

/proc//fd/nn -- 对应进程打开的某个确定的文件句柄

/proc//object -- 这是一个子目录,包含进程相关的可执行文件以及动态链接
库。

/proc//object/nn -- 二进制目标文件。进程对应的可执行文件名为a.out,其
余是进程相关的动态链接库文件。

object目录提供的信息是进程级的,每个/proc//目录有一个lwp子目录,提供
了LWP级的信息:

/proc//lwp -- 这是一个子目录,包含进程中所有LWPs的信息

/proc//lwp/ -- 这是一个子目录,包含对应lwpid的LWP信息

/proc//lwp//lwpctl -- 一个控制文件,通过它可以在LWP级上针对每
个LWP发布控制操作

/proc//lwp//lwpstatus -- LWP状态信息,对应lwpstatus结构,该结
构定义在/usr/include/sys/procfs.h文件中

/proc//lwp//lwpsinfo -- 对应lwpsinfo结构,同样定义在
/usr/include/sys/procfs.h文件中

/proc//lwp//lwpusage -- LWP资源利用信息,对应prusage结构

/proc//lwp//xregs -- 这个文件是处理器架构相关的,某些平台上可
能没有这个文件。对于SPARC系统,这个文对应/usr/include/sys/procfs_isa.h文件中定义的prxregset结构。

/proc//lwp//gwindows -- 常规寄存器窗口。这个文件仅存于SPARC架
构的系统,描述LWP使用的常规寄存器组(硬件上下文的一部分),对应gwindows结构,该结构定义在/usr/include/sys/regset.h文件中。

/proc//lwp//asrs -- 辅助寄存器组,仅存于SPARC V9(UltraSPARC)架
构,专为SPARC V9架构定义的一组额外的硬件寄存器,要求sun4u、64-bit内核(Solaris 7及其后续版本)、64-bit进程。注意,64-bit内核可以运行32-bit进程,但是32-bit进程没有这样一个文件与之对应。

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

◆ procfs的实现

procfs是通过动态可加载内核模块的方式实现的。系统启动时自动加载
/kernel/fs/procfs,/etc/vfstab文件中存在缺省/proc入口,系统启动过程中/proc将被mount上来。mount

[1] [2] [3] [4] [5]  下一页


上一篇:关于Solaris的syslog机制 下一篇:浅谈rc2.d
大部分文章摘自网上,如有侵犯您的权益请与我们联系,我们会第一时间进行处理,谢谢! [ 打印文章 ] [ 关闭窗口 ]
推荐文章
·Solaris 8 (Intel 平台版本)安装
·Solaris 命令格式
·Solaris8 双网卡配置(路由器用
·实时连接器ld.so.1文件损坏或丢,
·Solaris7 交流 -- 重新配置系统
·Solaris高级系统管理员指南 (4
·Solaris 网络地址和掩码
·Solaris Net Install SUNOS
·Solaris VCS(Veritas Cluster Se
·SUN E3500与D1000升级流程和心得
相关文章
·关于Solaris的syslog机制
·solaris中有类似windows的DLL有
·在 Solaris 下建立可使用 pkgadd
·Solaris 系统log日志原理分析
·Solaris Cryptographic Framewor
·Solaris启动过程详解
·Solaris 安装GCC编译器
·给 Solaris 打补丁
·SUN SOLARIS 2.6 系统常用管理命
·Solaris(TM) for ISPs(TM) 服务
最新文章
·SUN Solaris 2.6系统的克隆方法
·Jumpstart安装实例
·我升级Sun Ultra 5 OBP&POST的过
·Sun Solaris 8 for Intel X86安
·如何使用 Solaris的系统帮助
·DiskSuite做raid 0的一些note
·solaris8学习资料 - 第九课
·solaris8学习资料 - 第八课
·solaris8学习资料 - 第七课
·solaris8学习资料 - 第六课
Google