19.04.2013 Views

Máquina Virtual

Máquina Virtual

Máquina Virtual

SHOW MORE
SHOW LESS

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

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

Saved successfully!

Ooh no, something went wrong!