Partilhar via


Arquitetura do driver de armazenamento do Windows

No Windows, os dispositivos de armazenamento periféricos têm drivers de classe e filtro. Esses drivers atuam como uma interface entre qualquer driver de nível intermediário ou mais alto em camadas acima deles e um driver de porta fornecido pelo sistema.

As solicitações de E/S de um aplicativo de usuário ou componente do kernel alcançam drivers de classe de armazenamento por meio dos Serviços de Sistema de E/S e um ou mais drivers de nível intermediário ou mais alto, como um driver de sistema de arquivos. Os drivers de classe de armazenamento traduzem os IRPs padrão que recebem em IRPs com blocos de solicitação de armazenamento definidos pelo sistema (SRBs) antes de enviar cada IRP para o próximo driver inferior. Um driver de porta de armazenamento converte SRBs de drivers de classe em comandos específicos de barramento, que ele envia para o adaptador de barramento de host de armazenamento (HBA) por meio de um driver de barramento de E/S e, possivelmente, de um ou mais drivers de filtro.

A figura a seguir mostra a arquitetura em camadas dos drivers de armazenamento do Windows.

Diagrama ilustrando a arquitetura em camadas dos drivers de armazenamento do sistema operacional baseado em NT.

Começando pela parte inferior da figura:

  1. Um driver de porta de armazenamento define uma interface para todos os drivers de classe de armazenamento do Windows, incluindo os drivers fornecidos pelo sistema, como disco, fita e DVD. Essa interface de porta/classe isola os drivers de classe dos requisitos específicos do adaptador do HBA ao qual seus respetivos dispositivos estão conectados. Um controlador de porta de armazenamento também sincroniza o acesso ao barramento para todos os controladores de dispositivos no HBA correspondente. O sistema fornece drivers de porta de armazenamento para adaptadores SCSI, IDE, USB e IEEE 1394.

    Um driver de porta de armazenamento recebe SRBs do próximo driver superior (um driver de classe de armazenamento ou driver de filtro interveniente) e os processa da seguinte maneira:

    • O driver da porta de armazenamento passa SRBs com CDBs para um driver de miniporta Storport específico do HBA e independente do sistema operacional. Esse driver de miniporta é vinculado dinamicamente ao driver de porta correspondente e fornece suporte específico de hardware para um HBA específico. Para obter informações sobre como implementar um driver de miniporta, consulte Drivers de miniporta Storport.
    • O driver da porta de armazenamento para um barramento IDE/ATAPI ou IEEE 1394 herdado converte os SRBs recebidos do driver de classe de armazenamento no formato exigido pelo adaptador subjacente. Por exemplo, o sistema pode reembalar CDBs, que são blocos de dados de comando, de acordo com um protocolo de transporte específico do barramento. Ou pode traduzi-los em um formato diferente, isolando assim os motoristas de nível superior das peculiaridades do ônibus subjacente.
  2. Um driver de filtro de armazenamento, seja ele superior ou inferior, suporta funcionalidades específicas do dispositivo que não são fornecidas por um driver de classe de armazenamento do sistema. Um driver de armazenamento de filtro de nível inferior supervisiona SRBs e/ou IRPs emitidos por um driver de classe de armazenamento. Ele os modifica conforme necessário antes de passá-los para o próximo driver inferior, que pode ser um driver de porta de armazenamento ou outro driver de filtro de armazenamento.

    Para obter informações sobre como implementar um driver de filtro de armazenamento, consulte Drivers de filtro de armazenamento.

  3. Um driver de classe de armazenamento usa a interface de porta/classe SCSI para controlar um dispositivo de seu tipo em qualquer barramento para o qual o sistema forneça um driver de porta de armazenamento. Um driver de classe é específico para uma classe específica de dispositivo - por exemplo, um driver de classe pode executar todos os dispositivos CD-ROM em qualquer barramento suportado; outro pode controlar todos os dispositivos de disco. O driver de classe de armazenamento lida com solicitações de E/S (Entrada/Saída) de aplicativos de usuário ou de drivers que estão mais altos na hierarquia da pilha de armazenamento. Ele faz isso criando SRBs contendo CDBs e emitindo esses SRBs para o driver inferior seguinte (um driver de porta de armazenamento ou driver de filtro interveniente) como se o dispositivo fosse um dispositivo SCSI.

    A implementação de um driver de classe de armazenamento é transparente para drivers de nível superior. Um driver de classe para um dispositivo de fita ou trocador de mídia é implementado como um driver de miniclasse específico do dispositivo que se vincula a um driver de classe fornecido pelo sistema. Os drivers de classe fornecidos pelo sistema para outros dispositivos de armazenamento, como disco e CD-ROM/DVD, são implementados como drivers monolíticos únicos.

    Para obter informações sobre como implementar um driver de classe de armazenamento, consulte Drivers de classe de armazenamento. Para obter informações sobre como implementar um driver de miniclasse de fita ou trocador, consulte Drivers de fita e Drivers de trocador, respectivamente.

  4. Um driver de armazenamento de filtro superior interceta IRPs de aplicativos de usuário e drivers mais altos na pilha de armazenamento. Em seguida, ele possivelmente os modifica antes de passá-los para o próximo driver inferior (um driver de classe de armazenamento ou outro driver de filtro de armazenamento). Os drivers de filtro normalmente monitoram o desempenho do dispositivo subjacente.

O tipo de barramento ao qual um dispositivo está conectado e a implementação de seu driver de porta de armazenamento são transparentes para os drivers de nível superior.

Um driver de porta de armazenamento pode ser implementado:

  • De acordo com a arquitetura de drivers de porta/miniporta, tal como os drivers Storport ou SCSI.
  • Como um driver monolítico que controla uma única peça padrão de hardware, como o driver de porta IDE/ATAPI.
  • Como um driver de filtro que converte SRBs para o formato exigido por uma pilha de drivers diferente, como o driver de porta IEEE 1394.

O driver de porta SCSI fornecido pelo sistema também pode atuar como uma interface entre um driver de classe de armazenamento e um driver de miniporta SCSI que controla um dispositivo de armazenamento não-SCSI do mesmo tipo. Por exemplo, em vez de escrever um driver para um novo controlador de matriz de disco, um gravador de driver pode economizar um esforço considerável escrevendo um driver de miniporta pseudo-SCSI que se vincula ao driver de porta SCSI do sistema e usa a interface que ele fornece. Esse driver de miniporta é necessário para converter comandos SCSI de entrada em comandos específicos do dispositivo. Por outro lado, os drivers de porta e classe fornecidos pelo sistema lidam com grande parte do trabalho necessário em nome de uma miniporta pseudo-SCSI. Esse trabalho inclui acessos ao Registro durante a inicialização, todas as alocações de recursos e objetos, sincronização, pré-dimensionamento de transferências solicitadas para se adequar aos recursos do dispositivo da miniporta e novas tentativas de solicitações.