Al principio (en Unix), la forma en que los programas se enteraban de los procesos en ejecución en el sistema era mediante la lectura directa de estructuras de procesos desde la memoria del núcleo (abriendo /dev/mem e interpretando los datos sin procesar directamente). Así es como funcionaban los primeros comandos 'ps'. Con el tiempo, parte de la información estuvo disponible a través de llamadas al sistema.
Sin embargo, es de mala educación 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 una nueva pieza de datos de 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 si las estructuras de datos subyacentes en el núcleo cambiaran. Era mucho menos frágil que el sistema anterior y escalaba mejor.
El sistema de archivos /proc se diseñó originalmente para publicar información de procesos 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 desde el lado del kernel como desde el lado del espacio de usuario), se convirtió en un basurero para toda una gama de información del sistema. Además, comenzó a obtener archivos de lectura/escritura, que se utilizan para ajustar la configuración y controlar el funcionamiento del kernel o sus diversos subsistemas. Sin embargo, la metodología de implementación de interfaces de control fue 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 desorden y proporcionar una forma uniforme de exponer la información del sistema y los puntos de control (atributos configurables del sistema y del controlador) al espacio del usuario desde el kernel. Ahora, el marco de controladores en el kernel crea automáticamente directorios en /sys cuando los controladores están registrados, según el tipo de controlador y los valores en sus estructuras de datos. Esto significa que los controladores de un tipo en particular tendrán todos los mismos elementos expuestos a través de sysfs.
Todavía se puede acceder a muchos de los puntos de control y la información del sistema heredado en /proc, pero todos los buses y controladores nuevos deben exponer su información y puntos de control a través de sysfs.
¿Cuál es la diferencia entre procfsy 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 demasiado caótico y se necesitaba una nueva forma.
Entonces sysfs
se creó, y las cosas nuevas que se agregaron se colocaron en sysfs
como información del dispositivo.
Entonces, en cierto sentido, hacen lo mismo, pero sysfs
es un poco más estructurado.
¿Por qué están hechos como sistemas de archivos?
La filosofía UNIX nos dice que todo es un "archivo", por lo tanto fue creado para que se comporte como archivos.
Tal como lo entiendo, proc es solo algo para almacenar la información inmediata con respecto a los procesos que se ejecutan en el sistema.
Esas partes siempre han estado ahí y probablemente nunca se moverán a sysfs
.
Pero hay más cosas antiguas que puedes encontrar en proc
, que no se ha movido.
procfs permite file_operations
arbitrario , sysfs está más restringido
-
las entradas procfs reciben un
file_operations
struct, que contiene punteros de función que determinan qué sucede con cada llamada al sistema basada en archivos, p.open
,read
,mmap
, etc., y puede realizar acciones arbitrarias a partir de ellas.Ejemplos mínimos:
- ¿Cómo
/proc/*
¿trabajar? | Superusuario proc_create()
ejemplo de módulo kernel | Desbordamiento de pila
- ¿Cómo
-
sysfs está más restringido en los siguientes sentidos:
- implementas solo dos métodos
show
ystore
, que Linux usa para implementaropen
,close
,read
,write
ylseek
para ti. Ver también:¿Cómo adjuntar operaciones de archivos al atributo sysfs en el controlador de la plataforma? | Desbordamiento de pila - estrechamente acoplado con
kobject
Ejemplo mínimo:Cómo crear un atributo de clase sysfs simple en Linux kernel v3.2 | Desbordamiento de pila
- implementas solo dos métodos