Está en la página 1de 9

Unidad 2 / Escenario 4

Lectura Fundamental

Sincronización de procesos hilos

Contenido

1 Fundamentos de procesos hilos

2 Elementos de un proceso hilo

3 Relación entre hilos y procesos

4 Sincronización de procesos e hilos


5 Taller de hilos en Linux

Palabras clave:
Estado, hijo, hilo, Linux, padre, proceso, sincronizar.
1. Fundamentos de procesos hilos

1.1. ¿Qué es un proceso hilo?

Los hilos son subprocesos hijos que heredan las características del proceso que los crea que aquí le
llamaremos proceso padre. A un proceso, el sistema operacional, le asigna un conjunto de direcciones
de memoria para guardar el contenido de sus variables. También se le asignan recursos como canales
de entrada y salida (E/S), dispositivos de E/S como discos, USB, acceso a consola, archivos, etcétera.

Suponga que un proceso tiene que procesar millones de datos para lo cual debe hacer lecturas de
parejas de dos datos que están almacenados en algún medio y guardarlos en variables de trabajo A y
B, que son direcciones de memoria que el proceso conoce, luego debe sumar cada pareja de datos y
mandar el resultado a la impresora (ver figura 1).

Mientras lee, el procesador está desocupado porque no puede hacer operaciones si no están los
datos.De igual manera, si requiere imprimir también está bloqueado, porque hasta que los datos sean
impresos o almacenados, el procesador no puede continuar.

Para solucionar dicha situación se crearon los hilos. Así que un hilo lee, otro procesa y otro imprime
(ver figura 1), pero se puede poner dos hilos a leer al tiempo y este artilugio de la programación hace
que el tiempo de proceso mejore, siempre que todos los hilos no usen el mismo procesador. Para el
caso de la figura 1 las lecturas y las escrituras no pasan por el procesador, luego el concepto se aplica
con rigurosidad, porque el procesador está todo el tiempo ocupado sumando en el hilo B, mientras los
hilos A y C, se ocupan de las otras tareas.

Esto es lo que se conoce como procesamiento con hilos, procesos hijos de un mismo padre y que se
comunican a través de variables de memoria.

Los hilos fueron ideados y creados por IBM, con miras a mejorar el rendimiento de los procesos de
cálculo, pero como en los procesos de cálculo, todos los hilos tienen que hacer uso del procesador,
entonces la idea desembocó en el modelo de gestión de procesos de tres estados (listos, en ejecución
y terminados), porque para aquella época los computadores solo traían un procesador y no tenían
Cores (núcleos).

Pasaron los años y los procesadores fueron divididos en núcleos y ahí sí que son útiles los hilos, porque
se pueden ejecutar hilos en paralelo, cada uno corriendo por un Core.

PO L I TÉ C NI C O GR A NCO LO M B I A N O 2
Suponga que tiene que ejecutar un proceso en un i7, que tiene un procesador de 4 Cores y debe leer
los movimientos de cuatro mil clientes y calcular el saldo final. Suponga además que, ejecutando los
cálculos de un cliente, se demora un minuto, pero el jefe necesita los resultados globales para dentro
de 17 horas. ¿Como resuelve usted el problema?

Figura 1. Diagrama de procesos que usan hilos


Fuente: Elaboración propia

Muy fácil, divide los datos en grupos de 1.000 y crea un proceso de 4 hilos, cada hilo procesa 1.000
datos, es decir que los cuatro hilos tienen los resultados en 1.000 minutos, siempre y cuando ejecute
cada hilo en un Core diferente. Eso con una máquina de un procesador de 4 Cores. Imagine lo que se
puede hacer en un servidor de 8 procesadores de 36 Cores cada procesador. Ahora piense en lo que
se puede hacer en una central de procesamiento como en el computador más grande del mundo que
está en China, el cual tiene 12.640.000 Cores.

2. Elementos de un proceso hilo


Los hilos tienen varios nombres, también se les llaman hebras. Los hilos se corren en lenguajes cono
C, C++, Java, etc. En C, la librería que los crea se llama fork(), en C++ y en Java se llaman threads() y
Pthreads() (parallel thread).

PO L I TÉ C NI C O GR A NCO LO M B I A N O 3
Un subproceso en hilo que es hijo de un proceso X, tiene al igual que los procesos sin hilos, la
necesidad de usar los siguientes elementos: Espacio de direcciones para manejo de variables, archivos,
código del programa y datos, como se observa en la figura 2.

Figura 2. Elementos de los procesos para los hilos


Fuente: Elaboración propia

Un hilo comparte con otro hilo los siguientes elementos: código, datos, archivos abiertos y banderas
o semáforos. Lo que un hilo no comparte con sus hermanos es su pila de ejecución, su contador de
programa y el valor de los registros propios de su operación.

3. Relación entre hilos y procesos


Los procesos, a diferencia de los hilos, son independientes unos de otros, mientras que los hilos
comparten de forma directa datos y espacios de direcciones que en otras palabras son las variables del
proceso padre.

PO L I TÉ C NI C O GR A NCO LO M B I A N O 4
Figura 3. Diagrama de relación entre procesos e hilos
Fuente: Elaboración propia

Cuando un conjunto de hilos está corriendo, el paso de actividad de un hilo a otro es manejado a
través de banderas mediante las cuales un hilo le informa a su hermano que va a parar o a desarrollar
otra actividad, para que su hermano pueda tomar las variables que éste estaba usando, por lo que el
tiempo usado en el cambio de actividad es despreciable.

No sucede lo mismo con los procesos, dado que, para detener un proceso hay que enviar una
interrupción desde el sistema operativo a través del dispatcher, lo que ocasiona una pérdida de tiempo
para el procesador que se conoce como overhead. Para entender la relación entre los procesos y los
hilos es necesario analizar la figura 3, donde se puede apreciar dicha relación.

En el cuadrante I se observa que hay un proceso de solo un hilo, pero en el cuadrante III hay más de
un proceso, pero con solo un hilo. En el cuadrante II se observa que hay un proceso con muchos hilos
y en el cuadrante IV, hay muchos procesos con muchos hilos cada uno.

PO L I TÉ C NI C O GR A NCO LO M B I A N O 5
Con base en las explicaciones de la figura 3, se puede decir concluir que cada proceso maneja su hilo
o hilos y que, como tal, los hilos de un proceso no se comunican con los hilos de otro proceso, solo se
comunican entre ellos a través de las variables de memoria.

En general, los hilos comparten los recursos generando economías al proceso y utilizan arquitecturas
de múltiples procesadores; así, mientras un hilo realiza un trabajo en una arquitectura donde hay
múltiples hilos, puede suceder que pase al estado de bloqueado y esperando, mientras otro hilo
continúa la misma tarea. La cooperación de múltiples hilos en el mismo trabajo aumenta la tasa de
proyectos realizados por unidad tiempo y mejora el rendimiento.

3.1. Ejecución de procesos en Linux

Como se vio en la Lectura fundamental de gestión de procesos, los hilos también tienen sus estados.
Los estados de un hilo son: listo, ejecución, bloqueado y finalizado.

Cuando se crea un proceso, este crea un hilo genérico.

Si el programa fue escrito para que cree hilos, entonces el hilo genérico se encarga de dicha tarea de
crearlos, donde cada hilo tiene su propio contexto como se puede apreciar en la figura 3. Cada hilo
tiene su propia tarea, pero también puede cooperar con sus hermanos.

Cuando un hilo requiere esperar un suceso, se bloquea, así que el procesador puede ejecutar otro hilo
de la pila de listos, mientras se resuelve el evento bloqueante. Cuando es desbloqueado, pasa a la cola
de listos para esperar su turno. Al terminar de forma normal su tarea, el hilo libera los recursos que
tenía a su cargo y se cierra.

Cuando un proceso es expulsado de la memoria RAM, todos sus hijos son forzados a abandonar su
ejecución y salir de la memoria.

Los hilos, cuando están en ejecución, se sincronizan entre ellos, para evitar competir por los mismos
recursos. Por lo general, cada hilo tiene su tarea específica.

4. Sincronización de procesos e hilos


Todos los hilos comparten la memoria asignada al proceso padre, así que comparten entre ellos las
variables, los datos y los archivos.

Cuando un hilo modifica un recurso, su accionar impacta el entorno del grupo de hilos del proceso,
como se puede apreciar en la figura 3. Para evitar que los datos se degraden, las actividades de cada
hilo deben ser sincronizadas entre los hilos y así la información sea consistente todo el tiempo.

