Procesos y subprocesos (Hilos)

Un proceso no es más que una instancia de un programa en ejecución, incluyendo los valores actuales del contador de programa, los registros y las variables.

Ejecución en primer plano:

Un proceso en primer plano es aquel que está activo y con el que estás interactuando directamente. Es la ventana o aplicación que tienes abierta y enfocada en este momento.

Ejecución en segundo plano:

Un proceso en segundo plano se ejecuta sin que necesites interactuar con él de forma constante. Por ejemplo, una descarga, una actualización de software o un antivirus que se ejecuta periódicamente. Los procesos en segundo plano son conocidos como Daemon

¿Cuál es la diferencia?

CaracterísticaPrimer PlanoSegundo Plano
Interacción del usuarioRequiere interacción directa.No requiere interacción directa.
VisibilidadGeneralmente tiene una ventana visible.Puede no tener una ventana visible.
PrioridadSuele tener mayor prioridad.Puede tener menor prioridad.
Recursos del sistemaConsume más recursos del sistema cuando está activo.Puede consumir menos recursos, pero puede aumentar si realiza tareas intensivas.

Sub proceso

En los sistemas operativos tradicionales, cada proceso tiene un espacio de direcciones y un solo hilo de control. De hecho, ésa es casi la definición de un proceso. Sin embargo, con frecuencia hay situaciones en las que es conveniente tener varios hilos de control en el mismo espacio de direcciones que se ejecuta en cuasi-paralelo, como si fueran procesos (casi) separados (excepto por el espacio de direcciones compartido).

Un sub proceso o hilo, es un proceso generador por otro proceso. Normalmente los sub procesos se generan a causa de la invocación de operación qué se traduce en la llamada al administrador de procesos y usted decide qué la operación se convierta en sub proceso

En algunos sistemas, cuando un proceso crea otro, el proceso padre y el proceso hijo continúan asociados en ciertas formas. El proceso hijo puede crear por sí mismo más procesos, formando una jerarquía de procesos, un proceso sólo tiene un padre (pero cero, uno, dos o más hijos).

En UNIX, un proceso y todos sus hijos, junto con sus posteriores descendientes, forman un grupo de procesos. Cuando un usuario envía una señal del teclado, ésta se envía a todos los miembros del grupo de procesos actualmente asociado con el teclado (por lo general, todos los procesos activos que se crearon en la ventana actual). De manera individual, cada proceso puede atrapar la señal, ignorarla o tomar la acción predeterminada que es ser eliminado por la señal.

Como otro ejemplo dónde la jerarquía de procesos juega su papel, veamos la forma en que UNIX se inicializa a sí mismo cuando se enciende la computadora. Hay un proceso especial (llamado init) en la imagen de inicio. Cuando empieza a ejecutarse, lee un archivo que le indica cuántas terminales hay. Después utiliza fork para crear un proceso por cada terminal. Estos procesos esperan a que alguien inicie la sesión. Si un inicio de sesión tiene éxito, el proceso de inicio de sesión ejecuta un Shell para aceptar comandos. Éstos pueden iniciar más procesos y así sucesivamente. Por ende, todos los procesos en el sistema completo pertenecen a un solo árbol, con init en la raíz. En contraste, Windows no tiene un concepto de una jerarquía de procesos. Todos los procesos son iguales. La única sugerencia de una jerarquía de procesos es que, cuando se crea un proceso, el padre recibe un indicador especial un token (llamado manejador) que puede utilizar para controlar al hijo. Sin embargo, tiene la libertad de pasar este indicador a otros procesos, con lo cual invalida la jerarquía. Los procesos en UNIX no pueden desheredar a sus hijos.

Ilustración de la creacion de un subproceso para abrir un archivo

¿Por qué utilizar hilos?

La creación de hilos dentro de un proceso es una práctica común en programación por diversas razones:

  • Simplificación del modelo de programación: Al dividir una aplicación en múltiples hilos, podemos modelar actividades concurrentes de manera más intuitiva, evitando la complejidad de manejar interrupciones y conmutaciones de contexto.
  • Compartir recursos: A diferencia de los procesos, los hilos comparten el mismo espacio de direcciones, lo que facilita la comunicación y el intercambio de datos entre ellos. Esto es crucial para aplicaciones donde la coordinación entre diferentes tareas es fundamental.
  • Creación y destrucción eficientes: Los hilos son más ligeros que los procesos, lo que los hace más rápidos de crear y destruir. Esta característica es especialmente útil en aplicaciones donde el número de hilos necesarios varía dinámicamente.
  • Mejora del rendimiento: En sistemas con múltiples CPUs, los hilos pueden ejecutarse en paralelo, aprovechando al máximo la capacidad de procesamiento. Además, al superponer operaciones de cálculo con operaciones de E/S, los hilos pueden mejorar el rendimiento general de una aplicación.

Ejemplo

Los procesadores de palabras pueden beneficiarse enormemente del uso de hilos. Consideremos un procesador que formatea un documento de 800 páginas. Si el usuario realiza un cambio en la página 1, el procesador debe volver a formatear todo el documento hasta la página donde el usuario quiera ir (por ejemplo, la 600). Esto puede llevar mucho tiempo y hacer que el programa parezca lento y poco receptivo.

Con hilos, podemos dividir estas tareas. Un hilo se encarga de interactuar con el usuario, permitiendo que siga trabajando mientras otro hilo realiza el formateo en segundo plano. Esto significa que el usuario puede seguir editando mientras el procesador actualiza el documento, mejorando significativamente la experiencia.

Además, podemos agregar un tercer hilo para realizar tareas de respaldo automático, protegiendo el trabajo del usuario en caso de fallos.

Figura Kernel controlado IO con sub procesos, Tanenbaum, A. S. (2010). Sistemas Operativos Modernos (3ª ed.). Prentice Hall.

¿Qué es un Árbol de Procesos?

Un árbol de procesos es una representación gráfica de la relación jerárquica entre diferentes procesos en un sistema operativo. Imagina un árbol genealógico, pero en lugar de personas, tienes procesos. El proceso principal (o padre) se encuentra en la raíz del árbol, y cada uno de sus subprocesos (o hijos) se ramifica a partir de él, formando una estructura similar a un árbol.

Bibliografía

Tanenbaum, A. S. (2010). Sistemas Operativos Modernos (3ª ed.). Prentice Hall.