Compartilhar via


Funcionalidades fornecidas pela porta SCSI

O driver de porta SCSI fornece os seguintes recursos:

  • O Microsoft Windows dá suporte a sistemas que contêm diferentes tipos de ônibus de E/S e/ou vários barramentos de E/S do mesmo tipo. Um esquema de endereçamento comum é necessário para lidar com essa variedade.

  • Os dispositivos PCI podem ter recursos de registro de memória e porta de E/S. Os endereços lógicos ajudam a tornar essa distinção transparente para o driver de porta.

  • Alguns sistemas contêm HBAs que estão conectados a mais de um barramento; esse HBA pode exigir vários conjuntos de traduções de endereço.

  • Endereços lógicos são necessários para portabilidade em computadores baseados em CISC e RISC.

  • Repetir IRPs quando um dispositivo estiver muito ocupado para processá-los.

    Os drivers de classe de armazenamento não precisam implementar algoritmos para tentar novamente IRPs quando os dispositivos estão muito ocupados para processá-los. O driver de porta SCSI implementa essa funcionalidade.

  • Impor valores de tempo limite para solicitações.

    O driver de classe define um valor de tempo limite para solicitações e a Porta SCSI é responsável por aplicá-la. No entanto, o driver da Porta SCSI pode impor os valores de tempo limite do driver de classe de forma flexível, levando em consideração o estado do ônibus. Por exemplo, se um link de fibre channel gerenciado pela porta SCSI cair por 20 segundos, a porta SCSI poderá suspender o contador de tempo limite durante o tempo de inatividade, para que, por exemplo, as solicitações com um tempo limite de 10 segundos não falhem até 10 segundos após o backup do link. A Porta SCSI aumenta os valores de tempo limite atribuídos às solicitações em resposta a um aumento no tráfego de E/S, pois, com o tráfego de E/S mais pesado, os dispositivos exigirão mais tempo para concluir as solicitações.

  • Tratamento de erros de destino e controlador ocupado, bem como condições de erro de transporte (em outras palavras, erros relacionados à transmissão real de dados no barramento). Por exemplo:

    • erros de paridade de barramento
    • tempos limite de seleção
  • Fornecendo aos drivers de classe informações sobre limitações do adaptador de host.

    É responsabilidade do driver de classe regular o tamanho das transferências de dados para atender aos limites dos adaptadores de barramento de host (HBA). No entanto, a Porta SCSI fornece ao driver de classe as informações necessárias para realizar essa tarefa. A Porta SCSI fornece essas informações em um descritor de adaptador (STORAGE_ADAPTER_DESCRIPTOR) em resposta a uma solicitação IOCTL IOCTL_STORAGE_QUERY_PROPERTY . O driver de classe é responsável por dividir as solicitações em partes do tamanho apropriado com base nas informações relatadas neste descritor.

  • Traduzindo endereços relativos do barramento para endereços lógicos.

    Quando consultados, os adaptadores fornecem endereços relativos ao barramento para portas de E/S, registros de comando e registros de controle status. No entanto, um motorista de miniporto não pode usar endereços relativos ao barramento para se comunicar com seu HBA (adaptador de barramento de host). A Porta SCSI converte endereços relativos do barramento em endereços lógicos, para que os motoristas de miniporte possam acessar endereços de ônibus de maneira transparente. Há vários motivos para isso:

  • Garantir que um dispositivo e todos os seus dispositivos subjacentes sejam habilitados (no estado de energia do dispositivo D0) antes que o dispositivo seja iniciado.

    Quando um dispositivo não está pronto para ser ligado, a Porta SCSI enfileira uma solicitação D0 para esse dispositivo até que o dispositivo esteja pronto.

  • Enfileirando solicitações assíncronas de drivers de classe e encaminhando-as de forma síncrona para o dispositivo de destino.

    Os drivers de classe não precisam aguardar a conclusão de uma solicitação antes de enviar a próxima solicitação. A Porta SCSI assume a responsabilidade de enfileirar essas solicitações para evitar sobrecarregar o poder de processamento do hardware subjacente.

  • Suporte ao gerenciamento interno e externo de filas de solicitação de E/S internas.

    A maioria das operações de gerenciamento de filas é iniciada pela própria porta SCSI. Por exemplo, a Porta SCSI congela sua fila quando ocorre um erro e relata a condição de erro para o driver de classe, para que o driver de classe possa responder antes que novas solicitações sejam processadas. No entanto, a Porta SCSI também responde às solicitações do driver de classe ou de outros drivers de nível superior para bloquear, desbloquear, congelar ou descongelar sua fila de solicitações internas. Drivers de nível superior podem forçar a porta SCSI a descongelar sua fila interna usando a solicitação SRB_FUNCTION_RELEASE_QUEUE. Para obter uma explicação do que significa "congelar", "bloquear" ou "desbloquear" uma fila, consulte Gerenciamento de Filas do Driver de Porta SCSI.

  • Traduzindo erros relatados pelo dispositivo no formato de dados de sentido SCSI-2 para processamento pelo driver de classe.

A Porta SCSI fornece serviços para o driver de miniporto por meio das rotinas da biblioteca de portas SCSI. Os gravadores de driver de miniport podem chamar essas rotinas em vez de codificar a funcionalidade que eles fornecem em um único driver de porta monolítico. Alguns dos serviços mais importantes oferecidos usando essas rotinas são os seguintes:

  • Um driver de miniporto de porta SCSI pode delegar muitas operações de inicialização dependentes do sistema operacional para a rotina da biblioteca ScsiPortInitialize da porta SCSI. Isso torna um driver de miniporte de porta SCSI mais portátil em diferentes versões do sistema operacional. Para obter uma explicação das tarefas de inicialização de um driver de miniporto de porta SCSI, consulte Rotina de Driverentry do Driver do Miniport SCSI.

  • Os drivers de miniporto da Porta SCSI para dispositivos não PnP são poupados da tarefa de localizar adaptadores e relatar seus recursos ao gerenciador PnP. Isso é feito em ScsiPortInitialize.

  • Os miniportores de porta SCSI não inicializam pontos de entrada de expedição no objeto driver. O driver de porta SCSI faz isso em nome do driver de miniporto quando o driver de miniporto chama ScsiPortInitialize.

  • Os drivers de miniporto da Porta SCSI não convertem endereços relativos ao barramento em endereços lógicos usando HalTranslateBusAddress. Os miniportores de porta SCSI fazem isso por uma chamada para ScsiPortGetDeviceBase.

Para obter um resumo das rotinas de biblioteca que a porta SCSI disponibiliza para drivers de miniporto de porta SCSI, consulte Rotinas de suporte ao driver de porta SCSI.