内核窗口---proc文件系统

内核窗口—proc文件系统

引言:在写进程调度笔记时,我特别好奇,想了解一下ubuntu 14.04到底采取的是什么调度策略,于是接触到proc文件系统,它内部包含很多内核数据信息。这里并不会分析每一个文件、每一条数据的含义。仅仅是介绍Proc文件系统产生背景,常见文件含义。以后遇到相关问题时,再深入学习。


一、Proc文件系统简单介绍

1.1、产生背景

  Linux内核是一个非常庞大、非常复杂的程序,对于这样一个程序来说,调试是一件非常复杂的事情。随着Linux内核版本更新迭代,给里面添加/修改一个功能是非常麻烦的,因为其可能会影响其他已有的。为了降低内核调试和学习的难度,内核开发者们在内核中天价了一些属性专门用于调试,proc文件系统就是一个尝试。

1.2、设计思路

  Proc文件的设计思路是:在内核中构建一个虚拟文件系统/proc, 将内核运行时其关键的数据结构以文件的方式呈现在/proc目录的特定文件中,以可视化的方式呈现给内核开发者。proc文件系统给开发者一种调试内核的方法:我们通过实时的观察/proc/xxx文件,来观看内核特定数据结构的值,当我们添加一个增删新功能时,可以知道这个新功能的影响是对还是不对。

这里写图片描述
图1、proc文件夹下部分内容

  这里仅截取了部分内容,并且用红色及绿色的框分成两部分,其中红色框内部文件以数字命名,其实际为进程的PID,文件夹内容记录进程的相关信息,会在后面介绍。绿色框内部包含了熟悉的buddyinfo、meminfo、cpuinfo等,这些反映了计算机硬件及内核的实时信息。

1.3、proc文件特性

  proc目录下文件的大小都是0,因为这些文件本身并不存在于磁盘中,它也不是一个真实的文件,只是一个接口。当我们去读取这个文件时,内核并不是磁盘找这个文件,而是映射为内核内部一个数据结构被读取,并且格式化成字符串返回给我们。所以尽管我们看到的还是一个文件内容字符串,和普通文件一样,但实际上这个内容是实时从内核的数据结构来得,而不是硬盘中来的。

这里写图片描述
图2、proc文件夹大小均为0

这里写图片描述
图3、文件只读特性


二、进程目录中的常见文件介绍

  /proc目录中包含许多以数字命名的子目录,这些数字表示当前系统正在运行进程的进程号,里面包含对应进程相关的多个信息文件。这里我们首先sleep 400& 开启一个后台运行的睡眠进程,其PID为3636。

这里写图片描述
图4、获得一个后台进程

这里写图片描述
图5、PID为3636的进程文件夹内部信息

1)、cmdline — 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息;

这里写图片描述
图6、cmdline

2)、fd — 这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接;

这里写图片描述
图7、fd内容

3)、limits当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅可由实际启动当前进程的UID用户读取;(2.6.24以后的内核版本支持此功能);

这里写图片描述
图8、limits文件夹内容

4)、mem -当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取;

5)、task— 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容;(内核2.6版本以后支持此功能)

这里写图片描述
图9、task文件夹下线程信息

6)、其他,可参考:深入理解linux系统下proc文件系统内容


三、/Proc目录下常见文件夹介绍

1)、/proc/vmstat :当前系统虚拟内存的多种统计数据,信息量可能会比较大,这因系统而有所不同

这里写图片描述
图10、虚拟内存信息

2)、/proc/slabinfo: 在内核中频繁使用的对象(如inode、dentry等)都有自己的cache,即slab pool,而/proc/slabinfo文件列出了这些对象相关slap的信息

这里写图片描述
图11、slab缓存信息

3)、/proc/meminfo: 系统中关于当前内存的利用状况等的信息,常由free命令使用;可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值;

这里写图片描述
图12、meminfo信息

4)、/proc/loadavg: 保存关于CPU和磁盘I/O的负载平均值,其前三列分别表示每1秒钟、每5秒钟及每15秒的负载平均值,类似于uptime命令输出的相关信息;第四列是由斜线隔开的两个数值,前者表示当前正由内核调度的实体(进程和线程)的数目,后者表示系统当前存活的内核调度实体的数目;第五列表示此文件被查看前最近一个由内核创建的进程的PID;

这里写图片描述
图13、系统负载信息

5)、/proc/filesystems:当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持;通常mount一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型;

这里写图片描述
图14、文件系统列表

6)、/proc/cpuinfo: 处理器的相关信息的文件;

这里写图片描述
图15、处理器相关信息

7)、/proc/buddyinfo :用于诊断内存碎片问题相关信息文件

这里写图片描述
图16、buddy伙伴算法信息

8)、更多参考:深入理解linux系统下proc文件系统内容


小结:/proc文件系统便于开发人员查看内核当前信息,其内部包括当前进程信息,及系统信息。

参考内容:

1、proc文件系统介绍
2、深入理解linux系统proc文件系统内容

纠错与建议
邮箱:[email protected]


猜你喜欢

转载自blog.csdn.net/xd_hebuters/article/details/79593892