EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Introdução aos Sistemas Operacionais Virtualização Eleri Cardozo FEEC/Unicamp EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Histórico Cenário da década de 70: ● Cada computador (mainframe) possuia um sistema operacional próprio. Cada compilador/ligador/carregador era implementado para um sistema operacional específico. ● Como consequência, cada aplicação era desenvolvida para um computador e para um sistema operacional. ● Como evoluir o hardware mantendo o software já desenvolvido? A IBM adotou uma solução engenhosa: máquinas virtuais. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Histórico Uma máquina virtual (VM) é uma implementação em software de uma máquina física ou lógica. Exemplos: Máquina física: hardware x86. Máquina lógica: Java Virtual Machine (JVM, ambiente de execução de programas Java), Linux. ● ● Máquinas virtuais ideiais oferecem exatamente os mesmos recursos da máquina física ou lógica. Máquinas virtuais podem ser implementadas sobre um sistema operacional ou diretamente sobre os recursos de hardware. Já que VMs podem oferecer os mesmos recursos de hardware, podemos instalar um sistema operacional sobre uma VM. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Histórico Máquina Virtual (HW1) Máquina Virtual (HW2) SO1 SO2 Hardware 3 (real) Cada VM emulava um hardware com seu respectivo sistema operacional. Com isso a IBM pode diminuir a diversidade do hardware ofertado sem comprometer as aplicações desenvolvidas pelos clientes. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Histórico Na década de 90, virtualização foi abandonada devido a dois fatores: 1. Downsizing (troca de um computador grande por vários pequenos), propiciado pelo barateamento das infraestruturas de rede (Ethernet) e dos servidores/desktops (Intel) 2. Uniformização dos sistemas operacionais (Windows, Unix/Linux). Entretanto, nos anos 2000 o cenário voltou a mudar: Custo de manutenção de um grande número de computadores (energia, atualização, sub-utilização, segurança física, etc.). ● Aumento considerável do poder dos desktops e servidores. ● Maturidade da Internet. ● Mobilidade. ● Isto trouxe de volta a virtualização ! EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Virtualização hoje Até mesmo um desktop/notebook moderno tem capacidade para executar múltiplas máquinas virtuais (como os mainframes de antigamente). Pode-se utilizar dois ou mais sistemas operacionais simultaneamente em uma mesma máquina. Com virtualização podemos dispor de múltiplos ambientes de processamento sobre um único hardware. Por exemplo, um único hardware pode abrigar servidores (Web, BD, etc.) baseados em diferentes sistemas operacionais. A diminuição do número de servidores propicia economia de energia (green computing) e melhor aproveitamento dos recursos. Virtualização trouxe uma nova forma de operar uma infraestrutura de TI: ao invés de adquirir processadores pode-se alugar VMs acessíveis por meio da Internet. Isto propicia uma adequação contínua às demandas de TI. Virtualização é base para a computação em nuvem. Por exemplo, toda a infraestrutura de armazenamento do Dropbox é baseada em VMs alugadas da Amazon. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Desafios da virtualização A virtualização impõe os seguintes desafios: Compartilhamento do mesmo hardware por múltiplas VMs que, por sua vez, devem prover isolação para os sistemas operacionais que as utilizam. ● Desempenho: VMs devem impor o mínimo overhead possível para não degradar o desempenho das aplicações que executam sobre ambientes virtualizados. ● Custo: a mudança para uma infraestrutura virtualizada demanda custos iniciais de planejamento, adquisição de software e hardware, treinamento e transição. ● Segurança e privacidade: como garantir que informações corporativas estão protegidas se nem sabemos aonde elas estão armazenadas? ● EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Terminologia Máquina Virtual (VM) Máquina Virtual (VM) Sistema Operacional Hospedado Sistema Operacional Hospedado Monitor de Máquina Virtual (MMV) Sistema Operacional Hospedeiro Hardware EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Requisitos para Virtualização Popek e Goldberg em 1974 identificaram três requisitos para um MMV: 1. Equivalência (fidelidade): um sistema operacional executando sobre um MMV deve exibir comportamento idêntico àquele exibido quando executado sobre o hardware real. 2. Controle de recursos: o MMV deve ter total controle sobre os recursos de hardware virtualizados. 3. Eficiência: uma fração significativa das instruções de máquina devem executar sem a intervenção do MMV. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Requisitos para Virtualização Popek e Goldberg definiram dois tipos de instruções de hardware que impactam na construção de um MMV: 1. Instruções privilegiadas: aquelas que geram uma interrupção quando executadas em modo não supervisor. 2. Instruções sensíveis: aquelas que mudam o estado do hardware tais como operações que afetam a MMU, os registradores especiais, etc. A condição necessária para que uma arquitetura de hardware possa ser virtualizada estabelece que, para esta arquitetura o conjunto de instruções sensíveis seja um subconjunto do conjunto de instruções privilegiadas. Esta condição permite construir um MMV que intercepte as instruções sensíveis executadas pelos sistemas operacionais hospedados. Para tal, basta o MMV executar em modo supervisor e os sistemas operacionais hospedados em modo usuário ou em um modo com privilégio intermediário. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Requisitos para Virtualização A arquitetura x86 não satisfaz as condições de Popek e Goldberg para virtualização. Nesta arquitetura, algumas instruções privilegiadas quando executadas em modo usuário falham sem gerar interrupções. Estas instruções são referidas como “instruções problemáticas”. Em 1999 a MWare conseguiu virtualizar a arquitetura x86 empregando uma técnica denominada Tradução Binária. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Tradução Binária Tradução binária é uma técnica que troca as instruções problemáticas por outras que geram interrupção se executadas em modo não supervisor. Nesta técnica não é o sistema operacional hospedado na VM que executa na máquina virtual, mas sim um tradutor. O código do sistema operacional é uma entrada para o tradutor que lê suas instruções e as executa na CPU. Para determinadas instruções problemáticas, o tradutor as altera ou acrescenta outras a fim de obter o comportamento desejado (gerar interrupções). Deve-se observar que apenas o núcleo do sistema operacional deve ter seu código traduzido pois somente este código utiliza instruções sensíveis. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Virtualização com Suporte do Hardware Arquiteturas modernas de hardware provêem suporte para vitualização, por exemplo: Virtualização da memória. Virtualização da CPU. ● Virtualização da entrada e saída. ● ● Arquiteturas com suporte à virtualização (como Intel-VT, AMD-V) oferecem instruções adicionais e modos do processador que facilitam a implementação do MMV, diminuindo assim seu overhead. Por exemplo, as instruções “problemáticas” foram eliminadas e existe um nível de privilégio maior que o supervisor que apenas o MMV pode executar. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Virtualização da Memória EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Virtualização da Memória (MMU) End. Virtual → End. Físico (2) Tab. de Páginas (do SO) (4) Sistema Operacional Hospedado Sistema Operacional Hospedado Máquina Virtual (1) (3) MMU Máquina Virtual (6) Monitor de Máquina Virtual (1): Hardware consulta TLB (2): Tab. de páginas do HW é pesquisada (3): Page Fault tratado pelo SO (4): SO providencia mapeamento (5): MMU consulta tab. de páginas estendida (6): Page Fault tratado pelo MMV (7): MMV providencia mapeamento (8): MMU é atualizada (8) (7) End. Físico → End. de Máquina Tab. de Páginas Estendida (5) EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Virtualização da CPU EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Virtualização da CPU Tratamento de interrupções via injeção de eventos. (1): MMV registra junto ao hardware as interrupções que deseja interceptar. (2): Uma destas interrupções é gerada. (3): Interrupção causa a saída de VM. (4): O manipulador desta interrupção do MMV é invocado. (5) Terminado o tratamento desta interrupção o hardware providencia a entrada de VM. (6): O MMV injeta a interrupção para ser tratada agora pelo sistema operacional hospedado. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Virtualização de E/S EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Virtualização de DMA EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Modelos de Virtualização Basicamente existem três maneiras de prover virtualização: 1. Virtualização plena sem suporte do hardware. O MMV executa sobre um sistema operacional como uma aplicação qualquer. É a forma mais comum de virtualização. Aplicação VM VM Sistema Operacional Hospedado Sistema Operacional Hospedado MMV (Hypervisor) Sistema Operacional Hospedeiro Hardware EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Modelos de Virtualização Para o SO host o MMV é uma aplicação como outra qualquer. Nenhuma alteração é necessária nos sistemas operacionais hopedeiro ou hospedado. O MMV opera como um hardware pleno (CPU, memória, disco, vídeo, etc.), interceptando todo o acesso ao hardware por parte dos SO hospedados e repassando-o ao SO hospedeiro. A desvantagem está no overhead imposto pelo MMV. Alguns produtos que empregam virtualização plena: VirtualBox, VMWare Workstation, Oracle-VM, KVM. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Modelos de Virtualização 2. Virtualização plena suportada pelo hardware. Processadores recentes passaram a oferecer suporte nativo à virtualização, permitindo assim a implementação do MMV diretamente sobre o hardware. VM VM VM Sistema Operacional Hospedado Sistema Operacional Hospedado Sistema Operacional Hospedado MMV Hardware EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Modelos de Virtualização Muitas instruções podem ser executadas pelos SO hospedado diretamente sobre o hardware sem interceptação do MMV, produzindo maior eficiência à virtualização. Não requer alteração no SO hospedado, mas todo SO deve rodar em ambiente virtualizado. Alguns produtos que empregam virtualização suportada pelo hardware: VMWare vSphere, Microsoft Hyper-V, Oracle-VM Server. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Modelos de Virtualização 3. Paravirtualização. É uma técnica onde o sistema operacional hospedado é modificado para para operar em ambiente virtualizado. Em outras palavras, o SO hospedado conhece a existência do MMV e utiliza sua interface de acesso ao hardware (hypercalls). VM VM VM Sistema Operacional Hospedado Modificado Sistema Operacional Hospedado Modificado Sistema Operacional Hospedado Modificado MMV Hardware EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Modelos de Virtualização Como paravirtualização requer alteração dos SO hospedado, esta técnica não é viável para SO proprietários. Para estes casos é possível a instalação de device drivers “paravirtualizados” no SO sem modificação. É a técnica de virtualização mais otimizada pois demanda pouca intermediação do MMV. Alguns produtos que empregam paravirtualização: Xen, VMWare ESX. EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Virtualização Suportada pelo SO Virtualização suportada pelo SO permite virtualizar um sistema operacional sobre ele próprio. O sistema operacional não é replicado, oferecendo apenas isolação para aplicações (containers) como se elas executassem sobre sistemas operacionais distintos. Cada container tem seu próprio sistema de arquivos. Exemplo de soluções para Linux: LXC, OpenVZ, UML (User Mode Linux). Container App. App. Container App. App. Núcleo do Sistema Operacional Hardware EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Virtualização no Linux: Xen Xen é um produto de código aberto de alta robustez que emprega a solução de paravirtualização. VM VM Xen Linux (Linux Modificado) (Hospedado) Device Drivers Nativos Windows (Não Modificado) (Hospedado) Device Drivers Modificados Xen Hypervisor Hardware EA876 - Prof. Eleri Cardozo - FEEC/Unicamp Virtualização no Linux: KVM VM Sistema Operacional Hospedado QEMU (virtualizador) kvm-intel.ko kvm-amd-ko (módulos nativos) Solução de virtualização plena sobre Linux Núcleo do Linux Hardware