proc源码解析(一)--proc文件系统的内容

来源:互联网 发布:房地产市场数据 编辑:程序博客网 时间:2024/05/22 17:04

      在linux系统中,伪文件系统是系统中重要的组成部分,它与普通文件的最大差别在于它的易失性。普通文件都有固定的存储介质,而伪文件系统则存储在内存中,这也使得伪文件系统在系统掉电后,它保存的内容就会挥发掉。
Linux系统中存在以下几类伪文件系统:
1.procfs:proc提供内核和用户交互的平台,由于其文件格式是ASCII,所以用户可以使用cat,vim,echo等命令查看或修改文件,当然必须在root用户下才有相应权限。
2.sysfs:与procfs类似,由于出现的比较晚,所以它克服了proc的一些缺点,比proc功能更强大。但是由于其文件格式是二进制形式,所以需要特殊工具。该文件系统主要为开发人员提供。
3.其它伪文件系统如:libfs,debugfs等。
    在这些文件系统中,proc出现比较早,其实现也很典型。proc最初的设计目的是提供内核和用户交互的平台,使用户可以动态的管理系统,同时获取系统的运行时的信息。在proc中主要的信息便是系统进程信息。
    本节主要说明proc的实现。
一.proc文件系统的内容
    proc中主要的文件包含以下几类:
1.进程相关的目录
    在proc下以数字命名的目录便是每个进程对应的目录,这些目录下存储着各个进程的信息。可以使用cat命令查看各个文件中保存的进程信息。例如/proc/0/下存储着系统初始化init进程的信息。
root@xuhengyang:/proc/1# ls -l
总用量 0
dr-xr-xr-x 2 root root 0 2009-11-19 20:09 attr
-r-------- 1 root root 0 2009-11-19 20:09 auxv
-r--r--r-- 1 root root 0 2009-11-19 20:09 cgroup
--w------- 1 root root 0 2009-11-19 20:09 clear_refs
-r--r--r-- 1 root root 0 2009-11-19 03:56 cmdline
-rw-r--r-- 1 root root 0 2009-11-19 20:09 coredump_filter
-r--r--r-- 1 root root 0 2009-11-19 20:09 cpuset
lrwxrwxrwx 1 root root 0 2009-11-19 20:09 cwd -> /
-r-------- 1 root root 0 2009-11-19 20:09 environ
。。。
root@xuhengyang:/proc/1# cat cmdline
/sbin/init
2.通用系统信息
     通用系统信息主要包括内存管理信息,文件系统信息,设备驱动信息,系统总线信息,电源管理信息等。每种信息都有对应文件存在。例如:
root@xuhengyang:/proc# cat meminfo
MemTotal: 3059316 kB
MemFree: 702464 kB
Buffers: 444540 kB
Cached: 1183516 kB
SwapCached: 0 kB
Active: 1470404 kB
。。。
     每种信息都有对应的文件名,此处就不一一说明了。
3.网络信息
/proc/net是一个符号链接,它指向当前进程的/self/net/目录,该目录下保存着当前进程的网络管理信息。
root@xuhengyang:/proc# ls -l net
lrwxrwxrwx 1 root root 8 2009-11-19 20:23 net -> self/net
4.系统控制信息
    系统控制参数用来检测修改系统的运行参数。它存在与/proc/sys下。用户可以使用cat,echo来查看或修改系统的运行参数。例如:
root@xuhengyang:/proc/sys# ls -l
总用量 0
dr-xr-xr-x 0 root root 0 2009-11-19 10:33 crypto
dr-xr-xr-x 0 root root 0 2009-11-19 10:33 debug
dr-xr-xr-x 0 root root 0 2009-11-19 10:33 dev
dr-xr-xr-x 0 root root 0 2009-11-18 19:57 fs
dr-xr-xr-x 0 root root 0 2009-11-19 03:56 kernel
dr-xr-xr-x 0 root root 0 2009-11-18 19:57 net
dr-xr-xr-x 0 root root 0 2009-11-19 10:33 vm
    swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。此处可以使用echo来修改该值,但是这种修改只是临时的,系统重启后还会恢复到60,要永久修改
root@xuhengyang:/proc/sys# cat vm/swappiness
60
root@xuhengyang:/proc/sys# echo "10" >vm/swappiness
root@xuhengyang:/proc/sys# cat vm/swappiness
10
    但是这只是临时性的修改,在你重启系统后会恢复默认的60,所以,还要做一步:
$ sudo gedit /etc/sysctl.conf
在这个文档的最后加上这样一行:
vm.swappiness=10
然后保存,重启。ok,你的设置就生效了。

原创粉丝点击