procfs 和 sysfs 有什么区别?

Sen*_*Sen 81 linux filesystems proc sysfs

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

Tim*_*ird 87

一开始(回到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。 (9认同)
  • 在许多 Unix 系统和 Linux 上,这些设备文件由组 `kmem` 拥有,像 `ps` 这样的工具是 SGID `kmem`。 (2认同)
  • 事实上,直接访问`/dev/mem` 或`/dev/kmem` 的旧方法对于内核来说更快,因为用户模式进程可以通过读取RAM 来`mmap` 文件并获取所有信息。从`/proc` 文件系统获取任何信息都需要一个系统调用用于`open`,另一个用于`read`,因此速度要慢得多。然而,`/proc` 不需要内核特定的 hack 来读取内存,并且向用户模式进程公开的敏感数据要少得多。 (2认同)
  • 这应该是公认的答案。这个答案是正确的,被接受的答案不是,它提供了更多有用的信息。 (2认同)

Joh*_*han 67

procfs 和 sysfs 有什么区别?

proc是旧的,它或多或少没有规则和结构。并且在某些时候决定这proc有点太混乱了,需要一种新的方式。

然后sysfs被创建,添加的新东西被放入sysfs像设备信息中。

所以从某种意义上说,他们做同样的事情,但sysfs更有条理。

为什么它们被做成文件系统?

UNIX 哲学告诉我们,一切都是一个“文件”,因此它被创建,因此它的行为就像文件一样。

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

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

但是您可以在 中找到更多proc未移动的旧东西。

  • 我猜他们在 sysfs 中加入了新的东西,只是保留旧的东西以保持一定程度的向后兼容性。有很多东西取决于进程中的那些东西...... (5认同)
  • 感谢您的回答.. 但是为什么 cpuinfo 和 meminfo 之类的东西仍然保留在 procfs 中?为什么它们不能移动到 sysfs? (3认同)

Cir*_*郝海东 13

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