Changement de banque - Bank switching

Une carte mémoire hypothétique de la mémoire à commutation de banque pour un processeur qui ne peut adresser que 64 Ko. Ce schéma montre 200 Ko de mémoire, dont seulement 64 Ko sont accessibles à tout moment par le processeur. Le système d'exploitation doit gérer l'opération de changement de banque pour s'assurer que l'exécution du programme peut continuer lorsqu'une partie de la mémoire n'est pas accessible au processeur.

La commutation de banque est une technique utilisée dans la conception informatique pour augmenter la quantité de mémoire utilisable au-delà de la quantité directement adressable par les instructions du processeur . Il peut être utilisé pour configurer un système différemment à différents moments ; par exemple, une ROM requise pour démarrer un système à partir d'une disquette peut être désactivée lorsqu'elle n'est plus nécessaire. Dans les systèmes de jeux vidéo, le changement de banque a permis de développer des jeux plus grands pour jouer sur des consoles existantes.

La commutation de banque trouve son origine dans les systèmes de mini-ordinateurs . De nombreux microcontrôleurs et microprocesseurs modernes utilisent la commutation de banque pour gérer la mémoire à accès aléatoire , la mémoire non volatile, les périphériques d'entrée-sortie et les registres de gestion du système dans les petits systèmes embarqués . La technique était courante dans les systèmes de micro - ordinateurs 8 bits . La commutation de banque peut également être utilisée pour contourner les limitations de la largeur du bus d'adresse, où certaines contraintes matérielles empêchent l'ajout direct de plus de lignes d'adresse, et pour contourner les limitations dans l' ISA , où les adresses générées sont plus étroites que la largeur du bus d'adresse. Certains microprocesseurs orientés contrôle utilisent une technique de commutation de banque pour accéder aux E/S internes et aux registres de contrôle, ce qui limite le nombre de bits d'adresse de registre qui doivent être utilisés dans chaque instruction.

Contrairement à la gestion de la mémoire par pagination , les données ne sont pas échangées avec un périphérique de stockage de masse comme le stockage sur disque . Les données restent en stockage inactif dans une zone de mémoire qui n'est actuellement pas accessible au processeur (bien qu'elle puisse être accessible à l'affichage vidéo, au contrôleur DMA ou à d'autres sous-systèmes de l'ordinateur) sans l'utilisation d'instructions de préfixe spéciales.

Technique

La commutation de banque peut être considérée comme un moyen d'étendre l' espace d'adressage des instructions du processeur avec un certain registre. Exemples:

  • Le système de suivi d'un processeur avec une adresse de 12 bits a un bus d'adresse de 15 bits, mais il n'y a aucun moyen de spécifier directement les trois bits de poids fort sur le bus d'adresse. Des registres de banque internes peuvent être utilisés pour fournir ces bits.
  • Le système de suivi d'un processeur avec une adresse de 15 bits a un bus d'adresse de 18 bits, mais les instructions héritées n'ont que 15 bits d'adresse ; des registres de banque internes peuvent être utilisés pour fournir ces bits. Certaines nouvelles instructions peuvent spécifier explicitement la banque.
  • Un processeur avec un bus d'adresse externe 16 bits ne peut adresser que 2 16  = 65536 emplacements mémoire. Si un verrou externe était ajouté au système, il pourrait être utilisé pour contrôler lequel des deux ensembles de dispositifs de mémoire, chacun avec 65536 adresses, pourrait être accédé. Le processeur peut changer le jeu actuellement utilisé en réglant ou en effaçant le bit de verrouillage.
    Le verrou peut être activé ou désactivé par le processeur de plusieurs manières ; une adresse mémoire particulière peut être décodée et utilisée pour contrôler le verrou, ou, dans les processeurs avec des adresses E/S décodées séparément , une adresse de sortie peut être décodée. Plusieurs bits de contrôle de commutation de banque pourraient être rassemblés dans un registre, doublant approximativement les espaces mémoire disponibles avec chaque bit supplémentaire dans le registre.
    Comme le verrou (ou registre) de sélection de banque externe n'est pas directement connecté au compteur de programme du processeur, il ne change pas automatiquement d'état lorsque le compteur de programme déborde ; ceci ne peut pas être détecté par la bascule externe puisque le compteur de programme est un registre interne du processeur. La mémoire supplémentaire n'est pas disponible de manière transparente pour les programmes. Les registres internes du processeur restent à leur longueur d'origine, de sorte que le processeur ne peut pas couvrir directement toute la mémoire à commutation de banque, par exemple en incrémentant un registre interne. Au lieu de cela, le processeur doit explicitement effectuer une opération de changement de banque pour accéder à des objets mémoire volumineux. Il existe d'autres limites. En général, un système de changement de banque aura un bloc de mémoire de programme commun à toutes les banques ; quelle que soit la banque actuellement active, pour une partie de l'espace d'adressage, un seul ensemble d' emplacements mémoire sera utilisé. Cette zone serait utilisée pour contenir le code qui gère les transitions entre les banques, ainsi que pour traiter les interruptions .

Souvent, une seule base de données s'étend sur plusieurs banques, et le besoin se fait sentir de déplacer les enregistrements entre les banques (comme pour le tri). Si une seule banque est accessible à la fois, il serait nécessaire de déplacer chaque octet deux fois : d'abord dans la zone de mémoire commune, effectuer un changement de banque vers la banque de destination, puis déplacer réellement l'octet dans la banque de destination. Si l'architecture de l'ordinateur dispose d'un moteur DMA ou d'un deuxième processeur et que ses restrictions d'accès aux banques diffèrent, le sous-système pouvant transférer des données directement entre les banques doit être utilisé.

Contrairement à un schéma de mémoire virtuelle , la commutation de banque doit être explicitement gérée par le programme ou le système d'exploitation en cours d'exécution ; le matériel du processeur ne peut pas détecter automatiquement que des données qui ne sont pas actuellement mappées dans la banque active sont nécessaires. Le programme d'application doit garder une trace de la banque de mémoire qui contient une donnée requise, puis appeler la routine de commutation de banque pour rendre cette banque active. Cependant, la commutation de banque peut accéder aux données beaucoup plus rapidement que, par exemple, la récupération des données à partir du stockage sur disque.

Utilisation du micro-ordinateur

Le commutateur de sélection de banque sur la carte mémoire Cromemco a été utilisé pour mapper la mémoire dans une ou plusieurs des 8 banques distinctes de 64 Ko.

Les processeurs à adressage 16 bits ( 8080 , Z80 , 6502 , 6809 , etc.) couramment utilisés dans les premières consoles de jeux vidéo et les ordinateurs personnels ne peuvent adresser directement que 64  Ko . Les systèmes avec plus de mémoire devaient diviser l'espace d'adressage en un certain nombre de blocs qui pouvaient être mappés dynamiquement en parties d'un espace d'adressage plus grand. La commutation de banque a été utilisée pour obtenir cet espace d'adressage plus important en organisant la mémoire en banques distinctes pouvant atteindre 64 Ko chacune. Des blocs de différentes tailles ont été commutés dans et hors via des registres de sélection de banque ou des mécanismes similaires. Cromemco a été le premier fabricant de micro-ordinateurs à utiliser la commutation de banque, prenant en charge 8 banques de 64 Ko dans ses systèmes.

Lors de l'utilisation de la commutation de banque, une certaine prudence était requise afin de ne pas corrompre la gestion des appels de sous - programme , des interruptions , de la pile de la machine , etc. Alors que le contenu de la mémoire temporairement désactivé du CPU était inaccessible au processeur, il pouvait être utilisé par d'autres matériels, tels que l'affichage vidéo, le DMA , les périphériques d'E/S , etc. CP/M-80 3.0 sorti en 1983 et le Les TRS-80 basés sur le Z80, les modèles 4 et II prenaient en charge la commutation de banque pour permettre l'utilisation de plus de 64 Ko de mémoire que le processeur 8080 ou Z80 pouvait traiter.

La commutation de banque a permis d'ajouter de la mémoire et des fonctions supplémentaires à une conception d'ordinateur sans les dépenses et l'incompatibilité de passer à un processeur avec un bus d'adresse plus large . Par exemple, le C64 utilisait la commutation de banque pour permettre un total de 64 Ko de RAM tout en fournissant également une ROM et des E/S mappées en mémoire . L' Atari 130XE pourrait permettre à ses deux processeurs (le 6502 et l' ANTIC ) d'accéder à des banques de RAM séparées, permettant aux programmeurs de créer de grandes surfaces de jeu et d'autres objets graphiques sans utiliser la mémoire visible du CPU.

Microcontrôleurs

