procfs和sysfs有什么区别?


71

procfs和sysfs有什么区别?为什么将它们制成文件系统?据我了解,proc只是存储有关系统中正在运行的进程的即时信息的东西。

Answers:


61

procfs和sysfs有什么区别?

proc是旧的,几乎没有规则和结构。在某个时候,它决定proc有点太混乱了,需要一种新的方法。

然后sysfs创建,并将添加的新内容放入sysfs设备信息中。

因此,从某种意义上讲,它们也是如此,但是sysfs结构性更高。

为什么将它们制成文件系统?

UNIX哲学告诉我们,一切都是“文件”,因此创建它的目的是使其表现为文件。

据我了解,proc只是存储有关系统中正在运行的进程的即时信息的东西。

这些部分一直在那里,可能永远不会进入sysfs

但是,您可以在中找到更多旧的东西proc,并且没有被移动。


2
感谢您的回答。但是,为什么像cpuinfo和meminfo这样的东西仍保留在procfs中?为什么不能将它们移至sysfs?

5
我猜他们将新的东西放在sysfs中,而只保留旧的,以保持一定程度的向后兼容性。有很多东西取决于这些事情在处理...
约翰

74

在开始时(在Unix中),程序发现系统上正在运行的进程的方式是直接从内核内存中读取进程结构(打开/ dev / mem,并直接解释原始数据)。这就是最初的“ ps”命令的工作方式。随着时间的流逝,一些信息可以通过系统调用获得。

但是,通过/ dev / mem将系统数据直接暴露给用户空间是一种不好的形式,并且每次您要导出一些新的过程数据时都不断地创建新的系统调用是令人讨厌的,因此创建了一种新的方法访问用户空间应用程序的结构化数据以查找有关流程属性的信息。这是/ proc文件系统。使用/ proc,即使内核中的基础数据结构发生了变化,接口和结构(目录和文件)也可以保持不变。与以前的系统相比,它不那么脆弱,并且扩展性更好。

/ proc文件系统最初旨在发布过程信息和一些关键系统属性,这些属性是“ ps”,“ top”,“ free”和其他一些系统实用程序所必需的。但是,由于它易于使用(从内核端和用户空间端),因此成为整个系统信息范围的垃圾场。而且,它开始获取读/写文件,用于调整设置并控制内核或其各个子系统的操作。但是,实现控制接口的方法是临时的,并且/ proc很快陷入混乱。

sysfs(或/ sys文件系统)旨在为这种混乱增加结构,并提供一种统一的方式来从内核向用户空间公开系统信息和控制点(可设置的系统和驱动程序属性)。现在,注册驱动程序时,内核中的驱动程序框架会根据驱动程序类型及其数据结构中的值自动在/ sys下创建目录。这意味着特定类型的驱动程序都将具有通过sysfs公开的相同元素。

/ proc中仍然可以访问许多旧版系统信息和控制点,但是所有新的总线和驱动程序都应通过sysfs公开其信息和控制点。


8
原因之一,它是“坏的形式”使用/dev/mem,并/dev/kmem是他们需要root权限,所以使用它们拥有的应用程序是setuid的。
Barmar 2014年

2
在许多Unix系统和Linux上,这些设备文件是该组的所有者kmem,而psSGID之类的工具kmem

2
实际上,直接访问内核的旧方法/dev/mem/dev/kmem内核访问速度更快,因为用户模式进程可以仅mmap通过读取RAM来获取文件和获取所有信息。从/proc文件系统获取任何信息都需要一个系统调用,open而另一个则需要这样做,read因此它要慢得多。但是,/proc并不需要特定于内核的hack来读取内存并将敏感度较低的数据公开给用户模式进程。
Mikko Rantalainen

10

procfs允许任意file_operations,sysfs更受限制


3

sysfs是在2.6内核发行周期中创建的虚拟文件系统,用于显示设备信息,因为procfs不能很好地处理此类信息。

内存等尚未移植到sysfs,因为它从未打算显示该类型的信息,因此完全不可能移植。


内存等尚未移植到sysfs移植是什么意思?为什么不打算显示此类信息?你能给我解释一下吗。
森2010年

移植是指移动,这是对是否将Memory等移动到sysfs的问题的答案。而且它只是用来显示设备信息,因为那是procfs不能很好地完成的事情,procfs对于其他类型的信息仍然非常有用。
kemra102 2010年

1

我也想在这里添加... / proc是较旧的版本,它包含该时间段的内核设备信息。.由于sysfs带有2.6内核版本,因此设备驱动程序信息将通过该目录创建自己的目录有点结构化,易于访问。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.