Máquinas virtuais
description
Transcript of Máquinas virtuais
![Page 1: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/1.jpg)
Máquinas virtuais
Orlando Corrêa Netto
![Page 2: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/2.jpg)
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.
![Page 3: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/3.jpg)
Maquina virtual
• Máquina virtual é uma abstração, com micro instruções próximas ao de maquinas físicas
![Page 4: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/4.jpg)
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.
![Page 5: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/5.jpg)
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;
![Page 6: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/6.jpg)
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;
![Page 7: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/7.jpg)
Desalocação automáticaHot 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;
![Page 8: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/8.jpg)
Processo
1 2 3 4 5 7 8 A6 B C D E9
2 3 4 5 6 B C D9
1. Identificar raizes: {3,4, 6}2. Encontrar referências e
marcar como vivos3. Compactar head
Espaço livre
Lixo
Vivos
![Page 9: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/9.jpg)
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;
![Page 10: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/10.jpg)
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).
![Page 11: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/11.jpg)
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;
![Page 12: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/12.jpg)
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;
![Page 13: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/13.jpg)
• 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;
![Page 14: Máquinas virtuais](https://reader036.fdocumentos.com/reader036/viewer/2022082712/568144d3550346895db19b49/html5/thumbnails/14.jpg)
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