¿Dónde está PCB en Linux?


10

Un PCB o bloque de control de proceso , se define así en Wikipedia

El Bloque de control de procesos (PCB, también llamado Bloque de control de tareas, [1] Estructura de tareas o Frameframe) es una estructura de datos en el núcleo del sistema operativo que contiene la información necesaria para administrar un proceso en particular. El PCB es "la manifestación de un proceso en un sistema operativo

y su deber es:

Process identification data
Processor state data
Process control data

Entonces, ¿dónde se puede encontrar la PCB de un proceso?


Consulte también Bloque de control de proceso en Linux en Stack Overflow.

Respuestas:


15

En el kernel de Linux, cada proceso está representado por un task_structen una lista doblemente enlazada, cuyo encabezado es init_task(pid 0, no pid 1). Esto se conoce comúnmente como la tabla de procesos .

En modo de usuario, la tabla de proceso es visible para los usuarios normales debajo /proc. Tomando los encabezados para su pregunta:

  • Los datos de identificación del proceso son el ID del proceso (que se encuentra en la ruta /proc/<process-id>/...), la línea de comando ( cmd) y posiblemente otros atributos según su definición de 'identificación'.

  • Los datos de estado del proceso incluyen datos de programación ( sched, staty schedstat), qué espera el proceso actualmente ( wchan), su entorno ( environ), etc.

  • Se podría decir que los datos de control de proceso son sus credenciales ( uid_map) y límites de recursos ( limits).

Entonces, todo depende de cómo defina sus términos ... pero en general, todos los datos sobre un proceso se pueden encontrar en /proc.


"cuya cabeza es init_task(pid 0, no pid 1)" No existe tal cosa como init_task. Es init, y su pid es 1, no 0 (confirmado a través de pidof init).
AleksandrH

1
@AleksandrH init_task es una estructura del núcleo y no un proceso. Apunta a la tarea inactiva que está representada internamente por pid 0. init_task e init son cosas completamente diferentes.
Flup

Y, sin embargo, pides solo para procesos ...
AleksandrH

1
@AleksandrH Lea init / init_task.c en el árbol de fuentes del núcleo ( github.com/torvalds/linux/blob/master/init/init_task.c ).
Flup
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.