Qu’est-ce qu’un pilote ?
Un pilote est un composant logiciel qui permet au système d’exploitation et à un appareil de communiquer. Par exemple, lorsqu’une application doit lire des données à partir d’un appareil, elle appelle une fonction implémentée par le système d’exploitation. Le système d’exploitation appelle ensuite une fonction implémentée par le pilote. Le pilote, généralement développé par le fabricant de l’appareil, sait comment communiquer avec le matériel de l’appareil pour obtenir les données. Une fois que le pilote obtient les données, il les renvoie au système d’exploitation, qui les renvoie ensuite à l’application.
Développement de la définition
Notre explication simplifie le concept de pilotes. Voici quelques autres points à prendre en compte :
Les pilotes n’ont pas toujours besoin d’être développés par le fabricant de l’appareil. Si un appareil suit une norme matérielle publiée, Microsoft peut écrire le pilote, de sorte que le concepteur d’appareil n’a pas à en fournir un.
Tous les pilotes ne communiquent pas directement avec un appareil. Souvent, plusieurs pilotes superposés dans une pile de pilotes participent à une demande d’E/S. La façon conventionnelle de visualiser la pile consiste à utiliser le premier participant en haut et le dernier participant en bas, comme illustré dans ce diagramme. Certains pilotes de la pile modifient la demande d’un format à un autre. Ces pilotes ne communiquent pas directement avec l’appareil. Au lieu de cela, ils modifient la demande et la transmettent aux pilotes qui sont plus bas dans la pile.
Pilote de fonction : le pilote qui communique directement avec l’appareil est appelé pilote de fonction.
Pilote de filtre : les pilotes qui effectuent un traitement auxiliaire sont appelés pilotes de filtre.
Pour plus d’informations sur les piles, consultez Piles de pilotes.
Certains pilotes de filtre observent et enregistrent des informations sur les demandes d’E/S, mais n’y participent pas activement. Par exemple, certains pilotes de filtre agissent en tant que vérificateurs pour s’assurer que les autres pilotes de la pile gèrent correctement la demande d’E/S.
Nous pouvons affiner notre définition d’un pilote comme tout composant logiciel qui observe ou participe à la communication entre le système d’exploitation et un appareil.
Pilotes logiciels
Notre définition développée est relativement précise, mais elle est encore incomplète, car certains pilotes ne sont associés à aucun périphérique matériel.
Par exemple, si vous devez écrire un outil qui accède aux principales structures de données du système d’exploitation, vous pouvez le diviser en deux composants. Le premier composant s’exécute en mode utilisateur et présente l’interface utilisateur. Le deuxième composant s’exécute en mode noyau et accède aux données principales du système d’exploitation. Le composant qui s’exécute en mode utilisateur est appelé application, et le composant qui s’exécute en mode noyau est appelé pilote logiciel. Un pilote logiciel n’est pas associé à un périphérique matériel.
Ce diagramme illustre une application en mode utilisateur qui communique avec un pilote logiciel en mode noyau.
Les pilotes logiciels s’exécutent toujours en mode noyau. Ils sont principalement écrits pour accéder aux données protégées disponibles uniquement en mode noyau. Toutefois, tous les pilotes de périphérique n’ont pas besoin d’accéder aux données et aux ressources en mode noyau, de sorte que certains pilotes de périphérique s’exécutent en mode utilisateur.
Pour plus d’informations sur les modes processeur, consultez Mode utilisateur et Mode noyau.
Pilotes d’autobus
Un autre type de pilote est le pilote de bus. Pour comprendre les pilotes de bus, vous devez comprendre les nœuds d’appareil et l’arborescence des appareils.
Pour plus d’informations sur les arborescences d’appareils, les nœuds d’appareil et les pilotes de bus, consultez Nœuds d’appareil et piles d’appareils.
Plus d’informations sur les pilotes de fonction
Notre explication jusqu’à présent simplifie trop la définition du pilote de fonction. Nous avons indiqué que le pilote de fonction d’un appareil est le seul pilote de la pile qui communique directement avec l’appareil. Cela est vrai pour un appareil qui se connecte directement au bus PCI (Peripheral Component Interconnect). Le pilote de fonction d’un périphérique PCI obtient des adresses qui sont mappées aux ressources de port et de mémoire sur l’appareil. Le pilote de fonction communique directement avec l’appareil en écrivant dans ces adresses.
Toutefois, dans de nombreux cas, un appareil ne se connecte pas directement au bus PCI. Au lieu de cela, l’appareil se connecte à une carte de bus hôte connectée au bus PCI. Par exemple, un grille-pain USB se connecte à un adaptateur de bus hôte (appelé contrôleur hôte USB), qui est connecté au bus PCI. Le grille-pain USB a un pilote de fonction et le contrôleur hôte USB a également un pilote de fonction. Le pilote de fonction du grille-pain communique indirectement avec le grille-pain en envoyant une requête au pilote de fonction pour le contrôleur hôte USB. Le pilote de fonction du contrôleur hôte USB communique ensuite directement avec le matériel du contrôleur hôte USB, qui communique avec le grille-pain.