¿Cuál es la diferencia entre procfs y sysfs?

71

¿Cuál es la diferencia entre procfs y sysfs? ¿Por qué se hacen como sistemas de archivos? Según tengo entendido, proc es solo algo para almacenar la información inmediata sobre los procesos que se ejecutan en el sistema.

Sen
fuente

Respuestas:

61

¿Cuál es la diferencia entre procfs y sysfs?

proces el antiguo, es más o menos sin reglas y estructura. Y en algún momento se decidió que procera un poco caótico y que se necesitaba una nueva forma.

Luego sysfsse creó, y las cosas nuevas que se agregaron se pusieron en sysfsinformación similar del dispositivo.

Entonces, en cierto sentido, hacen lo mismo, pero sysfsestán un poco más estructurados.

¿Por qué se hacen como sistemas de archivos?

La filosofía de UNIX nos dice que todo es un "archivo", por lo tanto, se creó para que se comporte como archivos.

Según tengo entendido, proc es solo algo para almacenar la información inmediata sobre los procesos que se ejecutan en el sistema.

Esas partes siempre han estado allí y probablemente nunca se mudarán sysfs.

Pero hay más cosas viejas que puedes encontrar proc, que no se han movido.

Johan
fuente
2
Gracias por la respuesta. Pero, ¿por qué cpuinfo y meminfo como cosas todavía se mantienen en procfs? ¿Por qué no pueden ser trasladados a sysfs?
Sen
55
Supongo que ponen cosas nuevas en sysfs, y simplemente dejan las viejas como están para mantener cierto nivel de compatibilidad hacia atrás. Hay muchas cosas que dependen de esas cosas en el proceso ...
Johan
75

Al principio (en Unix), la forma en que los programas se enteraron de los procesos en ejecución en el sistema fue leyendo directamente las estructuras del proceso desde la memoria del núcleo (abriendo / dev / mem e interpretando los datos sin procesar directamente). Así es como funcionaron los primeros comandos 'ps'. Con el tiempo, cierta información estuvo disponible a través de llamadas al sistema.

Sin embargo, es una mala forma exponer los datos del sistema directamente al espacio del usuario a través de / dev / mem, y es desagradable crear constantemente nuevas llamadas al sistema cada vez que desea exportar algunos datos nuevos del proceso, por lo que se creó un método más nuevo para acceder a datos estructurados para aplicaciones de espacio de usuario para conocer los atributos del proceso. Este era el sistema de archivos / proc. Con / proc, las interfaces y estructuras (directorios y archivos) podrían mantenerse iguales, incluso cuando las estructuras de datos subyacentes en el núcleo cambiaron. Esto era mucho menos frágil que el sistema anterior, y mejoró su escala.

El sistema de archivos / proc se diseñó originalmente para publicar información del proceso y algunos atributos clave del sistema, requeridos por 'ps', 'top', 'free' y algunas otras utilidades del sistema. Sin embargo, debido a que era fácil de usar (tanto del lado del kernel como del lado del espacio del usuario), se convirtió en un vertedero para toda una gama de información del sistema. Además, comenzó a ganar archivos de lectura / escritura, para ser utilizados para ajustar la configuración y controlar el funcionamiento del núcleo o sus diversos subsistemas. Sin embargo, la metodología de implementación de las interfaces de control era ad-hoc, y / proc pronto se convirtió en un lío enredado.

El sysfs (o sistema de archivos / sys) fue diseñado para agregar estructura a este desastre y proporcionar una forma uniforme de exponer la información del sistema y los puntos de control (sistema configurable y atributos del controlador) al espacio de usuario desde el núcleo. Ahora, el marco del controlador en el kernel crea automáticamente directorios bajo / sys cuando se registran los controladores, según el tipo de controlador y los valores en sus estructuras de datos. Esto significa que los controladores de un tipo particular tendrán todos los mismos elementos expuestos a través de sysfs.

Muchos de los puntos de control e información del sistema heredado todavía son accesibles en / proc, pero todos los buses y controladores nuevos deben exponer su información y puntos de control a través de sysfs.

Tim Bird
fuente
8
Una razón por la que es "mala forma" de usar /dev/memy /dev/kmemes que requieren acceso a la raíz, por lo que las aplicaciones que los usan deben configurarse.
Barmar
2
En muchos sistemas Unix y en Linux, esos archivos de dispositivo son propiedad del grupo kmemy herramientas como psSGID kmem.
contramodo
2
De hecho, el antiguo método de acceso directo /dev/memo /dev/kmemera más rápido para el núcleo porque el proceso en modo de usuario podía simplemente mmaparchivar y recuperar toda la información simplemente leyendo RAM. Obtener cualquier información del /procsistema de archivos requiere una syscall openy otra para readque sea mucho más lenta. Sin embargo, /procno requiere hacks específicos del núcleo para leer la memoria y expone datos mucho menos sensibles a los procesos en modo de usuario.
Mikko Rantalainen
10

procfs permite arbitrario file_operations, sysfs está más restringido

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
3

sysfs es el sistema de archivos virtual creado durante el ciclo de lanzamiento del kernel 2.6 para mostrar información del dispositivo, ya que procfs no hizo bien este tipo de información.

La memoria, etc., no se ha transferido a sysfs, ya que nunca tuvo la intención de mostrar ese tipo de información, por lo que es poco probable que se transfiera en absoluto.

kemra102
fuente
La memoria, etc. no se ha portado a sysfs. ¿Qué quiere decir con portar? ¿Y por qué no se pretendía mostrar ese tipo de información? ¿Podría por favor explicarme eso?
Sen
Por portado quería decir movido, que era una respuesta a su pregunta de si la memoria, etc., se moverá a sysfs. Y solo tenía la intención de mostrar información del dispositivo, ya que eso era lo que los procfs no hacían bien, procfs sigue siendo excelente para otros tipos de información.
kemra102
1

Como también quiero agregar aquí ... Como / proc es la versión anterior, contiene la información del dispositivo kernel de ese período de tiempo ... como sysfs vino con la versión 2.6 del kernel, por lo que la información del controlador del dispositivo crea su propio directorio por el cual está un poco estructurado y de fácil acceso.

gagan bajaj
fuente