UP | HOME

Hilos

Table of Contents

Con la introducción de los hilos vamos a completar la definición de proceso. Hasta ahora nos hemos quedado con que un proceso es un programa en ejecución bajo el control del Sistema Operativo (a partir de ahora SO). Así pues, el término proceso es una abstracción del SO que incluye: un espacio de memoria, el estado de la CPU, un identificador del proceso y un estado de ejecución (creado, esperando, ejecución, bloqueado y terminado).

Pues bien, cuando el SO crea un proceso, además de todo eso, asigna un hilo de ejecución a dicho proceso (el hilo principal). Simplificando las cosas, para entenderlo, podemos decir que a lo que llamamos hilo es al código de ejecución del proceso.

Así pues, un proceso lo podríamos representar como se muestra en la siguiente imagen:

proceso_completo.png

Figure 1: Representación de un proceso

Donde:

Multiproceso vs multihilo

Como veremos en breve, podemos escribir programas con varios hilos de ejecución, aprovechando la concurrencia y el paralelismo. Estos hilos forman parte del mismo proceso, así que comparten el espacio de memoria del proceso aunque cada hilo es una unidad de ejecución separada.

En Linux, podemos usar la llamada la sistema thread para crear hilos dentro de un proceso.

Los hilos son tratados por el planificador de tareas como si fuera un proceso independiente (una especie de miniproceso) y, por tanto, cada hilo puede estar en uno de los estados ya conocidos: creado, esperando, ejecución, bloqueado y terminado).

En la siguiente imagen se resumen las cuatro posibilidades que se pueden dar:

procesos_hilos_escenarios.png

Figure 2: Procesos e hilos: opciones

Ahora bien, surgen dos preguntas: ¿qué diferencia hay entre crear procesos o hilos?, ¿cuándo usar varios procesos y cuando usar varios hilos?

Crear un proceso implica que hay que asignar un espacio de direcciones de memoria al proceso, asignarle un identificador, crear el hilo principal del proceso y, en general, crear la estructura completa. Sin embargo, crear un hilo es más rápido y "sencillo" porque se hace dentro de un proceso ya creado.

Según Andrew Tanenbaum, en su libro Sistemas Operativo Modernos, la creación de hilos puede ser de 10 a 100 veces más rápido que la creación de procesos. Así pues, si se van a realizar tareas que acaban rápido quizás crear un proceso no sea conveniente.

A la segunda pregunta, ¿cuándo crear procesos y cuándo crear hilos?, se puede responder de forma básica tal que así: usaremos hilos para tareas pequeñas dentro de un mismo proceso, donde se tienen que crear y destruir hilos rápidamente; y usaremos procesos para dividir tareas pesadas que llevan mucho tiempo.

Definición de hilo

Entendido todo esto llegamos, por fin, a la definición de hilo: pequeña secuencia de instrucciones programadas dentro de un proceso que pueden ser manejadas independientemente por el planificador de tareas del SO.

Procesos, hilos, planificador y cambio de contexto: resumen

Esta imagen, obtenida de la Wikipedia, resume bastante bien todo lo que hemos visto hasta ahora:

summary_process_threads.jpg

Figure 3: Procesos, hilos, planificador y cambio de contexto

Como se aprecia, muy bien, en esta imagen, un programa es un conjunto de instrucciones almacenadas en un fichero en el disco secundario. El formato del fichero puedes ser ELF, en el caso de Linux, o PE, en el caso de Windows, por ejemplo.

Este programa es cargado en la memoria principal por el SO. En la memoria principal dicho programa es un proceso, que es una abstracción o estructura mantenida por el SO.

El proceso consta de una serie de hilos (al menos uno, el hilo principal, pero pueden ser más). Cada uno de estos hilos es manejado por el planificador del SO que es el encargado de asignarle una CPU para que sus instrucciones sean ejecutadas. Solo un hilo puede estar ejecutándose en una CPU en un momento dado, por lo que el planificador del SO tiene que alternar los hilos en la CPU. A esta acción se le llama cambio de contexto.

Author: Román Ginés Martínez Ferrández

Created: 2025-07-29 mar 13:35

Validate