PO L I TÉ C NI C O GR A NCO LO M B I A N O 6
El programador debe tener en cuenta que no se generen interbloqueos, los cuales suceden cuando
un hilo h1, está trabajando con la variable X y otro hilo h2, intenta tomar la misma variable X,
simultáneamente. Para evitarlo se deben usar estrategias de atomicidad, es decir, una variable no
puede ser tomada por otro hilo mientras no haya sido actualizada por el hilo que la tiene tomada, para
ello se usa la programación con semáforos.

Los hilos se pueden implementar de dos maneras. A nivel de usuario (ULT – User Level Thread) o a
nivel del Kernel (KLT – Kernel Level Thread).

A nivel de usuario. Los ULT son administrados por el proceso. El Kernel no interviene dado que no
tiene conocimiento de la creación de dichos hilos. El programador desarrolla toda la operación de
los hilos con base en la biblioteca de hilos, en la cual están las rutinas que sirven para crear o destruir
los hilos, salvar o restituir los contextos, intercambiar datos y estados de las variables entre los hilos
hermanos.

Las ventajas de los hilos a nivel de usuario son que se pueden ejecutar en cualquier sistema operativo,
la planificación de los hilos depende de la aplicación que los esté usando y la gestión de los hilos es
autónoma, así que el Kernel no usa el dispatcher para realizar dicha operación. Las desventajas de
los ULT se dan porque en un proceso multi hilo, no es posible usar las bondades de los procesadores
de varios núcleos ni puede ejecutar llamadas al sistema operativo porque se bloquea y bloquea a sus
hermanos.

A nivel del Kernel. Los hilos a nivel del Kernel son gestionados por el sistema operacional, por lo
tanto, no existe el concepto de gestión de hilos. La ventaja es que, en un servidor con procesadores
multinúcleo, son perfectos para correr hilos independientes por núcleos diferentes, por tal razón es
que la gestión de los hilos no es necesaria y cuando un hilo se bloquea, esta acción no bloquea a sus
hermanos porque están trabajando en otro núcleo, pero tienen la desventaja que para cambiar el
control de un hilo a otro, es más complejo.

5. Taller de hilos en Linux


Elabore una aplicación en java sobre la máquina virtual Linux, con cuatro clases (main, limpiar, generar
y consumir), en donde desde el main ejecute la clase limpiar y sincroniza dos hilos, uno para producir
una variable llamada vacío que, mientras tenga el valor “true”, el hilo consumidor se quede esperando
y cuando cambie a “false”, es decir, no produce más en el hilo productor, entonces dicha variable sea
tomada por el hilo consumidor.

Lo que se busca, es que no se inter-bloqueen, al tiempo que si el buffer está vacío, el consumidor se
quede en espera, y si el buffer está lleno, el productor quede en espera.

PO L I TÉ C NI C O GR A NCO LO M B I A N O 7
Referencias bibliográficas
Andrew S. (2009). Sistemas operativos modernos. Ciudad de México, México: Pearson Educación.
Recuperado de http://www.ebooks7-24.com/?il=3245

Referencias de figuras
Siberianart (s. f.). Figura 1. Sincronización de procesos y dispositivos. [Fotografía]. Recuperado de ht-
tps://es.123rf.com/imagenes-de-archivo/sincronizaci%C3%B3n_de_procesos_y_dispositivos.html?s-
ti=ndo48abeopzryzlql0|&mediapopup=93710921

PO L I TÉ C NI C O GR A NCO LO M B I A N O 8
INFORMACIÓN TÉCNICA

Módulo: Sistemas operacionales


Unidad 2: Gestión de procesos y sincronización de procesos
hijos
Escenario 4: Sincronización de procesos hijos

Autor: Alexis Rojas Cordero

Asesor Pedagógico: Diana Marcela Díaz Salcedo


Diseñador Gráfico: Jully Guzmán Rodríguez
Asistente: Ginna Paola Quiroga Espinosa

Este material pertenece al Politécnico Grancolombiano. Por


ende, es de uso exclusivo de las Instituciones adscritas a la Red
Ilumno. Prohibida su reproducción total o parcial.

PO L I TÉ C NI C O GR A NCO LO M B I A N O 9

También podría gustarte