You are on page 1of 72

Hilos

Martes y Mircoles 19-21 hrs.


Saln CEDI 1 Edificio D

M.C. Juan Carlos Olivares Rojas


jolivares@uvaq.edu.mx
juancarlosolivares@hotmail.com
@jcolivares
http://antares.itmorelia.edu.mx/~jcolivar
Enero, 2010

Agenda
Introduccin
Modelos multi-hilo
Bibliotecas de hilo
Consideraciones sobre los hilos
Ejemplos de sistemas operativos

Pendientes
Prctica de Procesos en Sistemas *X.
Mircoles 17 de Febrero.
Cancelada. Investigacin sobre IPC en
Sistemas Operativos Distribuidos. Martes
23 de Febrero.
Prctica de RPC. Mircoles 24 de Febrero

RPC
Servidor que va a funcionar
administrador de procesos.

como

Los clientes se conectan al servidor para


ser atendidos y darles un Ticket aleatorio,
la atencin de estos clientes se hace en
forma de round-robin.

Calendarizacin
Suprimida. Programacin de hilos
sistemas *X. Martes 2 de marzo

en

Programacin de Pthreads. Martes 9 de


marzo
Programacin de hilos en Java. Martes 16
de marzo.

Introduccin
El concepto de hilo es muy similar al
concepto de subproceso.
Los hilos van a permitir bifurcar el cdigo
de los programas haciendo que las
actividades
puedan
tomar
diversos
caminos de accin.
Para que puedan realizarse estas
actividades de forma concurrente el
sistema operativo debe soportarlas.

Concurrencia
El trmino concurrencia indica que se
tienen dos o ms procesos al mismo
tiempo en el mismo lugar; esto no implica
que se estn ejecutando al mismo tiempo
(paralelismo).
El trmino concurrencia se ha utilizado
para indicar que se ejecutan dos o ms
actividades
quasi-paralelamente.
En
sistemas monoprocesadores esto se logra
a travs de esquemas de multitarea real y
cooperativa.

Granularidad del paralelismo


Cuando
queremos
explotar
el
paralelismo, podemos hacerlo en niveles
de detalle distintos:
Instrucciones de mquina
Sentencias de un lenguaje de programacin
Mdulos dentro de un programa
Programas ejecutables completos

Grano fino grano grueso

Granularidad del paralelismo


El programador debe saber con qu grano debe
trabajar ante cada problema y no trabajar en
niveles de detalle inferior.
Ej. si trabajamos con Ada o Java, estamos en el
nivel de mdulos:
Concurrencia basada en hilos (threads)
no deberamos perder el tiempo buscando sentencias
simples que se pueden ejecutar en paralelo crear un
hilo nuevo para ejecutar una nica instruccin no hace
ganar tiempo, incluso puede tardar ms.

Dnde se encuentra la
concurrencia?
En el hardware (la herramienta para
construir sistemas informticos):
ejecucin paralela de instrucciones
funcionamiento paralelo de los perifricos
procesadores mltiples
sistemas distribuidos

En la Naturaleza (los sistemas que


modelamos cuando hacemos ingeniera
de software)
ejemplos?

Concurrencia inherente o
potencial
Concurrencia inherente:
Hay sistemas que en los que forzosamente se
dan actividades simultneas.
p.ej. GUI; red de cajeros automticos; etc.

Concurrencia potencial:
Hay sistemas o problemas que se pueden
resolver de forma secuencial, pero en los que
se puede aprovechar la concurrencia p.ej.
para aumentar el rendimiento.
P.ej. multiplicar dos matrices, ordenar un
vector

Concurrencia Unix
Los subprocesos se crean con fork()
#include <sys/types.h>
pid_t pid;
pid = fork()
Se pueden copiar procesos con la familia de
funciones exec.

fork()
if (pid == -1)
perror(Error al crear proceso);
else
{
if (pid == 0)
/*Proceso hijo*/
else
/*Proceso padre*/
}

Procesos Padre e Hijos

Seales
A el cdigo de estado de un proceso
formalmente se llama seal.
Un proceso hurfano es aquel que se ha
quedado sin padre.
Un proceso zombi es aquel que se ha
quedado ocupando una posicin de la
tabla de descriptor de procesos.

wait()
En algunas ocasiones un proceso padre
necesita esperar a que sus hijos termine.
Para ello necesita sincronizarse los
procesos.
La funcin que nos permite parar un
proceso hasta que termine otro es wait
pid = wait(&estado);

wait()
Algunas macros que nos ayudan en este
proceso son:

