<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head><title>Annexe</title><link href="style.css" rel="stylesheet" type="text/css" /><meta content="DocBook XSL Stylesheets V1.73.2" name="generator" /><link rel="start" href="index.html" title="Guide pratique du Plug-and-Play" /><link rel="up" href="index.html" title="Guide pratique du Plug-and-Play" /><link rel="prev" href="ar01s12.html" title="Partage et conflit d'interruption" /><link rel="next" href="apa.html" title="A. Adaptation française" /></head><body><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Annexe</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s12.html">Précédent</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="apa.html">Suivant</a></td></tr></table><hr /></div><div class="sect1" lang="fr"><div class="titlepage"><div><div><h2 class="title"><a id="N112E9" />Annexe</h2></div></div></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="UPnP_" />Universal Plug and Play (<acronym class="acronym">UPnP</acronym>)</h3></div></div></div><p>C'est en quelque sorte un réseau Plug-and-Play développé par Microsoft mais utilisable sous Linux. Vous connectez quelque chose sur un réseau et ce quelque chose n'a pas besoin d'être configuré mais ne va communiquer qu'avec des périphériques <acronym class="acronym">UPnP</acronym> du réseau. Ici, « <span class="quote">configurer</span> » est utilisé dans le sens large et ne signifie pas simplement configurer les ressources bus. Un des objectifs est de permettre au gens connaissant peu de choses sur les réseaux ou sur la configuration et l'installation d'un routeur, d'une passerelle, d'une imprimante réseau, et cætera de le faire. Une utilisation majeure de <acronym class="acronym">UPnP</acronym> serait dans les réseaux sans-fil.</p><p><acronym class="acronym">UPnP</acronym> utilise : <div class="itemizedlist"><ul><li><p>un protocole de découverte des services (<span class="foreignphrase"><em class="foreignphrase">Simple Service Discovery Protocol</em></span>) pour trouver les périphériques,</p></li><li><p>une architecture de notification générale d'événements (<span class="foreignphrase"><em class="foreignphrase">General Event Notification Architecture</em></span>),</p></li><li><p>un protocole d'accès aux objets (<span class="foreignphrase"><em class="foreignphrase">Simple Object Access Protocol</em></span>) pour assurer le contrôle des périphériques.</p></li></ul></div> </p><p> Ce guide pratique ne couvre pas U<acronym class="acronym">PnP</acronym>. <acronym class="acronym">UPnP</acronym> pour Linux est supporté par Intel qui a développé un logiciel spécifique. Il existe d'autres programmes qui font à peu près la même chose que <acronym class="acronym">UPnP</acronym>. Une comparaison de ceux-ci est disponible sur <a class="ulink" href="http://www.cs.umbc.edu/~dchakr1/papers/mcommerce.html" target="_top">http://www.cs.umbc.edu/~dchakr1/papers/mcommerce.html</a>. Un projet U<acronym class="acronym">PnP</acronym> pour Linux se trouve sur Sourceforge : <a class="ulink" href="http://sourceforge.net/projects/upnp/" target="_top">Kit U<acronym class="acronym">PnP</acronym> pour Linux</a> </p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="address_details" />Détails des adresses</h3></div></div></div><p>Il existe trois types d'adresses : adresses en mémoire principale, adresses d'entrées/sorties (ports) et adresses de configuration. Sur le bus <acronym class="acronym">PCI</acronym>, les adresses de configuration constituent une plage d'adresses séparée un peu comme les adresses d'entrées/sorties. Sauf dans le cas compliqué des adresses de configuration <acronym class="acronym">ISA</acronym>, qu'une adresse sur le bus soit ou non une adresse en mémoire principale, une adresse d'entrées/sorties ou une adresse de configuration dépend seulement du voltage sur certains fils du bus. Pour plus de détails sur les adresses de configuration du bus <acronym class="acronym">ISA</acronym>, voir <a class="xref" href="ar01s13.html#isa_conf_addresses" title="Adresses de configuration du bus ISA (Port de lecture et cætera)">la section intitulée « Adresses de configuration du bus <acronym class="acronym">ISA</acronym> (Port de lecture et cætera) »</a>.</p><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a id="N11340" />Plages d'adresses</h4></div></div></div><p>Le terme « <span class="quote">adresse</span> » est quelque fois utilisé dans ce document pour signifier un ensemble contigu d'adresses. Les adresses sont en unité d'octets. Donc, par exemple, un port série sur l'espace d'adressage 3F8-3FF sera souvent juste référencé par son adresse de base, 3F8. 3F8 est l'emplacement du premier octet de la plage (espace d'adressage). Pour visualiser les espaces d'adressage, jetez un œil à <code class="filename">/proc/iomem</code> et <code class="filename">/proc/ioports</code>.</p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a id="N11350" />Plage d'adresses</h4></div></div></div><p>Pour accéder à la fois aux espaces d'adresses mémoire principale et d'entrées/sorties, le même bus d'adresses est utilisé (les fils utilisés pour l'adresse sont partagés). Comment le périphérique sait-il si l'adresse apparaissant sur le bus est une adresse mémoire ou d'entrées/sorties ? En fait, pour l'<acronym class="acronym">ISA</acronym> (pour le <acronym class="acronym">PCI</acronym>, lisez aussi ceci), il existe quatre fils dédiés sur le bus qui amènent ce type d'informations. Si un de ces quatre fils est « <span class="quote">activé</span> », cela indique que le <acronym class="acronym">CPU</acronym> veut lire une adresse d'entrées/sorties et la mémoire principale ignore l'adresse sur le bus. En tout, les fils de lecture et écriture existent à la fois pour les adresses de mémoire principale et pour les adresses d'entrées/sorties (quatre fils en tout).</p><p>Pour le bus <acronym class="acronym">PCI</acronym>, il s'agit de la même idée de base (utilisant aussi quatre fils) mais réalisée un peu différemment. Au lieu d'avoir un seul des quatre fils activé, un nombre binaire est placé sur les fils (d'où 16 possibilités différentes). Donc, il est possible de véhiculer plus d'informations sur ces quatres fils. Quatre de ces 16 nombres sont utilisés pour les espaces en mémoire principale et d'entrées/sorties comme indiqué dans le paragraphe ci-dessus. En plus, il existe aussi un espace d'adressage de configuration qui utilise plus de deux chiffres supplémentaires. Cela laisse dix autres nombres disponibles pour d'autres utilisations.</p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a id="N11366" />Espace d'adresses pour la configuration <acronym class="acronym">PCI</acronym></h4></div></div></div><p>Ceci est différent des espaces d'adresses mémoire et d'entrées/sorties parce que l'espace d'adresses de configuration est « <span class="quote">géographique</span> ». Chaque emplacement d'une carte a un numéro d'emplacement faisant parti de l'adresse. De cette façon, Linux (ou le <acronym class="acronym">BIOS</acronym>) peut adresser un certain emplacement et trouver le type de carte fiché dans cet emplacement. Chaque périphérique a des registres standards de 64 bits et quelques uns d'entre eux contiennent des numéros qui peuvent identifier de façon non ambiguë le périphérique. Comme le nombre d'emplacements est limité comme le sont le nombre de périphériques <acronym class="acronym">PCI</acronym> construit dans la carte mère, Linux (ou le <acronym class="acronym">BIOS</acronym>) a besoin de vérifier un nombre limité d'adresses pour trouver tous les périphériques <acronym class="acronym">PCI</acronym>. S'il ne lit que des uns (0xFF en hexadécimal) à partir du premier registre d'un périphérique, alors cela signifie qu'aucun périphérique n'est présent. Comme il n'y a aucune carte ou périphérique fournissant tous les numéros un (0xFF), le « <span class="quote">host bridge</span> » <acronym class="acronym">PCI</acronym> sur la carte mère fournit ce numéro pour tous les périphériques inexistants.</p><p>Le numéro d'emplacement <acronym class="acronym">PCI</acronym> est appelé (dans le jargon <acronym class="acronym">PCI</acronym> le numéro de périphérique et comme une carte peut avoir au plus huit périphériques sur elle, un numéro de fonction (allant de 0 à 7) identifie le périphérique qui se trouve sur une carte <acronym class="acronym">PCI</acronym>. Ces numéros font partie de l'adresse géographique. Les développeurs Linux l'appellent <span class="foreignphrase"><em class="foreignphrase">pci-slot-name</em></span>. Du coup, ce que Linux appelle un périphérique est en fait une fonction dans le jargon <acronym class="acronym">PCI</acronym>. Le numéro du bus <acronym class="acronym">PCI</acronym> (souvent 00) devient aussi une partie de l'adresse géographique. Par exemple, 0000:00:0d.2 correspond au bus <acronym class="acronym">PCI</acronym> 0, emplacement 0, fonction 2. Pour l'adresse géographique complète, vous devez inclure le numéro sur deux mots des registres de configuration du périphérique auquel on veut l'accès. Les 0000 en tête (en 1999) étaient réservés pour une utilisation future.</p><p>Comment le processeur désigne-t-il qu'une lecture ou une écriture doit se faire dans l'espace de configuration <acronym class="acronym">PCI</acronym> ? Il ne le fait pas, en tout cas pas directement. À la place lorsque l'accès à l'espace de configuration est désiré, il fait une écriture sur 32 bits (un mot double) pour écrire 0cf8-0cfb en espace d'entrées/sorties et écrit l'adresse géographique complète ici. Le <span class="foreignphrase"><em class="foreignphrase">host bridge</em></span> <acronym class="acronym">PCI</acronym> écoute à cette adresse et nous assure que la prochaine écriture de données sera 0cfc-0cff. C'est enregistré dans des registres de configuration du périphérique spécifié. Le pont fait les deux en envoyant un signal spécial à la carte <acronym class="acronym">PCI</acronym> spécifiée (ou ce qui y ressemble) sur un fil dédié qui va seulement à l'emplacement où la carte est connectée. Il place aussi des bits sur le bus de contrôle indiquant que ce qui est sur le bus d'adresse maintenant est une adresse géographique de l'espace de configuration.</p><p>Pourquoi ne pas faire simple et demander simplement au processeur de placer les bits sur le bus de contrôle pour indiquer que l'adresse sur le bus principal est une adresse géographique pour la configuration du <acronym class="acronym">PCI</acronym> ? Et bien, la plupart des processeurs ne sont pas capables de le faire donc le « <span class="quote">host bridge</span> » <acronym class="acronym">PCI</acronym> le fait à la place.</p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a id="N113B3" />Vérification de la plage (test <acronym class="acronym">ISA</acronym> pour les conflits d'adresses d'entrées/sorties)</h4></div></div></div><p>Sur le bus <acronym class="acronym">ISA</acronym>, il existe une méthode intégrée dans chaque carte <acronym class="acronym">PnP</acronym> pour vérifier qu'aucune autre carte n'utilise la même adresse d'entrées/sorties. Si deux cartes ou plus utilisent la même adresse d'entrées/sorties, les cartes ont peu de chance de fonctionner correctement (voire de fonctionner tout court). Un bon logiciel <acronym class="acronym">PnP</acronym> devrait allouer les ressources bus de manière à éviter ce conflit, mais même dans ce cas, une carte non <acronym class="acronym">PnP</acronym> pourrait avoir la même adresse.</p><p>Le test fonctionne par une carte plaçant un nombre de test connu dans ses propres registres d'entrées/sorties. Puis, le logiciel <acronym class="acronym">PnP</acronym> le lit et vérifie que ce qu'il lit correspond bien au numéro de test connu. Il répète le même test avec un autre numéro. Comme il vérifie l'ensemble des adresses d'entrées/sorties allouées à la carte, il est appelé un vérificateur de plage. Il pourrait être appelé plus logiquement un testeur de conflit d'adresses. Si un conflit est détecté, vous obtenez un message d'erreur.</p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a id="N113CC" />Communiquer directement via la mémoire</h4></div></div></div><p>Traditionnellement, la plupart des périphériques d'entrées/sorties utilisent seulement la mémoire d'entrées/sorties pour communiquer avec le processeur (<acronym class="acronym">CPU</acronym>). Le pilote de périphérique, exécuté sur le processeur lira et écrira des données de/vers l'espace d'adressage des entrées/sorties et la mémoire principale. Malheureusement, cela nécessite deux étapes. Par exemple, 1. lire les données à partir d'un périphérique (en espace d'adressage) et les stocker temporairement dans le CPU ; 2. écrire ces données en mémoire principale. Une façon plus rapide serait que le périphérique place lui-même les données directement en mémoire principale. Une façon de faire ceci est d'utiliser <a class="xref" href="ar01s02.html#dma_" title="DMA (accès direct à la mémoire) ou maîtrise du bus">la section intitulée « <acronym class="acronym">DMA</acronym> (accès direct à la mémoire) ou maîtrise du bus »</a> <acronym class="acronym">ISA</acronym> ou la maîtrise du bus <acronym class="acronym">PCI</acronym>. Le périphérique physique peut aussi détenir un peu de mémoire principale (aux adresses supérieures pour éviter les conflits avec les adresses des composants de la mémoire principale). De cette façon, le périphérique lit et écrit directement dans son espace mémoire interne sans avoir à s'embêter avec le <acronym class="acronym">DMA</acronym> ou la maîtrise du bus. De tels périphériques pourraient aussi utiliser des adresses d'entrées/sorties.</p></div></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="isa_conf_addresses" />Adresses de configuration du bus <acronym class="acronym">ISA</acronym> (Port de lecture et cætera)</h3></div></div></div><p>Ces adresses sont aussi connues comme les « <span class="quote">ports d'auto-configuration</span> ». Pour le bus <acronym class="acronym">ISA</acronym>, il n'existe pas techniquement de plage d'adresses de configuration, mais le <acronym class="acronym">CPU</acronym> utilise une façon spéciale d'accéder aux registres de configuration <acronym class="acronym">PnP</acronym> sur les cartes <acronym class="acronym">PnP</acronym>. Dans ce but, trois adresses d'entrées/sorties sont allouées et chacune adresse un seul octet (il n'y a pas à proprement parler d'espace ou de plage). Il ne s'agit pas de trois adresses pour chaque carte mais de trois adresses partagées par toutes les cartes <acronym class="acronym">ISA</acronym>-<acronym class="acronym">PnP</acronym>.</p><p>Ces trois adresses sont nommées port de lecture (<span class="foreignphrase"><em class="foreignphrase">read-port</em></span>), port d'écriture (<span class="foreignphrase"><em class="foreignphrase">write-port</em></span>) et port d'adresse (<span class="foreignphrase"><em class="foreignphrase">address-port</em></span>). Chaque port a une taille d'un octet. Chaque carte <acronym class="acronym">PnP</acronym> dispose d'un grand nombre de registres de configuration, donc même les trois adresses ne sont pas suffisantes pour les registres de configuration d'une seule carte. Pour résoudre ce problème, chaque carte se voit affecter un numéro de carte en utilisant une technique appelée « <span class="quote">isolation</span> ». Voir <a class="xref" href="ar01s13.html#isolation_" title="Isolation ISA">la section intitulée « Isolation <acronym class="acronym">ISA</acronym> »</a> pour des détails plus complexes.</p><p>Ensuite, pour configurer une certaine carte, son numéro de carte est envoyé via l'adresse du port d'écriture pour indiquer à cette carte qu'elle doit écouter sur son port d'adresse. Toutes les autres cartes notent que ce n'est pas leur numéro de carte et donc n'écoutent pas. Ensuite, l'adresse d'un registre de configuration est envoyé sur le port d'adresse (à toutes les cartes, mais une seule écoute). Enfin, le transfert de données prend place avec ce registre de configuration sur cette carte soit en faisant une lecture sur le port de lecture soit en faisant une écriture sur le port d'écriture.</p><p>Le port d'écriture est toujours A79 et le port d'adresse est toujours 279 (en hexadécimal). Le port de lecture n'est pas fixe mais dépend du logiciel de configuration (tout en restant dans la plage 203-3FF) qui avec un peu de chance n'entrera pas en conflit avec les autres cartes <acronym class="acronym">ISA</acronym>. Si un conflit se déclare, il changera l'adresse. Toutes les cartes <acronym class="acronym">PnP</acronym> sont « <span class="quote">programmées</span> » avec cette adresse. Donc, si vous utilisez <span class="command"><strong>isapnp</strong></span> pour enregistrer ou connaître la configuration, celui-ci doit d'abord déterminer l'adresse du port de lecture. </p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="interrupt_detail" />Détails sur les interruptions</h3></div></div></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a id="N11427" />Interruptions sérialisées</h4></div></div></div><p>Il a été dit précédemment qu'il existe un fil pour chaque interruption. Mais l'interruption sérialisée (ou interruption série) est une exception. Un seul fil est utilisé pour toutes les interruptions qui sont multiplexées sur ce fil. Chaque interruption a un créneau horaire sur la ligne d'interruption. Il est utilisé sur le bus LPC mais aussi sur le bus PCI bien que cela soit plus rare pour ce dernier ?</p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a id="N1142C" /><acronym class="acronym">DMA</acronym></h4></div></div></div><p>Avant de se plonger dans le détail des interruptions, il existe une autre façon pour que les périphériques initient la communication en dehors de l'envoi d'une interruption. Cette méthode est une requête <acronym class="acronym">DMA</acronym> (<span class="foreignphrase"><em class="foreignphrase">Direct Memory Access</em></span>) pour prendre le contrôle de l'ordinateur à partir du CPU pour un temps limité. Sur le bus <acronym class="acronym">PCI</acronym>, il n'utilise aucune ressource. Tous les périphériques ne sont pas capables de faire du <acronym class="acronym">DMA</acronym>. Voir <a class="xref" href="ar01s02.html#dma_" title="DMA (accès direct à la mémoire) ou maîtrise du bus">la section intitulée « <acronym class="acronym">DMA</acronym> (accès direct à la mémoire) ou maîtrise du bus »</a>.</p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a id="N11441" />Interruptions logicielles</h4></div></div></div><p>Il existe aussi un autre type d'interruption nommée « <span class="quote">interruption logicielle</span> », non couverte par ce guide pratique et n'utilisant pas de ressources. Alors qu'une interruption matérielle est générée par le matériel, une interruption logicielle est initiée par le logiciel. Il existe plusieurs façons pour ce faire. Une façon est que le logiciel dise au processeur d'exécuter une interruption (une instruction d'interruption). Une autre façon consiste, pour le logiciel, à envoyer des messages aux autres processus pour les interrompre même s'il n'est pas clair qu'on puisse appeler ça une interruption. Le processus ksoftirq process, que vous pouvez trouver dans la liste des processus sur un PC Linux, est un programme qui lance ce type d'interruption pour gérer les pilotes de périphériques. Le pilote de périphérique commence à s'exécuter à cause d'une interruption matérielle mais, plus tard, des interruptions logicielles sont utilisées pour la deuxième moitié de la routine d'interruption du pilote. Donc, le processus ksoftirq est aussi connu comme la « <span class="quote">seconde moitié</span> ». Pour plus de détails, voir la documentation du noyau.</p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a id="N1144C" />Interruptions matérielles</h4></div></div></div><p>Les interruptions amènent beaucoup d'informations mais seulement indirectement. Le signal de demande d'interruption (un voltage sur un fil) envoyé par un matériel indique seulement au composant, appelé le contrôleur d'interruption, qu'un certain périphérique demande l'attention. Le contrôleur d'interruption envoie le signal au <acronym class="acronym">CPU</acronym>. Le <acronym class="acronym">CPU</acronym> s'interrompt dans ce qu'il faisait, trouve le pilote de ce périphérique et exécute une partie de celui-ci nommée « <span class="quote">routine d'interruption</span> » (ou « <span class="quote">gestionnaire d'interruption</span> »). Cette « <span class="quote">routine</span> » essaie de trouver ce qui est arrivé et gère ensuite le problème. Par exemple, le périphérique peut avoir besoin d'envoyer/recevoir des octets. Ce programme (cette routine) peut facilement comprendre ce qui s'est passé car le périphérique dispose de registres disponibles sur des adresses connues par le pilote (à condition que le numéro d'<acronym class="acronym">IRQ</acronym> et que les adresses d'entrées/sorties soient correctement configurés). Ces registres contiennent l'état du périphérique. Le logiciel lit le contenu de ces registres et en inspectant le contenu, trouve ce qui est arrivé et réalise l'action appropriée.</p><p><a id="pci_irq_share" />Donc, chaque pilote de périphérique a besoin de savoir le numéro d'interruption (<acronym class="acronym">IRQ</acronym>) où écouter. Sur le bus <acronym class="acronym">PCI</acronym> (et dans certains cas spéciaux, sur le bus <acronym class="acronym">ISA</acronym>), il est possible que deux (voire plus) périphériques partagent le même numéro d'<acronym class="acronym">IRQ</acronym>. Notez que vous ne pouvez pas partager une interruption <acronym class="acronym">PCI</acronym> avec une interruption <acronym class="acronym">ISA</acronym> (y a-t'il des exceptions ?). Quand une interruption partagée est lancée, le processeur exécute toutes les routines du service d'interruption séquentiellement pour tous les périphériques utilisant cette interruption. La première action qu'entreprend la première routine lancée est de vérifier les registres du périphérique pour voir si une interruption a été générée par son périphérique. S'il se trouve que ce n'est pas le cas (fausse alarme), il s'arrêtera immédiatement et la prochaine routine commence pour le deuxième périphérique qui utilise cette même interruption, et cætera. Il vérifie le périphérique comme décrit ci-dessus. Cette séquence est répétée jusqu'à la découverte du périphérique qui a lancé cette interruption. Toutes les routines d'interruption pour une interruption constituent une chaîne. Donc, la chaîne est traversée jusqu'à ce qu'une routine de la chaîne réclame l'interruption en disant : cette interruption est pour moi. Après avoir géré l'interruption, les routines suivantes du service d'interruption ne sont pas exécutées.</p><p>Mettre un certain voltage sur une ligne <acronym class="acronym">IRQ</acronym> revient seulement à demander que le <acronym class="acronym">CPU</acronym> s'interrompe de façon à exécuter la routine du pilote du périphérique. Dans pratiquement tous les cas, le <acronym class="acronym">CPU</acronym> est interrompu par la requête. Mais les interruptions du CPU peuvent être temporairement désactivées ou « <span class="quote">faire la queue</span> », et donc, dans de rares cas, une interruption peut ne pas être gérée (ou peut subir un certain délai). Donc, ce qui a été auparavant appelé une interruption est plus précisément une « <span class="quote">demande d'interruption</span> », ce qui explique l'acronyme d'<acronym class="acronym">IRQ</acronym> (« <span class="quote">Interrupt ReQuest</span> », c'est-à-dire ReQuête d'Interruption).</p></div></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="N1148F" />Comment le pilote de périphérique récupère son interruption</h3></div></div></div><p>L'indication précédente, à savoir que les pilotes de périphérique écoutent leur interruption, était une explication très simplifiée. En fait, il s'agit d'un composant (ou d'une partie d'un composant) embarqué sur la carte-mère, appelé le contrôleur d'interruptions. Il va écouter toutes les interruptions. Quand le contrôleur récupère une interruption, il envoie un signal au CPU pour lancer la routine du service d'interruption du pilote de périphérique approprié pour gérer cette interruption.</p><p>Il existe différents types de contrôleurs d'interruptions. L'un d'entre eux est l'APIC (acronyme de Advanced Programmable Interrupt Controller) qui a habituellement des broches en entrée pour un grand nombre d'interruptions, y compris les interruptions PCI. Les anciens contrôleurs ont seulement des broches pour les interruptions ISA mais ils peuvent toujours gérer les interruptions PCI car il s'agit d'un routeur programmable d'interruptions qui convertit les interruptions PCI en interruptions ISA et les envoie vers certaines broches (c'est-à-dire vers certaines IRQ).</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="isolation_" />Isolation <acronym class="acronym">ISA</acronym></h3></div></div></div><p>C'est uniquement pour l'ancien bus <acronym class="acronym">ISA</acronym>. L'isolation est une méthode complexe d'affectation d'un point temporaire (numéro d'identifiant ou <acronym class="acronym">CSN</acronym>, <span class="foreignphrase"><em class="foreignphrase">Card Select Number</em></span>) à chaque périphérique <acronym class="acronym">PnP</acronym> du bus <acronym class="acronym">ISA</acronym>. Comme il existe des moyens plus efficaces (mais plus complexes) de le faire, certains pourraient dire qu'il s'agit d'une méthode simple. Seule une adresse d'écriture est utilisée pour les écritures <acronym class="acronym">PnP</acronym> vers tous les périphériques pour que toutes les écritures vers cette adresse aillent sur tous les périphériques <acronym class="acronym">PnP</acronym>. Cette adresse d'écriture est utilisé pour envoyer (affecter) un numéro de carte unique à chaque périphérique <acronym class="acronym">PnP</acronym>. Pour être assigné, ce numéro de carte nécessite qu'un seul périphérique soit en écoute lorsque le numéro de carte est envoyé (écrit) à cette adresse commune. Tous les périphériques <acronym class="acronym">PnP</acronym> ont un numéro de série unique qu'ils utilisent lors du processus d'isolation. Faire l'isolation est comme un jeu. Cela se fait en utilisant l'équivalent d'un bus commun de fils connectant tous les périphériques <acronym class="acronym">PnP</acronym> au programme d'isolation.</p><p>Pour le premier tour du « <span class="quote">jeu</span> », tous les périphériques <acronym class="acronym">PnP</acronym> écoutent sur ce fil et envoient simultanément une séquence de bits sur le fil. Les bits autorisés sont soit un 1 (voltage positif) soit un « <span class="quote">0 ouvert</span> » sans voltage (circuit ouvert ou trois-états). Pour cela, chaque périphérique <acronym class="acronym">PnP</acronym> commence à envoyer séquentiellement son numéro de série sur ce fil, voltage (circuit ouvert ou trois-états). Pour faire cela, chaque périphérique <acronym class="acronym">PnP</acronym> lance simplement son numéro de série sur les fils, bit à bit, en commençant par le plus haut. Si un périphérique envoie un 1, un 1 sera entendu par tous les autres périphériques. Si tous les périphériques envoient un « <span class="quote">0 ouvert</span> », rien ne sera entendu sur le fil. Le but est d'éliminer (à la fin du premier tour) tous les périphériques sauf celui possédant le numéro de série le plus important. « <span class="quote">Éliminer</span> » signifie enlever de ce tour du jeu et donc cesser temporairement d'écouter tout ce qui passe sur le fil. (Notez que tous les numéros de série ont la même taille.) Quand il ne reste qu'un seul périphérique en écoute, un numéro de carte lui est donné.</p><p>Tout d'abord, considérez seulement le bit le plus haut du numéro de série qui est placé sur le fil par tous les périphériques qui n'ont pas encore de numéro de carte. Si un périphérique <acronym class="acronym">PnP</acronym> envoie un 0 (0 ouvert) mais entend un 1, cela signifie qu'un ou plusieurs autres périphériques <acronym class="acronym">PnP</acronym> a un numéro de série plus important, donc il se supprime temporairement pour ce tour. Maintenant, les périphériques restant en jeu (pour ce tour) ont tous le même bit de haut niveau (un 1), donc nous pouvons supprimer ce bit et continuer avec le « <span class="quote">reste du numéro de série</span> » pour la suite du tour. Ensuite, recommencez depuis le début de ce paragraphe et répétez jusqu'à ce que le numéro de série soit examiné en entier pour chaque périphérique (voir plus bas pour les cas « <span class="quote">tous à 0</span> »).</p><p>Donc, il est clair que seules les cartes avec un petit numéro de série sont éliminées lors d'un tour. Mais qu'arrive-t-il si tous les périphériques du jeu envoient un 0 comme leur bit de haut niveau ? Dans ce cas, un « <span class="quote">0 ouvert</span> » est envoyé sur la ligne et tous les participants restent en lice. S'ils ont tous un 0 au début, alors les 0 sont supprimés comme les 1 du paragraphe ci-dessus. Le jeu continue alors avec le bit suivant du numéro de série).</p><p>A la fin du tour (après que le dernier bit ait été envoyé), seul un périphérique <acronym class="acronym">PnP</acronym>, celui possédant le plus haut numéro de série, reste en jeu. Il se voit attribuer un numéro de carte et quitte le jeu définitivement. Ensuite, tous les autres périphériques du tour précédent (qui n'ont donc pas de numéro de carte) reviennent dans le jeu et un nouveau tour commence, avec un participant en moins. Éventuellement, tous les périphériques <acronym class="acronym">PnP</acronym> se voient assigner un numéro de carte. Il est facile de prouver que cet algorithme fonctionne. L'algorithme actuel est un peu plus complexe que celui présenté ci-dessus car chaque étape est répétée deux fois pour s'assurer, et ces répétitions sont faites d'une façon un peu différente (mais en utilisant la même idée de base).</p><p>Une fois tous les numéros de carte assignés, ils sont utilisés pour s'adresser à chaque périphérique <acronym class="acronym">PnP</acronym> pour envoyer/lire des données de configuration. Notez que ces numéros de carte sont seulement utilisés pour la configuration <acronym class="acronym">PnP</acronym> et ne sont pas utilisés pour les communications normales avec le périphérique <acronym class="acronym">PnP</acronym>. Lorsque l'ordinateur démarre, un <acronym class="acronym">BIOS</acronym> <acronym class="acronym">PnP</acronym> fera l'isolation puis s'occupera de la configuration <acronym class="acronym">PnP</acronym>. Après ça, tous les numéros de carte sont « <span class="quote">perdus</span> » d'une telle façon que si quelqu'un veut changer (ou inspecter) la configuration une nouvelle fois, l'isolation devra être refaite intégralement.</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="N11505" />Maîtrise du bus et ressources <acronym class="acronym">DMA</acronym></h3></div></div></div><p>Si un bus dispose d'une fonctionnalité de maîtrise du bus, il est peu probable que des ressources seront nécessaires pour le <acronym class="acronym">DMA</acronym> sur ce bus. Par exemple, le bus <acronym class="acronym">PCI</acronym> n'a pas besoin des ressources <acronym class="acronym">DMA</acronym> car il dispose de cette fonctionnalité. Néanmoins, la « <span class="quote">maîtrise du bus</span> » est souvent appelée <acronym class="acronym">DMA</acronym>. Mais, comme il ne s'agit pas strictement de <acronym class="acronym">DMA</acronym>, il ne nécessite aucune ressource <acronym class="acronym">DMA</acronym>. Les bus locaux <acronym class="acronym">ISA</acronym> et VESA n'ont pas de maîtrise du bus. Les anciens bus MCU et E<acronym class="acronym">ISA</acronym> l'avaient.</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="N11527" />Historique et obsolescence</h3></div></div></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a id="N1152A" />Pilote son OSS-Lite</h4></div></div></div><p>Vous devez donner l'adresse d'entrée/sortie, l'<acronym class="acronym">IRQ</acronym> et le canal <acronym class="acronym">DMA</acronym> comme paramètres au module ou les compiler dans le noyau. Mais certaines cartes <acronym class="acronym">PCI</acronym> seront automatiquement détectées. RedHat fournit un programme <span class="command"><strong>sndconfig</strong></span> qui détecte les cartes <acronym class="acronym">ISA</acronym> <acronym class="acronym">PnP</acronym> et configure automatiquement les modules en chargeant les ressources bus détectées.</p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a id="N11542" />ALSA (Architecture son avancée pour Linux) en l'an 2000</h4></div></div></div><p>Ceci détectera la carte par des méthodes <acronym class="acronym">PnP</acronym>, puis sélectionnera le pilote et le chargera. Il configurera aussi les ressources bus sur les cartes <acronym class="acronym">ISA</acronym>-<acronym class="acronym">PnP</acronym> et sur les cartes <acronym class="acronym">PCI</acronym>. Il remplace <acronym class="acronym">OSS</acronym> (Open Sound System), auparavant populaire.</p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a id="N11556" />Notes sur MS Windows Notes</h4></div></div></div><p>Windows NT4 ne supportait pas <acronym class="acronym">ISAPNP</acronym> mais dispose d' un programme <acronym class="acronym">PNPISA</acronym> que vous pouvez utiliser « <span class="quote">à vos risques et périls</span> ». Pour NT4, les utilisateurs se sont vus conseiller de ne pas configurer le <acronym class="acronym">BIOS</acronym> avec l'indication que le système d'exploitation est <acronym class="acronym">PnP</acronym> de façon à ce que le <acronym class="acronym">BIOS</acronym> s'occupe de la configuration des ressources. Du coup, MS Windows et Linux étaient auparavant dépendants de la configuration du <acronym class="acronym">BIOS</acronym> (et le sont toujours).</p></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s12.html">Précédent</a> </td><td align="center" width="20%"> </td><td align="right" width="40%"> <a accesskey="n" href="apa.html">Suivant</a></td></tr><tr><td valign="top" align="left" width="40%">Partage et conflit d'interruption </td><td align="center" width="20%"><a accesskey="h" href="index.html">Sommaire</a></td><td valign="top" align="right" width="40%"> A. Adaptation française</td></tr></table></div></body></html>