You are on page 1of 10

Cuando se implementa correctamente,el treahding puede mejorar el rendimiento haciendo un mejor use de los recursos del hardware.

Sin Embargo, el uso inapropado del threading puede conducir a la disminuicion del rendimiento,comportamiento impredecible, y condiciones de error que son difciles de resolver.Afortunadamente,si tu esta equipado con un comprendimiento adecuado de como operan los threads,tu puedes evitar las mayora de los problemas y y sacar provecho del mximo rendimiento y beneficios que los threads ofrecen.Este capitulo presenta los conceptos de threading,empezando desde el hardware y se abre camino a travs del sistema operativo y el nivel de aplicacin. Para entender Threading para tu aplicacin necesitad entender los siguientes artculos El enfoque de diseo y estructura de tu aplicacin La API(aplicacin programming intearface) de Threading El compilador o entorno de ejecucin(runtime enviroment) de tu aplicacin La plataforma en la cual tu aplicacin se ejecutara

De estos elementos, una estrategia de threading puede ser formulada para su uso en una parte especfica de su aplicacin. Ya que la introduccin de nivle de instruccin de paralelismo, avanza continuamente en el desarrollo de microporcesadores,han dado como resultado procesadores con multiples nucleos.Para tomar ventaja de esos procesadores multinucleo deber entender los detalles del modelo de software threading tan bien como la capacicadesde la plataforma hardware Debes estar preocupado que Threading es difcil y que quizs tengas que aprender conceptos especializados.Si bien es cierto en general, en realidad threadingpuede ser simple , una vez que comprendes los principios bsicos

DEFINIENDO THREADS
Un thread(hilo) es una secuencia discreta de instrucciones relacionadas que es ejecutada independientemente de otras secuencias de instruccin.Todo programa tiene al menos un thread--el thread principalqueinicializa el programa y comienza ejecutando las instrucciones iniciales-Ese thread puede entonces crear otros thread que realicen varias tareas, o puede crear no nuevos hilos y simplemente hacer todo el trabajo el mismo.En cualquiera de los casos,todo programa tiene al menos un thread.Cada thread mantiene su estado actual de maquina. Al nivle de hardware, un thread es una ruta de ejecucin que permanece independiente de otras rutas de ejecucin de thread de hardware. La decisin de hilar(thread) tu aplicacin debera reflejar las necesidades del programa y la capacidades bsicas de ejecucin de la plataforma de despliegue.No todo deberia ser hilado.Mucho threading puede daar el rendimiento.Como con muchos aspectos de programacin,diseo bien pensado y pruebas adecuadas determinan el balance corrento

VISTA DEL SISTEMA DE THREADS


El modelo computacional de thread esta repesentado en la figura 2.1.Como esta ilustrado,hay tres capas para threading: Threads nivel-usuario : thread creados y manipulado en la aplicacin de software THreads nivel-kernel : la manera como el sistema operativo implementa la mayora de los threads Threads de hardware: Como los thread aparecern en los recursos de ejecucin en el hardware

Un solo programa thread frecuentemente involucre los 3 niveles: un programa thread es implementado por el sistema opertico como nivel-kernel thread, y ejecutado como hardware thread Entre esas capas son interfac,loscuales son manipulados con frecuencia automticamente por el sistema de ejecucin.Sinembaego,para hacer buen uso de los recursos de threading, es importante saber como esas interfaces trabajan Son tocadas condetalle en los captulos 3,4 y 5

Figura 2.1

THREADING ENCIMA DEL SISTEMA OPERATIVO


Los desarrolladores pueden entender mejor los problemas que afrontan usando threads si saben los que realmente ocurre cuando los threads son usados en una aplicacin.EN aplicaciones que no dependen de un framework de tiempo de ejecucin (runtime framework) el cdigo de creacin del hilo est hecho como un llamado a las APIS del sistema.ese llamadas son luego ejecutadas en tiempo de ejecucin como llamadas al kernel del sistema operativo para crear un thread.Las instrucciones para la actividad de los hilos son luego pasadas al procesador para su ejecucin. Figura 2.2 muestra el flujo del thread en un tpico sistema para aplicaciones tradicionales. En las etapa de definicin y preparacion ,los thread son especificados por el entorno de programacin y codificado por el compilador.Durante la etapa de operacin,los thread son creados y administrados por el sistema operativo.Finalmente, la etapa de ejecucin,el procesador ejecuta la secuencia de las instrucciones del thread.

Figura 2.2 El cdigo de la apliccion quizs dependa de un entorno de ejecucin.Dicho cdigo, conocido como cdigo administrado(manage code) se ejecuta en un entrono que realiza algunas funciones de la aplicacin y hace llamadas al sistema operativo subyacente. Entronos administrados incluidos Java Virtual Machine (JVM)y Microsoft Common Language RUntime (CLR).Esos entornos notienen capacidad de planificacin.Threading es pasado al planificador del sistema operativo,el cual se encarga de la actividad restante del thread. En general, las aplicaciones thread pueden ser implementadas al nivel-aplicacin usando APIs establecidas.Las APIs mas comunes son OPENMP y explicitas libreras de threading de bajo-nivel tales como Pthread y Windows thread. La eleccin de API depende de los requerimientos y el sistema plataforma.En general,threadin de bajo-nivel requieren significantemente mas cdigo que soluciones tal como OPENMP; el beneficio que entrgan,sin embargo, es control detallado sobre el uso de threads del progama.OPENMP,en contraste,ofrece facilidad de uso y una implementacin threading mas desarrollador-amigable. OPENMP requiere un compilador que soporte OPENMP API.Hoy,esos son limitados a compiladores c/C++ y fortran.Codificar threads bajo-nivel solo requieren acceso a las libreras multithreading del sistema operativo. Para mostrar como los threading son usados en un programa. Listing 2.1 y listing 2.2 son simples programas hoola mundo que usan libreras OPENMP y pthreads

Codigo pagina 41y 42

Como se puede ver,el cdigo OPENMP en listing 2.1 no tienen funcin que correponda a la creacin de threads.Esto es porque OPENMP crea thread automticamente en el fondo.Codificacion de bajo-nivel de thread es mas evidente en Pthread,mostrado en LIST 2.2,donde un llamada pthread_create() crea un thread y le seala el trabajo a realizar

THREADS DENTRO DEL S.O.

La clave de ver thread desde la perspectiva de un sistema operativo moderno es reconocer que los sistemas operativos estn particionados en 2 capas distintas: particin nivel-usuario(donde las aplicaciones son ejecutadas) y la particin nivel-kernel(donde la actividades orientadas del sistema ocurren).Figura 2.3 muestra esas particiones junto con otros componentes.Esta figura muestra la interface entre la capa aplicacin y el sistema operativo nivel-kernel,denominado como bibliotecas de sistema.Estas contienen los componentes necesarios del sistema operativo que pueden ser ejecutadas con privilegios nivel-usario.Como se ilustra, la interface entre el sistema opertico y el procesador es la capa de abstraccin de hardware(HAL) Figura 2.3

El kernel es el nucleo del sistema operativo y mantiene tablas para hacer un seguiminto de procesos y threads.La mayora de actividades nivel-thread depende de threads nivelkernel.Las libreras threadinf como OPENPM y Pthread usan threads nivel-kernel. Windows soporta ambos (nivel-kernel y usuario).Threads nivel-usuario, son llamados fibras en la platadorma Windows,requiere que el programdor crela infraestructura de administracin entera para los threads y que manualmente programe su ejecucin.Sus beneficio es que el desarrollador puede manipular ciertos detalles que son obscurecidos en el thread nivel-kernel.Sin embargodebido a este gasto manualy algunas limitaiones adicionales,fibras quizs o agrega mucho valor para aplicaciones multithread bien diseadas.El gasto asociado con los thread nivel-kernel es mas alto que el thread nivelusuario y por tanto los nivel-kernel son frecuentemente reusados una vez que terminan su trabajo original THread nivel-kernel brindan mejor rendimiento, y threads de multiple kernel desde el mismo porceso puede ejecutar en diferentes procesadores o nucleos. Los procesos son tareas discretas de una programa que tiene si propio direccin de espacio.Ellos son la unidad de ejecucin nivel-grueso como una entidad independiente dentro de un sistema operativo. Hay una correlacion directa entre procesos y thread.Multiple Thread pueden residir en un proceso.Todo los thread en un proceso comparte la misma direccin de espacio y se benefician de una comunicacin inter-thread.EN vez de mantener una lista de threads basado-proceso individual , el kernel mantiene una tabla de thread para tener un seguimiento de todos los threads. EL sistema operativo asigna un control de bloqueo de procesos(PCB) para cada procesos;este contiene data en la identidad nica del proceso,estado actual de la maquina,la prioridad de los procesos,y la direccin de la memoria vitual donde el procesos reside

