Pilhas de drivers
A maioria das solicitações enviadas aos drivers de dispositivo são empacotadas em pacotes de solicitação de E/S (IRPs). Cada dispositivo é representado por um nó de dispositivo e cada nó de dispositivo tem 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 para o dispositivo e, em seguida, 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 nos referirmos ao conjunto de drivers em camadas para uma tecnologia específica.
Solicitações de E/S processadas por várias pilhas de dispositivos
Em alguns casos, mais de uma pilha de dispositivos está envolvida no processamento de uma IRP. O diagrama a seguir ilustra um caso em que quatro pilhas de dispositivos estão envolvidas no processamento de um único IRP.
Veja como o IRP é processado em cada estágio numerado no diagrama:
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 pela pilha de dispositivos para Usbstor.sys.
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 é de propriedade do motorista, Usbstor.sys, e o driver tem acesso ao PDO e ao FDO.
Quando Usbstor.sys terminar de processar o IRP, ele passa o IRP para Usbhub.sys. Usbhub.sys é o driver PDO para o nó USB Mass Storage Device e o driver FDO para o nó USB Root Hub. Não é importante decidir se o IRP pertence ao par (PDO, Usbhub.sys) ou ao par (FDO, Usbhub.sys). O IRP é de propriedade do motorista, Usbhub.sys, e o motorista tem acesso ao PDO e ao FDO.
Quando Usbhub.sys terminar de processar o IRP, ele passa o IRP para o par (Usbuhci.sys, Usbport.sys).
Usbuhci.sys é um driver de miniporta e Usbport.sys é um driver de porta. O par (miniport, port) desempenha o papel de um único driver. Nesse caso, o driver de miniporta e o driver de porta são escritos pela Microsoft. O par (Usbuhci.sys, Usbport.sys) é o driver PDO para o nó USB Root Hub, e o par (Usbuhci.sys, Usbport.sys) também é o driver FDO para o nó USB Host Controller. O par (Usbuhci.sys, Usbport.sys) faz a comunicação real com o hardware do controlador host, que por sua vez se comunica com o dispositivo de armazenamento USB físico.
A pilha de drivers para uma solicitação de E/S
Considere a sequência de quatro drivers que participaram da solicitação de E/S ilustrada no diagrama anterior. Podemos obter outra visão da sequência concentrando-nos nos drivers em vez de nos nós do dispositivo e suas pilhas de dispositivos individuais. 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.
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 eles participam da solicitação.
Observe que a pilha de driver para uma solicitação de E/S é bem diferente da pilha de dispositivos para um nó de dispositivo. Observe também que a pilha de driver para uma solicitação de E/S não permanece necessariamente em uma ramificação da árvore de dispositivos.
Pilhas de drivers de tecnologia
Considere a pilha de driver 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 blocos semelhante a muitos dos que aparecem na documentação do Windows Driver Kit (WDK).
No diagrama, a pilha de drivers é dividida em três seções. Podemos pensar em cada seção como pertencente a uma tecnologia específica ou a um componente ou parte específica do sistema operacional. Por exemplo, podemos dizer que a primeira seção na parte superior da pilha de drivers 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 blocos de núcleo USB.
Um diagrama de blocos que mostra todos os drivers para uma tecnologia específica ou um componente específico ou parte do sistema operacional é chamado de pilha de drivers de tecnologia. Normalmente, as pilhas de drivers de tecnologia recebem nomes como a pilha de drivers USB Core, a pilha de armazenamento, a pilha de drivers 1394 e a pilha de drivers de áudio.
Nota: O diagrama de bloco de núcleo USB neste artigo mostra uma das várias maneiras possíveis de ilustrar as pilhas de driver de tecnologia para USB 1.0 e 2.0. Para obter os diagramas oficiais das pilhas de drivers USB 1.0, 2.0 e 3.0, consulte USB Driver Stack Architecture.
Artigos relacionados
Nós de dispositivo e pilhas de dispositivos