Sunteți pe pagina 1din 9

UNIVERSIDAD ANDINA DEL CUSCO SISTEMAS OPERATIVOS GUIA DE LABORATORIO

ECP 1 de 9

I.

TEMA: GESTION DE HILOS

II.

OBJETIVO DE LA PRACTICA Al finalizar la presente prctica, el estudiante: 1. Conoce la implementacin y gestin de hilos en el sistema operativo Linux. 2. Escribe aplicaciones que hagan uso adecuado de hilos utilizando el lenguaje de programacin C en Linux

III.

TRABAJO PREPARATORIO. Para un trabajo con mejores resultados, es imprescindible que el estudiante: 1. Revise los conceptos de procesos e hilos. 2. Haya resuelto los ejercicios propuestos de la gua de gestin de procesos

IV.

MATERIALES Para el desarrollo de la presente prctica es necesario contar con: 1. Computador con arquitectura x86. 2. Sistema operativo Linux instalado en el computador o en su defecto un liveCD o liveUSB que incluya el compilador GCC y un editor de texto pre instalado. 3. Manual de programacin del lenguaje de programacin C para Linux.

V.

MARCO TEORICO

SERVICIOS POSIX PARA LA GESTION DE HILOS

ATRIBUTOS DE UN HILO Crear atributos de un proceso ligero Este servicio permite iniciar un objeto atributo que se puede utilizar para crear nuevos hilos. El prototipo de esta funcin es:
int pthread_attr_init ( pthread_attr_t *attr );

Destruir atributos Destruye el objeto de tipo atributo pasado como argumento a la misma. Su prototipo es:
int pthread_attr_destroy ( pthread_attr_t * attr );

UNIVERSIDAD ANDINA DEL CUSCO SISTEMAS OPERATIVOS GUIA DE LABORATORIO


ECP 2 de 9

Asignar el tamao de la pila El prototipo de esta funcin es:


int pthread_attr_setstacksize ( pthread_attr_t *attr, int stacksize );

Obtener el tamao de la pila El prototipo de esta funcin es:


int pthread_attr_getstacksize ( pthread_attr_t *attr, int stacksize );

Establecer el estado de terminacin El prototipo de esta funcin es:


int pthread_attr_setdetachstate ( pthread_attr_t *attr, int detachstate );

Obtener el estado de terminacin El prototipo de esta funcin es:


int pthread_attr_getdetachstate ( pthread_attr_t *attr, int *detachstate );

CREACION, IDENTIFICACION Y TERMINACION DE HILOS. Crear un hilo El prototipo de esta funcin es el siguiente:
int pthread_create ( pthread_t *thread, pthread_attr_r *attr, void*(*start_routine) (void*), void *arg

);

Obtener el identificador de un hilo El prototipo de esta funcin es:


pthread_t pthread_self ( void );

Esperar la terminacin de un hilo El prototipo de esta funcin es:


int pthread_join ( pthread void thid, **value );

UNIVERSIDAD ANDINA DEL CUSCO SISTEMAS OPERATIVOS GUIA DE LABORATORIO


ECP 3 de 9

Finalizar la ejecucin de un hilo El prototipo de esta funcin es:


int pthread_exit ( void *value );

COMPILAR UN PROGRAMA QUE UTILIZA HILOS. Para compilar un programa que utiliza hilos, debemos utilizar el modificador pthread del GCC. As para compilar el programa llamado ejemplo.c que utiliza hilos, la orden de compilacin deber ser: gcc o ejemplo ejemplo.c pthread

VI.

TRABAJO DE LABORATORIO.

1. Escriba una aplicacin que cree un hilo que imprima un carcter por consola

Solucin
// // // // // Nombre Objetivo Autor FCreacion FModificacion : : : : : creaHilo.c crea un hilo que imprime el carcter X Edwin Carrasco 06/12/2007 ---

#include<pthread.h> #include<stdio.h> void imprime_x(void ) { while(1) { fputc('X',stderr); } pthread_exit(0); } main() { //Variables pthread_t hilo; int iret; //Creamos un hilo que ejecuta el proceso imprime_x() iret = pthread_create(&hilo, NULL,(void*) imprime_x, NULL);

