ensayo

Páginas: 12 (2800 palabras) Publicado: 18 de marzo de 2014
Procesos e Hilos en C

6 de febrero de 2012
En esta sesi´n vamos a escribir programas en lenguaje C que utilicen hilos y procesos para comparar
o
el rendimiento del sistema ante la gesti´n de unos y otros. En concreto, mediremos el tiempo medio de
o
creaci´n de hilos y el de creaci´n de procesos y se comparar´n. Para ello se va a utilizar el compilador
o
o
a
de C de GNU gcc que est´instalado en los equipos del laboratorio.
a

1.

Creaci´n de procesos en Linux
o

Para poder iniciar en una m´quina GNU/Linux, procesos adicionales al que se est´ ejecutando, se
a
a
emplea el comando fork cuya signatura es la siguiente:
pid_t fork ( void ) ;

Su definici´n se encuentra en los archivos de cabecera sys/types.h y unistd.h. En unistd.h est´ deo
a
a
finida la funci´n y entypes.h el tipo pid t que no es m´s que un identificador de proceso linux PID.
o
La ejecuci´n de fork crea un proceso hijo que se diferencia de su creador unicamente por su PID y
o
´
por su PPID (Parent PID, identificador del proceso padre del proceso actual).
Tras la creaci´n del proceso hijo ambos procesos son ejecutados concurrentemente, es decir, tenemos
o
dos procesos ejecutando elc´digo del programa. La diferencia entre los dos se haya en lo que devuelve la
o
llamada al fork. En cada uno de esos procesos este valor es diferente, para el proceso padre fork devuelve
el PID del proceso reci´n creado y para el proceso reci´n creado fork devuelve 0, adem´s el PPID del
e
e
a
proceso reci´n creado es el PID del proceso padre.
e
Para conocer el PID y el PPID de un proceso sepueden emplear las funciones getpid y getppid
respectivamente. Nuevamente estas funciones est´n definidas en el archivo de cabecera unistd.h con la
a
siguiente signatura:
pid_t getpid ( void ) ;
pid_t getppid ( void ) ;

El listado1 contiene un ejemplo de uso de fork:
# include < sys / types .h >
# include < unistd .h >
# include < stdio .h >
int main ( int argc , char * argv []) {
pid_tpid ;
pid = fork () ;
if ( pid == -1) {
printf ( " Fallo en fork \ n " ) ;
return -1;
} else
if (! pid ) {
printf ( " Proceso hijo : PID %d \ n " , getpid () ) ;
} else {
printf ( " Proceso padre : PID %d \ n " , getpid () ) ;
}
return 0;
}

Listado 1: Ejemplo de creaci´n de procesos en c
o
1

Ejercicio 1 Escribe el programa anterior y comprueba su funcionamiento.

2.pthread.lib: La librer´ de hilos POSIX de Linux
ıa

Para escribir programas multihilo en C podemos utilizar la librer´ pthread que implementa el stanıa
dard POSIX (Portable Operating System Interface). Para ello en nuestro programa debemos incluir
algunas cabeceras y a la hora de compilar es necesario linkar el programa con la librer´ Veamos con un
ıa.
ejemplo lo que estamos diciendo. Hagamosun programa que escriba “Hola Mundo” utilizando para ello
dos hilos distintos, uno para la palabra Hola y otro para la palabra Mundo. Adem´s, hagamos que cada
a
palabra se escriba muy lentamente para ver bien el efecto.
# include
# include
# include
# include
# include

< stdio .h >
< stdlib .h >
< string .h >
< unistd .h >
< pthread . h >

void * hola ( void * arg ) {
char * msg =" Hola " ;
int i ;
for ( i = 0 ; i < strlen ( msg ) ; i ++ ) {
printf ( " %c " , msg [ i ]) ;
fflush ( stdout ) ;
usleep (1000000) ;
}
return NULL ;
}

void * mundo ( void * arg ) {
char * msg = " mundo " ;
int i ;
for ( i = 0 ; i < strlen ( msg ) ; i ++ ) {
printf ( " %c " , msg [ i ]) ;
fflush ( stdout ) ;
usleep (1000000) ;
}
return NULL ;
}
int main ( int argc , char *argv []) {
pthread_t h1 ;
pthread_t h2 ;
p t h r e a d _ c r e a t e (& h1 , NULL , hola , NULL ) ;
p t h r e a d _ c r e a t e (& h2 , NULL , mundo , NULL ) ;
printf ( " Fin \ n " ) ;
}

Listado 2: Ejemplo de creaci´n de hilos en c
o
como se puede ver en el listado 2, hemos escrito una funci´n para cada tarea que queremos realizar
o
en un hilo. El estandard POSIX impone que toda...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Ensayo de el Ensayo
  • ensayo de ensayo
  • Ensayo Del Ensayo
  • Ensayo de un ensayo
  • Ensayemos un ensayo
  • ensayo del ensayo
  • Ensayo del ensayo
  • Ensayo del ensayo

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS