19.04.2013 Views

Máquina Virtual

Máquina Virtual

Máquina Virtual

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!