UNIVERSIDAD ANDINA DEL CUSCO SISTEMAS OPERATIVOS GUIA DE LABORATORIO


ECP 4 de 9

//Este proceso imprime el caracter '0' while(1) { fputc('O',stderr); } exit(0); }

2. Escriba un programa que cree dos hilos no independientes.

Solucin
// // // // // Nombre Objetivo Autor FCreacion FModificacion : : : : : hilosDependientes.c crea dos hilos dependientes Edwin Carrasco 06/12/2007

#include<pthread.h> #include<stdio.h>

void func(void) { printf( "Soy el hilo %d \n", pthread_self()); pthread_exit(0); }

main() { pthread_t h1, h2; int iret1, iret2; iret1 = pthread_create(&h1, NULL,(void*) func, NULL); iret2 = pthread_create(&h2, NULL, (void*)func, NULL); printf("El hilo principal %d continua ejecutando\n",getpid()); pthread_join(h1, NULL); pthread_join(h2, NULL); exit(0); }

UNIVERSIDAD ANDINA DEL CUSCO SISTEMAS OPERATIVOS GUIA DE LABORATORIO


ECP 5 de 9

3. Escriba un programa que cree dos hilos, a los cuales les debe pasar como parmetros el carcter que cada uno debe imprimir, as como el nmero de veces que imprimirn el mismo

Solucin
// Nombre // Objetivo // Autor // FCreacion // FModificacion : : : : : pasoParametros.c muestra el mecanismo de paso de parmetros a hilos Edwin Carrasco 06/12/2007

#include <pthread.h> #include <stdio.h> /* Parametros para funcion de impresion. */ struct char_print_parms { char caracter; /* El caracter a imprimir. */ int cuenta; /* El numero de veces a imprimir. */ };

/* Imprime un numero de caracteres en stderr, segun se especifica en PARAMETROS, que es un apuntador a la estructura char_print_parms. */ void* char_print (void* parametros) { /*Hace un cast sobre el apuntador al tipo adecuado. */ struct char_print_parms* p = (struct char_print_parms*) parametros; int i; for (i = 0; i < p->cuenta; ++i) { fputc (p->caracter, stderr); } return NULL; } /*El programa main. */ int main () { pthread_t hilo1_id; pthread_t hilo2_id; struct char_print_parms hilo1_args; struct char_print_parms hilo2_args;

UNIVERSIDAD ANDINA DEL CUSCO SISTEMAS OPERATIVOS GUIA DE LABORATORIO


ECP 6 de 9

/*Crea un nuevo hilo para imprimir 30,000 'X's. */ hilo1_args.caracter = 'X'; hilo1_args.cuenta = 30000; pthread_create (&hilo1_id, NULL, &char_print, &hilo1_args); /*Crea un nuevo hilo para imprimir 20,000 'O's. */ hilo2_args.caracter = 'O'; hilo2_args.cuenta = 20000; pthread_create (&hilo2_id, NULL, &char_print, &hilo2_args); /*Nos aseguramos que elprimer hilo haya terminado */ pthread_join(hilo1_id, NULL); /*Nos aseguramos que el segundo hilo haya terminado */ pthread_join(hilo2_id, NULL); /*Podemos salir de forma segura */ return 0; }

4. Escriba un programa que cree un hilo. El hilo debe devolver el N simo nmero primo. Este valor ser, mostrado por el proceso principal

Solucin
// // // // // Nombre Objetivo Autor FCreacion FModificacion : : : : : primo.c calcula el N-esimo nmero primo Edwin Carrasco 06/12/2007

#include <pthread.h> #include <stdio.h> /*Calcula numeros primos sucesivos. Devuelve el N-esimo numero primo, en donde N es el valor apuntado por *arg. */ void* calcula_primo (void* arg) { int candidato = 2; int n = *((int*) arg); while (true) { int factor; int es_primo = 1;

UNIVERSIDAD ANDINA DEL CUSCO SISTEMAS OPERATIVOS GUIA DE LABORATORIO


ECP 7 de 9

