关闭

Proc 文件系统总结

标签: 内核kernelproc
892人阅读 评论(0) 收藏 举报
分类:

Proc 文件系统总结

 

1  概述

                Proc文件系统(Process data filesystem, 进程数据文件系统)可以生成操作系统的状态和配置信息,并组织成目录和文件的形式,让用户可以方便查看和修改(通过cat等操作普通文件的方式)。在开发应用程序的过程中也可以随时方便读取。该文件系统是一个虚拟文件系统,也就是它实际不保存在块存储设备上,只有在读取时才动态生成所要的信息。

                Proc文件系统包含的信息主要包含以下几大类:

·         内存管理

·         系统进程的特征数据

·         文件系统

·         设备驱动程序

·         系统总线

·         电源管理

·         终端

·         系统控制参数

子文件夹截图

 

2  详细信息

2.1 特定进程信息

                操作系统创建的每一个进程在/proc文件夹下都有与之对应的一个子文件夹(以进程pid号命名)。

                

                                                Pid为1的进程对应的文件夹下的内容

文件/文件夹名

内容描述

Cmdline

包含起点进程的命令行(程序名和参数)

Environ

为改程序设置的所有环境变量

Maps

进程使用的所有库

Status

包含进程状态信息(例如Name, Pid, Gid, Uid等)

Stat/statm

进程及其内存消耗的详细信息

Cwd

保存进程当前工作目录

Exe

指向包含进程对应应用程序的二进制文件

Root

指向进程根目录

 

2.2 一般性系统信息

                与特定子系统无关的信息,也就是与其他子系统共享的信息

               

文件/文件夹名

内容描述

/proc/iomem

提供用来与设备通信的内存地址有关信息

/proc/ioports

提供用来与设备通信的端口有关信息

/proc/buddyinfo

提供伙伴系统当前使用情况信息

/proc/slabinfo

提供slab分配器当前使用情况信息

/proc/meminfo

提供一般性的内存使用情况

/proc/vmstat

提供内存管理的其它特征信息

/proc/kallsyms

提供全局内核变量和函数在内存中的地址

/proc/kcore

动态内核文件,指向运行中的内核的所有数据,即主内存的全部内容。

/proc/interrupts

保存了当前操作期间引发的终端说明

 

2.3 网络信息

                /proc/net子目录包含了内核网络相关的数据

 

2.4 系统控制参数

                用于动态检查和修改内核行为的系统控制参数。在/proc/sys文件夹下。

                

                                                /proc/sys文件夹内容截图

               

3 proc相关主要内核文件和数据结构

3.1  <proc_fs.h>

                Proc_dir_entry结构: /proc下的每一个文件都是由这个结构构成

 

struct proc_dir_entry {

                unsigned int low_ino; // inode编号

                umode_t mode;// 文件访问权限

                nlink_t nlink; //符号链接数目

                kuid_t uid;

                kgid_t gid;

                loff_t size; // 按字节计算文件大小,由于/proc下的文件时动态生成的,这里是0

                const struct inode_operations *proc_iops;//指向inode_operations类型的指针

                /*

                 * NULL ->proc_fops means "PDE is going away RSN" or

                 * "PDE is just created". In either case, e.g. ->read_proc won't be

                 * called because it's too late or too early, respectively.

                 *

                 * If you're allocating ->proc_fops dynamically, save a pointer

                 * somewhere.

                 */

                const struct file_operations *proc_fops; // 指向file_operations类型的指针

                struct proc_dir_entry *next, *parent, *subdir;// 指向父文件夹和子目录的第一个文件或文件夹得指针

                void *data;

                read_proc_t *read_proc;//指向读/proc下文件的函数

                write_proc_t *write_proc;//指向向/proc下文件写内容的函数

                atomic_t count;                                /* use count */

                int pde_users;   /* number of callers into module in progress */

                struct completion *pde_unload_completion;

                struct list_head pde_openers;   /* who did ->open, but not ->release */

                spinlock_t pde_unload_lock; /* proc_fops checks and pde_users bumps */

                u8 namelen; // 文件名长度

                char name[]; // 文件名

};

 

               

通过/proc文件系统修改系统控制参数实例

 

Example 1

                通过修改/proc/sys/vm/swappiness文件来控制交换算法在换出页时的积极程度。

Step1 查看当前值

                

                                通过cat命令查看swappiness文件内容(当前值为60)

Step2 修改当前值

                

                                通过echo命令将90写入到swappiness文件中(数字越大,换出越积极)

Step3 查看修改结果

                

                                修改后结果为90


有道笔记连接: http://note.youdao.com/share/?id=6649fefbde6072801dd6f57f8214dc3d&type=note


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34567次
    • 积分:621
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:4篇
    • 译文:0篇
    • 评论:4条
    文章存档
    最新评论