Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TRABAJO DE AULA
SISTEMAS OPERATIVOS
VICTOR AUGUSTO PEDRAZ
BOGOTA D.C
2020
INTRODUCCION.
En el presente documento encontrara un ejercicio el cual fue escrito en lenguaje C
el cual fue implementado desde el sistema operativo Linux, en este ejercicio
encontrara una serie de funciones las cuales fueron usadas para el desarrollo de
este mismo, además encontrara una breve explicación de la función
Pthread_create y Pthread_mutex_t, las cuales fueron usadas para poder crear
tres hilos diferentes en el programa impidiendo que un hilo entre a unos datos que
están siendo usados por otro hilo, concluyendo usted podrá entender estas
funciones y poder usarlas si trabaja en el lenguaje C y en Linux.
OBJETIVOS.
• Pthread_attr_t: Son los atributos de creación del hilo, por ejemplo, una
prioridad esto hace que un hilo se ejecute primero que otro además se le
dará una alta preferencia al momento de su ejecución, sin embargo, también
admite el para metro NULL con lo cual hace que el hilo se cree con atributos
por defecto.
• (Void*): No es más que el tipo de una función que admite como un puntero
void* y que devuelve un void*, esto quiere decir que a este parámetro le
ponemos la función que se quiere ejecutar con ese hilo.
• Pthread_exit (): Esta función espera una señal para dejar el hilo dormido o
en caso dado para matarlo.
Ilustración 1
Cómo se puede observar en la ilustración no te que se están creando los hilos como
se puede ver en la línea 43, así mismo se usa tres veces la función pthread_create
en la cual se me pasan los parámetros ya mencionados anteriormente, además noté
que se crea una variable reloj la cual se usa para calcular el tiempo total de ejecución
del programa.
Observe que hay un condicional en el cual se pregunta qué es el resultado de 0,
esto se debe a qué la función retorna un valor si este valor es 0 es porque hubo una
correcta creación del hilo de lo contrario fue porque hubo un error en su creación,
también mire que en las líneas 49, 50 y 51 hay una función que se llama pthread_join
la cual nos ayuda a visualizar el hilo, ya que sin el uso de esta función es imposible
poder ver cómo está ejecutándose el hilo, debidamente a que el proceso es muy
rápido y no es visible su ejecución.
Ilustración 2
En esta imagen no te que de la línea de la 1-8 hay varias librerías una ellas y lo más
importante es la que está en la línea número uno ya que está permite la creación de
los siglos como antes explicó, además noté que en línea 11 se está creando un
arreglo este arreglo va a ser usado por los 3 hilos por lo cual así mismo se crea la
llave que nos permite la sincronización de estos hilos permitiendo así que un hilo no
acceda un recurso que está siendo usado por otro hilo como se ve en la línea 13,
las demás librerías que puede observar son simplemente recursos que se necesitan
para un mejor entendimiento del programa.
Note qué debajo de haber usado la función pthread_mutex_t hay un método con el
nombre thread_routine, este método es la función la cual tendrá que ejecutar los 3
hilos, esta función le dice al hilo qué recorra cada elemento del arreglo y así mismo
muestre el dato y el tiempo en que se tardó en procesar ese dato.
Ilustración 3
Observe tiene ilustración 3 se puede evidenciar el total del método qué ejecutar los
3 hilos, mire que se hace uso de un reloj y de una función llamada usleep(), la cual
permite dormir el hilo 3 segundos esto se hace para poder ver mejor en la salida
cómo se está ejecutando el hilo, también mire qué hay un For qué va hasta el
tamaño del arreglo y dentro de él tenemos varias funciones, varias de ellas sirven
para una mejor visualización en la salida de cómo se está ejecutando el hilo,
observe también qué se hace uso de la función reloj dentro del For la cual ayuda a
saber cuánto tiempo se demoró un hilo en procesar el dato del arreglo, así mismo
se usa la llave pthread_mutex que se creó anteriormente la cual se bloquea al iniciar
la función y se desbloquea al finalizar cada iteración del For permitiendo así que
ningún hilo use ese recurso mientras otro lo está usando.
Evidencia quien la ilustración 4 se observa la salida de los hilos en este caso sólo
se observa que los hilos recorrieron 3 iteraciones para que así mismo fuera
entendible su ejecución, observe que cuando el hilo uno va en la segunda iteración
el hilo ya ha imprimido dos datos y por ende el hilo dos entra a la función y ya
imprime un dato, ósea que cuando el hilo 1 termina de imprimir los 3 datos el hilo
dos ya va por el 2º dato y el hilo número 3 va a imprimir el primer dato eso quiere
decir que cuando el hilo número 2 termina el hilo 3 todavía siguen en ejecución,
para entender mejor lo anterior mire la gráfica a continuación.
Hilo 1
Hilo 2
1 2 3
Hilo 3
Hilo 2 Hilo 1
1 2 3
Hilo 3
1 2 3
Hilo 1
Hilo 1
Hilo 2
Hilo 1
Hilo 2
Hilo 3
Hilo 2
Hilo 3
Hilo 3
CONCLUSIONES.
• https://es.wikipedia.org/wiki/Hilo_(inform%C3%A1tica)
• http://www.chuidiang.org/clinux/procesos/procesoshilos.php
• https://www.thegeekstuff.com/2012/05/c-mutex-examples/