You are on page 1of 4

Universidad Central de Venezuela

Facultad de Ciencias
Escuela de Computacin
Sistemas Operativos (6004)
Prctica #4


Semestre I-2012
Hilos


Objeti vos:

Conocer y estudiar el concepto de hilo y su importancia en el desarrollo de programas
y de Sistemas Operativos.
Estudiar y comprender las bondades de la abstraccin hilo y aprovecharlas.
Estudiar el funcionamiento de hilos haciendo referencia a la biblioteca (pthread)

Conocimientos necesarios para desarrollar la practica:

1. Concepto de hilo de ejecucin (thread).
2. Diferencia entre proceso liviano (lightweight process) e hilo de ejecucin.
3. Tipos de implementacin de hilos de ejecucin (ventajas y desventajas):
ULT (User Level Thread).
KLT (Kernel Level Thread).
4. Implementacin de hilos en arquitecturas multiprocesador y multicore.
5. Cambio de contexto en procesos con multiples hilos de ejecucin.
6. Gestin de hilos en sistemas tipo UNIX (GNU/Linux en particular).
7. Definicin y uso de la biblioteca Pthreads para uso de hilos en Linux y similares.
8. Llamadas fundamentales de la biblioteca Pthreads:
pthread_create(thread, attr, start_routine, arg);
pthread_exit(status);
pthread_attr_init(attr);
pthread_join(threadid, status);

Esto corresponde con el captulo 4 del libro de Silberschartz (Operating Systems
Concepts); captulo 2 de los libros de Tanenbaum (Modern Operating Systems y
Operatings Systems: Design and Implementation); y el captulo 4 del libro de Stallings
(Operating Systems: Internals and Design Principles).

Para ms informacin consulten el cronograma general de la materia.


Universidad Central de Venezuela
Facultad de Ciencias
Escuela de Computacin
Sistemas Operativos (6004)
Prctica #4


Semestre I-2012
Preguntas:

1. Realice un cdigo en C usando la biblioteca pthread el cual dada una matriz de n x
n calcule la suma de los nmeros por cuadrantes y su resultado sea la suma de la
matriz completa.

2. Realice un cdigo en C, con base en lo antes visto y usando la biblioteca pthread.
El cdigo deber resolver solicitudes de operaciones matemticas sencillas, dicho
cdigo deber recurrir a un proceso hijo para la respuesta a esta solicitud, es
decir, usar fork(). Realice el mismo ejercicio ahora usando threads.

3. Realice un cdigo en C usando la biblioteca pthread el cual dados dos vectores A
y B calcule el producto punto (tambin conocido como producto interno) de ambos
vectores dividiendo las cuentas entre una cantidad X de threads. El programa
debe realizar la suma inherente al producto punto en X partes repartidas entre los
diferentes threads y finalmente sumar los resultados obtenidos por cada thread
para obtener el producto punto. Se recomienda utilizar el tipo de dato doubl e.

Ayuda:

Sean
a,

b
n
dos vectores. El producto punto entre
a
y

b
se define como:

a,

b=

i=1
n
( a
i

b
i
)


4. Realice un cdigo en C usando la biblioteca pthread el cual dado un arreglo de
enteros sin signo de N posiciones (5000 <=N <=32767; N siempre un nmero
par) cuente e imprima por pantalla el nmero de ocurrencias de algn entero X
leido de entrada estndar. La bsqueda de elementos dentro del arreglo debe
repartirse entre 4 threads. El programa debe terminar cuando se lea por pantalla el
nmero -1. Utilice el siguiente fragmento de cdigo para generar un arreglo de
enteros con valores aleatorios de tamao N (tambin aleatorio y siempre par)
segn las condiciones dadas:

#i ncl ude <st dl i b. h>
#i ncl ude <st di o. h>
#i ncl ude <t i me. h>

unsi gned i nt *ar r ay;
unsi gned i nt N;

voi d r and_ar r ay( voi d) {
sr and( t i me( NULL) ) ;
N = ( unsi gned i nt ) ( r and( ) %27767 + 5000) ;
N = ( N%2 == 0) ? N : N + 1;
i nt bl ock = N/ 4, i ;
ar r ay = ( unsi gned i nt *) mal l oc( si zeof ( unsi gned i nt ) * N) ;
f or ( i = 0; i < bl ock; i ++) {
Universidad Central de Venezuela
Facultad de Ciencias
Escuela de Computacin
Sistemas Operativos (6004)
Prctica #4


Semestre I-2012
ar r ay[ i ] = r and( ) ;
ar r ay[ i + bl ock] = r and( ) ;
ar r ay[ i + ( 2*bl ock) ] = r and( ) ;
ar r ay[ i + ( 3*bl ock) ] = r and( ) ;
}
}