Figura 2.4 muestra la relacin entre procesadores,procesos y threads en sistemas operativos modernos.UN procesador ejecuta thread desde uno o mas procesos,cada uno de los cuales contiene uno o mas hilos Figure 2.4 Un programa tiene uno o mas procesos,cada uno de ellos contiene uno o mas thread.cada uno de ellos es asignado a un procesador por el organizador (scheduler)en el sistema operativo. Un concepto conocido como afinidad de procesador habilita al programador a requerir asignacin de un thread especifico a un especifico procesador.La mayoriade los sistemas de hoy intentan obedecer esos pedidos pero no garantizan el cumplimiento. Varios modelos de asignacin sonsuados entre threads y procesadores: uno a uno(1:1), muchos a uno (M:1) y mucho a mucho(M:N), como se muestra en 2.5.El modelo 1:1 no requiere un organizador thread-biblioteca y el sistema operativo maneja la responsabilidad de organizacin. Esto es tambin conocido como multi-threading preventivo.Linux,windows2000 y windowsXP, usan este modelo(multi-threading preventivo).En el modelo M:1, labliblioteca organizadora decide cual thread obtiene la prioridad.Esto es llamado Multi-threading cooperativo. En el caso M:N, la asignacin es flexible Figura 2.5

Threads nivel-usuario tales como los de Windows son asignados a los threads de kerne;y luego cuando se estn ejecutando,el procesador los conoce solo como threads nivelkernel. En general, un modelo preventivo o 1:1 habilita un manejo mas fuerte de los thread por el sistema operativo.Este libro solo seenfoca en Windows y Linux .

THREAD DENTRO DEL HARDWARE


El hardware ejecuta las instrucciones desde los niveles desoftware. Las instrucciones de los thread de tu aplicacin son asignados a recursos y fluyen hacia abajo a travs de los componentes intermedios-el sistema operativo,entorno de ejecucin,y capa virtual- hacia el hardware. Threading en el hardware alguna vez requeran multiples CPUs para implementar paralelismo:cada thread corria en su propio procesador separado. Hoy, los procesadores con HYper-Threading Tecnology(HT tecnology) y multinucleos permite multithreading en un solo procesador.Estos procesaddores multi-threaded permiten dos o mas thread de

ejecucionpara correr un solo CPU al mismo tiempo.Este CPU debe tener solo un motor o nucleo de ejecucin pero comparten la misma fuente y otros recursos de hardware entre los threads que se ejecutan.Tal proceso debera ser considerado concurrente y ni paralelo.Figura 2.6 muestra esta diferencia. Figura 2.6 CPUs multinucleo,por otro lado,proporciona dos o mas nucleos de ejecucin y entonces ellos entregan multi-threading basado en hardware verdadero.Poruqe ambos threads se ejecuntan en el mismo procesador, este diseo es conocido como Chip multi-threading (CMT).Por el contrario,HT tencnology solo usa un nucleo en el cual dos threads comparte la mayora de los recursos de ejecucin. Este modelo es llamado multi-threading simultaneo (SMT).SMT usa un organizador de hardware para administrar diferente threads de hardware que necesiten recursos. EL numero de threads de hardware que pueden ejecutar simultanemaente es una consideracin importante en el diseo del software; para lograr el verdadero paralelismo, el numero de threads del programa activos debera ser siempre igual al numero de threads de hardware disponible.En la mayora de los casos, los threads de programas excedern los threads de hardware disponibles. Sin embargomucho threads de software pueden poner relentizar el rendimeinto.Entonces,mantener un balance de threads de software y hardware entrega buenos resultados

QUE PASA CUANDO UN THREAD ES CREADO


