Virtualização André Luis Loureiro de Carvalho Eduardo Lourenço Apolinário Fernando Henrique Calheiros Lopes Francisco Carvalho Felipe Leal Vítor Teixeira Costa Agenda • Intro/História... • .... • ... André Por que virtualizar? • Consolidação de servidores – Menor TCO Diminuição do # de computadores Diminuição dos custos com HW e manutenção! Por que virtualizar? • Consolidação de aplicações – Virtualizando hardware necessário para aplicações legadas • Sandboxing – VMs são ambientes seguros e isolados para rodar aplicações de terceiros ou pouco confiáveis Por que virtualizar? • Múltiplos ambientes de execução – Aumento de QoS através de garantia de quantidade específicas de recursos • Hardware virtual – Uma VM pode fornecer hardware que não existe fisicamente (ex: SCSI) • Múltiplos SOs simultâneos – Linux, FreeBSD, Windows, etc, rodando ao mesmo tempo em uma máquina Por que virtualizar? • Debugging – Possibilita debugar sistemas operacionais e device drivers • Migração de software – Facilita a migração de software entre máquinas Por que virtualizar? • Appliances – Permite o empacotamento de aplicação junto com o sistema operacional • Teste/QA – Permite a criação de cenários de teste difíceis de reproduzir Atributos • • • • Compatibilidade de Software Isolamento Encapsulamento Performance Compatibilidade de SW • Abstração compatível! – HW-Level: SOs e demais softwares – SW-Level: Aplicações – Language-Level: Programas na linguagem Isolamento • Ambiente isolado • Contensão contra bugs e hackers (debugging - sandboxing!) • Mascaramento das camadas subjacentes “write once, run anywhere!” Encapsulamento • Controle do SW virtualizador pelo SW subjacente Melhor ambiente de execução! Encapsulamento • Máquinas virtuais de linguagens de alto nível: – – – – Runtime checks Gerenciamento de memória Garbage collection ... Ambiente de programação filé! Performance • Camadas extras de abstração... ... overhead extra na execução • Máquinas virtuais bem sucedidas valem à pena! Requisitos para Máquinas Virtuais • Popek e Goldberg (1974) – “For any computer a virtual machine monitor may be constructed if the set of sensitive instructions for that computer is a subset of the set of privileged instructions.” • Em outras palavras... Requisitos para Máquinas Virtuais • Três características essenciais (Popek e Goldberg): – Execução idêntica • Exceção: timing – Subconjunto estatisticamente dominante de instruções são executadas pelo processador real – A VMM tem controle total Virtualizando IA-32 • Não atende ao primeiro requisito de Popek e Goldberg: – 17 instruções que deveriam gerar trap não geram • Grande quantidade de devices e drivers Virtualizando IA-32 • Instruções problemáticas: – SGDT, SIDT, SLDT • Contém endereço linear de suas respectivas tabelas – SMSW • Armazena o valor da machine status word – PUSHF, POPF • Atualizar o registrador EFLAGS Virtualizando IA-32 • Instruções problemáticas: – LAR, LSL, VERR, VERW • Permitem verificar direitos de acesso de registradores de segmento e se um segmento pode ser lido/escrita no CPL atual – PUSH • Permitiria que o valor do registrador CS (que contém o CPL) seja examinado – POP • Não pode ser usada para carregar um novo valor no registrador CS Virtualizando IA-32 • Instruções problemáticas – CALL, JMP, INT n, RET • Calls e jumps pra segmentos com diferente nível de prioridade – STR • Permite a verificação do RPL do atual Task Segment Selector – MOVE • Permite a verificar o CPL dos registratores CS e SS Virtualizando IA-32 • Procedimentos para virtualizar IA-32 (Robin e Irvine): – Instruções não-sensíveis e não-privilegiadas podem ser rodadas diretamente no processador – Instruções sensíveis e privilegiadas geram trap – Instruções sensíveis e não privilegiadas devem ser detectadas Hosted Architecture Hypervisor Architecture Resto (sei lah como vai ser essa porra)