Comprendre l’architecture des PC

Comprendre pour préparer le support par le noyau Linux

Présentation…

Afin de compiler un noyau ( « kernel » ) Linux en toute conscience et comprendre pourquoi il doit être « comme-ci ou comme-ça », nous allons étudier quelques principes de bases de l’architecture des cartes mères compatibles PC. Nous allons définir des termes techniques souvent entendus, mais parfois sans en comprendre le sens ( le discours commercial fait des ravages, en mettant plus en avant l’image et le « prestige », plutôt que la compréhension et le sens des choses ), et par l’occasion, lever quelques confusions faites régulièrement l’association trop directement faites entre les fonctionnalités les plus intriquées.

Raccourci éventuel

Ces pages au sujet des aspects matériels pourront être omis en première lecture, et si vous le souhaiter, vous pouvez passer directement à la suite concernant les aspects systèmes et logiciels d’une installation à base de noyau Linux : Le processus permanent init 

Les principaux termes pour parler des cartes mères PC

Voici un aperçu des termes que nous allons discuter ici ( passez le curseur de la souri au dessus d’un sigle pour avoir sa définition ) :

  • Bus ISA
  • Bus EISA
  • Connecteurs et bus PCI
  • Ports AGP
  • Bus USB
  • Connecteurs PnP Plug and Play ou Plug'n Play )
  • Connecteurs pour périphériques Hot-Plug ( connectable à chaud )
  • Connecteurs PCMCIA
  • Carte mère APM
  • Carte mère ACPI
  • Contrôleur IDE
  • Contrôleur EIDE
  • Contrôleur SCSI

Les bus en général

Le bus de la carte mère ( à ne pas confondre avec le bus du processeur, même si leurs rôles sont comparables ), permet au composants et au périphériques de communiquer avec le processeur, et parfois même de communiquer directement entre eux ou avec la mémoire, sans passer par le processeur ( ce qui accélère les opérations qui ne passent plus par un intermédiaire ).

Les bus et connecteurs ISA ou EISA , PCI, AGP et PCMCIA

Les bus ISA sont assez anciens, puisqu’ils sont apparus en 1981 avec les tout premiers PC d’IBM. Quelques années plus tard, en 1988 environ, sont arrivés les bus EISA, qui étaient des extensions plus rapides des bus ISA. On désigne également par « carte ISA », les cartes de périphériques pouvant êtres connectées à un bus ISA ( par extension de sens, un peu comme on parle du bureau pour désigner la pièce où est rangé le meuble qu’on appel un bureau ). Les bus EISA acceptaient les cartes conçues pour les bus ISA, et pour cette raison qu’ils étaient compatibles, on parlait le plus souvent de bus ISA, pour parler indistinctement du bus ISA ou EISA.

On entend souvent dire ça-et-là que les bus ISA ont totalement disparu. Cette affirmation est totalement incompréhensible tant elle est fausse ( par ignorance ). Les bus ISA existent toujours et on les trouve même encore sur les machines de bureau récentes. De 1981 à 2007, ces bus ISA auront vécu donc une longue histoire ; ce qui est exceptionnel dans le monde de l’informatique.

Vu leur importances, ces deux bus devront êtres supportés par notre noyau Linux. Et on maintiendra ce support même pour les machine les plus récentes ne disposant plus de bus ISA, car pour ces machines à grande capacité de mémoire, les quelques kilo-octets consommés par ce support, ne sont que poussières.

Les bus PCI

Les bus PCI, qui apparurent avec les processeurs Intel Pentium, sont différents des bus ISA. Bien sûr ils ont été conçus pour êtres plus rapides, mais ils ont des fonctionnalités différentes également. Le bus PCI permet aux périphériques de communiquer directement entre-eux, ou de communiquer directement avec la mémoire. Il faut tout de même noter à ce sujet, qu’une certaine communication directe avec la mémoire étaient déjà possible avant, même sur les machines à bus ISA, par l’intermédiaire de ce que l’on appel le DMA Direct Memory Acces, c’est à dire « Accès Direct à la Mémoire » ). Mais nous n’entrerons pas dans ce détail. Notez seulement que même avec le PCI, l’accès direct à la mémoire repose toujours le DMA, et comme souvent donc, c’est une exemple d’évolution technologique reposant sur la technologie précédente. Cependant, cette possibilité offerte par le bus PCI, de faire communiquer les composants directement entres-eux étaient, elle, totalement nouvelle.

