Answers:
procfs和sysfs有什么区别?
proc
是旧的,几乎没有规则和结构。在某个时候,它决定proc
有点太混乱了,需要一种新的方法。
然后sysfs
创建,并将添加的新内容放入sysfs
设备信息中。
因此,从某种意义上讲,它们也是如此,但是sysfs
结构性更高。
为什么将它们制成文件系统?
UNIX哲学告诉我们,一切都是“文件”,因此创建它的目的是使其表现为文件。
据我了解,proc只是存储有关系统中正在运行的进程的即时信息的东西。
这些部分一直在那里,可能永远不会进入sysfs
。
但是,您可以在中找到更多旧的东西proc
,并且没有被移动。
在开始时(在Unix中),程序发现系统上正在运行的进程的方式是直接从内核内存中读取进程结构(打开/ dev / mem,并直接解释原始数据)。这就是最初的“ ps”命令的工作方式。随着时间的流逝,一些信息可以通过系统调用获得。
但是,通过/ dev / mem将系统数据直接暴露给用户空间是一种不好的形式,并且每次您要导出一些新的过程数据时都不断地创建新的系统调用是令人讨厌的,因此创建了一种新的方法访问用户空间应用程序的结构化数据以查找有关流程属性的信息。这是/ proc文件系统。使用/ proc,即使内核中的基础数据结构发生了变化,接口和结构(目录和文件)也可以保持不变。与以前的系统相比,它不那么脆弱,并且扩展性更好。
/ proc文件系统最初旨在发布过程信息和一些关键系统属性,这些属性是“ ps”,“ top”,“ free”和其他一些系统实用程序所必需的。但是,由于它易于使用(从内核端和用户空间端),因此成为整个系统信息范围的垃圾场。而且,它开始获取读/写文件,用于调整设置并控制内核或其各个子系统的操作。但是,实现控制接口的方法是临时的,并且/ proc很快陷入混乱。
sysfs(或/ sys文件系统)旨在为这种混乱增加结构,并提供一种统一的方式来从内核向用户空间公开系统信息和控制点(可设置的系统和驱动程序属性)。现在,注册驱动程序时,内核中的驱动程序框架会根据驱动程序类型及其数据结构中的值自动在/ sys下创建目录。这意味着特定类型的驱动程序都将具有通过sysfs公开的相同元素。
/ proc中仍然可以访问许多旧版系统信息和控制点,但是所有新的总线和驱动程序都应通过sysfs公开其信息和控制点。
/dev/mem
,并/dev/kmem
是他们需要root权限,所以使用它们拥有的应用程序是setuid的。
kmem
,而ps
SGID之类的工具kmem
。
/dev/mem
或/dev/kmem
内核访问速度更快,因为用户模式进程可以仅mmap
通过读取RAM来获取文件和获取所有信息。从/proc
文件系统获取任何信息都需要一个系统调用,open
而另一个则需要这样做,read
因此它要慢得多。但是,/proc
并不需要特定于内核的hack来读取内存并将敏感度较低的数据公开给用户模式进程。
procfs允许任意file_operations
,sysfs更受限制
PROCFS条目收到一个file_operations
结构,它包含函数指针,决定什么发生在每一个基于文件的系统调用,例如open
,read
,mmap
等,你可以从那些随意行动。
最少的例子:
sysfs在以下方面有更多限制:
show
和store
,其中Linux使用来实现open
,close
,read
,write
和lseek
为您服务。另请参阅:如何在平台驱动程序中将文件操作附加到sysfs属性?| 堆栈溢出kobject
sysfs是在2.6内核发行周期中创建的虚拟文件系统,用于显示设备信息,因为procfs不能很好地处理此类信息。
内存等尚未移植到sysfs,因为它从未打算显示该类型的信息,因此完全不可能移植。