Onde Voce Programa

55
Ambientes de Execução Concorrência entre Threads Java

description

Programaçao

Transcript of Onde Voce Programa

Apresentao do PowerPoint

Ambientes de Execuo Concorrncia entre Threads JavaAmbientes Java

Estrutura da JVM (Java)

Carregador de Classes Java

Estruturas de Dados da JVM

Ambiente de Execuo do JavaRun Time Environment

Como estruturado ???

Implementado pelas APIs da linguagem.Arquiteturas de Kernel

Arquitetura do kernel Linux Kernel Monoltico !!!!

Todas as suas funes (acesso e gravao nos sistemas de arquivos, operaes de entrada e sada, gerenciamento de memria, e escalonamento de processos) so realizadas no espao do prprio Kernel,

Ou seja, so todas realizadas em um nico bloco com todas as funcionalidades bsicas carregadas na memria.Estrutura Linux

Arquitetura GNU Linux

Arquitetura GNU Linux outra viso

Espao do Usurio (EU)Este o espao no qual os aplicativos de usurio so executados.

GNU C Library = glibc

EU = Aplicaes do Usurio + GNU C Library

Aplicaes Java do Usurio = Multithreading (Java Threads)

GNU C Library (glibc) Fornece a interface de chamada do sistema que se conecta ao kernel e fornece o mecanismo para transio entre o aplicativo de espao de usurio e o kernel.

Isso importante, pois o kernel e o aplicativo do usurio ocupam espaos de endereos diferentes e protegidos.

Espaos de EndereamentoEmbora cada processo no espao de usurio ocupe seu prprio espao de endereamento, o kernel ocupa um nico espao de endereo. Interfaces Externas ao Kernel LinuxC Library ou GNU C Library

System Call Interface - SCI (Chamadas do Sistema)

Como a JVM se comunica com a SCI ??

Chamadas de Sistema (SCI)Interface de programao aos servios fornecidos pelo SO.

Tipicamente escritos em uma linguagem de alto nvel (C or C++).

Geralmente acessadas por programas via uma API (Application Program Interface) do que diretamente pelo uso de chamadas de sistema.

Trs APIs mais comuns so :Win32 API para Windows. POSIX API para sistemas baseados em POSIX (incluindo todas as verses de UNIX, Linux, e Mac OS X).Java API para a mquina virtual Java (JVM).

Exemplo de Concorrncia

Um exemplo simples pode ser expressado atravs de um jogo onde o mesmo pode ser modelado com linhas de execuo diferentes (threads distintas), sendo uma para desenho de imagem e outra para udio;

Neste caso, h um thread para tratar rotinas de desenho e outro thread para tratar udio;

No ponto de vista do usurio, a imagem desenhada ao mesmo tempo em que o udio emitido pelos alto-falantes; Porm, para sistemas com uma nica CPU, cada linha de execuo processada por vez;

Escalonamento de ThreadsDa mesma forma que os processos sofrem escalonamento, as threads tambm tm a mesma necessidade.

Quando vrios processos so executados em uma CPU, eles do a impresso que esto sendo executados simultaneamente.

Com as threads ocorre o mesmo, elas esperam at serem executadas. Como esta alternncia muito rpida, h impresso de que todas as threads so executadas paralelamente.

ULT e KLT

Usualmente as threads so divididas em duas categorias: thread ao nvel do usurio (em ingls: User-Level Thread (ULT)), thread ao nvel do ncleo (em ingls: Kernel-Level Thread (KLT)).

Escalonamento de Threadsno Espao do Usurio (ULT)Linha de execuo ao nvel do usurio

As threads ULT so escalonadas pelo programador, tendo a grande vantagem de cada processo usar um algoritmo de escalonamento que melhor se adapte a situao. O sistema operacional neste tipo de thread no faz o escalonamento, em geral ele no sabe que elas existem.

Neste modo, o programador responsvel por criar, executar, escalonar e destruir a thread.

Threads no Nvel UsurioThreads em modo usurio so implementas por chamadas a uma biblioteca de rotinas que so ligadas e carregadas em tempo de execuo (run-time) no mesmo espao de endereamento do processo e executadas em modo usurio.

O sistema operacional no sabe da existncia de mltiplos threads, sendo responsabilidade da biblioteca gerenciar e sincronizar os diversos threads existentes.Threads no Nvel UsurioUtilizando a biblioteca, mltiplos threads poder ser utilizados, compartilhando o mesmo espao de endereamento do processo e outros recursos.

