Máquinas virtuais Orlando Corrêa Netto
Agenda Conceito de máquina virtual; Construção da máquina em função da plataforma de desenvolvimento, ao contrario da máquina física; Custo de memória de um ambiente OO; Coletor de lixo e otimizações; Micro arquitetura SMT (Simultaneous Multi Threading); Modelo de memória na presença de threads.
Maquina virtual Máquina virtual é uma abstração, com micro instruções próximas ao de maquinas físicas
Modelo de Memória Provê uma abstração para leitura e escrita do modelo de memória da plataforma; Exemplo: Double umNumero = new Double(“1.2”); Cria uma palavra de 64 bits para representação de virgula flutuante de precisão dupla, independente da plataforma.
Desalocação automática (garbage collector) Em Java não existem métodos para desalocação manual de memória como free e delete (c/c++); Ao se criar um objeto, este possui um cabeçalho (header) com atributos especiais usados pela VM e não acessiveis ao programador;
Desalocação automática - Antes Entre estes atributos: contador de referências; Ao criarmos um objeto, o contador era zerado e a cada nova referência o contador era incrementado, e decrementado caso a referência fosse eliminada; Contador = 0 lápide;
Desalocação automática Hot spot: Localizar raízes: variáveis estáticas das classes carregadas e variáveis locais de métodos de execução; A partir das raízes, e feita a marcação: para cada raiz, seguimos suas referências recursivamente, marcando os objetos encontrados como vivos; O resto é lixo;
Processo Identificar raizes: {3,4, 6} 1 2 3 4 5 6 7 8 9 A B C D E Espaço livre Lixo Vivos 2 3 4 5 6 9 B C D Identificar raizes: {3,4, 6} Encontrar referências e marcar como vivos Compactar head
Complicações O mundo que vivemos e concorrente; Enquanto você lê esta frase, ocorrem respiração, circulação sanguínea, etc... Ao contrário do nosso mundo, a maioria das linguagens tem um único fluxo de execução; Java e C# são exemplos de linguagens multi-thread;
SMT SMT é uma técnica que permite múltiplas threads despacharem múltiplas instruções a cada ciclo para unidades funcionais de um processador superescalar. SMT combina a capacidade de despacho de múltiplas instruções das arquiteturas superescalares, com a habilidade de esconder latência das arquiteturas multithreading. A cada instante de tempo instruções de diferentes threads podem estar sendo executadas simultaneamente. Busca reduzir o número de slots de despacho não ocupados a cada ciclo (elevado em arquiteturas multithreading) e o número de ciclos em que nenhuma instrução é despachada (elevado em arquiteturas superescalares).
Modelo de Memória na presença de threads É uma especificação do funcionamento das threads e da gerência de memória na presença de threads; Garante consistência da memória na presença de threads;
MMT do .NET Imagine duas threads T1 e T2; T1 atualiza um objeto não local, obj.x = 10; T2 lê a variável: x = obj.x; em seguida; Não é garantido que T2 terá o novo valor: O código de T2 pode ter sido otimizado, fazendo cache num registrador temporário; Numa maquina multiprocessada, cada processador tem seu próprios caches, Ln;
Arquiteturas Spark e Itaniun fazem reordenação de instruções do tipo: T1:W[pos] = x; ++pos; T2: x=W[pos] T1: ++pos; W[pos-1] = x; T2: x=W[pos]; O modelo precisa garantir a consistência mesmo na ausência de sincronização;
Referências http://discuss.develop.com/archives/wa.exe?A2=ind0203B&L=DOTNET&P=R375 http://www-106.ibm.com/developerworks/library/j-jtp02244.html?ca=dgr-lnxw07JMMP1