C’est également avec le PCI qu’est apparu cette fonctionnalité nommée Plug and Play, ou encore PnP ( que nous définirons plus loin dans cette page ). Du moins, pour être juste, c’est à cette époque que le PnP a été démocratisé, car la fonctionnalité PnP peut fonctionner également avec les périphériques connectés à un bus ISA, et sans qu’aucun bus PCI ne soit présent. Nous y reviendrons plus loin.

Comme pour le DMA, qui existait déjà avec le bus ISA, le PnP existait donc également avec le bus ISA. Et comme la communication directe entre périphériques fût par contre une innovation du PCI en propre, la fonctionnalité Hot-Plug ( voir plus loin ), a été spécifiquement introduite avec le PCI, bien qu’il existe une forme de lien entre le PnP et le Hot-Plug.

Le bus PCI est spécifique de certaines machines, et n’existe donc pas sur les plus anciennes. Pour cette raison, on créera des noyau Linux avec support PCI et d’autres sans support PCI. Mais par contre, les noyaux avec support du PCI, devront également supporter l’ISA. Nous aurons donc : ISA ou alors PCI combiné à ISA.

Les autres bus : AGP, PCMCIA

Les autres bus, tels que AGP et PCMCIA, sont pour l’instant à part. Le processeur ne communique pas directement avec eux, car il n’y est pas lié. En conséquence, ils ne sont pas gouvernés par le processeur, et bien qu’ils fassent partie de la carte mère, ils ne concernent pas le système d’exploitation ou le logiciel ( système d’exploitation et logiciels qui évoluent dans le processeur ). Pour cette raison, bien que le noyau Linux puisse fonctionner sur des systèmes équipés de bus AGP et PCMCIA, il n’a pas besoin de support pour ces bus, car ces bus sont connectés à un bus PCI, et c’est avec le bus PCI que le processeur communique.

Le bus AGP est ainsi connecté au bus PCI et à la carte graphique ( il fait un pont entre les deux ), et le bus PCMCIA, qui existe généralement sur les ordinateurs portables, mais pas seulement, est connecté aux extensions comme les lecteurs de carte mémoire ( comme les cartes mémoire des appareils photos numériques ) d’un coté, et au bus PCI de l’autre coté. Les bus AGP est PCMCIA sont donc dédiés à des périphériques particulier : carte graphique pour l’AGP et extensions ou carte mémoire, pour le PCMCIA. D’ailleurs, le bus PCI se trouvait lui-même dans cette situation à ses propres débuts : il était réservé aux cartes graphiques, et servait de pont entre le bus ISA et la carte graphique. Il se peut donc qu’un jour le bus AGP ou PCMCIA finissent eux aussi par servir de bus principal ( bus central ), et le jour où ceci se produira, il y aura nécessité pour le noyau Linux de les supporter directement. En effet, le jour où les bus AGP et PCMCIA communiqueront directement avec le processeur, alors le noyau Linux devra savoir les prendre en charge ; car n’oublions pas que ce que fait le processeur, c’est ce que lui commande le noyau et les applications. Mais il est fort probable que le bus PCI ait encore de beaux jours devant lui, et que comme le bus ISA, il ne disparaisse pas de si-tôt.

La gestion de l’énergie : APM et ACPI

On parle de BIOS ( le BIOS est petit programme principalement utilisé à l’allumage de l’ordinateur ) APM ou ACPI, pour parler d’un BIOS qui est capable de mettre plus ou moins en veille certains composants de la machine, lorsque celle-ci est sous-utilisée. L’effet le plus visible de cette fonction est la mise en veille des disques durs et l’extinction automatique de l’écran ( à ne pas confondre avec l’écran de veille ), tout ceci à-fin d’économiser l’énergie consommée, pour des questions environnementales, et également pour augmenter la durée de fonctionnement des ordinateurs portables.

Chaque composant et périphérique de la machine a ses propres manières d’économiser l’énergie et de se mettre en veille. Et plus la machine est complexe ( par le diversité de ces composants ), plus la gestion de l’économie de l’énergie orchestré par le BIOS ou le système d’exploitation sera complexe. Il existe deux standards actuellement ( d’autres viendront peut-être à l’avenir ) en ce domaine : l’APM et l’ACPI. L’APM, apparu dans les années 1990, est le plus ancien de ces deux standards, et il est donc le mieux supporté, le mieux connu et donc encore également le plus stable. Le noyau Linux supporte bien l’APM, mais moins bien l’ACPI. L’ACPI doit même être évité avec le noyau Linux, car il a été chez quelques personnes, la cause d’accidents matériels graves, allant même jusqu’à la destruction de certains composants de la machine, la rendant inutilisable. Notre noyau Linux ne devra donc supporter que l’APM et pas l’ACPI.