WIFEXITED
WEXITSTATUS
WIFSIGNALED
WTERMSIG
WCOREDUMP

Seales
Definidas en <signal.h>

1
2
3
4
5
6
7
8
9

SIGHUP
SIGINT
SIGQUIT
SIGILL
SIGTRAP
SIGIOT
SIGEMT
SIGFPE
SIGKILL

10
11
12
13
14
15
16
17
18
19

SIGBUS
SIGSEGV
SIGSYS
SIGPIPE
SIGALARM
SIGTERM
SIGUSR1
SIGUSR2
SIGCLD
SIGPWR

Seales
int kill(pid, sig) sirve para mandar una
seal de un proceso a otro.
pid > 0 proceso; pid = 0 a todos los
procesos que pertenecen al mismo grupo.
La funcin signal sirve para capturar una
seal y realizar una funcin con ella.

Seales
main() {
void sigint_handler();
if(signal(SIGINT,sigint_handler)== SIG_ERR)
perror(Error en la seal);
..
}
void sigint_handler(int sig) {
printf(seal recibida);
}

Hilos
Son procesos ligeros ya que no se
duplican completamente, slo duplican su
segmento de cdigo. Por tal motivo,
comparten
datos
fcilmente,
la
desventaja es que ocurren muchos
problemas del tipo race conditions, pero
al igual que IPC se soluciona con
mecanismos como regiones crticas,
zonas de exclusin mutua, etc.

Hilos
Los hilos son procesos ligeros a diferencia
de los procesos hijos, los hilos slo
replican el segmento de cdigo, por lo
que comparten datos entre otros hilos
haciendo mejor uso de la memoria.
La problemtica con los hilos es que cada
sistema operativo implementa sus hilos
de manera distinta. Por ejemplo existen
los hilos POSIX, los hilos C de Mach, los
hilos en Windows, etc.

Implementacin de Hilos

Procesos en un Servidor Web

Bibliotecas de hilo
Para la programacin de hilos existen
diversas APIs.
En el caso de los sistemas *X hasta no
hace mucho (y de hecho aun muchos
sistemas se siguen implementando con
procesos hijos) se empez a realmente a
estandarizar el uso de hilos.
Lenguajes concurrentes como ADA,
modula2, Java y actualmente casi todos
los Sistemas Operativos lo implementan.

Hilos
PThreads (POSIX Threads) es la biblioteca
para
la
creacin
de
hilos
ms
implementada en sistemas *X.
Se utiliza la biblioteca pthread por lo que
algunos compiladores ya la incluyen de
manera predeterminada sino habr que
indicar su uso: gcc -lpthread

Hilos
Crear hilos:
int
pthread_create(pthread_t
*thread,
pthread_attr_t
*attr,
void
*
(*start_routine)(void *), void *arg)
Esperar la finalizacin de hilos:
int
pthread_join(pthread_t
th,
**thread_return)

void

Hilos
No guardar estado del hilo:
int pthread_detach(pthread_t h)
Salir de un hilo:
pthread_exit(void *retval)
Biblioteca
a
<pthread.h>

utilizar:

#include

