procfs 和 sysfs 有什么区别?为什么它们被制作为文件系统?据我了解, proc 只是存储有关系统中运行的进程的即时信息。
答案1
一开始(早在 Unix 中),程序发现系统上正在运行的进程的方式是通过直接从内核内存读取进程结构(打开 /dev/mem,并直接解释原始数据)。这就是第一个“ps”命令的工作原理。随着时间的推移,一些信息是通过系统调用提供的。
然而,通过 /dev/mem 将系统数据直接暴露给用户空间是一种不好的形式,而且每次想要导出一些新的进程数据时不断创建新的系统调用也很令人讨厌,因此创建了一个更新的方法访问用户空间应用程序的结构化数据以了解进程属性。这是 /proc 文件系统。使用 /proc,即使内核中的底层数据结构发生变化,接口和结构(目录和文件)也可以保持不变。与早期的系统相比,它的脆弱性要低得多,并且可扩展性更好。
/proc 文件系统最初设计用于发布“ps”、“top”、“free”和其他一些系统实用程序所需的进程信息和一些关键系统属性。然而,由于它很容易使用(无论是从内核端还是用户空间端),它成为了整个系统信息的垃圾场。此外,它开始获得读/写文件,用于调整设置并控制内核或其各个子系统的操作。然而,实现控制接口的方法是临时的,/proc 很快就变得一团乱麻。
sysfs(或 /sys 文件系统)旨在为这种混乱添加结构,并提供一种统一的方式来从内核向用户空间公开系统信息和控制点(可设置的系统和驱动程序属性)。现在,当注册驱动程序时,内核中的驱动程序框架会根据驱动程序类型及其数据结构中的值自动在 /sys 下创建目录。这意味着特定类型的驱动程序都将具有通过 sysfs 公开的相同元素。
许多遗留系统信息和控制点仍然可以在 /proc 中访问,但是所有新的总线和驱动程序都应该通过 sysfs 公开它们的信息和控制点。
答案2
procfs 和 sysfs 有什么区别?
proc
是旧的,或多或少没有规则和结构。在某个时候,我们发现这proc
有点太混乱了,需要一种新的方式。
然后就sysfs
被创建了,添加的新东西sysfs
就像设备信息一样被放进去。
所以从某种意义上说,他们做同样的事情,但sysfs
更加结构化。
为什么它们被制作为文件系统?
UNIX 哲学告诉我们,一切都是“文件”,因此它被创建以使其表现得像文件。
据我了解, proc 只是存储有关系统中运行的进程的即时信息。
这些部分一直都在那里,他们可能永远不会搬进去sysfs
。
但是您可以在 中找到更多proc
未移动的旧内容。
答案3
procfs 允许任意file_operations
,sysfs 受到更多限制
procfs 条目接收一个
file_operations
结构,其中包含函数指针,这些函数指针确定每个基于文件的系统调用会发生什么,例如open
、read
、mmap
等,并且您可以从中采取任意操作。最小的例子:
sysfs 在以下方面受到更多限制:
- 您只需实现两个方法
show
和store
,Linux 使用这两个方法为您实现open
,close
,read
,write
和。lseek
也可以看看:如何将文件操作附加到平台驱动程序中的 sysfs 属性? |堆栈溢出 - 紧密结合
kobject
- 您只需实现两个方法
答案4
sysfs 是在 2.6 内核发布周期中创建的虚拟文件系统,用于显示设备信息,因为 procfs 不能很好地处理此类信息。
内存等尚未移植到 sysfs,因为它从未打算显示该类型的信息,因此根本不可能移植它。