Tarea - 2hilos Posix
Tarea - 2hilos Posix
Tarea - 2hilos Posix
Modalidad:
Presencial
Asignatura:
Sistemas operativos
Docente:
Javier Bermeo
Estudiante:
Eddie Game
Tema:
Tarea2(HILOS POSIX)
Curso:
w- 306
Tercer semestre
1
Contenido
Introducción ....................................................................................................... 3
Desarrollo del tema ........................................................................................... 4
Hilos POSIX..................................................................................................... 4
Conceptos importantes ..................................................................................... 5
Creación de hilos ............................................................................................... 5
Creación de hilos en diferentes entornos ....................................................... 6
Atributos ............................................................................................................. 8
Terminación de hilo ........................................................................................... 8
Espera por la terminación de un hilo ............................................................... 9
Cancelación de un hilo ...................................................................................... 9
Ejemplo ............................................................................................................. 10
Conclusión ....................................................................................................... 11
Bibliografias ..................................................................................................... 12
2
Introducción
3
Desarrollo del tema
• Hilos POSIX
Los "Hilos POSIX" son unidades de ejecución más pequeñas que los procesos en un
sistema operativo que permiten realizar tareas concurrentes. En esencia, sirven para
lograr la concurrencia en la programación, lo que significa que múltiples tareas
pueden ejecutarse al mismo tiempo dentro de un programa o proceso. La utilidad de
los hilos POSIX radica en varios aspectos:
4
Conceptos importantes
Creación de hilos
La creación de hilos es un concepto crucial en programación que permite ejecutar
múltiples flujos de instrucciones de forma concurrente dentro de un programa. Los
hilos son unidades más pequeñas que los procesos y se utilizan para realizar tareas
independientes. La creación de hilos es especialmente útil en aplicaciones donde se
requiere paralelismo, rendimiento y capacidad de respuesta.
Para crear hilos, generalmente se utiliza una biblioteca o conjunto de funciones
proporcionadas por el sistema operativo o el entorno de desarrollo. En sistemas
compatibles con POSIX, como Linux y Unix, se suelen utilizar las bibliotecas pthread
para crear y gestionar hilos. En entornos de desarrollo como Java, se utilizan clases
y métodos específicos para la creación de hilos.
La creación de hilos implica definir la función o el código que se ejecutará en paralelo
en cada hilo. Luego, se inician los hilos y el sistema operativo se encarga de asignar
tiempo de CPU a cada uno de ellos de manera concurrente. Los hilos comparten
recursos y datos con el proceso principal y entre sí, lo que permite la comunicación y
la sincronización.
Es importante tener en cuenta que la programación con hilos requiere precaución, ya
que puede dar lugar a problemas de sincronización y condiciones de carrera si no se
maneja adecuadamente. Por lo tanto, se utilizan mecanismos de sincronización, como
semáforos y mutex, para coordinar el acceso a recursos compartidos y evitar
conflictos.
5
Creación de hilos en diferentes entornos
La creación de hilos se realiza utilizando bibliotecas o clases específicas
proporcionadas por el sistema operativo o el entorno de desarrollo. La elección de la
biblioteca o el enfoque específico depende del lenguaje de programación y del
sistema operativo que estés utilizando. Aquí hay algunos ejemplos de cómo se crean
hilos en diferentes entornos:
6
o Java: En Java, los hilos se crean utilizando la clase Thread o implementando la
interfaz Runnable.
Ejemplo de la creación:
7
Atributos
Los hilos, ya sea en C/C++, Java, Python o en otros lenguajes de programación,
pueden tener varios atributos que permiten configurar su comportamiento y
características. Aquí hay algunos de los atributos comunes asociados con los hilos:
o Prioridad del Hilo: La prioridad de un hilo determina qué tan pronto se
programará su ejecución en relación con otros hilos. Algunos sistemas permiten
ajustar la prioridad de un hilo para controlar su orden de ejecución.
o Estado de Bloqueo: Los hilos pueden entrar en un estado de bloqueo cuando
esperan recursos o eventos. El estado de bloqueo es un atributo importante para
el diagnóstico de problemas de concurrencia.
o Tamaño de la Pila: Cada hilo tiene su propia pila de llamadas. El tamaño de la
pila es un atributo que determina cuánta memoria se asigna a la pila del hilo.
Ajustar el tamaño de la pila puede ser crítico para evitar desbordamientos de pila.
o Planificabilidad: En sistemas en tiempo real, se utiliza el atributo de
planificabilidad para determinar si un hilo puede cumplir con sus plazos de
ejecución.
o Identificador de Grupo de Hilos: En algunos sistemas, los hilos pueden
organizarse en grupos para facilitar la gestión y la asignación de recursos.
o Contexto de ejecución: El contexto de ejecución de un hilo incluye registros de
CPU, punteros de pila y otros datos necesarios para su ejecución. Este contexto
se guarda y restaura cuando un hilo se ejecuta o se suspende.
o Memoria asignada: Cada hilo tiene su propio espacio de memoria asignado, que
incluye la pila de llamadas y variables locales. Esto permite que los hilos tengan
datos independientes.
Terminación de hilo
La terminación de un hilo es un proceso crítico para garantizar una operación segura
y ordenada de los hilos en una aplicación. La finalización de un hilo generalmente se
logra mediante una de las siguientes formas:
o Finalización natural: Un hilo puede finalizar su ejecución cuando ha completado
la tarea que se le asignó. Esto suele ocurrir al llegar al final de la función que se
ejecuta en el hilo. Una vez que se ha realizado el trabajo, el hilo puede finalizar de
manera natural.
o Instrucciones de terminación: A veces, se pueden utilizar instrucciones o
señales específicas para indicar a un hilo que debe finalizar. Por ejemplo, en Java,
puedes usar `Thread.interrupt()` para señalizar a un hilo que debe detenerse. El
hilo debe estar diseñado para responder a estas señales y finalizar de manera
segura.
o Excepciones: Si ocurre una excepción no controlada en un hilo, puede llevar a la
terminación del hilo. Es importante que el hilo maneje adecuadamente las
excepciones para que pueda liberar recursos y finalizar de manera ordenada.
8
o Uso de banderas o variables de estado: Una técnica común es utilizar una
bandera o una variable de estado para indicar si un hilo debe continuar
ejecutándose o si debe finalizar. El hilo verifica periódicamente el valor de esta
bandera y, si se establece en un valor específico, el hilo finaliza.
o Llamada a funciones de finalización: En algunos casos, se puede utilizar una
función específica para indicar que un hilo debe finalizar. Esto puede incluir
funciones como `pthread_exit()` en C/C++ o métodos personalizados en otros
lenguajes.
Es fundamental que la terminación de un hilo se realice de manera ordenada y segura
para evitar problemas de concurrencia y fugas de recursos. Los hilos deben liberar
los recursos que han adquirido, cerrar archivos, liberar memoria y realizar cualquier
otra limpieza necesaria antes de finalizar. Además, es importante sincronizar
adecuadamente la terminación de los hilos con el hilo principal para evitar que el
programa termine antes de que todos los hilos hayan finalizado su trabajo.
Cancelación de un hilo
La cancelación de un hilo es un proceso que implica detener un hilo en ejecución de
manera forzada antes de que haya completado su tarea. Esto puede ser necesario
en situaciones donde un hilo queda atrapado en un bucle infinito o experimenta un
comportamiento no deseado que no se puede manejar de manera normal.
La cancelación de un hilo generalmente se logra a través de señales o métodos
específicos proporcionados por la plataforma o el lenguaje de programación que
permiten indicar que un hilo debe detenerse. El hilo debe estar diseñado para
responder a estas señales y finalizar de manera segura.
Es importante tener en cuenta que la cancelación de hilos debe manejarse con
precaución, ya que puede llevar a problemas de sincronización y dejar recursos en
un estado inconsistente. Por lo tanto, debe realizarse con cuidado y solo cuando sea
necesario para evitar problemas en la aplicación.
9
Ejemplo
import threading
import time
resultado = 0
resultado += i
return resultado
resultados.append(resultado)
num_hilos = 4
resultados = []
hilos = []
for i in range(num_hilos):
inicio = i * 25 + 1
fin = (i + 1) * 25 + 1
hilos.append(hilo)
hilo.start()
hilo.join()
resultado_final = sum(resultados)
10
Conclusión
11
Bibliografias
de 2023, de
https://www.infor.uva.es/~fdiaz/so/2004_05/doc/SO_PR05_20041026.pdf
de
http://profesores.elo.utfsm.cl/~agv/elo330/2s06/lectures/POSIX_threads/P
OSIX_Threads.html
Servicios POSIX para gestión de hilos. (2016, octubre 1). Sistemas Operativos #1.
https://sisoperativoutp1995.wordpress.com/2016/10/01/servicios-posix-
para-gestion-de-hilos/
12