Partilhar via


Introdução aos objetos do controlador

Como o próprio nome sugere, um objeto controlador geralmente representa um controlador de dispositivo físico com dispositivos conectados. Um driver não-WDM de nível mais baixo para um conjunto de dispositivos semelhantes coordenados por um controlador físico pode criar um objeto de controlador e usá-lo para sincronizar operações de E/S entre os dispositivos conectados. O driver implementa uma rotina ControllerControl e chama as rotinas de suporte a objetos do controlador do gerenciador de E/S.

Observação

O uso de objetos de controlador não é suportado nos drivers WDM.

Geralmente, os drivers usam objetos de controlador para sincronizar operações com dispositivos conectados se os seguintes critérios forem válidos:

  • O controlador não realiza operações longas sem interromper, portanto, o driver não precisa criar um thread dedicado ao dispositivo ou usar threads de trabalho do sistema.

  • Os dispositivos conectados ao controlador são semelhantes. Ou seja, não são dispositivos com propriedades físicas ou funcionalidades operacionais totalmente diferentes, como os dispositivos de teclado e mouse que podem ser conectados ao teclado e ao controlador de dispositivo auxiliar.

  • O driver é concebido para ser monolítico: uma única camada relativamente ao controlador do dispositivo e aos dispositivos físicos acoplados, em vez de ser desenhado como um driver de porta (para o controlador) com um ou mais drivers de classe (para os dispositivos acoplados) dispostos em camadas sobre o driver de porta.

Drivers de dispositivos com canais de E/S e um conjunto de objetos de dispositivo lógico também podem usar um objeto controlador para sincronizar suas operações de E/S entre ou entre os canais de tal dispositivo.

Um objeto controlador não tem nome e, portanto, não é o destino de solicitações de E/S. É simplesmente um mecanismo de sincronização para serializar E/S a partir de um conjunto de objetos de dispositivo. Como um objeto controlador não tem nome, ele é invisível para subsistemas protegidos pelo modo de usuário, que não podem fazer solicitações de E/S de dispositivo sem obter um identificador para o objeto de arquivo que representa o objeto de dispositivo de destino. Um objeto de controlador também é invisível para drivers de nível superior, que não podem anexar seus próprios objetos de dispositivo a um objeto de controlador. Em outras palavras, nem o gerenciador de E/S nem um driver de nível superior podem configurar um IRP solicitando E/S em um dispositivo representado por um objeto controlador. As solicitações de E/S são sempre emitidas para objetos de dispositivo. Somente o driver pode usar o objeto controlador.

Sincronização e E/S sobrepostas

Drivers monolíticos de dispositivos físicos com recursos como os do controlador de disco "AT" não são obrigados a usar um objeto controlador para sincronizar as operações de E/S do dispositivo. Por exemplo, um programador de drivers pode tentar algo como a seguinte técnica de sincronização em vez de usar um objeto controlador.

  • Configure objetos de dispositivo nomeados para representar os dispositivos que são destinos para solicitações de E/S.

  • Mantenha informações de estado (talvez um conjunto de sinalizadores de dispositivo ocupado em cada extensão de dispositivo ou em uma única extensão de dispositivo) indicando qual objeto de dispositivo é o destino da operação de E/S atual.

  • Realizar operações de E/S para o objeto de dispositivo atualmente ocupado e reorganizar IRPs recebidos para outros objetos de dispositivo até que o IRP atual seja concluído.

A técnica de sincronização anterior serializa o processamento do IRP para todos os objetos de dispositivos de destino do driver. Observe que ele também força o driver a concluir o IRP atual antes que sua rotina StartIo possa começar a processar o próximo IRP, o que infelizmente diminui o desempenho do driver.

Se determinadas operações do dispositivo puderem ser sobrepostas, o uso de um objeto controlador pode aumentar a taxa de transferência de E/S de um driver, porque essa técnica de sincronização permite que o driver determine se ele pode sobrepor operações imediatamente antes de configurar o dispositivo físico. Por exemplo, um controlador de disco pode permitir que o driver sobreponha pesquisas em um disco com operações de leitura/gravação em outro disco.

Além disso, o uso de um objeto controlador é uma maneira relativamente fácil de sincronizar operações de E/S para mais de um objeto de dispositivo de destino por meio de um único dispositivo físico, como um controlador de disco "AT". O uso de um objeto de controlador permite que um controlador monolítico sincronize operações de I/O num conjunto de objetos de dispositivos nomeados sem ter de manter o estado sobre cada dispositivo e o controlador de dispositivo em uma ou mais extensões de dispositivo e sem ter de reencaminhar IRPs.

No entanto, alguns dispositivos projetados para sobrepor operações de E/S, como controladores seriais full-duplex ou adaptadores bus-master, geralmente têm drivers que configuram filas internas para IRPs.