Threads em modo usurio so rpidos e eficientes, por dispensar acesso ao kernel do sistema para a criao, eliminao, sincronizao e troca de contexto das threads. A biblioteca oferece todo o suporte necessrio em modo usurio, sem a necessidade de chamadas ao sistema (system calls).Processos e suas Threads ULT

Exemplo ULTUm exemplo prtico de processo chamado P1 que contm tais threads: P1-T1, P1-T2 e P1-T3, quando o sistema operacional d CPU para o processo P1, cabe a ele destinar qual thread ser executada.

Caso esta thread use todo o quantum para o processo, o sistema operacional chamar outro processo, e quando o processo P1 voltar a executar, P1-T1 voltar a ser executada e continuar executando at seu trmino ou interveno de P1, este comportamento no afetar outros processos pois o sistema continua escalonando os processos normalmente.

Threads no Nvel do UsurioAs threads da primeira categoria (ULT) so suportadas pela aplicao, sem conhecimento do ncleo e geralmente so implementadas por pacotes de rotinas (cdigos para criar, terminar, escalonamento e armazenar contexto) fornecidas por uma determinada biblioteca de uma linguagem.

Multithreading em Java.Como o caso da thread.h (biblioteca padro da linguagem C)Threads no Nvel de KernelLinha de execuo ao nvel do ncleo

As KLT so escalonadas diretamente pelo sistema operacional, comumente so mais lentas que as Threads ULT pois a cada chamada elas necessitam consultar o sistema, exigindo assim a mudana total de contexto do processador, memria e outros nveis necessrios para alternar um processo.

Um exemplo prtico de processo chamado P2 que contm as threads P2T1, P2T2 e P2T3 e um processo chamado P3 que contm as threads P3T1, P3T2 E P3T3.

Escalonamento de ThreadsO Sistema Operacional no entregar a CPU ao processo e sim a uma thread deste processo.

Note agora que o sistema responsvel por escalonar as threads e este sistema tem que suportar threads, a cada interrupo de thread necessrio mudar todo o contexto de CPU e memria, porm as threads so independentes dos processos, podendo ser executadas P3T2, P2T1, P2T2, P2T1, P3T1,P2T3,P3T3, ou seja a ordem em que o escalonador do sistema determinar.

Threads no Nvel UsurioJ com as threads em modo usurio no se consegue ter a mesma independncia, pois quando passamos o controle ao processo, enquanto seu quantum for vlido ele ir decidir que thread ir rodar.

Um escalonamento tpico do sistema onde o escalonador sempre escolhe a thread de maior prioridade, que so divididas em duas classes: Real Time e Normal.

Prioridades de ThreadsCada thread ganha uma prioridade ao ser criada que varia de 0 a 31(0 a menor e 31 maior), processos com prioridade 0 a 15 (Real Time) tem prioridade ajustada no tempo de execuo como nos processos de E/S que tem a prioridade aumentada variando o perifrico.

Prioridades de ThreadsProcessos com prioridade 16 a 31 so executados at terminar e no tem prioridade alterada, mas somente uma thread recebe a prioridade zero que a responsvel por zerar pginas livres no sistema.

Existe ainda uma outra classe chamada de idle, uma classe mais baixa ainda, que s executada quando no existem threads aptas, threads dessa classe no interferem na performance.

Processos e Threads KLT

Escalonamento de ThreadsPor Prioridade

Por Fracionamento de Tempo do processador (Time-Slicing)PreempoAto de forar a execuo de uma thread parar de executar no processador.

Precisa de chamadas ao sistema (SCI).

Por Prioridade

Cada thread Java tem uma prioridade (mnima = 0 e mxima=10), que ajuda ao SO a determinar a ordem em que as threads so escalonadas para execuo no processador.

Uma vez que uma thread de maior prioridade ganhe o processador, ela executa at sua concluso.

Time-SlicingFracionamento de tempo de CPU (Time-Slicing)

Mesmo que a thread no tenha concludo a execuo quando o quantum de tempo expirar, o processador tirado da thread e recebe a prxima de igual prioridade, se houver alguma disponvel.

Time-SlicingTime-Slicing preemptivo, mas preempo no implica em Time-Slicing.

A maioria das plataformas Java suporta Time-Slicing.

O que um KernelUm kernel, na verdade, no nada mais do que um gerenciador de recursos.

Se o recurso que est sendo gerenciado for um processo, uma memria ou um dispositivo de hardware, o kernel gerencia e intermedia o acesso ao recurso entre os vrios usurios concorrentes (no kernel e no espao do usurio). Kernel LinuxO kernel Linux implementa vrios atributos importantes de arquitetura.

