GNU/Linux >> Tutoriales Linux >  >> Linux

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

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
  • sysfs está más restringido en los siguientes sentidos:

    • implementas solo dos métodos show y store , que Linux usa para implementar open , close , read , write y lseek 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


Linux
  1. ¿La diferencia entre los comandos Halt y Shutdown?

  2. ¿La diferencia entre [[ $a ==Z* ]] y [ $a ==Z* ]?

  3. ¿Cuál es la diferencia entre fsck y e2fsck?

  4. ¿Cuál es la diferencia entre adduser y useradd?

  5. ¿Cuál es la diferencia entre ls y l?

¿Cuál es la diferencia entre Linux y Unix?

¿Cuál es la diferencia entre Shell de inicio de sesión y sin inicio de sesión?

¿Cuál es la diferencia entre el comando apt y apt-get?

¿Qué es un Hipervisor? ¿Cuál es la diferencia entre el tipo 1 y 2?

¿Cuál es la diferencia entre curl y Wget?

¿Cuál es la diferencia entre la llamada al sistema y la llamada a la biblioteca?