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 lon appelle
le "Chipset" ("ensemble de composants" en français,
regroupés au sein d1 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 lentrée correspondant
à lIRQ 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
:
Ø
How
to Specify a Specific or Third-Party HAL During Windows 2000 Setup
Pour les plus fous :
Ø
How
to Troubleshoot Windows 2000 Hardware Abstraction Layer Issues
f) Les IRQ sous W2K sur des PCs ACPI
en mode APIC
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
entre Claude et Dan
Claude : 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 ?
Dan : 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.
Claude : 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.
Dan : 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
Claude, 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.
Claude : 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.
Dan : 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...
Claude : Et comment
se passe l'attribution des IRQs pour les slots AGP ?
Dan : 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).
Claude : 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 ?
Dan : 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 !
Claude : 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é ?
Dan : 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.
Daniel Millet (juin 2001- révisé juillet 2001)
|