O kernel dividido em camadas de diversos subsistemas distintos.

O Linux pode tambm ser considerado monoltico porque agrupa todos os servios bsicos dentro do kernel.Subsistemas do Kernel

Subsistemas do Kernel

Estados de Processos no Nvel de Kernel Linux

Sistema de Arquivos Virtual

Sistema de Arquivos Virtual

Sistema de Arquivo Virtual O Sistema de Arquivo Virtual (VFS) fornece uma abstrao de interface aos sistemas de arquivos.

O VFS fornece uma camada de troca entre a SCI e os sistemas de arquivos aos quais o kernel oferece suporte.Pilha de RedeA pilha de redes, pela estrutura, segue uma arquitetura em camadas.

O Protocolo de Internet (IP) o protocolo principal de camadas de rede situado abaixo do protocolo de transporte (mais comumente o Protocolo de Controle de Transmisses ou TCP).

Acima do TCP est a camada de soquetes, que chamada pelo SCI.

Pilha de RedeA camada de soquetes a API padro para o subsistema de rede e fornece uma interface com o usurio para vrios protocolos de rede.

Desde o acesso a quadros da camada 2 s unidades de dados de protocolo IP (PDUs) e at o TCP e o User Datagram Protocol (UDP), a camada de soquetes fornece um modo padronizado de gerenciar conexes e mover dados entre terminais.

Arquitetura e ImplementaoThreads em Modo Usurio

Threads em Modo Kernel

Threads em Modo Hbrido

Threads em Modo Hbrido

Desvantagens do Modo Usurio e do Modo Kernel.

Nesta arquitetura existe a idia de combinar as vantagens de threads implementados em modo usurio e modo kernel.

Threads em Modo Hbrido

Modelo Muitos-Para-Um

Modelo Um-Para-Um

Modelo Muitos-Para-Muitos

Modelo Muitos-Para-Um

- O modelo muitos-para-um mapeia muitos threads de nvel de usurio para threads do kernel.

O gerenciamento dos threads realizado no espao do usurio e assim eficiente, mas o processo inteiro ficar bloqueado.

Alm disso, como somente um thread pode acessar o kernel de cada vez, mltiplos threads so incapazes de executar em paralelo em multiprocessadores.

Modelo Um-Para-UmO modelo um-para-um mapeia cada thread de usurio para um thread de kernel, gera mais concorrncia do que o modelo muitos-para-um.

Permite a um outro thread ser executado, enquanto um thread realiza uma chamada de sistema de bloqueio, ele tambm permite que mltiplos threads executem em paralelo em multiprocessadores.

A nica desvantagem deste modelo que a criao de um thread de usurio requer a criao do correspondente thread de kernel.

Modelo Muitos-Para-Muitos - O modelo muitos-para-muitos multiplexa muitos threads de nvel de usurio para um nmero menor ou igual de threads de kernel.

O nmero de threads de kernel pode ser especfico tanto para uma aplicao em particular quanto para uma mquina em particular.

Os desenvolvedores podem criar tantos threads de usurio quantos forem necessrios, e os correspondentes threads de kernel podem executar em paralelo em um multiprocessador.

Alm disso, quando um thread realiza uma chamada de sistema de bloqueio, o kernel pode agendar um outro thread para execuo.

MultiprocessamentoMultiprocessamento a capacidade de um sistema operacional executar simultaneamente dois ou mais processos. Pressupe a existncia de dois ou mais processadores.

Difere da multitarefa, pois esta simula a simultaneidade, utilizando-se de vrios recursos, sendo o principal o compartilhamento de tempo de uso do processador entre vrios processos.

Caractersticas do Multiprocessamento

Um multiprocessador ou sistema multiprocessado um sistema integrado de computao com as seguintes caractersticas:

Envolve dois ou mais processadores fsicos: sejam processadores separados;mltiplos ncleos encapsulados no mesmo chip);lgicos (processador(es) com a tecnologia HyperThreading da Intel) com o mesmo poder computacional e cada um capaz de executar processos autonomamente. Isto implica que no h nenhuma unidade central de controle; cada processador contm sua prpria unidade de controle. Assim, efetivamente, a lgica de controle distribuda pelo sistema.

Os processadores compartilham um nico espao de endereamento de memria.

O sistema de hardware como um todo gerenciado por um nico sistema operacional.

O sistema operacional com suporte a multiprocessamento deve ser capaz de: suportar multitarefa;manter mltiplas filas de processos, uma para cada processador.