您的位置:首页 > 其它

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

2012-09-18 11:46 204 查看
在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,你的设置就生效了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: