Sophie

Sophie

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

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>Partage et conflit d'interruption</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="ar01s11.html" title="Messages d'erreurs" /><link rel="next" href="ar01s13.html" title="Annexe" /></head><body><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Partage et conflit d'interruption</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s11.html">Précédent</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ar01s13.html">Suivant</a></td></tr></table><hr /></div><div class="sect1" lang="fr"><div class="titlepage"><div><div><h2 class="title"><a id="N11289" />Partage et conflit d'interruption</h2></div></div></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="N1128C" />Introduction</h3></div></div></div><p>Quand deux périphériques ou plus utilisent la même ligne d'interruption,
(et le même numéro d'IRQ), il s'agit soit d'un « <span class="quote">partage
d'interruption</span> » soit d'un « <span class="quote">conflit d'interruption</span> ».
Le bus PCI autorise tous les périphériques PCI à partager des interruptions
avec les autres, ce qui est appelé le partage. Mais si un périphérique ISA
(ou un périphérique LPC ??) utilise la même interruption
(IRQ) qu'un autre périphérique (PCI, ISA ou LPC ??), il y habituellement
un conflit d'interruption.</p><p>Il existe des exceptions. Certains périphériques PCI très anciens
(pré-1995) ne permettent pas le partage d'interruption. À contrario, quelques
périphériques ISA ont été conçus pour partager les interruptions (entre deux
périphériques ISA ?) mais ces deux périphériques ISA doivent être conçus
de cette façon et être pilotés par du logiciel au courant du partage des
interruptions. La carte-mère doit aussi le supporter. La discussion suivante
se rapporte aux PC qui ont un bus ISA.</p><p>Un conflit signifie que, quand une interruption survient, aucun pilote de
périphérique (ou le mauvais) ne sera appelé. Cela peut aboutir à de mauvaises
actions comme des dépassements de tampon (perte de données). Un périphérique
peut presque immobiliser sa ligne d'interruption quand il n'envoie pas son
interruption, et de ce fait empêcher tout autre dispositif d'employer cette
ligne d'interruption. Cela ne pose pas de problème seulement si seul ce
périphérique utilise cette interruption mais si un deuxième périphérique essaie
d'utiliser la même ligne d'interruption, il ne pourra plus le faire. Si ce
second périphérique immobilise aussi la ligne lorsqu'il n'envoyait pas
d'interruption, alors aucun des deux périphériques ne peut utiliser
l'interruption. Linux et les deux périphériques sont inconscients de ce conflit
et continuent à envoyer les interruptions qui vont nul part et sont donc
perdus.</p><p>Les conflits d'interruptions étaient communs quand les IRQ étaient
configurées grâce à des cavaliers sur les cartes (bus ISA), souvent parce que
le noyau ne connaissait pas la configuration de ces cavaliers. Le Plug-and-Play
ISA (aucun cavalier) a beaucoup aidé car le logiciel pouvait modifier les
IRQ. L'abandon d'ISA en faveur du PCI a pratiquement éliminé les conflits
IRQ. Malgré tout, votre PC peut toujours avoir des périphériques sur la
carte-mère (pas sur une carte fille) sur un bus ISA, LPC ou X. Mais le BIOS et
le noyau devraient savoir comment les configurer et donc éviter de les utiliser
pour les périphériques PCI, évitant ainsi les conflits d'interruption.
Mais il existe toujours un problème avec PCI car il peut manquer d'interruptions
disponibles, tout spécialement sur les anciens PC qui ont seulement 16
interruptions.</p><p>Mais, bien qu'ayant éliminé le problème des conflits, le partage d'IRQ
sur le bus PCI a introduit un nouveau problème qui est moins sérieux, le problème d'équilibre des
IRQ. Si des périphériques utilisant beaucoup les interruptions partagent la
même IRQ, cela pourrait amener des délais dans la récupération des IRQ et
pourrait même amener à des dépassements de tampon et d'autres erreurs. Ceci
n'est pas dû à la façon dont le logiciel détermine le périphérique qui a
lancé cette interruption.</p><p>Il existe deux types de conflits d'interruptions. Le premier est un
vrai conflit, celui décrit ci-dessus. Dans ce cas, les interruptions ne
fonctionnent plus et le pilote de périphérique continue d'essayer de contrôler
son périphérique et ne sait pas que les interruptions ne fonctionnent pas. Le
second type de conflit d'interruption arrive quand un pilote de périphérique
est lancé mais découvre que l'interruption dont il a besoin est déjà utilisé.
Il affiche un message d'erreur et quitte. Le message indique quelque chose
comme « ressource en cours d'utilisation » (« ressource busy ») mais ne
précise pas clairement qu'il s'agit d'un problème d'interruption.</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="N112A1" />Vrai conflit d'interruption</h3></div></div></div><p>Le BIOS et le noyau ne vont pas permettre un conflit d'interruptions en
connaissance de cause. Alors comment cela peut-il arriver ? Une façon
d'y parvenir arrive quand quelqu'un a indiqué un mauvais IRQ dans un fichier
de configuration, par exemple en donnant un paramètre « irq=9 » à un module.
Dans cet exemple, supposons que l'IRQ du périphérique est réellement le 5.
Quand un autre pilote de périphérique se lance et trouve son périphérique à
l'IRQ 5, vous avez deux vrai périphériques utilisant la même IRQ, ce qui
aboutit à un vrai conflit. Le noyau a approuvé l'utilisation de l'IRQ 5 par
le second périphérique car il a été trompé et pensait que le premier
périphérique était sur l'IRQ 9.</p><p>Il existe d'autres cas où le noyau ne sait pas qu'une IRQ est utilisée.
Par exemple quand une ancienne carte ISA est configuré par un cavalier mais
que son pilote n'est pas encore lancé (il peut même ne pas voir de pilote).
Un autre cas, le BIOS configure un IRQ au niveau matériel mais aucun pilote
Linux n'est lancé pour ce matériel. Linux ne connaîtra donc pas cette IRQ.
Ceci peut même arriver pour une carte PCI, celle-ci s'affichera avec la
commande <span class="emphasis"><em>lspci -v</em></span> mais ne sera pas disponible dans le
répertoire <span class="emphasis"><em>/proc/interrupts</em></span> et n'est donc pas connue par
le noyau. Est-ce un bogue du noyau ?</p><p>Quels sont les symptômes d'un conflit d'interruption ?
On pourrait penser que les périphériques ne fonctionnent pas du tout mais
comme les adresses sont connues, le pilote peut communiquer. Les interruptions
sont souvent utilisées pour contrôler le flux de données provenant et allant
au périphérique. Sans les interruptions, le flux n'est pas contrôlé, ce qui
signifie des dépassements de tampon, voire même pas de flux du tout, les
interruptions pouvant aussi être utilisées pour initier le flux. Pour un modem
série, le résultat est un flux extrêmement lent avec de longues pauses et des
erreurs fréquentes. Pour une carte son, cela pourrait signifier qu'un mot ou
deux sont entendus, puis plus rien.</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="N112B0" />Aucune interruption disponible</h3></div></div></div><p>Ceci arrive quand un pilote de périphérique est lancé mais quitte
immédiatement pour éviter un conflit d'interruption. Généralement, il
affiche un message d'erreur comme « ressource en cours d'utilisation » ou
l'enregistre dans un journal de trace.</p><p>Un cas où un périphérique ISA est activé et ne peut se voir 
affecté une interruption (IRQ) car aucune n'est disponible. Ou une 
interruption pourrait être disponible mais ne peut pas être utilisée car 
le matériel du périphérique qui a besoin de cette interruption ne sait 
pas gérer le numéro disponible ou la carte mère ne le supporte pas non 
plus à cause de problèmes de routage (voir <a class="link" href="ar01s08.html" title="Interruptions PCI">PCI 
Interrupts</a>). Si les périphériques ISA utilisent toutes les 
interruptions, alors une ou plusieurs cartes PCI pourraient être en 
conflit car elles ne peuvent pas obtenir d'IRQ.</p><p>Normalement, le <acronym class="acronym">BIOS</acronym> affectera des interruptions et ne
créera pas de conflits.  Mais il pourrait être forcé de créer des conflits
s'il tombe à court d'<acronym class="acronym">IRQ</acronym>. Ceci peut survenir si quelqu'un a
configuré le <acronym class="acronym">BIOS</acronym> pour réserver certaines <acronym class="acronym">IRQ</acronym>
pour les périphériques <acronym class="acronym">ISA</acronym> qui ne sont pas
<acronym class="acronym">PnP</acronym>. Ces paramétrages pourraient être mauvais et devraient
être vérifiés, tout spécialement si vous avez des problèmes. Par exemple,
quelqu'un pourrait avoir réservé une <acronym class="acronym">IRQ</acronym> pour une carte
<acronym class="acronym">ISA</acronym> qui a été enlevé du PC depuis longtemps. Si vous récupérez
cette <acronym class="acronym">IRQ</acronym>, alors elle est disponible et un conflit disparaît.
</p><p>Quelque fois, le <acronym class="acronym">BIOS</acronym> résoudra le problème du manque
d'<acronym class="acronym">IRQ</acronym> en utilisant ce qu'il appelle l'<acronym class="acronym">IRQ</acronym>
0. Elle n'existe pas car la vrai <acronym class="acronym">IRQ</acronym> 0 est affectée en
permanence à l'horloge de l'ordinateur mais signifie que le pilote devrait
utiliser la demande au lieu des
<acronym class="acronym">IRQ</acronym>. Ceci signifie que le pilote devra vérifier fréquemment
le périphérique (lui demander) pour voir si le périphérique a besoin d'un service
de la routine d'interruptions. Bien sûr, cela gâche du temps processeur et il y
a plus de risques d'un dépassement de tampon du périphérique
car il pourrait ne pas être servi assez rapidement par le pilote.</p></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s11.html">Précédent</a> </td><td align="center" width="20%"> </td><td align="right" width="40%"> <a accesskey="n" href="ar01s13.html">Suivant</a></td></tr><tr><td valign="top" align="left" width="40%">Messages d'erreurs </td><td align="center" width="20%"><a accesskey="h" href="index.html">Sommaire</a></td><td valign="top" align="right" width="40%"> Annexe</td></tr></table></div></body></html>