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
Last updated