Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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.