Вы находитесь на странице: 1из 10

Clase 04: Procesos

PROCESOS Y THREADS
El concepto de proceso se origina en el campo de los sistemas operativos, donde
comnmente se defne como un programa en ejecucin.
Un thread se puede considerar como la agrupacin de un troo de programa
junto con el conjunto de registros del procesador !ue utilia " una pila de m#!uina.
El conjunto de los registros " de la pila de cada thread se denomina conte$to.
%esde la perspectiva de un sistema operativo, la administracin "
programacin temporal de los procesos es tal ve el aspecto m#s cr&tico. 'in
em(argo, en los sistemas distri(uidos ha" otras cuestiones !ue son igualmente
importantes.
Por ejemplo, para organiar efcientemente sistemas cliente)servidor,
*recuentemente resulta conveniente utiliar t+cnicas multithreading (multihilo). ,a
principal contri(ucin de los threads (hilos) en los sistemas operativos es !ue
permiten !ue clientes " servidores sean construidos de tal manera !ue la
comunicacin " el procesamiento local puedan traslaparse en el tiempo,
permitiendo con ello ma"ores niveles de desempe-o.
.un!ue los procesos constitu"en el (lo!ue (#sico en la implementacin de sistemas
distri(uidos, la pr#ctica muestra !ue el plantear la granularidad /divisin0 de un
sistema distri(uido en di*erentes procesos, tal como lo esta(lecen los sistemas
operativos en los !ue se constru"en los sistemas distri(uidos, no es sufciente.
1esulta !ue plantear una granularidad m#s fna en la *orma de threads mltiples de
control por proceso, hace m#s *#cil desarrollar aplicaciones distri(uidas " o(tener
un mejor desempe-o.
4.1 Introduccin a Procesos y Threads
Para entender el papel !ue juegan los threads en los sistemas distri(uidos, es
importante entender !u+ es un proceso, " como se relacionan los procesos " los
threads. .l ejecutar programas, el sistema operativo crea un cierto nmero de
procesos virtuales, cada uno para correr un programa di*erente. Con la fnalidad de
mantener un control " seguimiento de todos estos procesadores virtuales, el
sistema operativo usa una tabla de procesos, la cual contiene entradas para
almacenar los valores de los registros del CPU, mapas de memoria, archivos
a(iertos, in*ormacin del proceso, privilegios, etc. Un proceso es *recuentemente
defnido como un programa en ejecucin, es decir, un programa !ue est# siendo
ejecutado en uno de los procesadores virtuales del sistema operativo. Un asunto
importante es !ue el sistema operativo tiene mucho cuidado de asegurar !ue
procesos independientes no puedan de *orma maliciosa o inadvertida a*ectar el
comportamiento adecuado de los dem#s. En pocas pala(ras, procesos mltiples
puedan compartir concurrentemente el mismo CPU " otros recursos de hard2are de
Clase 04: Procesos
*orma transparente. Usualmente, el sistema operativo re!uiere de hard2are !ue
permita esta separacin.
Esta transparencia de concurrencia tiene un alto costo. Por ejemplo, cada ve
!ue un proceso es creado, el sistema operativo de(e crear un espacio de
direcciones independiente " completo. ,a asignacin de este espacio de memoria
puede re!uerir de la inicialiacin de segmentos de memoria, por ejemplo, poner en
ceros todo el segmento de datos, copiar el programa asociado en el segmento de
te$to /instrucciones0, " preparar un segmento de stac3 para datos temporales.
4am(i+n resulta costoso el !ue el CPU realice un s2itch /cam(io0 de conte$to
/valores de registros, contador de programa, apuntador de stac3, etc.0 para cam(iar
de la ejecucin de un proceso a otro. .parte de gra(ar el conte$to del CPU, el
sistema operativo de(e modifcar los registros de una Unidad de .dministracin de
5emoria /55U0 e invalidar cach+s de traduccin de direcciones, tales como el
(u6er de traduccin de direcciones virtuales /4,7 8 4ranslation ,oo3aside 7u6er0.
.dem#s, si el sistema operativo (rinda soporte a m#s procesos de los !ue pueden
sostenerse simult#neamente en la memoria principal, +ste de(e hacer un s2ap
/cam(io0 de procesos entre la memoria principal " el disco antes de !ue se realice
el s2itch de conte$to.
Un proceso sencillo puede contener varios programas ejecuta(les conocidos
como threads (hilos), !ue tra(ajan de manera conjunta como un todo coherente,
cooperando entre s& /ver Fiura 4.10. En un programa o proceso, por ejemplo, un
thread podr&a manejar se-ales de error, otro podr& enviar un mensaje al usuario
so(re ese error, mientras !ue un tercer thread podr&a ejecutar la tarea principal del
programa.
Fiura 4.1. %i*erentes es!uemas de uso de threads en procesos.
Clase 04: Procesos
Un thread resulta de la divisin de un programa en dos o m#s tareas !ue
pueden correr concurrentemente. 5ltiples threads pueden e$istir dentro de un
mismo proceso ", por lo tanto, comparten entre s& los mismos recursos, tales como
el espacio de memoria del proceso al !ue pertenecen. ,as di*erencias principales
entre procesos " threads son las siguientes:
,os procesos son t&picamente independientes, mientras los threads e$isten
como su(conjuntos de los procesos.
,os procesos contienen una cantidad considera(le de in*ormacin de estatus
o conte$to, mientras los threads mltiples dentro de un proceso comparte
este estatus al igual !ue la memoria " otros recursos /ver Fiura 4.!0.
,os procesos tienen espacios de direcciones separados entre s&, son
independientes. ,os threads comparten el mismo espacio de direcciones /ver
Fiura 4.!0.
,os procesos interactan entre s& solo mediante mecanismos de
comunicacin interproceso /9PC0, lo cual se e$plicar# con ma"or detalle m#s
adelante.
El cam(io de conte$to /conte$t s2itching0 entre threads en el mismo proceso
es t&picamente m#s r#pido !ue el cam(io de conte$to entre procesos. .l
igual !ue un proceso, un thread ejecuta su propia parte de cdigo,
independientemente de los otros threads. 'in em(argo, en contraste con un
proceso, el thread no intenta o(tener un alto grado de transparencia de
concurrencia si esto implica una degradacin de desempe-o. Por lo tanto, un
sistema de threads generalmente mantiene solo el m&nimo de in*ormacin
para !ue un CPU pueda ser compartido por varios threads. En particular, un
conte$to de thread comnmente consiste simplemente de un conte$to de
CPU " de in*ormacin para la administracin de threads.
Fiura 4.!. 9n*ormacin de los conte$tos de un proceso " un thread /hilo0.
Clase 04: Procesos
:a" dos implicaciones importantes del uso de threads al momento de
implementar una aplicacin. Primero !ue todo, el desempe-o de una aplicacin
multithread di*&cilmente es peor !ue su contraparte de thread sencillo /proceso
simple0. %e hecho, en muchos casos, el uso de thread mltiples permite o(tener
mejores niveles de desempe-o. 'egundo, "a !ue los threads no son protegidos
autom#ticamente unos de otros como en el caso de los procesos, el desarrollo de
aplicaciones multithread re!uiere de un es*uero intelectual adicional.
4.! "i#e$es de Threads
E$isten dos categor&as (#sicas de threads:
Threads de Nivel-Usuario: implementados generalmente por medio de
li(rer&as de threads.
Threads de Nivel-Kernel: implementados mediante llamadas a sistema.
%e la com(inacin de am(as categor&as se deriva una tercera conocida como
Threads de Nivel-Hibrido o Combinados.
,a Fiura 4.% muestra el es!uema de cada uno de estas tres categor&as de
threads.
Fiura 4.%. /a0 4hreads ;ivel)Usuario, /(0 4hreads ;ivel)<ernel, /c0 4hreads
:i(ridos o Com(inados.
Thread Nivel-Usuario (ULT)
Clase 04: Procesos
En este nivel, el <ernel no tiene la nocin de la e$istencia de los threads. 4oda
la administracin de los threads es realiada por la aplicacin usando una li(rer&a de
threads. El cam(io de conte$to de threads no re!uiere de privilegios para el modo
kernel /no ha" cam(io de modo0 " la calendariacin o programacin en tiempo
depende espec&fcamente de la aplicacin.
.ctividad del <ernel en threads de nivel)usuario:
El <ernel no sa(e de la actividad de los threads pero an administra la
actividad de procesos.
Cuando un thread hace una llamada a sistema /s"stem call0, el proceso por
completo ser# (lo!ueado /=0, pero para la li(rer&a de threads ese thread an
est# corriendo /en estado de correr ) running0.
,os estados de los threads son independientes de los estados de los
procesos.
NOTA (*): Recuerde que un proceso puede estar en distintos estados dentro de su vida (mientras
eiste)! Uno de estos estados es el de "bloqueado#$ lo cual signi%ca que se encuentra en espera de
que ocurra un evento espec&%co para poder continuar su procesamiento!
>entajas:
El cam(io de conte$to de los threads no involucra al 3ernel, no se re!uiere
cam(io de modo.
,a calendariacin puede ser espec&fca a la aplicacin, se puede seleccionar
el mejor algoritmo.
,os threads nivel)usuario pueden correr en cual!uier sistema operativo, solo
se re!uiere una li(rer&a de threads.
%esventajas:
,a ma"or&a de las llamadas a sistema son de (lo!ueo " el <ernel (lo!uea a
los procesos, entonces todos los threads dentro del proceso tam(i+n ser#n
(lo!ueados.
El <ernel solo puede asignar procesos a procesadores, por lo !ue dos threads
dentro del mismo proceso no pueden correr simult#neamente en dos
procesadores.
Thread Nivel-Kernel (KLT)
En este nivel, toda la administracin de los threads se e*ecta en el <ernel,
no se usa li(rer&a de threads pero s& de(e e$istir llamadas a sistema dirigidas a los
servicios de threads !ue provee el <ernel. El <ernel mantiene la in*ormacin de
conte$to tanto de procesos como de threads, " el cam(io de conte$to de threads
re!uiere !ue la calendariacin !ue esta(lece el <ernel sea (asada en threads.
Clase 04: Procesos
>entajas:
El <ernel puede calendariar simult#neamente varios threads del mismo
proceso en varios procesadores, el (lo!ueo se e*ecta a nivel thread " no a
nivel proceso.
,as rutinas del <ernel pueden ser multithread.
%esventajas:
El cam(io de conte$to entre threads del mismo proceso involucra al <ernel.
'i se tienen dos cam(ios de modo por cam(io de conte$to de s2itch, se
aletarga la respuesta del sistema.
Thread Hi&rido o Co'&inado
,a idea es com(inar lo mejor de cada categor&a anterior.
El sistema operativo solaris, U;9? de 'un 5icros"stems, es un (uen ejemplo
de sistema operativo !ue da soporte a threads hi(ridos.
,a creacin de threads tiene lugar en el espacio de usuario /modo de
usuario0.
,as tareas de calendariacin " sincroniacin de threads se realia en el
espacio de usuario.
El programador puede ajustar el nmero de <,4s.
El Proceso inclu"e el espacio de direcciones de usuario, stac3 " (lo!ueo de
control de proceso.
,os U,4s /li(rer&as de threads0 invisi(les al sistema operativo son la inter*a
para el paralelismo de la aplicacin.
,os <,4s son la unidad !ue puede ser despachada /asignada0 a un
procesador.
Cada proceso de peso ligero /,@P 8 ,ight2eight Process0 /==0 soporta uno o
m#s U,4s " es mapeado a solo un <,4.
NOTA (**): Un proceso de peso ligero ('()) es un tipo espec&%co de thread nivel-kernel (K'T) que
comparte el mismo estado e in*ormaci+n!Un '() es un medio para implementar el multitasking! Un
'() corre arriba de un thread nivel-kernel sencillo , comparte su espacio de direcciones , recursos de
sistema con otros '()s que pertenecen al mismo proceso! -l '() puede generar m.ltiples threads de
nivel-usuario (U'Ts)$ permitiendo con ello el multitasking a nivel usuario$ lo cual puede traer algunos
beneci%os de desempe/o!
,a Fiura 4.4 muestra lo anteriormente dicho.
Clase 04: Procesos
Fiura 4.4. 9mplementacin de threads en el sistema operativo 'olaris de 'un
5icros"stems.
4.% (so de )rocesos y threads en siste'as no distri&uidos
,as aplicaciones grandes son *recuentemente desarrolladas como una
coleccin de programas !ue cola(oran entre s&, " cada uno de los cuales es
ejecutado por un proceso separado. Este m+todo es t&pico en un am(iente U;9?. ,a
cooperacin entre procesos es comnmente implementada por medio de
mecanismos de comunicacin interproceso /9PC0. En los sistemas U;9?, estos
mecanismos t&picamente inclu"en pipas, flas de mensaje, segmentos de memoria
compartida, soc3ets, 1PCAs, etc. Una de las principales desventajas de todos los
mecanismos 9PC es !ue la comunicacin re!uiere *recuentemente de una cantidad
considera(le de cam(ios de conte$to, los cuales se dan en tres puntos di*erentes,
tal como se muestra en la Fiura 4.*.
Clase 04: Procesos
Fiura 4.*. Cam(io de conte$to /conte$t s2itching0 como resultado de un 9PC.
Ba !ue un 9PC re!uiere de la intervencin del 3ernel, un proceso generalmente tiene
!ue cam(iar de modo de usuario a modo de 3ernel, lo cual se muestra en el punto
01 de la fgura anterior. Esto re!uiere cam(iar el mapa de memoria en el 55U, "
tam(i+n desalojar el 4,7. %entro del 3ernel, se e*ecta un cam(io de conte$to de
proceso /punto 02 en la gr#fca anterior, caso ilustrado tam(i+n en la Fiura 4.+a0,
despu+s de lo cual el otro proceso puede se activado al cam(iar de modo 3ernel al
modo usuario, de nueva cuenta /punto 030. El ltimo cam(io re!uiere una ve m#s
el cam(iar el mapa del 55U " desalojar el 4,7.
En lugar de usar procesos, una aplicacin puede ser construida de tal manera
!ue partes di*erentes de la misma sean ejecutadas por threads separados. ,a
comunicacin entre estas partes se implementa completamente con el uso de datos
compartidos. El cam(io de conte$to de threads /threads s2itching0 puede hacerse
*recuentemente en el espacio de usuario, aun!ue el 3ernel est+ al tanto de los
threads " los controle " programe en el tiempo /ver Fiura 4.+0. El resultado puede
ser una mejora dram#tica en el desempe-o.
Una ventaja de una granulacin m#s fna, mediante la divisin de la
aplicacin en mltiples threads /multithreading0 es !ue hace posi(le el e$plotar el
paralelismo cuando se ejecuta un programa en un am(iente multitas3ing, ", an
m#s, en una m#!uina multiprocesador /e$isten sistemas operativos !ue dan
soporte a am(os am(ientes, multitas3ing " multiprocesador a la ve0. En el caso
multitas3ing, el tiempo de CPU es dividido entre threads " no entre procesos /ver
Fiura 4.+&0. En el caso del sistema multiprocesador, cada thread es asignado a
un CPU di*erente mientras !ue los datos compartidos son almacenados en memoria
principal compartida /ver Fiura 4.+c0. Cuando el dise-o es apropiado, tal
paralelismo puede ser transparente: el proceso correr# igualmente (ien en un
Clase 04: Procesos
sistema uniprocesador, aun!ue un poco m#s lento. El uso de multithreading para la
implementacin de paralelismo se ha vuelto cada ve m#s importante " e$tendido,
gracias a la disponi(ilidad de estaciones de tra(ajo multiprocesador cu"os precios
se han reducido signifcativamente. Estos sistemas de cmputo son t&picamente
usados para correr servidores en aplicaciones cliente)servidor.
Fiura 4.+. /a0 5ultitas3ing (asado en procesos /procesos con un solo thread0, /(0
5ultitas3ing (asado en threads /procesos con multithreads0, /c0 Procesos con
multithreads en un am(iente multiprocesador.
Cinalmente, ha" una ran de la ingenier&a de so*t2are para usar threads:
muchas aplicaciones son m#s sencillas de estructurar como una coleccin de
threads cooperativos. Por ejemplo, en el caso de un procesador de pala(ras /ver
Fiura 4.,0, se pueden usar threads separados para manejar la entrada de usuario
en el teclado, revisar la ortogra*&a " gram#tica, gra(ar el documento en disco, etc.
Clase 04: Procesos
Fiura 4.,. Es!uema de un procesador de pala(ras dividido en threads.
4.4 (so de threads en siste'as distri&uidos

Вам также может понравиться