Como se discutio antes, pueden haber mas de un thread en un proceso, y cada uno de los thread opera independientemente,incluso si comparten la misma dirrecion de espacio y ciertos recursos, como descriptores de archivo. Ademas,cada thread necesita tener su propio espacio de pila.Esta pilas son usualmente administradas por el sistema operativo.Figura 2.7 muestra un representacin en forma de pila de una de un procesos multi-thread.Como un desarrollador de aplicciones,no deberas preocuparte acerca de los detalles de administracin de pila,tales como pila de tamao de threads o pila de asignacin de threads.Por el otro lado, desarrolladores nivel-sistema deben entender los detalles esenciales.Si tu quiere isea threading en tu aplicacin,debes ser conciente del los limites del sistema operativo.Para akgunas aplicaciones,esta limitaciones pueden ser restrictivas, y en otros casos quizs tienes que evitar el administrador de pila por defecto y manejar pilas por tu cuenta.El espacio de pila por defecto para un thread varia de sistema en sistema.Eso es porque crear muchos thread en algunos sistemas pueden relentizar el rendimiento dramticamente Una vez creado, un thread es siempre en in de cuatro estados :listo,ejecutando,esperando,o terminado.Hay sub-estados adicionales que reflejan

varias razones para entrar en uno de los cuatro estados bsicos.Esos Subestados pueden ser valiosos depurando o analizando una aplicacin threaded. Todo proceso tiene almenos un thread.Este thread inicial es creado como parte del proceso de inicializacin.Aplicaciones threads que creas se ejecutaran mientras el threadinicial continua ejecuntandose.Como esta indicado en el digarama de estados en la figura 2.8,cada thread que creas empienza en un estado listo. Despuesm cuando el nuevo thread esta intentando ejecutar instrucciones, este esta o en el estado ejecutando o bloqueado .Esta bloqueado si esta esperando por un recurso o por otro thread.Cuando un thread ha completado su trabajo,Este es terminado o puesto de nuevo en el programa en estado listo .A la terminacin del programa, el thread principal y subsidiario son terminados Figure 2.8