5. Moe y Larry disearon un algoritmo de codificacin de textos. El algoritmo
funciona escribiendo los textos en las columnas de una matriz de la siguiente
manera: primero escogen un numero N (2 <=N <=5) que ser el nmero de
columnas de la matriz; luego escriben los caracteres del texto por columna
rellenando los espacios faltantes con el carcter *; finalmente, el mensaje queda
encriptado al escribir la matriz de caracteres por filas. Como Moe y a Larry no les
gusta trabajar de ms, decidieron que su algoritmo codificara solamente letras
minsculas representables con caracteres ASCII, y adems omitira los espacios
en blanco.

Un ejemplo: Si tenemos el texto curly no sabe que dice aqui y utilizamos 3 columnas
(N =3) escribiramos el texto siguiente en la matriz:

c a c
u b e
r e a
l q q
y u u
n e i
o d *
s i *

Finalmente el mensaje codificado ser la cadena: cacuberealqqyuuneiod*si*.
Ntese que la longitud de las columnas de la matriz es
(
(
(

N
S strlen ) (
donde ) (S strlen es
la longitud de la cadena (sin espacios) y
(
x x f = ) ( es el entero techo de x, es decir el
menor entero mayor o igual que x (por ejemplo,
(
10 8 , 9 = ;
(
24 24 = ). En el ejemplo,
la longitud de las columnas es
(
8 333 , 7
3
22 ) (
= =
(
(
(

=
(
(
(

N
S strlen
.

Moe y Larry le solicitan que realice una implementacin del algoritmo en C usando la
biblioteca pthread el cual dada una cadena de longitud arbitraria y el valor de N, lleve
a cabo la codificacin de la cadena aplicando el algoritmo antes expuesto, dividiendo
la creacin de la matriz entre N threads para acelerar el procedimiento. Asuma que la
cadena (que debe leerse de entrada estndar) no tiene espacios en blanco ni letras en
maysculas y nunca tendr ms de 1024 caracteres.



Universidad Central de Venezuela
Facultad de Ciencias
Escuela de Computacin
Sistemas Operativos (6004)
Prctica #4


Semestre I-2012
6. Una cuadratura numrica es un mtodo numrico para aproximar el valor de
integrales definidas cuando estas son muy difciles de evaluar analticamente o no
tienen antiderivada explcita (las integrales cclicas son un ejemplo de esto). Las
cuadraturas numricas son de la siguiente forma:


= =
+
|
|
.
|

\
|
= =
n
i
i i
b
a
n
i
i i
x f a f E x f a dx x f I
0 0
) ( ) ( ) ( ) (

donde ) ( f E representa el error de aproximacin. Una cuadratura sencilla muy
utilizada es la llamada Regla del Trapecio que se define de la siguiente manera:

| | | | ) ( ) (
2
) (
12
) ( ) (
2
) (
' '
3
b f a f
h
f
h
b f a f
h
dx x f I
b
a
+ + = =


donde ) ( a b h = y ( ) b a f
h
f E , ); (
12
) (
' '
3
= . En este caso,
b x a x n = = =
1 0
; ; 1 .Grficamente la Regla del trapecio aproxima el valor de I de la
siguiente manera (figura 1):

Figura 1 Figura 2

Una mejor aproximacin sera aplicar la regla del trapecio en subintervalos del
dominio de integracin, en lugar de sobre todo el dominio (figura 2). Esto se
conoce como Regla del Trapecio Compuesta y se define como:

(

+ +

+ + = =

=
1
1
' ' 2
1
1
) ( ) ( 2 ) (
2
) (
12
) ( ) ( 2 ) (
2
) (
n
j
j
b
a
n
j
j
b f x f a f
h
f h
a b
b f x f a f
h
dx x f I
con
n
a b
h
) (
=
Dado esto, se desea que implemente un cdigo en C utilizando la biblioteca
pthreads que implemente la Regla del Trapecio Compuesta, despreciando el
trmino ) ( f E . Utilice 2048 ; 10 ; 1 ; ) (
2
= = = = n b a e x f
x
. Utilice al menos 4 threads.

You might also like