Articulo de referencia

procesos

El sistema de archivos proc ( procfs ) es un sistema de archivos especial en sistemas operativos tipo Unix que presenta información sobre procesos y otra información del sistema...

El sistema de archivos proc ( procfs ) es un sistema de archivos especial en sistemas operativos tipo 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 almacenados en el núcleo que los métodos de seguimiento tradicionales o el acceso directo a la memoria del núcleo . 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 sobre los procesos en ejecución en el núcleo. En Linux , también se puede utilizar para obtener información sobre el núcleo y para cambiar ciertos parámetros del núcleo en tiempo de ejecución ( sysctl ).

Muchos sistemas operativos similares a Unix admiten el sistema de archivos proc, incluidos System V , Solaris , IRIX , Tru64 UNIX , BSD , Linux , IBM AIX , [1] QNX y Plan 9 de Bell Labs . OpenBSD dejó de ofrecer soporte en la versión 5.7, lanzada en mayo de 2015. No está disponible en HP-UX [1] ni en macOS . [2]

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 núcleo 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 de sistema especializada .

Historia

UNIX 8.ª edición

Tom J. Killian implementó la versión UNIX 8th Edition (V8) de /proc : presentó un artículo titulado "Processes as Files" (Procesos como archivos) en USENIX en junio de 1984. El diseño de procfs apuntaba a reemplazar la llamada al sistema ptrace utilizada para el seguimiento de procesos. Se puede encontrar documentación detallada en la página del manual de proc(4).

SVR3

El sistema operativo original AT&T System V Release 3 (SVR3) (disponible internamente para AT&T en 1986 y en general en 1987) no incluía el sistema de archivos /proc , pero sí una versión incremental posterior. Solo contenía archivos que representaban los procesos en lugar de los subdirectorios que ahora son comunes.

SVR4

Roger Faulkner y Ron Gomes trasladaron V8 /proc a SVR4 y publicaron un artículo titulado "The Process File System and Process Model in UNIX System V" en USENIX en enero de 1991. Este tipo de procfs admitía la creación de ps , pero solo se podía acceder a los archivos con las funciones read() , write() e ioctl () . Entre 1995 y 1996, Roger Faulkner creó la interfaz procfs-2 para Solaris-2.6 que ofrece un sistema de archivos /proc estructurado con subdirectorios.

Plan 9

Plan 9 implementó un sistema de archivos de procesos, pero fue más allá que V8. El sistema de archivos de procesos de V8 implementó un solo archivo por proceso. Plan 9 creó una jerarquía de archivos separados para proporcionar esas funciones e hizo de /proc una parte real del sistema de archivos.

4.4BSD y derivados

4.4BSD clonó su implementación de /proc de Plan 9. [ cita requerida ] A partir de febrero de 2011 [actualizar], procfs se está eliminando gradualmente en FreeBSD, [3] y ha comenzado a utilizar la interfaz sysctl en su lugar para la información relacionada con los procesos. Para proporcionar compatibilidad binaria con los programas de espacio de usuario de Linux, el núcleo de FreeBSD también proporciona linprocfs que es similar al procfs de Linux. [4] Se eliminó de OpenBSD en la versión 5.7, que se lanzó en mayo de 2015, porque "siempre sufría de condiciones de carrera y ahora no se usa". [5] macOS no implementó procfs y los programas de espacio de usuario tienen que usar la interfaz sysctl para recuperar datos de procesos. [2]

Solaris

/proc en Solaris estuvo disponible desde el principio (junio de 1992). En 1996, Solaris 2.6 introdujo procfs2 de Roger Faulkner.

Linux

Linux agregó por primera vez un sistema de archivos /proc en la v0.97.3, septiembre de 1992, y comenzó a expandirlo a datos no relacionados con procesos en la 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 núcleo , 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 originalmente inició el proceso.
  • /proc/PID/cwd , un enlace simbólico al directorio de trabajo actual del proceso.
  • /proc/PID/environ contiene los nombres y valores de las variables de entorno que afectan al proceso.
  • /proc/PID/exe , un enlace simbólico al archivo ejecutable original , si todavía 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 los indicadores de cada descriptor de archivo abierto.
  • /proc/PID/maps , un archivo de texto que contiene información sobre archivos y bloques mapeados (como montón y pila).
  • /proc/PID/mem , una imagen binaria que representa la memoria virtual del proceso , solo puede ser accedida por un proceso ptrace .
  • /proc/PID/root , un enlace simbólico a la ruta raíz tal como la 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 el uso de memoria.
  • /proc/PID/task , un directorio que contiene enlaces duros a todas las tareas que haya iniciado este proceso (es decir, el proceso principal).

(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 archivos 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 el ejecutable usado 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 trasladó a un pseudosistema de archivos separado, sysfs , montado bajo /sys :

  • dependiendo del modo de administración de energía (si lo hay), ya sea el 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 buddy que maneja la fragmentación de memoria. [6]
  • /proc/bus , que contiene directorios que representan varios buses en la computadora, como PCI / USB . Este 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 , que proporciona las opciones de arranque pasadas al kernel
  • /proc/cpuinfo , que contiene información sobre la CPU , como su proveedor (y la familia de CPU, el modelo y los nombres de los modelos 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 indicadores de la CPU . El formato y la información disponible dependen en gran medida de la arquitectura. En algunas arquitecturas, /proc/cpuinfo incluye un valor para " bogomips ", que a menudo se malinterpreta 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). Se produce como un efecto secundario de la calibración del temporizador del núcleo y produce valores muy variables según el tipo de CPU, incluso a velocidades de reloj iguales.
$ cat  /proc/cpuinfo
 procesador: 0 
vendor_id: AuthenticAMD 
familia de CPU: 16 
modelo: 6 
nombre del modelo: AMD Athlon(tm) II X2 270 
versión del procesador: 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 del modelo: AMD Athlon(tm) II X2 270 
versión del procesador: 3 
microcódigo: 0x10000c8 
CPU MHz: 800.000 
tamaño de caché: 1024 KB 
...

En las CPU de múltiples núcleos, /proc/cpuinfo contiene los campos para "hermanos" y "núcleos de CPU" que representan el siguiente cálculo aplicado: [7]

"hermanos" = (HT por paquete de CPU) * (número de núcleos por paquete de CPU)
"núcleos de CPU" = (número de núcleos por paquete de CPU)

Un paquete de CPU significa CPU física que puede tener múltiples núcleos ( núcleo único para uno, núcleo doble para dos, núcleo cuádruple para cuatro). Esto permite una distinción entre hiperprocesamiento y núcleo doble, es decir, la cantidad de hiperprocesamiento por paquete de CPU se puede calcular por hermanos / núcleos de CPU . Si ambos valores para un paquete de CPU son los mismos, entonces no se admite el hiperprocesamiento. [8] Por ejemplo, un paquete de CPU con hermanos=2 y "núcleos de CPU"=2 es una CPU de núcleo doble pero no admite hiperprocesamiento.

  • /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 también proporciona la mayor parte del nombre /dev
  • /proc/diskstats , que proporciona cierta información (incluidos los números de dispositivo) para cada uno de los dispositivos de disco lógicos
  • /proc/filesystems , una lista de los sistemas de archivos admitidos por el núcleo en el momento del listado
  • /proc/interrupts , /proc/iomem , /proc/ioports y el directorio /proc/irq , brindando algunos detalles sobre los dispositivos (físicos o lógicos) que utilizan los distintos recursos del sistema .
  • /proc/kmsg , que contiene los mensajes emitidos por el núcleo [9]
  • /proc/loadavg , que contiene estadísticas sobre el promedio de carga actual en los últimos minutos.
  • /proc/meminfo , que contiene un resumen de cómo el núcleo administra su memoria.
  • /proc/modules , uno de los archivos más importantes de /proc , que contiene una lista de los módulos del núcleo cargados actualmente. Ofrece algunas indicaciones (no siempre del todo correctas) sobre 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 utiliza iptables FORWARD para redirigir las conexiones de red)
  • /proc/partitions , una lista de los números de dispositivos, su tamaño y los nombres /dev que el núcleo ha identificado como particiones existentes
  • /proc/scsi , que proporciona información sobre cualquier dispositivo conectado a través de un controlador SCSI o RAID
  • un enlace simbólico al proceso actual (que atraviesa) en /proc/self (es decir, /proc/PID/ donde PID es el del proceso actual).
  • /proc/slabinfo , que enumera las estadísticas de los cachés de objetos usados ​​con frecuencia en el núcleo 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 . En /proc/sys aparecen directorios que representan las áreas del kernel, que contienen archivos virtuales legibles y escribibles . Por ejemplo, un archivo virtual al que se hace referencia con frecuencia es /proc/sys/net/ipv4/ip_forward , porque es necesario para enrutar firewalls 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, no lo hace.
  • /proc/sysvipc , que contiene información sobre uso compartido de memoria y comunicación entre procesos (IPC).
  • /proc/tty , que contiene información sobre terminales ; /proc/tty/driver contiene una lista de controladores TTY y su uso [10]
  • /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 (usado para construir 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 utilizan /proc en Linux vienen en el paquete procps ( procesos /proc ) y solo funcionan junto con un /proc montado .

CYGWIN

Cygwin implementó un procfs que es básicamente el mismo que el procfs de Linux.

Referencias

  1. ^ ab Nemeth, Evi; Snyder, Garth; Hein, Trent R.; Whaley, Ben (14 de julio de 2010). Manual de administración de sistemas UNIX y Linux. Pearson Education. pág. 136. ISBN 978-0-13-211736-4.
  2. ^ por Amit Singh (2003). "/proc en Mac OS X". Mac OS X Internals: The Book . Archivado desde el original el 4 de mayo de 2012. Consultado el 10 de julio de 2021 .
  3. ^ "¿Por qué se ha dejado de usar procfs en favor de procstat?". freebsd.org . 22 de febrero de 2011.
  4. ^ "linprocfs(5)". Páginas del manual de FreeBSD . El proyecto FreeBSD. 13 de noviembre de 2019 . Consultado el 12 de junio de 2021 .
  5. ^ "Cambios detallados entre OpenBSD 5.6 y 5.7". openbsd.org .
  6. ^ "3.2.2. /proc/buddyinfo". centos.org . Archivado desde el original el 2 de septiembre de 2013 . Consultado el 23 de mayo de 2011 .
  7. ^ Baron, Jason. «HT vs. dual-core». Archivado desde el original el 13 de mayo de 2016. Consultado el 28 de junio de 2011 .
  8. ^ "Entender Linux /proc/cpuinfo". richweb.com . Archivado desde el original el 3 de abril de 2012 . Consultado el 21 de abril de 2015 .
  9. ^ Nguyen, Binh (30 de julio de 2004). "Jerarquía del sistema de archivos de Linux". Binh Nguyen. p. 63. Consultado el 18 de julio de 2016. /proc/kmsg[:] Mensajes generados por el núcleo. Estos también se enrutan a syslog.
  10. ^ "El sistema de archivos /proc". Documentación del kernel de Linux . Consultado el 9 de agosto de 2024 .

Fuentes

  • Página del manual proc(2) de Unix 8.ª edición: descripción del procfs original.
  • Página del manual de procfs de Plan 9: Plan 9 amplió enormemente el concepto de procfs, proporcionando una interfaz mucho más ampliada para controlar y manipular procesos.
  • Páginas del manual de Linux Proc(5) Documentación del manual de Linux para procfs
  • Documentación/filesystems/proc.txt Documentación del kernel de Linux para procfs
  • Una breve historia de /proc Blog de Eric Schrock
  • Acceda al kernel de Linux mediante Procfs Un artículo de IBM developerWorks escrito por M. Tim Jones
  • Proyecto de documentación de Linux sobre la jerarquía de sistemas de archivos
  • Descubra las posibilidades del directorio /proc por Federico Kereki
Obtenido de "https://es.wikipedia.org/w/index.php?title=Procfs&oldid=1239479280#cpuinfo"