Un pilote de périphérique communique avec un périphérique à l'aide de diverses méthodes, en fonction du type de périphérique et du système d'exploitation. La communication est rarement directe; au lieu de cela, il s’appuie sur des couches intermédiaires et des interfaces standardisées. Voici une répartition :
1. Interfaces spécifiques au matériel :
* E/S mappées en mémoire (MMIO) : Les registres du périphérique sont mappés dans l'espace d'adressage de la mémoire du système. Le pilote lit et écrit sur ces adresses mémoire pour contrôler le périphérique. Ceci est courant pour de nombreux appareils, notamment les cartes graphiques et les cartes d'interface réseau (NIC). Le pilote interagit directement avec les registres matériels physiques.
* E/S mappées par port (PIO) : L'appareil est accessible via des ports d'entrée/sortie spécifiques. Le pilote envoie des commandes et reçoit des données en écrivant et en lisant depuis ces ports. C'est moins courant aujourd'hui, mais on le retrouve toujours dans les systèmes existants. Comme MMIO, c'est une interaction directe.
* Interruptions : L'appareil interrompt le processeur lorsqu'il a besoin d'attention (par exemple, les données sont prêtes, une erreur s'est produite). L'interruption déclenche un gestionnaire d'interruption spécifique au sein du pilote, permettant au pilote de répondre à l'événement du périphérique. Ceci est crucial pour les opérations asynchrones.
* Accès direct à la mémoire (DMA) : L'appareil peut accéder directement à la mémoire système sans intervention du processeur, améliorant ainsi les performances. Le pilote configure le transfert DMA, libérant le CPU pour d'autres tâches.
2. Interfaces logicielles (couches d'abstraction) :
Les interactions matérielles brutes décrites ci-dessus sont généralement supprimées par des couches logicielles pour fournir une interface plus gérable et portable. Ceux-ci incluent :
* Noyau du système d'exploitation : Le pilote fonctionne au sein du noyau du système d'exploitation. Il utilise les services du noyau pour accéder aux ressources matérielles et interagir avec d'autres parties du système.
* API spécifiques aux appareils : Les systèmes d'exploitation fournissent souvent des API (Application Programming Interfaces) spécifiques à certains types de périphériques (par exemple, SCSI, SATA, USB). Ces API simplifient le développement de pilotes en éliminant les détails de bas niveau.
* Interfaces spécifiques au bus : L'appareil est connecté au système via un bus (par exemple PCI, USB, SATA). Le pilote utilise des protocoles et des interfaces spécifiques au bus pour communiquer avec l'appareil via le bus.
En résumé :
Le processus de communication peut être visualisé comme suit :
1. Application (utilisateur ou système) : Demande une opération (par exemple, lire des données sur un disque dur).
2. Système d'exploitation : Achemine la demande vers le pilote de périphérique approprié.
3. Pilote de périphérique : Utilise l'interface spécifique au matériel appropriée (MMIO, PIO, etc.) et les abstractions logicielles pour communiquer avec l'appareil. Cela peut impliquer l'envoi de commandes, la réception de données, la gestion des interruptions ou la gestion des transferts DMA.
4. Appareil : Exécute l'opération demandée et renvoie le résultat (le cas échéant) au pilote.
5. Pilote de périphérique : Traite la réponse et renvoie le résultat au système d'exploitation.
6. Système d'exploitation : Renvoie le résultat à l'application.
La complexité de la communication dépend grandement de la sophistication de l'appareil et du système d'exploitation. Les systèmes modernes utilisent souvent plusieurs couches d'abstraction pour simplifier le développement des pilotes et améliorer la portabilité.
|