Princípios de Virtualização
  • Princípios de virtualização
    • Tipos de virtualização
    • Emulação vs Virtualização
  • Arquitetura de computadores
  • Hardware-based virtualization
Powered by GitBook
On this page

Arquitetura de computadores

Alguns pontos a serem destacados para uma melhor compreensão do funcionamento das soluções de virtualização baseada em hardware.

O que nós encontramos em um computador

  • CPU: a arquitetura de um processador é formada pelo conjunto de instruções suportados, número de bits usados para representação de dados (assim como a capacidade máxima de bits suportada pelos registradores), mecanismos de I/O, e técnicas de endereçamento. Como exemplos de arquiteturas temos: Intel x86, Intel x86_64 (também chamada de amd64), arm64, PPC, MIPS. Em se tratando de CPUs Intel, podendo ter um ou mais cores e internamente trabalhando com níveis de privilégios (ring0, ring1, ring2, ring3). No ring0 temos instruções, registradores e estruturas de dados privilegiados desbloqueados (além de acesso irrestrito a memória e dispositivos de I/O). No ring3 temos uso mais restrito de utilização de recursos da CPU, mas todos os recursos necessários para a execução de aplicações.

  • Memória: dispositivo de armazenamento volátil de alta velocidade usada para o armazenamento do código dos programas e bibliotecas e respectivos dados gerados dinamicamente (além de armazenar o kernel e seus dados, dados de I/O, e cache do filesystem). Em hardware e sistemas operacionais modernos, a memória é segmentada em páginas de 4K. Para prover uma abstração dos endereços de memória físicos aos processos (impedindo que um processo enxergue os endereços de memória dos outros processos) é utilizada a técnica de "memória virtual", armazenando a tabela de mapeamento "endereço físico / endereço virtual" (também chamada de "page table") de um processo em um recurso da CPU chamado MMU.

  • Relação CPU / Memória: como a CPU precisa ser alimentada com os dados e instruções presentes na memória, ambos possuem um barramento de alta velocidade e baixíssima latência (usado tanto para escrever o endereço de memória, quanto para obter, em outra via, o dado que se pretende obter ou escrever). A CPU em modo virtual também entende endereços virtuais.

  • Chipset: dispositivo responsável pela centralização das controladoras dos periféricos e via de comunicação com o processador. Além de outros recursos como APIC, Timer, e DMA.

  • Interrupções: como além da CPU e memória temos os periféricos que dão mais utilidade a um computador, na medida em que um dispositivo necessitar da atenção da CPU ele dispara uma interrupção. Ao receber uma interrupção, o SO irá chamar o driver apropriado. Como diversos dispositivos podem gerar interrupções, o chipset das placas mãe possuem um recurso chamado "APIC" para a centralização e gestão das interrupções. O APIC extende a quantidade de IRQs suportados pelo antigo PIC e passa a ter suporte a CPUs multi-core.

  • Dispositivos de I/O: por meio de instruções IN, OUT e endereços de I/O, o processador consegue interagir diretamente com dispositivos. Mas ocupar o tempo de uma CPU com operações de I/O pode impactar negativamente na performance. Para isto, é utilizado o DMA como solução, permitindo que a controladora DMA transfira dados das controladoras dos dispositivos diretamente para a memória sem o intermédio da CPU. Os canais DMA podem ser listados em:

    • /proc/dma

    • /sys/class/dma/

  • Timers: todo sistema operacional moderno precisa ter condições para saber o deslocamento do tempo para diversas funcionalidades: como timeouts em protocolos de rede e mensurar o time slice no scheduling dos processos, por exemplo. Para isto, o chipset das placas mãe dispõe de um clock source. Exemplos de clock source: RTC, PIT, TSC, HPET, PMTMR, Cyclone, ACPI PMT, Jiffies. Podemos consultar o clock source de um sistema linux em:

    • /sys/devices/system/clocksource/clocksource0/available_clocksource

PreviousEmulação vs VirtualizaçãoNextHardware-based virtualization

Last updated 1 year ago