Un ordinateur n'est jamais un composant parfait et des pannes peuvent survenir de temps à autre. Ces pannes peuvent être logicielles (un logiciel qui plante ou qui a un bug) ou matérielles (un composant cesse de fonctionner ou qui donne un résultat faux). Elles peuvent ne se manifester qu’occasionnellement, tandis que d'autres sont des pannes permanentes. Dans des milieux comme l'aéronautique, les satellites, ou dans tout système dit critique, on doit limiter à presque rien l'impact des pannes et de leurs conséquences : des vies peuvent être en jeu. Pour cela, il existe des systèmes tolérants aux pannes, qui peuvent continuer de fonctionner même avec un ou plusieurs composants en panne.
La tolérance aux pannes se base sur la redondance : on duplique du matériel, des données, ou des logiciels en plusieurs exemplaires. Ainsi, si un exemplaire tombe en panne, les autres pourront prendre la relève. Ces solutions matérielles pour tolérer les pannes sont relativement couteuses, dupliquer du matériel n'étant pas sans cout. Aussi, la redondance ne s'utilise que quand le besoin de fiabilité est fort, typiquement dans les industries aéronautique, spatiale, ferroviaire, automobile et autres. Dans les ordinateurs, cette redondance peut prendre plusieurs formes :
Les architectures tolérantes aux pannes dupliquent du matériel, que ce soit des ordinateurs, des composants (processeurs, mémoires, disques durs), voire des portions de composants (cœurs de processeurs, unités de calcul). Si un composant tombe en panne, les autres continuent de fonctionner. Par exemple, on peut utiliser plusieurs ordinateurs identiques, qui font la même chose en parallèle. Si un ordinateur tombe en panne, les autres prendront le relais. On peut classer les techniques de redondances matérielles en deux :
La redondance matérielle passive.
Avec la redondance matérielle passive, tous les composants travaillent en parallèle : ils reçoivent les données en entrée, les traitent, et fournissent un résultat plus ou moins en même temps. La sortie des composants est reliée à un système qui se chargera de corriger les erreurs ou fautes en sortie, sans pour autant les détecter. Par exemple, on peut imaginer ce que cela donnerait avec des unités de calcul redondantes : toutes les unités de calcul recevraient les opérandes en même temps, feraient leurs calculs indépendamment les unes des autres, et fourniraient leur résultat à un système qui corrigerait d'éventuelles erreurs de calcul ou pannes.
Le vote à majorité.
Dans la plupart des cas, le système de correction des erreurs se base sur ce qu'on appelle un vote à majorité.
Avec le vote à majorité "classique", on choisit la valeur majoritaire parmi les différents résultats. Par exemple, prenons le cas avec 5 composants. Si un composant tombe en panne, les quatre autres donneront un résultat correct. Avec 4 sorties contre une, c'est le résultat correct qui l'emportera. Cette méthode ne fonctionne pas si le nombre de composants est pair, car on peut avoir autant de composants en panne que de composants fonctionnels, ce qui permet pas de dégager une majorité. Tant que plus de la moitié des composants n'a pas de panne, le vote à majorité donne systématiquement le bon résultat. Par exemple, utiliser 5 composants permet de résister à une panne de 2 composants, en utiliser 7 permet de résister à 3 composants en panne, etc.
Ce vote à majorité peut aussi s'effectuer non au niveau du résultat, mais au niveau des bits. Le vote à majorité s’effectue alors sur des bits de même poids, de la même colonne. Il existe des portes logiques spécifiquement conçues pour faire ce calcul, les "portes à majorité".
Des variantes de ce système de vote existent. Celles-ci consistent à prendre non pas le résultat ou bit majoritaire, mais seulement le plus fréquent (ou la médiane des différents résultats).
Implémentation.
Le circuit de vote à majorité est un point faillible du système : s'il tombe en panne, tout le système tombe en panne. Pour éviter cela, il est là possible de dupliquer le système de vote à majorité.
Le vote à majorité peut s'utiliser pour les communications avec la mémoire. Il peut notamment servir pour gérer les lectures ou écritures dans une mémoire, voire les deux. On peut aussi l'utiliser pour gérer les communications à l'intérieur d'un composant. Par exemple, on pourrait imaginer utiliser ces méthodes pour l'unité de calcul et les registres. Dans les schémas suivants, il suffirait de remplacer la mémoire par les bancs de registre et le processeur par l'unité de calcul. Bref, les possibilités sont relativement nombreuses.
La redondance matérielle active.
La redondance active ne masque pas les pannes comme peut le faire la redondance passive. Elle va détecter les pannes et passer le relais du composant en panne à un composant fonctionnel. Ces méthodes se déclinent en deux grandes catégories :
La duplication avec comparaison.
Une première technique de redondance active se contente de dupliquer le composant en un composant principal et un composant de réserve. On peut alors détecter une erreur en comparant la sortie des deux composants : si elle est différente, on est certain qu'il y a eu une erreur (on suppose qu'il n'y en a pas eu en cas d'accord entre les deux composants). Une fois l'erreur détectée, on ne peut cependant pas la corriger. Le premier processeur à utiliser cette méthode était l'EDVAC, dans les années 1950. Il comprenait deux unités de calcul, et continuait d’exécuter son programme tant que les deux unités de calcul donnaient des résultats identiques. En cas de non-agrément entre les deux unités de calcul, le processeur ré-exécutait l'instruction fautive.
On peut améliorer ce circuit afin qu'il puisse corriger l'erreur. Pour cela, on rajoute un troisième composant de réserve, dont on suppose qu'il ne sera pas en panne. Si une erreur est détectée par le comparateur, on préfère utiliser la sortie du composant de réserve.
Le "Standby Sparing".
Avec cette méthode, le système de correction des pannes choisit un résultat parmi ceux qu'il reçoit, et considère que ce résultat est le bon. En somme, il choisit la sortie d'un composant parmi toutes les autres : c'est donc un multiplexeur ou un switch. Quand le composant choisit tombe en panne, le multiplexeur/switch se reconfigure et choisit alors une autre sortie (celle d'un autre composant). Reste que cette configuration du switch demande de détecter les pannes, afin de commander le multiplexeur switch. On trouve donc, pour chaque composant, un système de détection des pannes, ainsi qu'un circuit combinatoire qui commande le multiplexeur/switch.
Le "Pair And Spare".
Il faut noter que les deux techniques précédentes sont loin d'être incompatibles. On peut notamment les utiliser de concert : la technique de duplication par comparaison peut être utilisée pour détecter les erreurs, et la technique du Standby Sparing pour effectuer la correction. On peut aussi faire l'inverse.
Le "Spare and Pair".
Un exemple typique est l'architecture Stratus (aussi connue IBM/System 88). Celui-ci contient quatre processeurs logiques qui font leurs calculs en parallèle : le résultat est choisi parmi les processeurs sans pannes. Une panne ou erreur est détectée avec duplication par comparaison : chaque processeur logique est dupliqué et une panne est détectée si les deux processeurs sont en désaccord sur le résultat. L'ensemble contient donc huit processeurs.
La redondance matérielle hybride.
Les méthodes de redondance hybride mélangent les techniques vues plus haut. Il en existe grosso-modo trois principales :
La redondance à triple duplex.
Avec la redondance à triple duplex, plusieurs composants qui utilisent la duplication avec comparaison sont suivis par une porte à majorité. Le principe de cette technique est simple : si un composant est en panne, alors son résultat ne doit pas être pris en compte dans le calcul du vote à majorité.
La redondance passive auto-correctrice.
La redondance passive auto-correctrice est similaire à la technique précédente, à un détail près : on n'utilise pas vraiment la duplication par comparaison de la même manière. Le principe de cette technique est le même que la précédente : si un composant est en panne, alors son résultat ne doit pas être pris en compte. Sauf que cette fois-ci, on détecte une panne en comparant le résultat du composant avec le vote majoritaire : il y a une panne si les deux ne sont pas identiques. Ainsi, au lieu d'avoir deux composants en entrée du comparateur, on n'en aura qu'un seul : l'autre entrée du comparateur sera reliée à la sortie de la porte à majorité.
La redondance passive avec composants de réserve.
Avec la redondance passive avec composants de réserve, plusieurs modules qui utilisent la redondance active sont suivis par un système de vote à majorité.