A Arquitetura da Máquina Virtual .NET Marcelo Coutinho Cordeiro RA002092 Roteiro Introdução Objetivo Arquitetura Sistema de Execução Virtual Aspectos Estruturais Tratamento de Exceções Introdução Framework .NET Uso de máquinas virtuais Independência da arquitetura do computador Common Language Runtime (CLR) Suporta mais de 40 linguagens diferentes Objetivo Apresentação da arquitetura da máquina virtual do framework .NET e suas peculiaridades. Arquitetura Linguagens intermediárias: MSIL, e OptIL Compiladores Just-in-Time Carregamento de classes Verificação Checagens de Segurança Linguagens Intermediárias Microsoft Intermediate Language (MSIL) Conjunto de instruções baseado em pilha Construções orientadas a objetos: chamada de métodos virtuais, alocação e inicialização de objetos Suporte a programas Typesafe. OptIL, subconjunto de MSIL Compiladores JIT Carregamento de Classes Carrega uma implementação em MSIL, ou OptIL para a memória. Verifica a consistência esperada por outras classes previamente carregadas. Prepara a execução Verificação Programas Typesafe: – – Referenciam somente memória alocada para eles Acessam objetos somente através de sua interface pública Mecanismo de segurança que verifica se o código é typesafe. Usada em conjunto com metadados de tipo, a Verificação garante type safety dos programas em MSIL. Checagens de Segurança Checagem Declarativa – – Automaticamente ativada quando um método é invocado. Checa-se as permissões, armazenadas em metadados Checagem Imperativa – Ocorre quando funções de segurança, como a verificação de um código de acesso, é invocada a partir de um código protegido Sistema de Execução Virtual Ambiente para execução do código Onde ocorre o carregamento de classes, verificação, compilação JIT, e gerenciamento de código Aspectos Estruturais Estrutura do Executável Fluxo de Controle Invocação de Métodos Estrutura do Executável Composto das seguintes informações: As instruções que compõem o corpo do método, incluindo todos manipuladores de exceção. A assinatura do método, que especifica o tipo de retorno, o número e a ordem dos parametros, e o tipo de cada um dos argumentos. O array de tratamento de exceções. O tamanho da pilha de execução do método. O tamanho dos arrays locais do método. Fluxo de Controle MSIL oferece grupo variado de opções de instruções para se alterar o fluxo normal de execução (branches, return, chamadas de métodos) Possui restrições nas transferências de controle. – – Só transmite o controle para fora de uma região protegida através de uma exceção. Só se transfere o controle para uma região de cláusula catch, ou finally usando exceções. Invocação de Métodos Uso de três instruções: call, calli, callvirt CALL: usada quando endereço de destino é fixado em tempo de ligação. CALLI: usada quando endereço de destino é fixado em tempo de execução. CALLVIRT: usada para invocar métodos abstratos. Tratamento de Exceções Baseado em objetos de exceção, e blocos protegidos de código. Quatro manipuladores de exceção para blocos protegidos: finally, fault, type-filtered, e user-filtered. ExecuteEngineException para inconsistências inesperadas pela CLR.