stringtranslate.com

Todo es un archivo

"Todo es un archivo" es una idea según la cual Unix y sus derivados manejan la entrada/salida hacia y desde recursos tales como documentos, discos duros, módems, teclados, impresoras e incluso algunas comunicaciones entre procesos y redes como simples flujos de bytes expuestos a través del espacio de nombres del sistema de archivos . [1] Las excepciones incluyen semáforos , procesos y subprocesos .

La ventaja de este enfoque es que el mismo conjunto de herramientas, utilidades y API se puede utilizar en una amplia gama de recursos y varios tipos de archivos . Cuando se abre un archivo, se crea un descriptor de archivo , utilizando la ruta del archivo como sistema de direccionamiento. El descriptor de archivo es entonces una interfaz de E/S de flujo de bytes en la que se realizan operaciones de archivo. También se crean descriptores de archivo para objetos como tuberías anónimas y sockets de red  ; por lo tanto, una descripción más precisa de esta característica es Todo es un descriptor de archivo . [2] [3]

Además, existe una variedad de sistemas de archivos pseudo y virtuales que exponen datos internos del núcleo, como información sobre procesos, al espacio del usuario en una estructura jerárquica similar a un archivo. [4] Estos se montan en la jerarquía de archivos únicos .

Un ejemplo de este sistema de archivos puramente virtual es /proc , que expone muchas propiedades del sistema como archivos. Todos estos archivos, en el sentido más amplio de la palabra, tienen atributos de archivo estándar de Unix, como un propietario y permisos de acceso , y pueden consultarse con las mismas herramientas y filtros clásicos de Unix . Sin embargo, esto no se considera universalmente un enfoque rápido o portátil. Algunos sistemas operativos no montan /proc de forma predeterminada debido a problemas de seguridad o velocidad, y en su lugar dependen de llamadas del sistema . [5] Sin embargo, las utilidades de shell de Linux lo utilizan mucho, [6] [7] como la implementación de ps de procps y BusyBox , que se instala ampliamente en sistemas integrados . [8] El programa Android Toolbox también depende de él. [9]

Otro ejemplo es sysfs , que normalmente se monta en /sys , que expone las estructuras de datos del núcleo . [10] sysfs proporciona una funcionalidad similar al mecanismo sysctl que se encuentra en los sistemas operativos BSD , con la diferencia de que sysfs se implementa como un sistema de archivos virtual en lugar de ser un mecanismo de núcleo especialmente diseñado. [11] La filosofía detrás de sysfs es representar cada valor con un archivo dedicado. Además, cada archivo tiene un tamaño máximo de PAGE_SIZEbytes.

Para un módulo del kernel hay tres posibilidades de utilizar un archivo debajo de /sys:

La API estándar de sysfs utiliza una terminología dedicada: un archivo se denomina atributo, la función que se ejecuta al leer un atributo se llama showy la que se utiliza para escribir un atributo se llama store. [12]

Sysfs se derivó de procfs entre las versiones del núcleo Linux 2.5-2.6, inicialmente como un sistema de archivos dedicado a depurar un nuevo modelo de controlador . Tanto sysfs como procfs están basados ​​en memoria. Sysfs contiene directorios para dispositivos de bloque , tipos de bus físico , clases de dispositivos (como los utilizados para gráficos , redes , entrada o impresión ), objetos y atributos específicos del firmware , módulos del núcleo y el subsistema de energía. [13]

Por ejemplo, escribir memen /sys/power/state activará un procedimiento de suspensión a RAM . [14]

Otro ejemplo de archivos con comportamientos específicos son los archivos de dispositivo /dev/null y /dev/zero . Las escrituras en ellos se descartarán. [15] Esto se puede utilizar, por ejemplo, para redirigir flujos estándar innecesarios .

Véase también

Referencias

  1. ^ En UNIX todo es un archivo Archivado el 10 de enero de 2015 en Wayback Machine .
  2. ^ "Linus Torvalds - 'todo es un descriptor de archivo o un proceso'". Yarchive.net . Consultado el 28 de agosto de 2015 .
  3. ^ "Fantasmas del pasado de Unix". Lwn.net . Consultado el 28 de agosto de 2015 .
  4. ^ Benvenuti, cristiano (2006). "3. Interfaz del espacio de usuario al kernel". Comprensión de los aspectos internos de la red Linux (Nachdr. ed.). Beijing Colonia: O'Reilly. pag. 58.ISBN 9780596002558.
  5. ^ "8. procfs: desaparecido pero no olvidado". Freebsd.org . Consultado el 28 de agosto de 2015 .
  6. ^ Xiao, Yang; Li, Frank Haizhon; Chen, Hui (2011). Manual de seguridad y redes. Hackensack (Nueva Jersey): World scientific. p. 160. ISBN 9789814273039.
  7. ^ "27. Actualización y personalización del núcleo". Redes y administración de sistemas de Red Hat Linux . John Wiley & Sons. 2007. pág. 662. ISBN 9780471777311.
  8. ^ "busybox - BusyBox: La navaja suiza del Linux integrado". Git.busybox.net . Consultado el 28 de agosto de 2015 .
  9. ^ "platform_system_core/ps.c en master · android/platform_system_core · GitHub". GitHub.com . 2015-03-09 . Consultado el 2015-08-28 .
  10. ^ Mochel, Patrick; Murphy, Mike (16 de agosto de 2011). «sysfs - _El_ sistema de archivos para exportar objetos del núcleo». kernel.org . Archivado desde el original el 13 de marzo de 2024 . Consultado el 15 de junio de 2024 .
  11. ^ Vskills, Team. "SysFS y proc". Tutorial . Consultado el 15 de junio de 2024 .
  12. ^ "sysfs, procfs, sysctl, debugfs y otras interfaces de kernel similares". Blog de John . 2013-11-20 . Consultado el 2024-06-15 .
  13. ^ Patrick Mochel, El subsistema sysfs, Simposio Linux 2005, págs. 314-317
  14. ^ Wysocki, Rafael J. "Estados de suspensión de la administración de energía del sistema". kernel.org . Consultado el 15 de junio de 2024 .
  15. ^ "null(4) - Página del manual de Linux". www.man7.org . Consultado el 15 de junio de 2024 .