Resumo

Concluído
  • Para virtualizar um dispositivo de E/S, devemos seguir duas etapas principais: (1) construir uma versão virtual do dispositivo e (2) virtualizar a atividade de E/S roteada para o dispositivo.
  • A construção de uma versão virtual de um dispositivo de E/S envolve o compartilhamento do dispositivo em vários SOs convidados.
  • A virtualização da atividade de E/S em um dispositivo de E/S passa pelo controlador do dispositivo. (Cada dispositivo de E/S tem um controlador de dispositivo.)
  • Um controlador de dispositivo pode ser sinalizado por meio de uma instrução de E/S privilegiada (definida em ISA) ou de E/S mapeada em memória.
  • As instruções de E/S e os endereços mapeados na memória são tratados no modo do sistema para proteger os dispositivos de E/S chamados.
  • As instruções de E/S e os endereços mapeados na memória não são críticos e, portanto, podem ser facilmente manipulados pelo hipervisor após uma interceptação natural para ele. (Como são privilegiados e não críticos, eles serão interceptados naturalmente no hipervisor quando executados no modo de usuário.)
  • Os SOs de uso geral abstraem a maioria dos detalhes de dispositivos de E/S e os tornam acessíveis somente por meio de interfaces bem definidas, como a interface de chamada do sistema, a interface de driver de dispositivo e a interface de nível de operação.
  • Na presença de um hipervisor, dois drivers de dispositivo diferentes precisam ter suporte pelo dispositivo de E/S, versus apenas um em sistemas não virtualizados tradicionais.
  • A redundância dos drivers de dispositivo na presença de um hipervisor geralmente é contornada ao colocar o hipervisor com um SO principal no mesmo computador. Subsequentemente, o hipervisor aproveita os drivers de dispositivo do SO principal sem a necessidade de drivers de dispositivo especiais. (O Projeto Xen aplica essa abordagem.)
  • Como todas as instruções de E/S são privilegiadas, elas precisam ser interceptadas pelo hipervisor.
  • Em princípio, o hipervisor pode interceptar solicitações de E/S em qualquer uma das três interfaces: a interface de chamada do sistema, a interface de driver de dispositivo e a interface de nível de operação.
  • Interceptar solicitações de E/S na interface de nível de operação pode levar à perda de algumas informações essenciais sobre as ações de E/S.
  • Interceptar solicitações de E/S na interface de chamada do sistema (ou seja, a ABI) envolve a emulação das rotinas da ABI de todos os SOs convidados. (SOs diferentes têm rotinas de ABI diferentes.)
  • Na prática, a interceptação de solicitações de E/S na interface de driver de dispositivo é normalmente a abordagem mais eficiente, pois evita a emulação das rotinas da ABI de cada SO convidado e a perda de algumas informações necessárias sobre as ações de E/S.