Compartilhar via


Pilhas de drivers

A maioria das solicitações enviadas para drivers de dispositivo é empacotada em pacotes de solicitação de E/S (IRPs). Cada dispositivo é representado por um nó de dispositivo, e cada nó de dispositivo possui uma pilha de dispositivos. Para obter mais informações, consulte Nós de dispositivo e pilhas de dispositivos. Para enviar uma solicitação de leitura, gravação ou controle para um dispositivo, o gerenciador de E/S localiza o nó do dispositivo e envia um IRP para a pilha de dispositivos desse nó. Às vezes, mais de uma pilha de dispositivos está envolvida no processamento de uma solicitação de E/S. Independentemente de quantas pilhas de dispositivos estão envolvidas, a sequência geral de drivers que participam de uma solicitação de E/S é chamada de pilha de driver para a solicitação. Também usamos o termo pilha de drivers para se referir ao conjunto em camadas de drivers para uma tecnologia específica.

Solicitações de E/S que são processadas por várias pilhas de dispositivos

Em alguns casos, mais de uma pilha de dispositivos está envolvida no processamento de um IRP. O diagrama a seguir ilustra um caso em que quatro pilhas de dispositivos estão envolvidas no processamento de um único IRP.

diagrama de quatro nós de dispositivo, cada um com uma pilha de dispositivos.

Veja como o IRP é processado em cada estágio numerado no diagrama:

  1. O IRP é criado por Disk.sys, que é o driver de função na pilha de dispositivos para o nó Meu Dispositivo de Armazenamento USB. Disk.sys passa o IRP para baixo na pilha do dispositivo para Usbstor.sys.

  2. Observe que Usbstor.sys é o driver PDO para o nó "Meu Dispositivo de Armazenamento USB" e o driver FDO para o nó "Dispositivo de Armazenamento em Massa USB". Neste ponto, não é importante decidir se o IRP pertence ao par (PDO, Usbstor.sys) ou ao par (FDO, Usbstor.sys) . O IRP pertence ao driver, Usbstor.sys, e o driver tem acesso tanto ao PDO quanto ao FDO.

  3. Quando Usbstor.sys terminar de processar o IRP, ele passa o IRP para Usbhub.sys. Usbhub.sys é o driver PDO para o nó do dispositivo de armazenamento em massa USB e o driver FDO para o nó do Hub Raiz USB. Não é importante decidir se o IRP pertence ao par (PDO, Usbhub.sys) ou ao par (FDO, Usbhub.sys) . O IRP pertence ao driver, Usbhub.sys, e o driver tem acesso ao PDO e ao FDO.

  4. Quando Usbhub.sys terminar de processar o IRP, ele passa o IRP para o par (Usbuhci.sys, Usbport.sys).

    Usbuhci.sys é um driver de miniporto e Usbport.sys é um driver de porta. O par (miniport, porta) desempenha o papel de um único controlador. Nesse caso, o driver do miniporto e o driver de porta são escritos pela Microsoft. O par (Usbuhci.sys, Usbport.sys) é o driver PDO para o nó do Hub Raiz USB e o par (Usbuhci.sys, Usbport.sys) também é o driver FDO para o nó controlador de host USB. O par (Usbuhci.sys, Usbport.sys) faz a comunicação real com o hardware do controlador de host, que, por sua vez, se comunica com o dispositivo de armazenamento USB físico.

A pilha de drivers de uma solicitação de E/S

Considere a sequência de quatro drivers que participaram da solicitação de E/S ilustrada na figura anterior. Podemos obter outra perspectiva da sequência focando nos drivers, em vez de nos nós do dispositivo e suas respectivas pilhas individuais de dispositivos. O diagrama a seguir mostra os drivers em sequência de cima para baixo. Observe que Disk.sys está associado a um objeto de dispositivo, mas cada um dos outros três drivers está associado a dois objetos de dispositivo.

diagrama de uma pilha de drivers, mostrando o driver superior associado apenas a um FDO, e os outros três drivers associados a um PDO e a um FDO.

A sequência de drivers que participam de uma solicitação de E/S é chamada de pilha de driver para a solicitação de E/S. Para ilustrar uma pilha de drivers para uma solicitação de E/S, desenhamos os drivers de cima para baixo, na ordem em que participam dela.

Observe que a pilha de driver para uma solicitação de Entrada/Saída é bem diferente da pilha de driver de dispositivo para um nó de dispositivo. Observe também que a pilha de driver para uma solicitação de E/S pode não permanecer em um único ramo da árvore do dispositivo.

Pilhas de driver de tecnologia

Considere a pilha de drivers para a solicitação de E/S mostrada no diagrama anterior. Se dermos a cada um dos drivers um nome amigável e fizermos algumas pequenas alterações no diagrama, teremos um diagrama de bloco semelhante a muitos dos que aparecem na documentação do WDK (Windows Driver Kit).

diagrama de uma pilha de driver mostrando nomes amigáveis para os drivers: driver de classe de disco na parte superior, seguido pelo driver de porta de armazenamento USB, e em seguida, o driver de hub USB e driver de (miniporto USB 2, porta USB).

No diagrama, a pilha de driver é dividida em três seções. Podemos considerar cada seção como pertencente a uma tecnologia específica ou a um componente ou parte específico do sistema operacional. Por exemplo, podemos dizer que a primeira seção na parte superior da pilha de driver pertence ao Gerenciador de Volumes, a segunda seção pertence ao componente de armazenamento do sistema operacional e a terceira seção pertence à parte USB principal do sistema operacional.

Considere os drivers na terceira seção. Esses drivers são um subconjunto de um conjunto maior de drivers USB principais que a Microsoft fornece para lidar com vários tipos de solicitações USB e hardware USB. O diagrama a seguir mostra a aparência de todo o diagrama de bloco de núcleo USB.

diagrama mostrando a pilha do driver de tecnologia para um possível bloco de núcleo USB.

Um diagrama de bloco que mostra todos os drivers de uma tecnologia específica ou um componente específico ou uma parte específica do sistema operacional é chamado de pilha de driver de tecnologia. Normalmente, as pilhas de driver de tecnologia recebem nomes como a Pilha de Driver do USB Core, a Pilha de Armazenamento, a Pilha de Driver 1394 e a Pilha de Driver de Áudio.

Observação: o diagrama de bloco central do USB neste artigo apresenta uma das várias maneiras possíveis de ilustrar as pilhas de drivers de tecnologia para USB 1.0 e 2.0. Para os diagramas oficiais das pilhas de driver USB 1.0, 2.0 e 3.0, consulte a Arquitetura de Pilha do Driver USB.

nós de dispositivo e pilhas de dispositivo

Minidrivers e pares de driver

Conceitos para todos os desenvolvedores de drivers