Deixe-me abordar a parte "por que".
Uma das razões para um sistema operacional moderno é permitir que vários programas (processos) sejam executados ao mesmo tempo em um sistema. Se você quiser fazer isso com segurança, o seguinte precisa acontecer:
-
Você provavelmente (a menos que tenha necessidades especiais) não deseja dividir a RAM no sistema de maneira fixa - por exemplo, 256MB fixos por processo - limita a 8 processos em um sistema de 2GB. Você gostaria que cada processo pudesse "pedir" memória e devolvê-lo quando estivesse pronto.
-
Você também não deseja dividir os dispositivos de E / S de forma fixa entre os dispositivos. Normalmente, você deseja algum ou todo o hardware, como a memória para ser um recurso compartilhado ou, pelo menos, apenas temporariamente exclusivo para processos específicos em momentos específicos. Isso requer que todos os processos não tentem fazer a E / S sozinhos, mas "passar por" algo para programar e coordenar a E / S. O escalonamento é importante, pois a maioria das E / S é muito mais lenta do que a CPU, então você pode fazer com que a CPU trabalhe para outros processos enquanto aguarda a E / S, mesmo em um sistema single-core.
Para fazer o direito acima, é necessário tirar proveito de vários recursos de hardware da CPU. Uma delas é a MMU, a outra é o modo protegido. Poderiam dois sistemas operacionais compartilhar esses recursos de hardware cooperativamente para executar dois ou mais sistemas operacionais?
Claro, mas não há nada no hardware capaz de impedir que um sistema operacional pise em toda a memória dos outros sistemas operacionais. Se a CPU estiver no modo kernel (só tem o um modo kernel), qualquer código pode fazer qualquer coisa. É 100% possível para o código de um sistema operacional rodar sobre o código ou dados do outro sistema operacional. E sabemos que os sistemas operacionais tiveram vulnerabilidades no passado e terão mais no futuro. Então é muito ruim para segurança.
Agora, não seria legal se você pudesse colocar outra "camada" sobre isso e ter esse suporte de hardware necessário para vários sistemas operacionais? Isso é exatamente o que os recursos de virtualização de hardware fazem, eles colocam uma barreira de hardware entre vários sistemas operacionais em execução e há uma "interface" de nível superior para eles chamada de hypervisor. Você só pode ter um hipervisor. E sim, processos rodando sob qualquer SO devem passar por três camadas para fazer I / O (process - local kernel - hypervisor)