Sophie

Sophie

distrib > * > 2010.0 > * > by-pkgid > a412ceb851151854794ced2a242192bb > files > 2777

howto-html-fr-20080722-1mdv2010.0.noarch.rpm

<!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>