/*Prueba la primalidad mediante divisiones sucesivas. */ for (factor = 2; factor < candidato; ++factor) { if (candidato % factor == 0) { es_primo = 0; break; } } /*Es el numero primo que estamos buscando? */ if (es_primo) { if (--n == 0) { /*Devuelve el numero primo deseado como el valor de retorno del hilo. */ return (void*) candidato; } } ++candidato; } return NULL; }

int main () { pthread_t hilo; int que_primo = 5000; int primo; /*Inicia el hilo procesador, hasta el 5,000-esimo numero primo.*/ pthread_create (&hilo, NULL, &calcula_primo, &que_primo); /*Hacer algun otro trabajo aqui... */ printf("Estoy esperando\n"); /*Esperar que termine el hilo de numeros primos, y tomar el resultado.*/ pthread_join (hilo, (void*) &primo); /* Imprimir el primo mayor calculado. */ printf("El %d-esimo numero primo es %d.\n", que_primo, primo); return 0; }

UNIVERSIDAD ANDINA DEL CUSCO SISTEMAS OPERATIVOS GUIA DE LABORATORIO


ECP 8 de 9

VII.

PRACTICAS DE LABORATORIO 1. Escriba una aplicacin que cree un hilo para hallar el ensimo nmero perfecto, otro para calcular el isimo trmino de la serie de Fibonacci, otro para hallar la suma de los resultados devueltos por los primeros hilos. El programa principal debe mostrar la salida de cada hilo. 2. Escriba un programa que ordene un arreglo de caracteres utilizando el algoritmo Merge utilizando hilos para cada particin del arreglo. El algoritmo se ilustra en el siguiente grfico tomado de www.wikipedia.org

VIII.

BIBLIOGRAFIA LIBROS [L01]. Carretero J, et. al Sistemas Operativos. Una Visin Aplicada, 1ra edicin. Editorial McGraw Hill 2001 [L02]. Deitel, H Operating Systems. Editorial Addison Wesley 1990. [L03]. Deitel & Deitel, Como Programar En C/C++. Editorial Prentice Hall 2da edicin. [L04]. Marquez, M. UNIX. Programacin Avanzada. 2da edicin. Editorial Alfaomega 2001. [L05]. Perez F, et. al. Problemas De Sistemas Operativos. De La Base Al Diseo. 2da edicin. Editorial McGraw Hill, 2003. [L06]. Stallings, W. Sistemas Operativos. 5ta edicin. Editorial Prentice Hall 2005

UNIVERSIDAD ANDINA DEL CUSCO SISTEMAS OPERATIVOS GUIA DE LABORATORIO


ECP 9 de 9

[L07]. Tanenbaum, A. Sistemas Operativos. Diseo e Implementacin. 3ra edicin. Editorial Prentice Hall 2006. [L08]. Tanenbaum, A. Sistemas Operativos Modernos. 2da edicin. Editorial Prentice Hall 2001.

REFERENCIAS WEB [W01]. Carrasco E. http://www.uandina.edu.pe/dais/ecarrasco. Sitio web de la asignatura. [W02]. http://www.llnl.gov/computing/tutorials/pthreads/. Tutorial de programacin con hilos. [W03]. http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html. Tutorial de programacin con hilos. [W04]. http://www.humanfactor.com/pthreads/. Tutorial de programacin con hilos. [W05]. http://sourceware.org/pthreads-win32/. Tutorial de programacin con hilos en el sistema operativo Windows [W06]. http://users.actcom.co.il/~choo/lupg/tutorials/multi-thread/multi-thread.html. Tutorial de programacin con hilos. [W07]. http://www.ibm.com/developerworks/linux/library/l-posix1.html. Tutorial de programacin con hilos. [W08]. http://pages.cs.wisc.edu/~lhl/cs740/assignments/references/pthreads.ps. Tutorial de programacin con hilos. [W09]. http://www.dmoz.org/Computers/Programming/Threads/POSIX/. Tutorial de programacin con hilos. B. POSIX Threads Programming. [W10]. Barney, https://computing.llnl.gov/tutorials/pthreads/index.html. Tutorial de programacin con hilos.

S-ar putea să vă placă și