El sistema de archivos proc ( procfs ) es un sistema de archivos especial en sistemas operativos similares a Unix que presenta información sobre procesos y otra información del sistema en una estructura jerárquica similar a un archivo, proporcionando un método más conveniente y estandarizado para acceder dinámicamente a los datos de proceso contenidos en el kernel que métodos de rastreo tradicionales o acceso directo a la memoria del kernel . Normalmente, se asigna a un punto de montaje llamado / proc en el momento del arranque. El sistema de archivos proc actúa como una interfaz para las estructuras de datos internas del kernel. Se puede usar para obtener información sobre el sistema y para cambiar ciertos parámetros del kernel en tiempo de ejecución (sysctl ).
Muchos sistemas operativos similares a Unix admiten el sistema de archivos proc, incluidos Solaris , IRIX , Tru64 UNIX , BSD , Linux , IBM AIX , QNX y Plan 9 de Bell Labs . OpenBSD eliminó el soporte en la versión 5.7, lanzada en mayo de 2015.
El kernel de Linux lo extiende a datos no relacionados con el proceso.
El sistema de archivos proc proporciona un método de comunicación entre el espacio del kernel y el espacio del usuario . Por ejemplo, la versión GNU de la utilidad de informes de procesos ps utiliza el sistema de archivos proc para obtener sus datos, sin utilizar ninguna llamada al sistema especializada .
Historia
UNIX 8.a edición
Tom J. Killian implementó la versión UNIX 8th Edition (V8) de / proc : presentó un artículo titulado "Procesos como archivos" en USENIX en junio de 1984. El diseño de procfs tenía como objetivo reemplazar la llamada al sistema ptrace utilizada para el seguimiento de procesos. La documentación detallada se puede encontrar en la página de manual de proc (4) .
SVR4
Roger Faulkner y Ron Gomes portaron V8 / proc a SVR4 y publicaron un artículo titulado "El sistema de archivos de proceso y el modelo de proceso en UNIX System V" en USENIX en enero de 1991. Este tipo de procfs admitía la creación de ps , pero los archivos podían solo se puede acceder con las funciones read () , write () y ioctl () . Entre 1995 y 1996, Roger Faulkner creó la interfaz procfs-2 para Solaris-2.6 que ofrece un sistema de archivos estructurado / proc con subdirectorios.
Plan 9
Plan 9 implementó un sistema de archivos de proceso, pero fue más allá de V8. El sistema de archivos de proceso de V8 implementó un solo archivo por proceso. Plan 9 creó una jerarquía de archivos separados para proporcionar esas funciones y convirtió / proc en una parte real del sistema de archivos.
4.4BSD
4.4BSD clonó su implementación de / proc del Plan 9. [ cita requerida ] En febrero de 2011[actualizar], procfs se está eliminando gradualmente en FreeBSD. [1] Se eliminó de OpenBSD en la versión 5.7, que se lanzó en mayo de 2015, porque "siempre sufrió condiciones de carrera y ahora no se usa". [2]
Solaris
/ proc en Solaris estuvo disponible desde el principio. Solaris 2.6 en 1996 introdujo procfs2 de Roger Faulkner.
Linux
Linux primero agregó un sistema de archivos / proc en v0.97.3 , septiembre de 1992, y comenzó a expandirlo a datos no relacionados con el proceso en v0.98.6, diciembre de 1992.
A partir de 2020, la implementación de Linux incluye un directorio para cada proceso en ejecución, incluidos los procesos del kernel , en directorios denominados / proc / PID , donde PID es el número de proceso. Cada directorio contiene información sobre un proceso, que incluye:
- / proc / PID / cmdline , el comando que inició originalmente el proceso.
- / proc / PID / cwd , un enlace simbólico al directorio de trabajo actual del proceso.
- / proc / PID / environment contiene los nombres y valores de las variables de entorno que afectan el proceso.
- / proc / PID / exe , un enlace simbólico al archivo ejecutable original , si aún existe (un proceso puede continuar ejecutándose después de que su ejecutable original haya sido eliminado o reemplazado).
- / proc / PID / fd , un directorio que contiene un enlace simbólico para cada descriptor de archivo abierto .
- / proc / PID / fdinfo , un directorio que contiene entradas que describen la posición y las banderas de cada descriptor de archivo abierto.
- / proc / PID / maps , un archivo de texto que contiene información sobre archivos y bloques mapeados (como heap y stack).
- / proc / PID / mem , una imagen binaria que representa la memoria virtual del proceso , solo se puede acceder mediante un proceso de rastreo .
- / proc / PID / root , un enlace simbólico a la ruta raíz como lo ve el proceso. Para la mayoría de los procesos, será un enlace a / a menos que el proceso se esté ejecutando en una cárcel chroot .
- / proc / PID / status contiene información básica sobre un proceso, incluido su estado de ejecución y uso de memoria.
- / proc / PID / task , un directorio que contiene enlaces físicos a cualquier tarea que haya sido iniciada por este proceso (es decir, el padre).
(Los usuarios pueden obtener el PID con una utilidad como pgrep , pidof o ps :
$ ls -l / proc / $ ( pgrep -n python3 ) / fd # Lista todos los descriptores de archivo del proceso `python3 'iniciado más recientemente total 0 lrwx ------ 1 baldur baldur 64 2020-03-18 12: 31 0 -> / dev / pts / 3 lrwx ------ 1 baldur baldur 64 2020-03-18 12:31 1 -> / dev / pts / 3 lrwx ------ 1 baldur baldur 64 2020 -03-18 12:31 2 -> / dev / pts / 3 $ readlink / proc / $ ( pgrep -n python3 ) / exe # Lista de ejecutables utilizados para iniciar el proceso `python3 'iniciado más recientemente / usr / bin / python3 .8
)
/ proc también incluye información del sistema no relacionada con el proceso, aunque en el kernel 2.6 gran parte de esa información se movió a un pseudo sistema de archivos separado, sysfs , montado bajo / sys :
- dependiendo del modo de administración de energía (si lo hay), ya sea directorio, / proc / acpi o / proc / apm , que son anteriores a sysfs y contienen varios bits de información sobre el estado de la administración de energía.
- / proc / buddyinfo , información sobre el algoritmo de amigos que maneja la fragmentación de la memoria. [3]
- / proc / bus , que contiene directorios que representan varios buses en la computadora, como PCI / USB . Esto ha sido reemplazado en gran medida por sysfs en / sys / bus, que es mucho más informativo.
- / proc / fb , una lista de los framebuffers disponibles
- / proc / cmdline , dando las opciones de arranque pasadas al kernel
- / proc / cpuinfo , que contiene información sobre la CPU , como su proveedor (y familia de CPU, modelos y nombres de modelo que deberían permitir a los usuarios identificar la CPU) y su velocidad (velocidad de reloj de la CPU ), tamaño de caché, número de hermanos, núcleos, y banderas de CPU . / proc / cpuinfo incluye un valor para " bogomips ", frecuentemente malinterpretado como una medida de la velocidad de la CPU, como un punto de referencia, pero en realidad no mide ningún valor sensato (para los usuarios finales) en absoluto. Ocurre como un efecto secundario de la calibración del temporizador del kernel y produce valores muy variables según el tipo de CPU, incluso a velocidades de reloj iguales.
$ cat / proc / cpuinfo procesador: 0 vendor_id: Authentic Familia de cpu AMD : 16 modelo: 6 nombre de modelo: AMD Athlon (tm) II X2 270 Procesador paso a paso: 3 microcódigo: 0x10000c8 cpu MHz: 2000.000 tamaño de caché: 1024 KB ... procesador : 1 vendor_id: AuthenticAMD familia de cpu: 16 modelo: 6 nombre de modelo: AMD Athlon (tm) II X2 270 Procesador paso a paso: 3 microcódigo: 0x10000c8 cpu MHz: 800.000 tamaño de caché: 1024 KB ...
En CPU de varios núcleos, / proc / cpuinfo contiene los campos para "hermanos" y "núcleos de cpu" que representan el siguiente cálculo aplicado: [4]
"hermanos" = (HT por paquete de CPU) * (# de núcleos por paquete de CPU)"cpu cores" = (# de núcleos por paquete de CPU)
Un paquete de CPU significa CPU física que puede tener varios núcleos (un solo núcleo para uno, doble núcleo para dos, cuatro núcleos para cuatro). Esto permite una distinción entre hiperprocesos y doble núcleo, es decir, el número de hiperprocesos por paquete de CPU puede ser calculado por hermanos / núcleos de CPU . Si ambos valores para un paquete de CPU son iguales, entonces no se admite el hiperproceso. [5] Por ejemplo, un paquete de CPU con hermanos = 2 y "núcleos de cpu" = 2 es una CPU de doble núcleo, pero no admite hiperprocesos.
- / proc / crypto , una lista de módulos criptográficos disponibles
- / proc / devices , una lista de dispositivos de caracteres y bloques ordenados por ID de dispositivo, pero que proporciona la mayor parte del / dev name también
- / proc / diskstats , proporcionando cierta información (incluidos los números de dispositivo) para cada uno de los dispositivos de disco lógico
- / proc / filesystems , una lista de los sistemas de archivos admitidos por el kernel en el momento de la lista
- / proc / interrupts , / proc / iomem , / proc / ioports y el directorio / proc / irq , dando algunos detalles sobre los dispositivos (físicos o lógicos) que utilizan los diversos recursos del sistema
- / proc / kmsg , que contiene los mensajes generados por el kernel [6]
- / proc / meminfo , que contiene un resumen de cómo el kernel administra su memoria.
- / proc / modules , uno de los archivos más importantes en / proc , que contiene una lista de los módulos del kernel cargados actualmente. Da alguna indicación (no siempre del todo correcta) de las dependencias.
- / proc / mounts , un enlace simbólico a self / mounts que contiene una lista de los dispositivos montados actualmente y sus puntos de montaje (y qué sistema de archivos está en uso y qué opciones de montaje están en uso).
- / proc / net / , un directorio que contiene información útil sobre la pila de red, en particular / proc / net / nf_conntrack , que enumera las conexiones de red existentes (particularmente útil para rastrear el enrutamiento cuando se usa iptables FORWARD para redirigir las conexiones de red)
- / proc / partitions , una lista de los números de dispositivo, su tamaño y / dev nombres que el kernel ha identificado como particiones existentes
- / proc / scsi , que brinda información sobre cualquier dispositivo conectado a través de un controlador SCSI o RAID
- un enlace simbólico al proceso actual (atravesando) en / proc / self (es decir / proc / PID / donde PID es el del proceso actual).
- / proc / slabinfo , que enumera estadísticas sobre las cachés para los objetos de uso frecuente en el kernel de Linux
- / proc / swaps , una lista de las particiones de intercambio activas, sus distintos tamaños y prioridades
- Acceso a opciones de kernel configurables dinámicamente en / proc / sys . Debajo / proc / sys aparecen directorios que representan las áreas del kernel, que contienen archivos virtuales que se pueden leer y escribir .
Por ejemplo, un archivo virtual comúnmente referenciado es / proc / sys / net / ipv4 / ip_forward , porque es necesario para enrutar cortafuegos o túneles. El archivo contiene un '1' o un '0': si es 1, la pila IPv4 reenvía paquetes que no están destinados al host local, si es 0, entonces no. - / proc / sysvipc , que contiene información sobre intercambio de memoria y comunicación entre procesos (IPC).
- / proc / tty , que contiene información sobre los terminales actuales; / proc / tty / driver parece ser [ ¿investigación original? ] una lista de los diferentes tipos de tty disponibles, cada uno de los cuales es una lista de los de cada tipo
- / proc / uptime , el tiempo que el kernel ha estado ejecutándose desde el arranque y ha estado en modo inactivo (ambos en segundos)
- / proc / version , que contiene la versión del kernel de Linux, el número de distribución, el número de versión de gcc (utilizado para compilar el kernel) y cualquier otra información pertinente relacionada con la versión del kernel que se está ejecutando actualmente
- otros archivos dependiendo de varios hardware, configuraciones de módulos y cambios en el kernel.
Las utilidades básicas que usan / proc en Linux vienen en procps ( / proc process), y solo funciona junto con un paquete / proc .
Expansiones propietarias
Varias empresas y proyectos agregaron funciones adicionales a / proc para sus sistemas, por ejemplo, / proc / lcd , podría ser un archivo que contiene el contenido de la pantalla LCD del panel frontal. El texto escrito en este archivo se mostrará en la pantalla.
Referencias
- ^ "¿Por qué procfs está en desuso a favor de procstat?" . freebsd.org .
- ^ "Cambios detallados entre OpenBSD 5.6 y 5.7" . openbsd.org .
- ^ "3.2.2. / Proc / buddyinfo" . centos.org . Archivado desde el original el 2 de septiembre de 2013 . Consultado el 23 de mayo de 2011 .
- ^ Barón, Jason. "HT frente a doble núcleo" .
- ^ "Comprensión de Linux / proc / cpuinfo" . richweb.com . Archivado desde el original el 3 de abril de 2012 . Consultado el 21 de abril de 2015 .
- ^ Nguyen, Binh (30 de julio de 2004). "Jerarquía del sistema de archivos de Linux" . Binh Nguyen. pag. 63 . Consultado el 18 de julio de 2016 .
/ proc / kmsg [:] Mensajes generados por el kernel. Estos también se enrutan a syslog.
- Página de manual de Unix 8th Edition proc (2) - Descripción del procfs original.
- Página del manual de procfs de Plan 9 : Plan 9 amplió en gran medida el concepto de procfs, proporcionando una interfaz mucho más amplia para controlar y manipular procesos.
- Linux Manual Pages Proc (5) Documentación manual de Linux para procfs
- Documentation / filesystems / proc.txt Documentación del kernel de Linux para procfs
enlaces externos
- Una breve historia del Weblog de / proc Eric Schrock
- Acceda al kernel de Linux utilizando Procfs Un artículo de IBM developerWorks por M. Tim Jones
- Linux-Filesystem-Hierarchy Proyecto de documentación de Linux
- Descubra las posibilidades del directorio / proc de Federico Kereki