2008年7月18日星期五

proc文件系统

刚好今天看到,关于proc文件系统
proc文件一般是一种展示特定内核部分相关信息的文本文件。
很多系统开发人员都使用proc文件系统这种可简易以用户模式显示内核相关信息的功能。/proc目录都很容易实现。另外,/proc目录可以动态地注册和注销,于是常常有一些模块用到proc目录。
奇怪:我用ls查看proc显示大小为0:
niutao@niutao-desktop:/$ ls -l
dr-xr-xr-x 137 root root 0 2008-07-17 23:44 proc
而用鼠标右键查看属性却显示:
15,815 items, totalling 896.2 MB
(some contents unreadable)
针对同一个目录proc两个的显示结果为什么会不一样?
究竟那个才是正确的?
/proc目录下的所有文件都是虚拟文件。所以你ls -l看到是0,而且你的时间好像有问题,现在还没有到23:00呢?否则感觉应该是你登录的时间。这也真好说明他是变化的,而其他很多是不变的,当然也有变化的。
个人认为,仅供参考,用鼠标,感觉就像你进到一个房间,你看到的东西,不论是真的还是虚的,你的感觉他有多的就有多大。而你ls -l是在/,好比是你在屋子外,问里面有些什么东西,他们有多大,如果他是虚的当然是0了。如果你在/proc下看就又显示他还是0,可是kcore却是那么大,和鼠标下显示的一样大!应该和这个有关吧!
-r-------- 1 root root 527306752 07-17 20:43 kcore
猜Nautilus可能通过读取文件内容来获取其大小~~那样就是非0了~~

/proc/kcore
This file represents the physical memory of the
system and is
stored in the ELF core file format. With this
pseudo-file, and
an unstripped kernel (/usr/src/linux/vmlinux) binary,
GDB can be
used to examine the current state of any kernel data
structures.

The total length of the file is the size of physical
memory (RAM) plus 4KB.
我们老师的回答是
/proc 文件系统是一种特殊的、由程序创建的文件系统,内核使用它向外界输出信息。/proc 下面的每个文件都绑定于一个内核函数,这个函数在文件被读取时,动态地生成文件的"内容",例如,/proc/modules 列出的是当前载入模块的列表。

Linux系统对/proc的使用很频繁。现代Linux系统中的很多工具都是通过 /proc 来获取它们的信息,例如 ps、top 和 uptime。有些设备驱动程序也通过 /proc 输出信息,你的驱动程序当然也可以这么做。因为 /proc 文件系统是动态的,所以驱动程序模块可以在任何时候添加或删除其中的文件项。

特征完全的 /proc 文件项相当复杂;在所有的这些特征当中,有一点要指出的是,这些 /proc 文件不仅可以用于读出数据,也可以用于写入数据。不过,大多数时候,/proc 文件项是只读文件。

time