Hilos
typedef struct parametros {
int id;
char *nombre

};
void *funcion(parametros *p) {
printf(%s %d, p->cadena, p->id);
pthread_exit(&(p->id))

Hilos
Referencia asi mismo:
Yo = pthread_self(); /*Dems funciones*/
Enviar una seal a un hilo:
pthread_kill(pthread_t hilo, int seal);
Los hilos no estn tan extendidos por que
existen muchas variantes: hilos mach,
hilos solaris, Gthreads, etc.

Hilos
Mutex:
pthread_mutex_init(pthread_mutex_t
const pthread_mutex_attr_t *attr)

*mutex,

int pthread_mutex_lock(pthread_mutex_t *mutex)


int
pthread_mutex_lock(pthread_mutext_t
*mutex)
int
pthread_mutext_destroy(pthread_mutext_t
*mutex)

Hilos
En general los hilos en Java debido a su
portabilidad binaria son idnticos en
todas las plataformas. Existen dos formas
bsicas
de
implementar
procesos:
heredar de la clase Thread o bien
implementar la interfaz Runnable.
En general en el mtodo public void run()
se agrega la funcionalidad del hilo.

Hilos
Si se heredo de la clase Thread el hilo
debe crearse de la siguiente forma:
Thread hilo = new Thread(new Objeto());
El mtodo Thread.sleep(ms); permite
dormir un proceso n cantidad de
milisegundos.

Hilos
En general se ejecuta el hilo poniendo el
mtodo start(), e.g.: hilo.start();
Otros mtodos de los hilos son: isAlive()
para determinar si un hilo est con vida,
el metodo stop()* finaliza un hilo, el
mtodo suspend()* lo suspende, el
mtodo resume() reanuda un proceso y
join() espera a que finalice un proceso
especificado.

Hilos
Se pueden asignar prioridades a los hilos
con el mtodo setPriority(), en donde la
prioridad puede ser MIN, MAX y
NORM_PRIORITY.
El mtodo yield() cede prioridad, mientras
que el mtodo setDaemon(true) hace que
un hilo sea demonio.

Hilos
Los demonios son hilos que pueden
correrse sin depender de otros procesos.
Se utilizan mucho para la programacin
de servicios del sistema.
Se pueden crear grupos de hilos con la
clase
GroupThread para un mejor
manejo.

Consideraciones sobre los hilos


El manejo de hilos no necesariamente
eficientiza el uso de los recursos.
Para aprovechar los hilos debe de ser
necesario disear aplicaciones que hagan
uso exclusivo de hilos, de muy poco se
agiliza una aplicacin como Word si es que
cuenta con 4 ncleos de procesamiento.
Los
SO
deberan
de
paralelizar
aplicaciones pero es sumamente difcil
hacerla.

Ejemplos de sistemas
operativos

Actualmente prcticamente todos los


sistemas operativos tienen soporte para
hilos y multitareas, incluyendo los
dispositivos mviles (slo una tarea es
principal, las dems son secundarias).
El uso de sistemas operativos monotarea
es realmente difcil de encontrar en
aplicaciones actuales, slo en aquellos
dispositivos empotrados (de bajo costo)
de uso muy especfico se sigue viendo.

Paralelismo
El problema del paralelismo radica en que
muchos
algoritmos
no
pueden
paralelizarse
(son
serializable
o
secuenciales).
Existen dos
paralelismo:

tecnologas

para

realizar

PVM (Parallel Virtual Machine) [7]


MPI (Message Parking Interface) [8][9][10]

Algoritmo paralelos
for(int i = 0; i < 4; i++)
{
aleatorio(i);

}
aleatorio(1)
aleatorio(2)
aleatorio(3)
aleatorio(4)

micro1
micro2
micro3
en espera

Compilador optimizado. Sistemas Operativos


optimizados

Algoritmos paralelos
a11
a
21

am1

a12
a22
am 2

a1n x1

a 2 n x2



amn xn

Conviene

No conviene

b1

b2

bm

Algoritmos paralelos
Instrucciones como while son ms
difciles de paralelizar por que depende
de la condicin.
No siempre los compiladores pueden
paralelizar de manera automtica un
algoritmo.
En algunas ocasiones se invierte ms
tiempo tratando de paralelizar un
algoritmo que ejecutndolo de manera
secuencial.

Algoritmos paralelos
//Procesador uno
for( i=0; i<N/2; i++)
{
a[i]= c+i;
}

//Procesador uno
for( i=0; i<N/2; i++)
{
a[i]= c+i;
}

//Procesador dos
for( ; i<N; i++)
{
a[i]= c+i;
}

//Procesador dos
for( i = N/2; i<N; i++)
{
a[i]= c+i;
}

Algoritmos paralelos
A[0] = C;
//Procesador uno
for( i=1; i<N/2; i++)
{
a[i]= a[i-1]+1;
}
//Procesador 2
for( i=N/2; i<N; i++)
{
a[i]= a[i-1]+1;
}

Por qu no se puede
paralelizar?
Por que el segundo
proceso depende del
resultado del primero.
Si se puede si se
encuentra
un
algoritmo que permita
encontrar el valor de
a[N/2] directo.
N /2

i
i C

Caso prctico MPI


Existen diversas implementaciones de MPI:
LAM/MPI, MPICH, MPICH2, OpenMPI
MPI se puede programar en C o Fortran.
El primer paso es tener nuestro programa
paralelo y asegurarnos de que est
corriendo el demonio de MPI:
mpd ncpus=procesadores &
mpdtrace -1

Caso Prctico MPI


Se debe compilar el programa:
mpicc holamundo.c o holamundo
Se debe de correr el proceso idicando el
nmero de procesadores:
mpirun np 10 ./holamnudo

Holamundo.c en MPI
#include <stdio.h>
#include mpi.h
int main(int argc, char **argv)
{
int procesos, rango, tam;
char nombre[MPI_MAX_PROCESSOR_NAME];
MPI_Iinit (&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &procesos);
MPI_Comm_rank(MPI_COMM_WORLD, &rango);
MPI_Get_processor_name(nombre, &tam);
MPI_barrier(MPI_COMM_WORLD);
printf(Hola, mundo!, soy %d de %d y me ejecuto en:%s\n, rango,
procesos, nombre);
MPI_Finalize();
return 0;
}

Esquema de un programa en
MPI
Esquema de un programa en MPI
/*Cabecera de MPI*/
#include <mpi.h>
int main(int argc, char **argv)
{
int quiensoy, tamano;
MPI_Status estado;
/*Inicializamos MPI*/
MPI_Init(&argc, &argv);
/*Preguntamos quienes somos*/
MPI_Comm_rank(MPI_COMM_WORLD, &quiensoy);
/*Nos esperamos hasta quetodos hayan inicializado MPI*/
MPI_Barrier(MPI_COMM_WORLD);
/*Preguntamos cuanto somos*/
MPI_Comm_size(MPI_COMM_WORLD, &tamano);
/*PROGRAMA*/

Esquema de un programa en
MPI
if(quiensoy == root)
{
/*Inicializacin estrructuras repartidor
Reparte tareas
Espera resultados
Visualiza resultados*/
}
else
{
/*recibe la tarea
realiza clculos
manda resultados*/
}
/*Finaliza el programa*/
MPI_Finalize();
exit(0);
}

Paralelizacin Multiplicacin de
Matrices
Programa secuencial de multiplicacin de
matrices en Java o C.
Programa concurrente, partir del hecho
de que se puede poner un hilo en
ejecucin
para
multiplicaciones
no
dependientes.

Sistemas de tiempo real


Son sistemas para poder ejecutar
satisfactoriamente tareas que han de
completarse en un plazo prefijado de
tiempo (ej. sistemas de control industrial,
sistemas multimedia, sistemas de misin
crtica).
Se caracterizan porque los procesos
tienen
que
ejecutar
en
instantes
predeterminados.

Clasificacin de STR
Existen dos tipos de STR:
Crtico (rgido): para tareas que siempre
deben cumplir los plazos de terminacin.
Adecuados para la industria. Muy simples,
incompatibles con tiempo compartido,
memoria virtual, etc.
No crtico (flexible): intentan cumplir los
plazos, pero no los garantizan al 100%.
Adecuados para multimedia, etc.

Ejemplo de STR
Aeronave

Carro

Sistemas Embebidos de TR

Aplicaciones de los STR


Dominio Industrial
Controlador de la planta
Robot para tratamiento de material peligroso

Uso militar
Sistema de reconocimiento de blancos
automtico
Sistema de guiado de misiles y navegacin

Sistemas altamente crticos


Plantas nucleares
Sistemas de avinica

Sistemas de Tiempo Real


Los tipos de tiempo pueden ser:
Los de plazo fijo se ejecutan una vez en un
instante determinado.
Los peridicos se ejecutan cada cierto
tiempo.

Los sistemas en tiempo real crticos


tienen asignada una franja de tiempo que
no pueden rebasar.

Sistemas de Tiempo Real


Suelen tener pocos procesos en estado
de listo a fin de que no se retrase la
ejecucin de los mismos.
Se introducen retardos en la ejecucin,
como puede ser la memoria virtual,
puesto que la paginacin puede producir
retrasos inadmisibles para el proceso.
Los STR son altamente tolerante a fallas
manejados por el sistema.

Arquitecturas de Tiempo Real


Sistema en Tiiempo Real Distribuido.
Arqutecturas homogeneas o heterogeneas.
Redes de area local, y topologias de red.
Protocolos de comunicaciones:Ethernet,
Token Ring
Modelo OSI.
Redes FFDI, X-25, ATM.

E/S
Digital

E/S
Analgico
Medio
Ambiente

Comunicaciones

Otras
Computadoras

Software de Tiempo-Real
Microcontroladores y sistemas embebidos.
DSPs, PLCs.
Buses de multiprocesadores:VMEBUs,Multibus,FutureBus
Arquitecturas RISC, Transputers.
Uniprocesadores, Multiprocesadores.
Memorias chache, DMAs.

Reloj

Computadora (HW)

Otras
E/S

Ejemplo de un sistema en tiempo


real.

Actividades en una computadora de automobil.

Control de
Velocidad

C=4ms.
T=20ms.
D=5ms.

Control de
combustible

Control de
Frenado

C=40ms.
T=80ms.
D=80ms.

C=10ms.
T=40ms.
D=40ms.

C=10ms.
Otro software T=40ms.

no-critico

C=tiempo de computo (peor caso), T=Periodo de ejecucion, D=Plazo de respuesta

Solucion Ciclica.
76

combustible-2

64
vel.
60

no
velocidad
critico

frenado

* implica descomponer actividades


grandes en varias ejecuciones.

com
busti
ble-3
54

14
com
busti
ble-1
20
vel.
24

frenado
velocidad
44

combustible-2

40

Solucion Concurrente.
La solucion concurrente es mas simple de disenar y modificar.
task body speed is
begin
loop
speed_measurement;
next:=next+0.2
sleep_until_next;
end loop
end speed

task body fuel is


begin
loop
fuel_injection;
next:=next+0.2
sleep_until_next;
end loop
end speed

task body brake is


begin
loop
control_brakes;
next:=next+0.2
sleep_until_next;
end loop
end speed

task body non_critical is


begin
loop
perform computation;
end loop
end speed

Sistemas Distribuidos de TR
Son totalmente ms complejos debido a
la
gran
heterogeneidad
de
sus
componentes.
Debido a esta problemtica son poco los
Sistemas Operativos Distribuidos de
Tiempo Real aunque muchos SO de
Tiempo Real (ej. SO de dispositivos
empotrados)
tienen
capacidad
de
comunicacin distribuida.

Sistemas Operativos de TR
El problema de la distribucin radica en los
tiempos de latencia de los mecanismos de
comunicacin distribuida (sockets, RPC,
middlewares, etc.) dado que no hay una
garanta de servicio y ms si se enfoca en
redes pblicas como la Internet.
En la prctica la gran mayora de los
Sistemas
Operativos
Distribuidos
de
Tiempo Real se llegan a implementar en
sistemas multiprocesadores.

Sistemas Operativos
Distribuidos de TR
La mayora de los sistemas operativos
distribuidos de tiempo real caen en el
rea de multimedia (QNX) y de los
sistemas empotrados (Symbian). Los
sistemas de navegacin son otro claro
ejemplo de SOTR.

SOD de Tiempo Real


Estos sistemas deben de ser totalmente
determinsticos y predecibles.
Otro tpico que es un gran reto en este
tipo de sistema es la seguridad y en
especfico el control de acceso.
El balanceo de cargas de trabajo es de
suma importancia para el uso eficiente
del sistema

SOD de Tiempo Real


La concurrencia y sincronizacin de
procesos es an ms complicada (un
recurso que es utilizado por un proceso
debe de ser liberado automticamente
para que otro proceso ms crtico pueda
trabajar inmediatamente).
La seleccin de hardware es ms compleja.
La caracterizacin (medicin de tiempos)
de estos sistemas es compleja y no muy
exacta.

SOD de Tiempo Real


El uso de SOD de Tiempo Real tiene que
ser manejado con las aplicaciones, ya
que de lo contrario no tendra una
utilidad prctica; por este motivo, es
necesario la adaptacin de herramientas
como: compiladores, utileras, base de
datos y software de sistema.

Referencias
Liberty, Jesse, Horvarth, David (200).
Aprendiendo C++ para Linux en 21 Das.
Mxico, Prentice Hall.
Mrquez,
Francisco
(1994).
Unix
Programacin Avanzada. Estados Unidos,
Addison-Wesley.

Referencias
Colouris,
George,
Dollimore,
Jean,
Kindberg,
Tim
(2001).
Sistemas
Distribuidos Conceptos y Diseo. 3a.
Edicin. Espaa, Pearson Addison-Wesley.
Horstmann, Cay, Cornell, Gary (2006).
Core Java 2 Volumen II Carctersticas
Avanzadas. Espaa, Perason Prentice
Hall.

Referencias
Deitel, Harvey, Deitel, Paul (2004). Java
Como Programar. Quinta Edicin. Mxico,
Pearson Prentice Hall.
Mrquez,
Francisco
(2004).
UNIX
Programacin Avanzada. Tercera edicin,
Mxico, Alfaomega Ra-Ma.

Referencias
Tanenbaum, Andrew (1996). Sistemas
Operativos Distribuidos. Mxico, Prentice
Hall.
Tanenbaum, Andrew, Van Steen, Maarten
(2006). Distributed Systems Principles
and Paradigms. Estados Unidos, Pearson
Prentice Hall.
Meja, P. (2009), Curso de Sistemas de
Tiempo Real, CINVESTAV, Mxico.

Preguntas, dudas y
comentarios?

You might also like