# data[].attributes.body
Procesos ligeros Un proceso ligero (thread o hebra) es un programa en ejecución que comparte la imagen de la memoria y otras informaciones con otros procesos ligeros. Los procesos ligeros son una unidad básica de utilización de la CPU consistente en un juego de registros y un espacio de pila.

# data[].attributes.body
Un cambio de proceso puede suceder en cualquier instante en el que el sistema operativo gana el control de la CPU. En primer lugar, se van a tener en cuenta las interrupciones del sistema. Se pueden distinguir dos clases de interrupciones del sistema.

# data[].attributes.body
Hasta el día de hoy existen sólo 4 formas de crear un proceso:

Arranque del sistema.

En la ejecución, desde un proceso, de una llamada al sistema para la creación del proceso.

Una petición deliberada del usuario para crear un proceso.

El inicio de un trabajo por lotes.

La forma de creación de procesos en Unix es a través de una llamada al sistema fork la cual creará un proceso hijo en total semejanza al padre, hasta que el recién proceso decida cambiar su imagen en memoria, incluso obtener sus propios descriptores de archivos abiertos.

# data[].attributes.body
El BCP es un concepto clave que permite al sistema operativo dar soporte a múltiples procesos y proporcionar multiprogramación. En UNIX, cada proceso tiene asignado un BCP que está almacenado en una lista enlazada llamada tabla de procesos. En otros sistemas, el BCP se encuentra almacenado en el propio proceso junto al resto de datos.

# data[].attributes.body
El bloque de control del proceso (BCP) o en inglés PCB (Process Control Block) es un registro especial donde el sistema operativo agrupa toda la información que necesita conocer respecto a un proceso particular. Cada vez que se crea un proceso el sistema operativo crea el BCP correspondiente para que sirva como descripción en tiempo de ejecución durante toda la vida del proceso.

Cuando el proceso termina, su BCP es borrado y el registro puede ser utilizado para otros procesos. Un proceso resulta conocido para el sistema operativo y por tanto elegible para competir por los recursos del sistema sólo cuando existe un BCP activo asociado a él. El bloque de control de proceso es una estructura de datos con campos para registrar los diferentes aspectos de la ejecución del proceso y de la utilización de recursos. La información almacenada en un BCP incluye típicamente algunos o todos los campos siguientes:

Identificador de proceso (Process Identificator -PID-, de sus siglas en inglés).

Estado del proceso. Por ej: listo, en espera, bloqueado.

Contador de programa: dirección de la próxima instrucción a ejecutar.

Valores de registro de CPU. Se utilizan también en el cambio de contexto.

Espacio de direcciones de memoria.

Prioridad en caso de utilizarse dicho algoritmo para planificación de CPU.

Lista de recursos asignados (incluyendo descriptores de archivos y sockets abiertos).

Estadísticas del proceso.

Datos del propietario (owner).

Permisos asignados.

Señales (Signals) pendientes de ser servidas. (Almacenados en un mapa de bits).

# data[].attributes.body
Un proceso, a lo largo de su vida, cambia de estado. En concreto, un proceso puede estar en uno de los siguientes estados:

Nuevo (new): Momento en el que se está creando el proceso.

Preparado (ready): Está esperando a que se le asigne la CPU (un procesador).

En ejecución (running): Se está ejecutando en la CPU.

Bloqueado o en espera (waiting): Está a la espera de que suceda un evento.

Terminado (terminated): Finaliza su ejecución. Muere.

Además de estos estados, en algunos sistemas también existe un estado denominado suspendido (suspend), que se produce cuando un proceso se suspende y es desplazado a memoria secundaria. En esta situación, el proceso puede quedar a la espera de un evento (waiting suspend) o suspendido temporalmente pero listo para ejecutarse (ready suspend).