内核窗口—proc文件系统
引言:在写进程调度笔记时,我特别好奇,想了解一下ubuntu 14.04到底采取的是什么调度策略,于是接触到proc文件系统,它内部包含很多内核数据信息。这里并不会分析每一个文件、每一条数据的含义。仅仅是介绍Proc文件系统产生背景,常见文件含义。以后遇到相关问题时,再深入学习。
一、Proc文件系统简单介绍
1.1、产生背景
Linux内核是一个非常庞大、非常复杂的程序,对于这样一个程序来说,调试是一件非常复杂的事情。随着Linux内核版本更新迭代,给里面添加/修改一个功能是非常麻烦的,因为其可能会影响其他已有的。为了降低内核调试和学习的难度,内核开发者们在内核中天价了一些属性专门用于调试,proc文件系统就是一个尝试。
1.2、设计思路
Proc文件的设计思路是:在内核中构建一个虚拟文件系统/proc, 将内核运行时其关键的数据结构以文件的方式呈现在/proc目录的特定文件中,以可视化的方式呈现给内核开发者。proc文件系统给开发者一种调试内核的方法:我们通过实时的观察/proc/xxx文件,来观看内核特定数据结构的值,当我们添加一个增删新功能时,可以知道这个新功能的影响是对还是不对。
这里仅截取了部分内容,并且用红色及绿色的框分成两部分,其中红色框内部文件以数字命名,其实际为进程的PID,文件夹内容记录进程的相关信息,会在后面介绍。绿色框内部包含了熟悉的buddyinfo、meminfo、cpuinfo等,这些反映了计算机硬件及内核的实时信息。
1.3、proc文件特性
proc目录下文件的大小都是0,因为这些文件本身并不存在于磁盘中,它也不是一个真实的文件,只是一个接口。当我们去读取这个文件时,内核并不是磁盘找这个文件,而是映射为内核内部一个数据结构被读取,并且格式化成字符串返回给我们。所以尽管我们看到的还是一个文件内容字符串,和普通文件一样,但实际上这个内容是实时从内核的数据结构来得,而不是硬盘中来的。