分类: LINUX
2013-01-21 17:03:49
传统上,文件系统用于在块设备上持久存储数据。但也可以使用文件系统来组织、提欧或交换并不存储块设备上的信息,这些信息可以由内核动态生成。
proc文件系统(proc filesystem),它使得内核可以生成与系统的状态和配置有关的信息。该信息可以由用户和系统程序从普通文件读取,而无需专门的工具与内核通信。在某些情况下,一个简单的cat命令就足够了。数据不仅可以从内核读取,还可以通过向proc文件系统的文件写入字符串,来向内核发送数据。echo “value” > /proc/file;不会有这更容易的从用户空间向内核传输信息的方式了。
该方法利用了一个虚拟文件系统“即时”产生文件信息。换句话说,只有发出读操作请求时,才会生成信息。对于此类文件系统,不需要专用的硬盘分区或其他块存储设备。
除了proc文件系统之外,内核还提供了许多其他的虚拟文件系统,用于不同的目地。例如,以目录层次结构的形式,对所有设备和系统资源进行编目。即使设备驱动程序也可以在虚拟文件系统中提供状态信息,USB子系统就是一个例子。
sysfs是另一个特别重要的虚拟文件系统例子。一方面,它与procfs的目地类似,但在另一方面,又与procfs有很大不同。sysfs按照惯例总是装载在/sys目录,但这不是强制规定,装载到其他位置也是可以的。它设计为从内核向用户层导出非常结构化的信息。与procfs相比,它并不供人直接使用,因为信息是层次化、深度嵌套的。此外,文件包含的信息并不总是ASCII文本形式,也有可能使用不可读的二进制串。但对于想要收集系统中的硬件和设备间拓扑关联方面详细信息的工具而言,该文件系统是非常有用的。
还可以对使用kobject的内核对象创建sysfs项,这几乎不费力气。这使得用户层很容易访问内核中重要的数据结构。
用于专门目的的小文件系统,可以由内核提供的标准函数构建。在内核内部,libfs库提供了所需功能。此外,内核提供了易于实现顺序文件的方法。在调试文件系统debugfs中同时使用了这两种技术,该文件系统使得内核开发者能够快速地向用户空间导出值或从用户空间导入值,而无需创建定制的接口或专门的文件系统。