De plus, et bien que l’APM ne soit apparu que dans les année 1990, on maintiendra ce support même pour les noyaux destinés à des machines plus anciennes, car la prise en charge de l’APM ne consomme que peu d’espace mémoire. A savoir également que même les anciennes machines sont souvent équipées d’un écran pouvant se mettre en mode veille ( veille de l’écran, et non pas écran de veille ).

L’USB, le « Plug’n Play » et le « Hot-Plug »

Ces trois fonctionnalités, tout à fait différentes, sont volontairement mises ensemble dans ce chapitre, pour la raison qu’elles sont liées, et même tellement liées, qu’elles en sont souvent confondues ou trop directement liées, à tort. Nous allons d’abord les décrire séparément, puis souligner les raisons pour lesquels ces éléments sont souvent confondus, ce qui nous permettra de souligner leurs relations et de mettre en évidence les manières de ne pas les confondre.

L’USB est une connexion universelle, qui a remplacé depuis 2000 environ, un ensemble de connecteurs diversifiés ( port série et port parallèle ou PS/2 surtout ) et lents. L’USB remplace différents types de connecteurs par un seul, et se montre nettement plus rapide.

Le Plug and Play, qui signifie « Brancher et faire marcher », est un protocole de configuration automatique des périphériques. Depuis le Plug and Play, plus besoin de mettre les mains dans la machine pour configurer les périphériques ( seulement pour les mettre en place ), et encore moins besoin de jouer avec des interrupteurs ( les cavaliers ) mal documentés et aux effets souvent imprévisibles. Tout comme pour le protocole d’économie de l’énergie, le Plug and Play est mis en pratique par le BIOS, au démarrage de la machine, ou plus tard, par le système d’exploitation.

Le Hot-Plug, qui signifie « Brancher à chaud », signifie que l’on peut connecter des périphériques sur la machine, même lorsque celle-ci est allumée. C’est cette capacité qui est mise en œuvre, quand par exemple vous connectez un appareil photo numérique à une machine sous Windows, et que Windows vous ouvre automatiquement le dossier d’image de l’appareil photo. La plupart des périphériques Hot-Plug sont externes, mais certains peuvent même êtres internes ( comme les cartes PCMCIA par exemple ), allant jusqu’à la possibilité d’ajouter de la mémoire pendant que la machine est en fonctionnement ; mais cette dernière possibilité est tout de même réservée aux serveurs web et à certains types de machines professionnelles.

Pourquoi ces trois termes sont-ils souvent confondus ? Parce qu’ils sont étroitement liés dans la pratique. Ainsi, la possibilité de connecter un périphérique à chaud pendant que la machine est en fonctionnement Hot-Plug ), nécessite que ce périphérique puisse être configuré automatiquement, sans quoi son usage ne serait pas pratique ( c’est que l’on appel « améliorer l’expérience de l’utilisateur » ). Ensuite, la possibilité de connecter et déconnecter un périphérique librement, nécessite pour être confortable, que ce branchement se fasse sur un type de connecteur simple, universel, et dont les protocoles conviennent à une grande diversité de périphérique. C’est le rôle de l’USB. Et effectivement, les périphérique Hot-Plug et Plug and Play, sont souvent désignés, par abus de langage, sous le terme de « périphérique USB ».

De l’appréciation de ces différences, résultent certaines remarques : l’une ou l’autre de ces trois fonctions peut exister sur une machine qui ne dispose pas nécessairement de ces trois fonctions en même temps. Par exemple, et bien que ces fonctions soient apparues principalement en même temps que l’arrivé du PCI ( que nous avons vus précédemment ), certaines de ces fonctions existent sur des machines ne disposant pas de bus PCI. C’est le cas de l’USB, pour lequel trop de personnes ignorent qu’il existât et existe toujours, sur des machines organisées autour d’un bus ISA. On parle dans ce cas précis, de « ISA Plug and Play ». Le noyau Linux reconnais les périphériques Plug and Play sur les bus ISA. En fait, cela se comprend aisément : le Plug and Play est d’abord une affaire de protocole, et concerne donc principalement les périphériques d’un coté, et les programmes qui les gère de l’autre coté ( le BIOS et le noyau du système d’exploitation ). Ce protocole qui définie essentiellement des messages échangés ainsi que leur sémantique, peut aisément être transmis sur n’importe quel type de bus, et peut donc être passer par un bus ISA.

