¿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.
fuente
¿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.
¿Cuál es la diferencia entre procfs y sysfs?
proc
es el antiguo, es más o menos sin reglas y estructura. Y en algún momento se decidió que proc
era un poco caótico y que se necesitaba una nueva forma.
Luego sysfs
se creó, y las cosas nuevas que se agregaron se pusieron en sysfs
información similar del dispositivo.
Entonces, en cierto sentido, hacen lo mismo, pero sysfs
está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.
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.
fuente
/dev/mem
y/dev/kmem
es que requieren acceso a la raíz, por lo que las aplicaciones que los usan deben configurarse.kmem
y herramientas comops
SGIDkmem
./dev/mem
o/dev/kmem
era más rápido para el núcleo porque el proceso en modo de usuario podía simplementemmap
archivar y recuperar toda la información simplemente leyendo RAM. Obtener cualquier información del/proc
sistema de archivos requiere una syscallopen
y otra pararead
que sea mucho más lenta. Sin embargo,/proc
no requiere hacks específicos del núcleo para leer la memoria y expone datos mucho menos sensibles a los procesos en modo de usuario.procfs permite arbitrario
file_operations
, sysfs está más restringidoentradas procfs reciben una
file_operations
estructura, que contiene punteros a funciones que determinan lo que ocurre con cada llamada al sistema basado en archivos, por ejemploopen
,read
,mmap
, etc., y se puede tomar acciones arbitrarias de los.Ejemplos mínimos:
/proc/*
funciona El | Super usuarioproc_create()
ejemplo para el módulo del núcleo | Desbordamiento de pilasysfs está más restringido en los siguientes sentidos:
show
ystore
que Linux utiliza para implementaropen
,close
,read
,write
ylseek
para usted. Consulte también: ¿Cómo adjuntar operaciones de archivo al atributo sysfs en el controlador de plataforma? El | Desbordamiento de pilakobject
Ejemplo mínimo: Cómo crear un atributo de clase sysfs simple en el kernel de Linux v3.2 | Desbordamiento de pila
fuente
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.
fuente
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.
fuente