Les microcontrôleurs (microprocesseurs avec un matériel d'entrée/sortie important intégré sur la puce) peuvent utiliser la commutation de banque, par exemple, pour accéder à plusieurs registres de configuration ou à la mémoire de lecture/écriture sur puce. Un exemple est le microcontrôleur PIC . Cela permet aux mots d'instruction courts d'économiser de l'espace pendant l'exécution du programme de routine, au prix d'instructions supplémentaires nécessaires pour accéder à des registres relativement peu utilisés, tels que ceux utilisés pour la configuration du système au démarrage.

Le PC IBM

Mémoire étendue dans le PC IBM

En 1985, les sociétés Lotus et Intel ont introduit la spécification de mémoire étendue (EMS) 3.0 pour une utilisation dans les ordinateurs compatibles IBM PC exécutant MS-DOS . Microsoft a rejoint les versions 3.2 en 1986 et 4.0 en 1987 et la spécification est devenue connue sous le nom de Lotus-Intel-Microsoft EMS ou LIM EMS. C'est une forme de technique de commutation de banque qui permet plus que les 640 Ko de RAM définis par l'architecture originale du PC IBM, en la laissant apparaître par morceaux dans une "fenêtre" de 64 Ko située dans la zone mémoire supérieure . Les 64 Ko sont divisés en quatre "pages" de 16 Ko qui peuvent être commutées indépendamment l'une de l'autre. Certains jeux informatiques l' utilisaient, et bien qu'EMS soit obsolète, la fonctionnalité est aujourd'hui émulée par les systèmes d'exploitation Microsoft Windows ultérieurs pour fournir une rétrocompatibilité avec ces programmes.

La dernière spécification de mémoire étendue (XMS), également désormais obsolète, est une norme pour, en principe, simuler la commutation de banque pour la mémoire supérieure à 1 Mo (appelée " mémoire étendue "), qui n'est pas directement adressable dans le mode réel des processeurs x86 dans que MS-DOS exécute. XMS permet à la mémoire étendue d'être copiée n'importe où dans la mémoire conventionnelle, de sorte que les limites des "banques" ne sont pas fixes, mais à tous les autres égards, cela fonctionne comme le changement de banque d' EMS , du point de vue d'un programme qui l'utilise. Les versions ultérieures de MS-DOS (à partir de la version 5.0 environ) incluaient le pilote EMM386, qui simule la mémoire EMS à l'aide de XMS, permettant aux programmes d'utiliser la mémoire étendue même s'ils ont été écrits pour EMS. Microsoft Windows émule également XMS, pour les programmes qui en ont besoin.

Consoles de jeux vidéo

La commutation de banque a également été utilisée dans certaines consoles de jeux vidéo . L' Atari 2600 , par exemple, ne pouvait traiter que 4 Ko de ROM, donc plus tard , les cartouches de jeu 2600 contenaient leur propre matériel de commutation de banque afin de permettre l'utilisation de plus de ROM et ainsi permettre des jeux plus sophistiqués (via plus de code de programme et, également importantes, de plus grandes quantités de données de jeu telles que des graphiques et différentes étapes de jeu). Le système de divertissement Nintendo contenait un 6502 modifié, mais ses cartouches contenaient parfois un mégabit ou plus de ROM, adressé via une commutation de banque appelée contrôleur multi-mémoire . Les cartouches Game Boy utilisaient une puce appelée MBC (Memory Bank Controller), qui offrait non seulement une commutation de banque ROM, mais également une commutation de banque SRAM de cartouche , et même un accès à des périphériques tels que des liaisons infrarouges ou des moteurs de grondement. La commutation de banque était encore utilisée sur les systèmes de jeu ultérieurs. Plusieurs cartouches Sega Mega Drive , telles que Super Street Fighter II, faisaient plus de 4 Mo et nécessitaient l'utilisation de cette technique (4 Mo étant la taille d'adresse maximale). L' ordinateur de poche GP2X de Gamepark Holdings utilise la commutation de banque afin de contrôler l'adresse de début (ou décalage de mémoire) pour le deuxième processeur.

Traitement vidéo

Dans certains types d' écrans vidéo informatiques , la technique connexe de double mise en mémoire tampon peut être utilisée pour améliorer les performances vidéo. Dans ce cas, pendant que le processeur met à jour le contenu d'un ensemble d'emplacements de mémoire physique, le matériel de génération vidéo accède et affiche le contenu d'un deuxième ensemble. Lorsque le processeur a terminé sa mise à jour, il peut signaler au matériel d'affichage vidéo d'échanger les banques actives, de sorte que la transition visible à l'écran soit exempte d'artefacts ou de distorsion. Dans ce cas, le processeur peut avoir accès à toute la mémoire à la fois, mais le matériel d'affichage vidéo est commuté en banque entre les parties de la mémoire vidéo. Si les deux (ou plusieurs) banques de mémoire vidéo contiennent des images légèrement différentes, un cycle rapide (retournement de page) entre elles peut créer une animation ou d'autres effets visuels que le processeur pourrait autrement être trop lent à exécuter directement.

Techniques alternatives et successeurs

La commutation de banque a ensuite été supplantée par la segmentation dans de nombreux systèmes 16 bits , qui ont à leur tour cédé la place à des unités de gestion de mémoire de pagination . Dans les systèmes embarqués, cependant, la commutation de banque est encore souvent utilisée pour sa simplicité, son faible coût et souvent une meilleure adaptation à ces contextes qu'à l'informatique à usage général.

Voir également

Les références

Liens externes