Os primeiros
computadores que surgiram eram gigantescos e muito caros. No
entanto, devido à grande demanda por uso, estes rapidamente se
tornaram indispensáveis. Para socializar o uso dos
computadores foi criado, no final dos anos 1960, o
time-sharing, que permitia o uso de um mesmo computador por
vários usuários simultaneamente de forma transparente.
Embora este tenha sido um grande passo na história da
computação, surgia assim um novo problema, o
compartilhamento de um único computador com outras
aplicações suscetíveis a falhas.
A fim de sanar esse
problema, a primeira solução proposta foi o uso de
vários computadores, o que se reverteria em um aumento
significativo do desempenho e na garantia de isolamento entre as
aplicações. Entretanto esta solução apresentava
um altíssimo custo, além de ser um desperdício de
recursos, já que os computadores ficavam grande parte do tempo
ociosos. Tendo isto em vista, nos anos 60 a IBM começou a
desenvolver a primeira máquina virtual, que permitia que um
único computador fosse dividido em
vários.
O primeiro sistema
de virtualização desenvolvido foi o CP-67,
software para o mainframe IBM 360/67, que disponibilizava ao
usuário um sistema virtual do /360 da IBM. Os resultados
obtidos com esse sistema foram ótimos.
Após o CP-67, a
IBM lançou o VM/370, um VMM (Virtual Machine Monitor,
ou Monitor de Máquina Virtual) para o Sistema /370 com
arquitetura estendida, ou seja, com algumas instruções
extras que permitiam a virtualização. Essas foram as
primeiras tentativas de
virtualização.
Em um cenário
mais atual, a arquitetura mais comum é a x86 (IA-32). Essa
é a arquitetura adotada pelos PCs, que se tornaram
commodities. Ao contrário da arquitetura dos antigos
sistemas /370 com arquitetura estendida, que apresentavam
instruções que visavam a virtualização, a
arquitetura x86 não foi projetada considerando a
virtualização. Isso pode ser visto em pequeno conjunto de
instruções que não necessitam de um modo
privilegiado para serem executadas, mas podem prejudicar a
estabilidade do sistema.
Ainda que seja
difícil desenvolver um VMM para a arquitetura x86, algumas
técnicas podem ser usadas para romper com as dificuldades
impostas pelo conjunto de instruções desta arquitetura.
Voltados para a arquitetura x86, podem ser citados alguns projetos
relacionados, tais como VMWare, Xen, Virtual PC, Citrix, Hyper-V,
entre outros.