Les
IRQ font partie des figures de proue parmi les cauchemards des
utilisateurs de PC qui font de la vidéo, débutants ou moins débutants.
Daniel nous explique de quoi il s'agit au juste. Si vous trouvez que c'est
un peu ardu, consolez vous : Monique a promis de concocter une
version "pour les nuls" dans quelques temps...
A. Introduction
Déjà, il faut savoir qu’il existe 3 sortes
d’interruption :
1) Les interruptions
processeur (celles générées par une erreur de calcul interne du
genre "Divide by zero" par exemple).
2) Les interruptions
"hardware" ou matérielle, et que nous allons détailler ci-après.
3) Les interruptions
"software" ou logicielle (lorsqu’une application a besoin d’avoir
accès à un morceau de code commun contenu et contrôlé par un autre
morceau de code et situé dans une location mémoire très différente
et qui peut varier, comme le BIOS par exemple).
B. Les IRQ
Tout d’abord, IRQ veut dire "Interrupt ReQuest", tout simplement,
c’est-à-dire ReQuête d’Interruption, et cette appellation est
exclusivement réservée aux interruptions matérielles. Elles sont
générées, comme leur nom l’indique, par des composants extérieurs au
processeur, mais pas forcément extérieurs au PC lui-même. Le
"System Timer" interne, par exemple, interrompt le processeur
en utilisant l’IRQ 0 ; c’est un composant de la carte mère. A chaque
fois que vous pressez une touche du clavier vous interrompez le
processeur par l’intermédiaire de l’IRQ 1. En fait, tout
périphérique connecté d’une manière ou d’une autre au processeur et
ayant besoin de se faire entendre devra interrompre le
processeur
C. La table des
interruptions
Chaque fois que le processeur est interrompu, il va chercher l’adresse
du code à exécuter dans une table. Par exemple, le pilote logiciel fourni
avec une carte d’acquisition vidéo et utilisant l’IRQ 10 devra aller
mettre dans cette table, lors de son installation en mémoire, l’adresse du
code qu’il souhaite voir exécuter lorsque son périphérique (la carte
d’acquisition) désirera prendre la main.
Ceci était vrai lorsque les IRQ n’étaient pas partageables… Maintenant
c’est un peu plus compliqué puisqu’un morceau du système d’exploitation va
gérer ce processus dynamiquement, mais nous verrons cela un peu plus
tard.
D. Le mécanisme des interruptions
hardware
a) Le PIC
Il y a quelques
années nous pouvions encore physiquement trouver sur nos cartes mères 2
composants qui géraient les interruptions : les PICs ("Programmable
Interrupt Controler"). Maintenant ils sont intégrés au sein de ce que l’on
appelle le "Chipset" ("ensemble de composants" en français, regroupés au
sein d’1 ou 2 boîtiers en tout), mais le principe reste exactement le
même. Il y a 2 PICs, sachant chacun gérer 8 interruptions hardware. Le
premier gère les IRQ de 0 à 7, et le second de 8 à 15. La sortie du second
PIC est câblée sur l’entrée correspondant à l’IRQ 2, donc sur le premier
PIC, et seule la sortie du premier PIC part réellement vers le processeur
(voir figure ci-dessous).
Le plus haut niveau de priorité étant l’IRQ 0, l’ordre des priorités,
en tenant compte de l’emboîtement des 2 PICs, est donc :
Ø
IRQ 0 = System Timer
Ø
IRQ 1 = Clavier
Ø
IRQ 8 = Real Time Clock (horloge
temps réel)
Ø
IRQ 9 = "disponible"
Ø
IRQ 10 = "disponible"
Ø
IRQ 11 = "disponible"
Ø
IRQ 12 = Souris PS/2
Ø
IRQ 13 = Coprocesseur arithmétique
Ø
IRQ 14 = Canal IDE primaire (pour les disques
durs – 2 maximum)
Ø
IRQ 15 = Canal IDE secondaire (pour les CD-ROM et
graveurs – 2 maximum)
Ø
IRQ 3 = COM2 (second port série)
Ø
IRQ 4 = COM1 (premier port série)
Ø
IRQ 5 = "disponible" (souvent
utilisée pour la carte son en compatibilité Sound Blaster)
Ø
IRQ 6 = Lecteur de disquettes (2
maximum)
Ø
IRQ 7 = LPT1 (le port parallèle)
Et c’est tout ! Sur un PC de base seule 4 IRQs restent
disponibles, et encore, le son étant maintenant une composante obligatoire
des PCs, 3 IRQs seulement sont utilisables pour tous les autres
périphériques et autres accessoires…
Au cas où 2 IRQs viendraient à arriver en même temps, le contrôleur
d’interruptions (PIC) ira servir la plus prioritaire en premier, et
gardera la seconde sous le coude pour la servir après que la première aura
fini son travail. C’est pour cela que le clavier est branché sur l’IRQ 1,
de manière à ce que l’utilisateur puisse reprendre la main de façon
prioritaire. Il ne faut tout de même pas oublier que tout morceau de
software peut, quand il le désire et en l’occurrence avant l’exécution
d’une partie critique ou "temps réel" de code, mettre un masque
d’interruption, c’est-à-dire interdire au processeur de se laisser
interrompre. C’est d’ailleurs dans ces moments là, et quand quelque chose
se passe mal, que l’on en arrive à un PC "planté" : un morceau de
code ayant interdit les interruptions est en attente d’un événement qui
n’arrive pas…
On accuse souvent le partage des interruptions,
processus décrit un peu plus bas, d’être la cause de lenteur dans la
capture et/ou dans la restitution de la vidéo, et donc de générer des
saccades. Mais en fait, qu’il y ait beaucoup plus de lignes d’IRQ ou pas,
en d’autres termes que l’on ait besoin de les partager ou pas, le problème
réel vient simplement du fait qu’il faut servir plus de choses que le PC
n’est capable d’en absorber… Le partage lui-même n’y est généralement pas
pour grand chose.
b) L'APIC
Depuis peu de
temps, le hardware de nos PC a évolué. Les chipsets intègrent maintenant,
en plus du PIC standard, un APIC ("Advanced Programmable Interrupt
Controler"). Nous reparlerons un peu plus tard des intérêts qu'apporte
l'APIC en terme de gestion des interruptions. D'un pur point de vue
matériel, il est présent sur toutes les machines multiprocesseurs et sur
les nouvelles générations de PC compatibles Windows XP. L'APIC permet de
traiter jusqu'à 256 requêtes d'interruption différentes - les 16 premières
étant équivalentes aux 16 IRQ que nous venons de décrire. En réalité
l'APIC est présent dans le chipset de nombreux PC modernes, au même titre
que le simple PIC, par contre, il n'est pas forcement utilisable. Pour
qu'il le soit, il faut que le BIOS d'un tel PC ait été écrit pour cela,
c'est-à-dire qu'il ait configuré cet APIC, en plus du PIC, pour être prêt
à travailler. Jusqu'à présent seuls les PC multiprocesseur étaient dans ce
cas, car il s'agit alors d'une obligation pour pouvoir le faire
fonctionner en multiprocesseur justement. On parle alors de BIOS "I/O
APIC" ou même plus directement "IOAPIC" (I/O pour "Input" "Output" -
entrée sortie). Depuis peu, Microsoft impose aux fabricants de PC de
systématiser l'utilisation de l'APIC, même sur les PCs monoprocesseur.
C'est une des conditions à l'obtention du logo Microsoft "Designed for
Windows XP" que les constructeurs collent fièrement sur la face avant de
chaque machine. Ceci sera visible, bien-sûr sous Windows XP, mais
également sous Windows 2000 (voir chapitre H). Nous parlerons alors du
fonctionnement de Windows 2000 en "mode PIC" ou en "mode APIC". Par contre
Windows 98 ne saura pas utiliser ce nouveau contrôleur d'interruptions et
se contentera, même sur ces nouvelles machines pourtant configurées pour
le support de l'APIC, à travailler avec le PIC standard.
E. Les attributions d’IRQ
Avant même de parler de partage d’interruption, il faut d’abord parler
d’attribution. Dans l’exemple ci-dessus nous avons donc 4 IRQs
disponibles. Mais en fait, seulement 4 (9, 10, 11 et 5) restent
disponibles parce que les autres ont été attribuées. Cette étape a
été réalise par le BIOS tout simplement parce que le câblage physique des
composants avec le PIC est fait sur la carte mère, et que le BIOS le sait
ou le voit (le composant gérant le port parallèle LPT1 est physiquement
connecté à l’entrée 7 du PIC par exemple, ou à travers une sorte de
commutateur électronique piloté par le BIOS qui pourra alors le connecter
ou non, donc lui assigner l’IRQ 7, ou la laisser libre).
Ajoutons maintenant une carte son dans notre PC. Il y a 3 cas
possible :
1) Une vieille carte ISA, avec des
cavaliers de configuration.
Comme nous savons que l’IRQ 5 est disponible et que beaucoup
d’anciennes applications DOS s’attendent à ce que cette carte parle à
travers l’IRQ 5 (compatibilité Sound Blaster), configurons la donc en IRQ
5 avec le bon choix de cavalier.
2) Une carte plus récente, mais
toujours ISA, sans cavalier de configuration.
Il s’agit de la version PnP (raccourci pour "Plug-and-Play"
c’est-à-dire "on branche et ça marche") de cette carte. La seule
différence est que cette carte ira se configurer toute seule lors du
premier démarrage du PC, et comme par hasard sur l’IRQ 5 puisqu’elle verra
que cette IRQ est justement disponible. A ce niveau là, il faut savoir que
les lignes d’interruptions correspondant aux IRQ disponibles sont
physiquement présentes sur le bus ISA, et donc que la carte va réellement
être connectée à l’IRQ 5.
3) Une carte PCI.
A propos, "PCI" sont les initiales de "Peripheral Component
Interconnect"; il s’agit
d’une norme régie par un groupe d'intérêt (voir à http://www.pcisig.com/
pour plus de détails). Revenons-en à notre carte PCI : n’y cherchez
pas de cavalier, toutes les cartes PCI sont obligatoirement PnP ;
mais c’est une autre sorte de PnP, beaucoup plus subtil. En effet,
maintenant les fameuses lignes d’interruption ne sont plus connectées au
bus PCI, contrairement aux connecteurs ISA. Elles ont été remplacées par
d’autres lignes d’interruptions : les interruptions PCI. C’est
finalement le BIOS ou/et l’OS qui iront au moment voulu connecter ces
lignes à une entrée du PIC, donc à une vraie IRQ. En conclusion, plus de
connexion permanente entre les cartes PCI et les IRQ contrairement aux
cartes ISA, donc une totale flexibilité.
A ce niveau là, 2 cas de figure se présentent : soit nous
allons charger un OS PnP ou non… Et oui, ça se complique !
1) Un OS (raccourci pour "Operating
System", système d’exploitation en français) dit "PnP" est un OS qui,
comme une carte, se débrouille tout seul pour attribuer ses ressources
disponibles. Les OS PnP sont :
Ø
Windows 95 (Win95)
Ø
Windows 98 (Win98)
Ø
Windows 2000 (W2K).
2) Les OS non PnP sont
Ø
DOS
Ø
Windows NT (NT4).
Seulement pour qu’un OS PnP puisse se débrouiller tout seul, encore
faut-il pouvoir dire au BIOS de ne pas attribuer les ressources
lui-même.
A l’inverse, dans le cas d’un OS non-PnP, il faut impérativement dire
au BIOS d’attribuer les ressources lui-même sinon elles ne pourront tout
simplement pas marcher une fois l’OS chargé.
Pour cela, il y a un champ dans le SETUP des BIOS s’intitulant
généralement "PnP OS" où l’on répond par oui ou par non,
ou "Operating System running" où l’on répond par DOS/NT ou par
Windows95/…
F. Le partage des
interruptions
Tout composant dit "legacy", terme technique anglo-saxon faisant
référence à l’ancienne norme PC AT et que l’on pourrait avantageusement
traduire par "l’héritage", ne peut en aucun cas accepter le partage des
interruptions. La raison est très simple : ces composants sont
physiquement connectés aux entrées du PIC comme nous l’avons déjà vu,
alors que pour pouvoir partager une interruption il faut bien sûr pouvoir
gérer une connexion de plusieurs lignes d’interruption intermédiaires
avant d’en brancher physiquement une sur le PIC. Pour cela, seule la
flexibilité qu’offre le bus PCI le permet. De fait, dans le tableau des
IRQs ci-dessus, seules les IRQs 9, 10 et 11 peuvent encore être
considérées comme partageables. En effet, toutes les autres IRQs sont
utilisées par des composants dits "legacy", et ce, en considérant que le
PC est équipé d’une carte son connectée sur le bus ISA du PC.
Les BIOS des PCs modernes autorisent maintenant aussi le partage
d’interruption sur les IRQs de 3 à 7, à partir du moment où aucun
composant "legacy" n’est connecté dessus. Par exemple, si vous n’utilisez
aucun de vos ports série, vous pouvez alors, depuis le SETUP de certains
BIOS, les déclarer comme inactifs. Ceci correspondra à une réelle
déconnexion physique des ports qui seront alors rendus invisibles, même si
l’OS chargé derrière est PnP, et le bénéfice direct sera la libération des
IRQs 3 et 4 dans cet exemple précis.
Les périphériques PCI peuvent partager les mêmes IRQs parce qu'au
démarrage du PC le BIOS construit une table appelée "PCI IRQ routing
table". Cette table contient les entrées de chaque périphérique PCI qui se
verra attribuer un numéro d'IRQ ISA (rappelez-vous, les numéros de 0 à 15
que l'on a décrit plus haut). Ces assignations d'IRQ ISA sont aussi liées,
par construction matérielle cette fois, aux lignes physiques
d'interruptions PCI associées aux différents connecteurs PCI d'un PC
donné. L'ensemble des 2 se combine en ce qui s'appelle un "Link Value". Un
Link Value est utilisé à chaque fois qu'une communication s'établie avec
un périphérique, et bien que des périphériques puissent partager une même
IRQ ils auront tous un Link Value unique: il n'y a donc pas d'erreur
possible !
G. La gestion des interruptions sous Win95
(depuis la SR2) et sous Win98
a) Définition de l’IRQ
"Steering"
Ce terme d'IRQ Steering (direction d'IRQ) désigne le processus software
au sein de l'OS qui assigne dynamiquement les IRQs du bus PCI vers les
périphériques en ayant besoin. Comme on a l'a déjà vu, seules les IRQ non
déjà assignées à un périphérique ISA (ou legacy) pourront l'être vers un
périphérique PCI, car une IRQ ne peut en aucun cas être assignée à la fois
à un périphérique ISA et à un périphérique PCI. Ce moteur d'assignation
des IRQ PCI (PCI bus IRQ Steering) va donc attribuer les IRQs, que le BIOS
l'ait ou non déjà fait. Il est donc préférable de ne pas le laisser faire
au BIOS pour éviter que Windows assigne une IRQ différente de celle
attribuée par le BIOS à un périphérique donné (ceci est très rare, mais
peut toutefois se produire).
b) Comment Win95
(depuis la SR2) et Win98 utilisent l'IRQ Steering
Ce "PCI bus IRQ Steering" donne à Windows la possibilité de
reprogrammer les interruptions PCI tout en rééquilibrant les ressources
entre les périphériques PCI et ISA PnP versus les ressources non-PnP.
Par exemple, imaginons que vous ayez déjà une carte PCI dans votre PC,
pour laquelle l'IRQ 10 a été attribuée. Maintenant vous ajoutez une
vieille carte ISA non-PnP configurée par cavalier sur l'IRQ 10 justement.
Vous vous trouvez alors dans un cas flagrant de conflit d'IRQ. Mais pas
pour longtemps, parce qu'automatiquement Windows va :
Ø
invalider le périphérique PCI utilisant l'IRQ 10,
Ø
reprogrammer une IRQ libre pour être une IRQ PCI (par exemple la
11),
Ø
assigner un "IRQ Holder" (terme défini au paragraphe ci-dessous) à
l'IRQ 11,
Ø
reprogrammer l'IRQ 10 pour être une IRQ ISA (legacy),
Ø
retirer l'IRQ Holder qui existait pour l'IRQ 10.
De ce fait, la carte ISA non-PnP pourra cette fois utiliser sans
problème l'IRQ 10, et inversement notre carte PCI se verra assigner l'IRQ
11 qui a donc été réservée pour cet usage.
c) Les IRQ
Holders
Un "IRQ Holder for PCI Steering" est un indicateur montrant qu'une IRQ
a été programmée pour servir des périphériques PCI, même si aucun
périphérique ne s'en sert concrètement (une sorte de réservation en
quelque sorte). Bien évidemment aucun périphérique ISA ne pourra utiliser
une IRQ sur laquelle se trouve un IRQ Holder.
d) Comment voir quelles sont
les IRQs programmées pour le PCI
Ø
Depuis le panneau de configuration, double-cliquer sur l'icône
Système.
Ø
Cliquer sur l'onglet "Gestionnaire de périphériques".
Ø
Double-cliquer sur "Ordinateur".
Ø
S'assurer que la case "Requêtes d'interruption" est bien
cochée.
Ø
La liste de toutes les interruptions est alors affichée, y compris
les IRQ Holders, sous la mention de "IRQ Holder for PCI Steering" pour
Win95 à partir de la SR2 ainsi que pour Win98 dans le cas de machines
n'ayant pas de BIOS ACPI (APM), et sous la mention de "IRQ Holder ACPI
pour PCI IRQ Steering" pour Win98 dans le cas de machines ayant un BIOS
ACPI.
"ACPI" sont les initiales de "Advanced Configuration and Power
Interface". Il s'agit d'une évolution de l'ancienne spécification "APM"
qui sont les initiales de "Advanced Power Management". Il s'agit en fait
de la gestion de la mise en route et de la mise en veille progressive
jusqu'à l'arrêt du PC. L'énorme avantage de l'ACPI comparé à l'APM est sa
capacité à gérer la mise en route, l'endormissement et l'arrêt des
périphériques connectés au PC. Pour cela, il faut bien, d'une manière ou
d'une autre, que la couche ACPI dans Windows gère les ressources des
périphériques, en particulier les IRQs. Pourquoi ? Et bien par exemple, la
norme ACPI permet à un PC éteint ou en veille profonde de se réveiller
lorsque le téléphone sonne pour activer la fonction répondeur ou fax, et
ce, grâce à l'IRQ assignée au modem. Voilà pourquoi la gestion des IRQs
est différente entre une ancienne machine seulement APM et un PC moderne
ACPI.
e) Comment voir et
changer l'état de l'IRQ Steering
Ø
Depuis le panneau de configuration, double-cliquer sur l'icône
Système.
Ø
Cliquer sur l'onglet "Gestionnaire de périphériques".
Ø
S'assurer que la case "Afficher les périphériques par type" est
bien cochée.
Ø
Double cliquer sur "Périphériques Système".
Ø
Double cliquer sur "Bus PCI"
Ø
Cliquer sur l'onglet "Steering IRQ"
De là, vous pouvez invalider
purement et simplement le fonctionnement de l'IRQ Steering, ou, plus
légèrement, changer la manière dont Windows va établir ses priorités pour
assigner les IRQs. Et c'est justement à partir de là qu'il faut commencer
pour tenter de résoudre les problèmes de conflit d'IRQ que vous pourriez
avoir sur votre PC, mais seulement si Windows n'arrive pas à le faire
correctement de lui-même. C'est par exemple - cas extrême il s'entend - en
invalidant l'IRQ Steering que vous pourrez enfin réussir à ce que les
configurations d'IRQ que vous avez entrées vous-même dans le SETUP de
votre BIOS soient vraiment celles utilisées par Windows ! ATTENTION: en
fonction du BIOS de votre PC, même après avoir invalidé l'IRQ Steering, il
se peut que les "IRQ Holder for PCI Steering" apparaissent encore dans le
statut des IRQ… Il faut alors aussi invalider cette fonction depuis le
SETUP de votre BIOS, ou plus exactement lui dire de ne pas autoriser cette
fonction.
f) Exemple de configuration d'IRQ sous Windows
98
Il s'agit ici de la table des IRQ d'un PC récent dont le BIOS est APIC.
Mais hélas, comme nous sommes sous Windows 98 seul le PIC standard est
utilisé et donc seules 16 IRQ sont disponibles.
Il m'a fallu un peu tricher, en passant par MS-Paint, pour réussir à
afficher toutes les IRQ en une seule page (cela se voit par les 2
ascenseurs)…
Cet exemple est intéressant car la configuration est assez chargée.
Chose curieuse, l'IRQ 2 apparaît, ce qui est assez rare, et plutôt inutile
en fait. Comme nous l'avons vu un peu plus haut, l'IRQ 2 est utilisée pour
cascader le second PIC sur le premier. Elle est donc listée ici comme
réservée pour le contrôleur d'interruptions programmable, c'est-à-dire le
PIC. Ouf, tout va bien !
L'IRQ 5 semble partagée. Elle est utilisée par le composant audio qui
est intégré dans le chipset. C'est son rôle principal. Mais elle est
également utilisée par le SMBus ("System Management Bus"). C'est ce qui
permet au PC de reprogrammer certaines chose en interne (du genre mémoire
spéciale ou sont stocké les numéros de série, par exemple). Cette
programmation ne se fait généralement pas depuis Windows, ou alors depuis
certains programmes très particuliers seuls habilités à le faire, et
utilisés très exceptionnellement. On ne parlera donc pas vraiment de
partage dans ce cas particulier.
Et enfin nous avons un vrai partage de l'IRQ 9 entre le premier
contrôleur USB (ce PC a 2 contrôleurs USB de 2 ports chacun, le second
étant sur l'IRQ 11) et le LAN ("Local Area Network" - carte réseau
intégrée ici dans le chipset). On y voit donc 2 "IRQ Holder ACPI pour PCI
IRQ Steering", un pour chacun. L'IRQ SCI ("System Configuration
Interrupt"), et aussi connecté à l'IRQ 9, sert ici à la gestion interne de
l'ACPI.
Je vous encourage maintenant à poursuivre votre lecture, puis à revenir
voir cet exemple après avoir lu la section sur Windows 2000 en mode APIC.
En effet, j'ai utilisé exactement le même PC, sur lequel j'ai simplement
réinstallé W2K. Vous verrez ainsi clairement la différence !
H. La gestion du partage des
interruptions sous Windows 2000
a)
Introduction
Windows 2000 (W2K) a été développé avec l'objectif, parmi beaucoup
d'autres bien sûr, de justement permettre le partage des IRQs pour les
périphériques PCI. Tout périphérique PCI, même s'il se voit
attribuer des ressources par le BIOS sera ré-analysé par W2K qui
n'hésitera pas à les changer si nécessaire. C'est donc un comportement
normal sous W2K que d'avoir ce partage, et ce, tout particulièrement pour
les PC ACPI, ACPI qui sous Windows 2000 ne fonctionnera correctement qu'à
cette condition.
b) La configuration des IRQs
sous W2K sur des PCs ACPI
Sous Windows 2000 vous trouverez généralement l'IRQ 9 assignée à une
grande partie des périphériques PCI, et même probablement à tous ! C'est
normal, c'est comme cela que cela doit être, et on ne peut pas changer les
configurations d'IRQ sous W2K.
Dans le détail des IRQs du Gestionnaire de Périphériques vous verrez
apparaître la liste des IRQs ISA (de 0 à 15) avec éventuellement quelques
trous pour celles non-utilisées, et en particulier en face de l'IRQ ISA 9
la mention "Microsoft ACPI-Compliant System", puis en dessous la liste des
IRQ PCI, toutes portant le même numéro (9). En fait seule l'IRQ 9 est
utilisable par le bus PCI pour l'IRQ Steering sous W2K. Pour la première
fois dans le mode des PCs un OS gère différemment les IRQs ISA (donc
non-partageables) et les IRQs PCI.
Cette caractéristique permet en toute sécurité d'ajouter d'autres
périphériques sans aucun risque de conflit d'IRQs. Grâce aux Link Values
définis par le BIOS et qui permet de savoir avec qui communiquer, une
seule IRQ servira l'ensemble des périphériques. Ce processus permet de
simplifier la gestion interne et est indispensable à la gestion du Power
Management (ACPI).
c) La re-programmation
des IRQs sous W2K sur des PCs ACPI
Windows 2000, au contraire de Win98, n'a pas la possibilité de
reprogrammer dynamiquement les interruptions PCI pour rééquilibrer les
ressources entre les périphériques PCI et ISA. Lorsque les ressources PCI
sont définies, elles ne peuvent être changées. En d'autres termes, vous ne
pouvez en aucun cas ajouter une vieille carte ISA configurée sur l'IRQ 9
dans un système où Windows 2000 a été installé. En revanche, vous pouvez
tout à fait ajouter une carte PCI, qui ira de fait partager avec les
autres cette même IRQ 9.
La raison de cette limitation est liée à la gestion des cartes
multiprocesseurs, de l'IOAPIC (caractéristiques des BIOS multiprocesseurs)
et des bus PCI multi-branche (donc globalement des cartes mères beaucoup
plus complexes) qu'offre W2K au contraire de Win98. Dans ces circonstances
complexes la re-programmation dynamique des IRQs serait beaucoup trop
risquée et cette caractéristique n'a donc pas été implémentée au sein de
W2K.
Si vous êtes dans ce cas précis (PC relativement récent, donc
compatible ACPI, et W2K), ne perdez pas votre temps avec les IRQs,
n'essayez pas de changer les configurations de votre BIOS pour forcer
telle ou telle carte PCI sur telle ou telle IRQ : W2K ne s'en occupera
pas, il les laissera toutes sur l'IRQ 9, point-barre ! Mais d'autre part,
ne prenez pas peur du fait que toutes vos cartes PCI partagent cette IRQ
9. Cela marchera sans problème, c'est fait pour. Et si vous avez des
problèmes de performance, de saccades pendant vos captures vidéo, ne les
mettez pas sur le compte du partage de l'IRQ 9, c'est ailleurs qu'il faut
chercher la cause de cette mauvaise performance.
d) Exemple de configuration d'IRQ sous
W2K en mode PIC
Je n'ai pas pu utiliser ici le même PC que dans l'exemple précédant
puisqu'il s'agissait d'une machine équipée d'un BIOS APIC et que cet
exemple traite de W2K en mode PIC. Je parlerai donc de la simplification
de l'affichage dans l'exemple suivant (section g de ce même chapitre),
histoire de comparer les systèmes d'exploitations entre eux sur un même
matériel.
Que voyons-nous donc d'intéressant ici ? Déjà la séparation entre les
IRQ ISA et les IRQ PCI. Ensuite nous voyons l'IRQ ISA 9, qui est réservée
pour l'ACPI, et donc, nous voyons de fait l'IRQ PCI 9 (c'est-à-dire la
même physiquement que l'IRQ ISA 9 précédemment réservée) qui se retrouve
partagée entre tous les autres périphériques PCI de ce PC (l'USB, le LAN,
l'audio et également le SMBus avec les mêmes remarques que dans l'exemple
précédant à ce sujet).
e) La configuration et la re-programmation des
IRQ sous W2K sur des PCs non-ACPI
Dans le cas où votre PC
serait assez ancien, avec un BIOS et un hardware ne supportant pas la
norme ACPI, Windows 2000 utilisera lors de son installation une HAL
différente. La HAL (Hardware Abstraction Layer) est la couche de l'OS qui
dialogue directement avec les composants électroniques sur la carte mère
et directement avec le BIOS du PC. Normalement le programme d'installation
de W2K installe la HAL ACPI, mais dans ce cas il chargera une HAL
"Standard PC" puisque le BIOS lui aura répondu qu'il n'est pas ACPI.
Ceci aura 2 effets principaux :
1) aucune fonction de gestion de l'alimentation (Power Management) ne
sera disponible,
2) la configuration manuelle des IRQ par le BIOS sera partiellement
disponible.
Ne rêvez pas ! Ce n'est pas une solution à vos problèmes, rappelez-vous
: il n'y a pas de problème d'IRQ !
D'une manière générale ce type de configuration se comportera
normalement de la même manière si vous ne faites aucun réglage particulier
dans le SETUP de votre BIOS et si vous laissez bien le BIOS configuré en
"OS PnP". Vous aurez donc l'IRQ 9 pour tous vos périphériques PCI, et tout
marchera parfaitement.
Mais si vraiment vous y tenez, alors, depuis le BIOS, forcez telle ou
telle carte sur l'IRQ que vous voulez lui assigner, configurez votre BIOS
en "PnP Operating System = no", et bootez W2K. Puis regardez l'effet que
ces modifications auront apportées à vos attributions de ressources au
sein de W2K. Ne rêvez pas non plus, vous n'arriverez jamais à faire
vraiment ce que vous voulez, en tous cas jamais du premier coup.
Mais encore une fois, ce n'est pas par ce biais, sauf cas très
exceptionnel, que vous pourrez résoudre vos problèmes, et en tous cas, si
l'idée vous venait de vouloir remplacer la HAL ACPI, normalement chargée
sur un système ACPI, par la HAL Standard PC pour gagner en flexibilité sur
les attributions d'IRQ, ne dites surtout pas que l'idée vient de moi et ne
comptez surtout pas sur mon support : les résultats sont imprévisibles !
La seule solution à peu près sûre pour y arriver sans risque de tout
perdre est de réinstaller W2K depuis le début en pressant F5 pendant la
phase d'inspection du hardware (au tout début de l'installation), et en
choisissant dans la liste proposée la HAL "Standard PC" au lieu de la HAL
"Advanced Configuration and Power Interface (ACPI) PC".
Pour plus de détail sur ce sujet si vous êtes anglophone :
Comme nous en avons parlé dans le chapitre D, les PC
multiprocesseurs et depuis peu certains PC monoprocesseur (et très bientôt
tous les PC) ont été configurés par leur BIOS pour pouvoir utiliser
l'APIC. Cet APIC est capable de gérer 256 interruptions plutôt que
seulement 16. Si W2K a été installé sur une telle machine il utilisera
donc l'APIC plutôt que le PIC. Le résultat sera immédiat et flagrant :
plutôt que de partager les 16 IRQ existantes entre les différents
périphériques, W2K va simplement assigner par ordre croissant les 256
numéros disponibles. Les 16 premiers (de 0 à 15) seront généralement
réservés aux périphériques ISA, puis les chiffres au-delà de 15 pour les
périphériques PCI.
Toutefois, cela ne va pas fondamentalement changer les choses…
Rappelez-vous : les Link Values définis par le BIOS en mode PIC
permettaient de retrouver le pilote à utiliser lors de l'arrivée d'une
interruption sur une ligne partagée. Le mode APIC permet donc de
légèrement simplifier ce processus en attribuant une ligne unique par
ressource. Le gain de temps est en réalité infime, "epsilonesque" même…
Par contre, la tranquillité d'esprit qu'apporte cette nouvelle
caractéristique des PCs d'aujourd'hui devrait clore définitivement ce très
controversé débat sur le partage des interruptions.
g) Exemple de configuration d'IRQ sous W2K en
mode APIC
Regarder attentivement cet exemple, et maintenant retourner rapidement
faire un tour au chapitre G section f. Il s'agit exactement du même PC,
qui a donc exactement les même ressources et les mêmes besoins en terme
d'IRQ ! Seulement voilà, nous sommes maintenant sous W2K qui lui, au
contraire de Win98 dans le cas précédant, sait enfin gérer l'APIC de cette
machine. Nous disposons donc maintenant de 256 IRQ au lieu des seuls 16
d'avant. Les différences sont frappantes :
Ø Déjà
l'inutile IRQ 2 disparaît. Elle disparaît réellement car elle reste
réservée pour le PIC qui, bien que non-utilisé dans ce cas, est toujours
physiquement présent dans le chipset.
Ø L'IRQ
5 utilisée par le SMBus est listée plus loin, avec les IRQ PCI. Cela
clarifie le fait qu'il s'agisse d'un composant PCI et non d'un composant
ISA.
Ø L'IRQ
ISA 9 est toujours utilisée par W2K pour la gestion de l'ACPI, pas de
changement puisqu'il s'agit d'un composant de type ISA cette fois (notez
la plus grande simplicité et clarté des libellés).
Ø L'audio
intégré au chipset se retrouve maintenant en IRQ17,
Ø Le
premier contrôleur USB en 19,
Ø Le
LAN en 20,
Ø
Et enfin le second contrôleur USB en 23.
Etonnant, non ?
I. Questions / Réponses
: Si le
processeur est en train de travailler à une acquisition ou à une
exportation et qu’une interruption de niveau plus élevée arrive, cela ne
peut-il perturber le flux de données, à moins que le logiciel de capture
ne masque les interruptions ?
: Il
faudrait pouvoir analyser le code de chaque driver et de chaque
application de capture pour pouvoir répondre précisément... A vrai dire le
masquage des interruptions ne peut que très rarement être utilisé pour de
nombreuses raisons liées à l'OS et plus particulièrement aux fonctions
multitâches de l'OS (très vaste débat particulièrement complexe). C'est
seulement dans certains bouts de code très critiques que certains drivers
utilisent le masquage des interruptions et pendant une période très très
courte. Typiquement, on peut toujours interrompre une capture en pressant
la touche ESC. Néanmoins cela ne veut pas dire pour autant que les
interruptions n'aient pas été masquées à un moment critique, mais
seulement suffisamment peu longtemps pour que l'utilisateur ne s'en rende
pas compte. Prenons un exemple concret : imaginons qu’une mémoire
tampon ait été alloué pour la capture. Elle va donc être remplie par le
driver ou par un morceau de l'application de capture qui gère la
communication avec le port IEEE1394. Un autre morceau de cette application
de capture va vider ce tampon en remplissant le fichier AVI sur le disque
dur. Puisqu'on ne peut arrêter ou ralentir le déroulement de la bande du
caméscope, ce tampon risque de déborder s'il n'est pas vidé au moins aussi
vite qu'il est rempli. Alors, lorsqu'il devient bien plein, disons rempli
à 80% par exemple, le driver doit agir pour éviter le trop plein
générateur de "lost frame". Pour cela il va alors masquer les
interruptions, (et sûrement faire d'autres choses aussi, du genre "changer
sa priorité" par exemple pour que toutes les ressources système
disponibles soient focalisées sur le vidage de ce tampon). Quelques
fractions de secondes plus tard, lorsque ce buffer sera de nouveau
suffisamment vide, disons à 20% par exemple, les interruptions seront de
nouveau libérées... Mais attention ceci n'est qu'une hypothèse pour aider
à la compréhension du mécanisme.
: Avec tout ce que tu
as écrit ma recommandation tout azimut serait, hors Windows 2000, de
mettre la carte d’acquisition sur l’IRQ 9 et pour l’obtenir créer un
profil matériel retirant le maximum de choses de manière à ce que l’OS ne
puisse que vouloir utiliser cette IRQ de niveau le plus prioritaire pour
les slots PCI.
: Je ne suis pas sûr que le jeu en vaille la chandelle...
Déjà, le coup de l'IRQ la plus prioritaire n'a d'importance que lorsque 2
IRQs arrivent en même temps ou lorsque la seconde arrive alors que la
première n'a pas encore fini d'être traitée. Si une IRQ 10 arrive en plein
traitement de la 9, elle attendra que la 9 ait fini, alors que si c'est
l’IRQ 1 qui arrive, le processus de traitement de la 9 sera effectivement
interrompu. La manipulation que tu suggères n'a d'intérêt que si tu
rencontres réellement des problèmes de capture ou d'exportation vidéo,
mais autrement, un bon conseil, si ton PC ne marche pas trop mal, en
d’autres termes si tes captures et tes exportations vidéo se déroulent
correctement, alors, ne touche à rien ! Il est bien évident qu'il faut
mettre toutes les chances de son coté pour réussir une capture et une
exportation, en ne faisant rien faire d'autre au PC en même temps. S'il
est assez facile de penser à ne pas jouer à Doom en même temps, il peut
être plus difficile de désactiver la fonction "Répondeur téléphonique" de
son modem juste avant de lancer une capture. Dans ce cas, effectivement
, ta solution de créer plusieurs profils utilisateur est très
intéressante, car elle permet assez simplement d'invalider tel ou tel
périphérique d'un profil, en éliminant par exemple le modem pour une
utilisation purement "Vidéo" de son PC.
: Et un point dont tu
ne parles pas c’est la manière dont la position physique d’un slot influe
sur l’attribution de l’IRQ, par exemple où placer une carte modem PCI pour
que son IRQ soit d’un rang moins prioritaire.
: Cela dépend du HW du PC concerné et de la capacité de son
BIOS à bien gérer ce HW. Normalement, un "super PC" devrait avoir la
possibilité de connecter n'importe quelle ligne d'interruption PCI sur
n'importe quelle IRQ ISA. Hélas, ce n'est pas toujours le cas, et de fait
certains connecteurs peuvent ce retrouver limités. Cela n'a plus beaucoup
d'importance avec W2K maintenant, il suffit de pouvoir toutes les
connecter sur la 9, et ceci est d’ailleurs imposé par Microsoft pour avoir
le droit au logo W2K. Donc la réponse à cette question est dans la
documentation technique de chaque PC...
: Et comment se passe
l’attribution des IRQs pour les slots AGP ?
: De la même manière et en même temps. Le slot AGP (je dis
bien "le", car il est unique dans un PC) est en fait un second bus PCI,
juste plus rapide, et dédié pour une seule carte, la carte graphique.
Cette carte graphique n'utilise une interruption que dans un mode très
particulier (et très rare) ou elle doit synchroniser l'application qui la
pilote, en fait pour que cette application sache quand le balayage arrive
en fin de ligne et en bas de l'image. Ce n'est quasiment plus jamais
utilisé, sauf pour de très anciennes applications. Oublie ! Jamais
d'interruption de la part de la carte graphique. D’ailleurs,
l’interruption utilisée par la carte graphique est quasiment la seule que
Win98 prend le risque de partager avec une autre (n’oublions pas que W2K
est le seul aujourd’hui à vraiment bien gérer le partage des
interruptions).
: Si j’ai bien
compris, l’OS est capable de gérer les demandes d’interruptions de
matériels reliés à la même IRQ ; la rapidité à laquelle il décide,
fait que c’est totalement transparent pour les délais d’exécution, non
?
: Déjà, les interruptions ne sont reliées à la même IRQ que
lorsque l'OS décide de les y relier, et ce presque exclusivement dans le
cas de W2K comme nous l’avons vu. Pour ce qui est du délai d’exécution, il
s’agit en effet que de quelques lignes de code assembleur à exécuter, donc
un délai normalement inférieur au millionième de seconde sur une machine
actuelle !
: Par exemple si une
carte SCSI partage la même IRQ que la carte d’acquisition IEEE1394, les
demandes peut-être répétées de la carte pour gérer les disques durs ne
peuvent-elles créer des soucis de rapidité / continuité d’un travail de
rendu / transfert de fichier DV effectué en simultané ?
: Il y a autre chose dont nous n'avons pas parlé, c'est le DMA
Bus Mastering !!! Certaines cartes comme les cartes SCSI ou les cartes
IEEE1394 sont généralement des cartes dites "Bus Master", c'est-à-dire
qu'elles sont capables de prendre le contrôle du bus PCI, et de fait elles
ont un accès direct à la mémoire et aux autres cartes ! Typiquement, une
carte Studio DV est capable d'envoyer son flux vidéo directement à la
carte SCSI ou au port IDE (s'il est configuré en DMA) sans même passer par
le processeur. Si une IRQ arrive à ce moment là, le processeur n'aura rien
à interrompre réellement puisqu'il ne faisait qu'attendre que quelqu’un
daigne vouloir l'occuper. Aucun risque dans ce cas de gêner la
communication entre le 1394 et le SCSI qui continuera... sauf si le
processeur a besoin à son tour du bus PCI ou, pire encore, des disques
SCSI. Mais le DMA c'est un autre débat, bien plus complexe encore.