Máquina Virtual
Máquina Virtual
Máquina Virtual
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
MC722 - Projeto de Sistemas<br />
Computacionais<br />
<strong>Máquina</strong> <strong>Virtual</strong>
O que é <strong>Máquina</strong> <strong>Virtual</strong>?
O que é <strong>Máquina</strong> <strong>Virtual</strong> ?<br />
• Execução tradicional depende de duas coisas:<br />
arquitetura do processador e SO utilizado.
O que é <strong>Máquina</strong> <strong>Virtual</strong> ?<br />
• Execução tradicional depende de duas coisas:<br />
arquitetura do processador e SO utilizado.
O que é <strong>Máquina</strong> <strong>Virtual</strong> ?<br />
• A <strong>Máquina</strong> <strong>Virtual</strong> é um software que isola o<br />
processador e o SO da aplicação usada pelo<br />
usuário.
O que é <strong>Máquina</strong> <strong>Virtual</strong> ?<br />
• A <strong>Máquina</strong> <strong>Virtual</strong> é um software que isola o<br />
processador e o SO da aplicação usada pelo<br />
usuário.
.NET Framework
.NET Framework<br />
• Plataforma da Microsoft para desenvolvimento e<br />
execução de aplicativos.
.NET Framework<br />
• Plataforma da Microsoft para desenvolvimento e<br />
execução de aplicativos.<br />
• Dois componentes principais:
.NET Framework<br />
• Plataforma da Microsoft para desenvolvimento e<br />
execução de aplicativos.<br />
• Dois componentes principais:<br />
.NET Framework class library.<br />
<strong>Máquina</strong> <strong>Virtual</strong> .NET – CLR (Common Language<br />
Runtime).
.NET Framework<br />
• Objetivos:
.NET Framework<br />
• Objetivos:<br />
Programação OO com execução local e remota.<br />
Interação entre partes escritas em diferentes linguagens<br />
(Cross-Language).<br />
Execução de código de maneira segura e otimizada.
Managed Code
Managed Code<br />
• Código a ser executado na CLR.<br />
• Composto por duas partes:<br />
MSIL (Microsoft Intermediate Language).<br />
Metadata.<br />
• Garante a sergurança na execução do código e a<br />
interoperabilidade.
MSIL(Microsoft Intermediate<br />
Language)
MSIL<br />
• Implementação da CIL(Common Intermediate<br />
Language) especificada no padrão ECMA 335.<br />
• É o bytecode, pseudocode, ou assembly da<br />
máquina virtual .NET.<br />
• Linguagem intermediária padrão da <strong>Máquina</strong><br />
<strong>Virtual</strong>.
MSIL
MSIL<br />
• Código em C#:<br />
class Hello {<br />
}<br />
public static void Main() {<br />
System.Console.WriteLine("Hello world!");<br />
• Código em COBOL:<br />
000010 IDENTIFICATION DIVISION.<br />
000020 PROGRAM-ID. MAIN.<br />
000030 PROCEDURE DIVISION.<br />
000040 DISPLAY "Hello world!"<br />
000050 END PROGRAM MAIN.
MSIL<br />
• Código em C#:<br />
class Hello {<br />
}<br />
public static void Main() {<br />
System.Console.WriteLine("Hello world!");<br />
● Managed Code<br />
.method static void main()<br />
{<br />
.entrypoint<br />
.maxstack 1<br />
ldstr "Hello world!"<br />
call void [mscorlib]System.Console::WriteLine(string)<br />
ret<br />
}<br />
• Código em COBOL:<br />
000010 IDENTIFICATION DIVISION.<br />
000020 PROGRAM-ID. MAIN.<br />
000030 PROCEDURE DIVISION.<br />
000040 DISPLAY "Hello world!"<br />
000050 END PROGRAM MAIN.
MSIL<br />
• Conjunto de instruções:
MSIL<br />
• Conjunto de instruções:<br />
Arquitetura baseada em pilha.<br />
Não existem registradores.
MSIL<br />
Instrução<br />
ldarg num<br />
ldloc indx<br />
starg num<br />
stloc indx<br />
pop<br />
ldstr<br />
Descrição<br />
Empilha argumento num na pilha.<br />
Empilha variável local identificada pelo índice<br />
indx na pilha.<br />
Desempilha elemento do topo da pilha e o<br />
retorna no argumento num.<br />
Desempilha elemento do topo da pilha e o<br />
retorna na variável local identificada pelo<br />
índice indx.<br />
Remove elemento do topo da pilha.<br />
Empilha uma string na pilha.
MSIL<br />
Instrução<br />
add<br />
sub<br />
mul<br />
div<br />
rem<br />
Descrição<br />
Desempilha os dois valores do topo da pilha,<br />
efetua sua adição e empilha o resultado na<br />
pilha.<br />
Desempilha os dois valores do topo da pilha,<br />
subtrai o primeiro valor desempilhado do<br />
segundo e empilha o resultado na pilha.<br />
Desempilha os dois valores do topo da pilha,<br />
efetua sua multiplicação e empilha o resultado<br />
na pilha.<br />
Desempilha os dois valores do topo da pilha,<br />
divide o segundo valor desempilhado pelo<br />
primeiro e empilha o resultado na pilha.<br />
Desempilha os dois valores do topo da pilha,<br />
divide o segundo valor desempilhado pelo<br />
primeiro e empilha o resto da divisão na pilha.
Metadata
Metadata<br />
• Informações que descrevem em linguagem neutra<br />
os elementos de um código escrito em qualquer<br />
linguagem.<br />
• Metadata de um módulo contém informação<br />
suficiente para a interação com outro módulo
Metadata<br />
• Composto por:<br />
Descrição do Assembly<br />
Descrição dos tipos<br />
Atributos<br />
• Informações armazenadas em tabelas de<br />
metadata e heaps
<strong>Máquina</strong> <strong>Virtual</strong> .NET
<strong>Máquina</strong> <strong>Virtual</strong> .NET<br />
• Esquema de execução:
<strong>Máquina</strong> <strong>Virtual</strong> .NET
<strong>Máquina</strong> <strong>Virtual</strong> .NET<br />
• Carregamento de<br />
Classes:<br />
Associação a stubs.
<strong>Máquina</strong> <strong>Virtual</strong> .NET<br />
• Compilador JIT e<br />
Execução:<br />
Gera código nativo “Just<br />
In Time”.<br />
Equilíbrio entre<br />
portabilidade e eficiência.
Fim