Le Hot-Plug, qui a plus d’implication technique et physique, nécessite lui un bus particulier : le PCI. Le bus ISA ne peut pas supporter la connexion à chaud, car il n’a pas été conçu à cette fin. Le noyau Linux, supporte le Hot-Plug aussi bien qu’il le fait pour le Plug and Play.

L’USB ne concerne lui pas, ni le bus, ni le BIOS ; le BIOS ne gère pas l’USB, il en est seulement client. On pourra donc à-priori, tout comme pour le Plug and Play, trouver de l’USB sur n’importe quel type de machine organisée autour de n’importe quel type de bus. Et effectivement, il existe des adaptateurs USB, tout comme il existe des adaptateur de connecteur de câble audio ou des adaptateurs de câble de télévision. Les adaptateurs USB fonctionnent sur le même principe : un connecteur double. Il existe par exemple des adaptateur USB pour les ports séries, pour les ports parallèle, ou encore des carte de prises USB qui se connectent sur un port PCI. Comme pour le Plug and Play, il faudra donc pouvoir supporter l’USB sur tous les types de machine.

Concernant le support de notre noyau pour ces fonctionnalités : nous configureront le support de l’USB et du Plug and Play pour tous les types de machines. Le Hot-Plug lui nécessite le PCI, et ne sera configuré que pour les noyaux destinés à fonctionner sur des machines disposant de bus PCI. On pourrait imaginer une implémentation du Hot-Plug même sur un bus ISA, mais cette implémentation devrait reposer sur le logiciel, par une scrutation fréquente des périphériques pour les tester, un peu comme le fait Windows pour le lecteur de CD-ROM. Mais Linux ne fonctionne pas comme Windows, et ne scrute par exemple pas la présence d’un disque dans le lecteur de CD-ROM. Il n’y a pas sous Linux de notion de Hot-Plug par scrutation.

Les contrôleurs de disque : IDE ou EIDE et SCSI ainsi que ATAPI

Finissons par une question qui n’est pas la moindre, qui appellera peu de commentaires, mais tout de même une relation inattendue avec les bus ISA.

IDE et EIDE ( une version étendue de IDE ), sont une norme pour les contrôleurs de disque dur et autres périphériques de stockage, comme les lecteurs de CD et CD-ROM et certains des derniers lecteurs de disquettes. On peut comprendre un contrôleur comme étant une interface, et plus précisément une interface de commandes ; un peu comme un panneau de commande, mais sur lequel agissent les logiciels, un panneau de commandes sans boutons. Le SCSI est lui aussi une interface pour les contrôleurs de disques et autres. Il est plus rapide que l’IDE, mais coute ( ou coutait ) également nettement plus cher, et était donc réservé à quelques machines professionnelles. Sa présence sur une machine grand publique est tellement rare que notre configuration du noyau Linux, destinée au grand publique, ne l’intégrera pas. Plus courant est l’ATAPI, qui utilise une interface IDE, mais avec un protocole similaire à celui de l’interface SCSI. L’ATAPI trouve un usage fréquent avec les lecteurs de CD IDE, ou encore avec les lecteurs Zip sur port parallèle ( oui, on peut simuler toute sorte d’interface sur le port parallèle, mais c’est évidement nettement plus lent ).

On trouvait les disques IDE et EIDE sur les machines architecturées autour d’un bus ISA ou EISA. Mais les disques IDE sont également présents sur les machines équipées de bus PCI. Ces machines voient généralement leurs disques IDE êtres connectés sur un bus ISA. Pour cette raison, nous configurerons le noyau pour le support ISA, même dans sa configuration destinée aux machines équipées de bus PCI, et cela, même si les bus ISA sur ces machines, semblent être utilisées comme des ponts, et non pas comme bus centrale ; le support sera recherché par soucis de fiabilité, car nous ignorons si dans cette configuration le noyau peut oui ou non accéder au bus ISA.