Modelos de programacin de aplicaciones y subprocesamiento Los hilos se utilizan libremente por el sistema operativo para sus propias actividades internas por lo que incluso si usted escribe una aplicacin de subproceso nico, la configuracin de tiempo de ejecucin estar fuertemente enroscado. Todos los principales lenguajes de programacin soportan hoy el uso de hilos, si esos lenguajes son imprescindibles (C, Fortran, Pascal, Ada), orientado a objetos (C + +, Java, C #), la funcin (Lisp, Miranda, SML), o lgica (Prolog) Entorno Virtual: VM y Plataformas Una de las tendencias ms importantes de la informtica hoy en da es la virtualizacin. La virtualizacin es el proceso de utilizacin de los recursos de computacin para crear la apariencia de un conjunto diferente de recursos. Virtualizacin Runtime, tal como se encuentra en la JVM de Java, crea la apariencia de una aplicacin Java que se ejecuta en su propio entorno privado o de la mquina. virtualizacin Runtime La operacin de la virtualizacin de tiempo de ejecucin est siendo prestado por mquina virtual en tiempo de ejecucin. Estas mquinas virtuales (VM) se pueden considerar como un contenedor y la aplicacin ejecutor en la parte superior de un sistema operativo. Hay dos mquinas virtuales principales en uso: Toda la Java VM y Common Language Runtime de Microsoft (CLR) que se discutieron anteriormente. Estas mquinas virtuales, por ejemplo, crean al menos tres hilos: el hilo de ejecucin, un hilo de recoleccin de basura que libera los bloques de memoria que ya no estn en uso, y un hilo de just-in-time (JIT) de cdigos de bytes en binario ejecutable cdigo. Las mquinas virtuales crean generalmente otros hilos para tareas internas. La mquina virtual y el sistema operativo de trabajo en tndem para mapear estos hilos a los recursos de ejecucin disponibles de una manera que se beneficiarn el rendimiento tanto como sea posible. La virtualizacin del sistema

La virtualizacin del sistema crea un tipo diferente de mquina virtual. Estas mquinas virtuales recrear un contexto de ejecucin completa del software: utilizan adaptadores de red virtuales y discos y ejecutar su propia instancia del sistema operativo. Varias de estas mquinas virtuales pueden ejecutar en la misma plataforma de hardware, cada uno con su sistema operativo independiente. La capa de virtualizacin que se sientan entre el sistema host y estas mquinas virtuales se llama el monitor de mquina virtual (VMM). El VMM tambin se conoce como el hipervisor.

A VMM proporciona la virtualizacin necesaria de la plataforma subyacente de tal manera que el sistema operativo en cada mquina virtual se ejecuta bajo la ilusin de que es propietaria de toda la plataforma hardware.

Cuando la virtualizacin del hardware subyacente , software de mquina virtual hace uso de un concepto llamado procesadores virtuales . Se presenta como muchos procesadores virtuales para el sistema operativo husped , ya que hay ncleos en el hardware de sistema principal real . Tecnologa HT no cambia el nmero de procesadores virtuales, se cuentan slo los ncleos . Uno de los importantes beneficios de la virtualizacin del procesador es que puede crear aislamiento de la arquitectura de conjunto de instrucciones ( ISA ) . Ciertas instrucciones del procesador pueden ejecutar slo los procesadores Intel de hoy en da , slo un pedazo de software del sistema operativo host tiene este nivel de privilegio. El VMM y de toda la carrera VM como aplicaciones . Entonces, qu sucede cuando uno de los sistemas operativos invitados tiene que ejecutar una instruccin privilegiada ? Esta instruccin es atrapado por el procesador virtual en la mquina virtual y se realiza una llamada a la VMM. En algunos casos, el VMM puede manejar la propia convocatoria , en otros debe pasar la llamada al sistema operativo hos, esperar la respuesta y emular esa respuesta en el procesador virtual. Por este medio , el VMM se las arregla para eludir la ejecucin de instrucciones privilegiadas . Sin embargo , este proceso tiene un costo de rendimiento distinto asociado con l . Como resultado de ello , Intel ha desarrollado una serie de ampliaciones de la ISA que proporcionan una forma eficaz de VMM para ejecutar las instrucciones privilegiadas de los sistemas operativos invitados . Estas extensiones son parte de la tecnologa de virtualizacin de Intel y estn diseados para mejorar el rendimiento de VMM .

Asignacin de temas de aplicacin

VMM hacen muy poco inusual para manejar temas de aplicacin. Cuando una aplicacin que se ejecuta en una mquina virtual crea un hilo, el hilo de la creacin y posterior sheduling es manejado por el sistema operativo invitado. El VMM no tiene por qu saberlo. Cuando los programas del sistema operativo invitado de la rosca , el procesador virtual ejecuta las

instrucciones que utilizan los mismos mtodos que ejecuta todas las instrucciones de secuencia. El VMM no hace ningn intento para que coincida con temas de aplicacin para cada procesador especfico o para adivinar el planificador del sistema operativo invitado. Por lo tanto, en un sistema con un procesador de doble ncleo, por ejemplo, el VMM presenta dos procesadores virtuales para el sistema operativo invitado.

ejecutndose en el actual hardware.ElVMN ejecuta instrucciones pero presta poca atencin de qu threads de aplicacin estn ejecutndose La nica vez que el VMM interrumpe este procesos es cuando necesita intercambiar una VM o realizar tareas internas.En tal caso,mucho poblemas pueden surgir. Por ejemplo,cuando una VMM esta ejecutando multiples VMs, tiene un intervalo de tiempo entre estos.Suponga que un thread esta bloqueado y esperando por un thread ejecutndose en un diferente procesador virtual cuando este otro procesador es intercambiado.La VM originam encontrara una demora substancial que no se producira si ambos VMs hubieran estado ejecuntandose en sus propios sistemas de hardware. Este problema,conocido como prevencin de bloqueo(lock-bolder preemption) ,es uno de los muchos que surgen del hecho que los recursos de la VM invitada deben ser intercambiados aveces y el estado exacto de todos los threads talvez noestan preparados para esta situacin.Sin embargo, como la vitualizacion se vuelve mas ampliamente adoptada, es probable que los sistemas operativos ofrecezcan caractersticas que asistan a las VMMs para coordinar este tipo de actividad. CONCLUSIONES PUNTOS CLAVES Los conceptos de threading dependen del entendimiento de la interaccin de varios componentes del sistema Para comrprender adecuadamente el impacto del threading,es importante entender el impacto del threading en lo componentes del sistema Los thread del software son diferentes que lo threads de hardware,pero mantienen una relacin directa Los thread de la aplicacion pueden ser implementados usando APIs o bibliotecas multithreading Los procesos,threads,y fibras son diferentes niveles de mecanismos de ejecucin dentro de un sistema. Hay dos tipos de virtualizacin en un sistema, virtualizacin de tiempo de ejecucin y virtualizacin de sistema

Un monitor de maquina virtual(VMM) tpicamente no hace ningn intento para emparejar los hilos de la aplicacin con nucleos especficos de procesador o de predecir al planificador del sistema operativo invitado

You might also like