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.
Os drivers para dispositivos que podem transferir grandes quantidades de dados de cada vez devem usar E/S direta para essas transferências. O uso de E/S diretas para grandes transferências melhora o desempenho de um driver, reduzindo sua sobrecarga de interrupção e eliminando a alocação de memória e as operações de cópia inerentes à E/S em buffer.
Geralmente, os drivers de dispositivo de armazenamento em massa solicitam E/S direta para solicitações de transferência, incluindo drivers de nível mais baixo que usam acesso direto à memória (DMA) ou E/S programada (PIO), bem como quaisquer drivers intermediários encadeados acima deles.
O gerenciador de E/S determina que uma operação de E/S está usando E/S direta da seguinte maneira:
Para solicitações de IRP_MJ_READ e IRP_MJ_WRITE , DO_DIRECT_IO é definido no membro Flags da estrutura DEVICE_OBJECT . Para obter mais informações, consulte "Inicializar um Objeto de Dispositivo".
Para as solicitações IRP_MJ_DEVICE_CONTROL e IRP_MJ_INTERNAL_DEVICE_CONTROL, o valor do código IOCTL contém METHOD_IN_DIRECT ou METHOD_OUT_DIRECT como valor de TransferType no valor IOCTL. Para obter mais informações, consulte Definição de Códigos de Controle de E/S.
Os drivers que usam E/S direta às vezes também usam E/S em buffer para lidar com alguns IRPs. Particularmente, os drivers normalmente usam E/S em buffer para determinados códigos de controlo de E/S em solicitações IRP_MJ_DEVICE_CONTROL que exigem transferências de dados, independentemente de o driver usar E/S direta para operações de leitura e gravação.
A configuração de uma transferência direta de E/S varia ligeiramente, dependendo se DMA ou PIO está sendo usado. Para obter mais informações, consulte:
Os drivers devem tomar medidas para manter a coerência do cache durante as transferências DMA e PIO. Para obter mais informações, consulte Mantendo a coerência do cache.