La conmutación de bancos es una técnica utilizada en el diseño de computadoras para aumentar la cantidad de memoria utilizable más allá de la cantidad directamente direccionable por las instrucciones del procesador [1] . Se puede utilizar para configurar un sistema de manera diferente en diferentes momentos; por ejemplo, una ROM necesaria para iniciar un sistema desde un disquete podría cambiarse cuando ya no se necesita. En los sistemas de videojuegos, la conmutación de bancos permitió desarrollar juegos más grandes para jugar en las consolas existentes.
La conmutación de bancos se originó en los sistemas de minicomputadoras . [2] Muchos microcontroladores y microprocesadores modernos utilizan la conmutación de bancos para gestionar la memoria de acceso aleatorio , la memoria no volátil, los dispositivos de entrada-salida y los registros de gestión del sistema en pequeños sistemas integrados . La técnica era común en los sistemas de microcomputadoras de 8 bits . La conmutación de bancos también se puede utilizar para evitar las limitaciones en el ancho del bus de direcciones, donde alguna restricción de hardware impide la adición directa de más líneas de dirección, y para evitar las limitaciones en el ISA , donde las direcciones generadas son más estrechas que el ancho del bus de direcciones. Algunos microprocesadores orientados al control utilizan una técnica de conmutación de bancos para acceder a los registros de control y E/S internos, lo que limita la cantidad de bits de dirección de registro que se deben utilizar en cada instrucción.
A diferencia de la administración de memoria mediante paginación , los datos no se intercambian con un dispositivo de almacenamiento masivo como el almacenamiento en disco . Los datos permanecen en un almacenamiento inactivo en un área de memoria a la que no tiene acceso el procesador (aunque puede tener acceso la pantalla de video, el controlador DMA u otros subsistemas de la computadora) sin el uso de instrucciones de prefijo especiales.
La conmutación de bancos puede considerarse como una forma de ampliar el espacio de direcciones de las instrucciones del procesador con algún registro. Ejemplos:
A menudo, una única base de datos abarca varios bancos y surge la necesidad de mover registros entre ellos (por ejemplo, para ordenarlos). Si solo se puede acceder a un banco a la vez, sería necesario mover cada byte dos veces: primero al área de memoria común, realizar un cambio de banco al banco de destino y, luego, mover el byte al banco de destino. Si la arquitectura de la computadora tiene un motor DMA o una segunda CPU y sus restricciones de acceso a los bancos difieren, se debe utilizar el subsistema que pueda transferir datos directamente entre bancos.
A diferencia de un esquema de memoria virtual , el cambio de banco debe ser gestionado explícitamente por el programa en ejecución o el sistema operativo; el hardware del procesador no puede detectar automáticamente que se requieren datos que no están asignados actualmente al banco activo. El programa de aplicación debe realizar un seguimiento de qué banco de memoria contiene un dato requerido y luego llamar a la rutina de cambio de banco para activar ese banco. [6] Sin embargo, el cambio de banco puede acceder a los datos mucho más rápido que, por ejemplo, recuperar los datos del almacenamiento en disco.
Los procesadores con direccionamiento de 16 bits ( 8080 , Z80 , 6502 , 6809 , etc.) comúnmente utilizados en las primeras consolas de videojuegos y computadoras hogareñas pueden direccionar directamente solo 64 KB . Los sistemas con más memoria tuvieron que dividir el espacio de direcciones en una cantidad de bloques que pudieran mapearse dinámicamente en partes de un espacio de direcciones más grande. La conmutación de bancos se utilizó para lograr este espacio de direcciones más grande organizando la memoria en bancos separados de hasta 64 KB cada uno. [8] Los bloques de varios tamaños se conmutaban dentro y fuera a través de registros de selección de banco o mecanismos similares. Cromemco fue el primer fabricante de microcomputadoras en utilizar la conmutación de bancos, admitiendo 8 bancos de 64 KB en sus sistemas. [9]
Al utilizar la conmutación de bancos, se requería cierta precaución para no corromper el manejo de llamadas de subrutinas , interrupciones , la pila de la máquina , etc. Si bien el contenido de la memoria que se conmutaba temporalmente desde la CPU era inaccesible para el procesador, podía ser utilizado por otro hardware, como una pantalla de video, DMA , dispositivos de E/S , etc. CP/M-80 3.0 lanzado en 1983 y los TRS-80 basados en Z80, el Modelo 4 y el Modelo II, admitían la conmutación de bancos para permitir el uso de más de los 64 KB de memoria que el procesador 8080 o Z80 podía abordar. [10]
La conmutación de bancos permitió añadir memoria y funciones adicionales al diseño de un ordenador sin el gasto y la incompatibilidad que supone cambiar a un procesador con un bus de direcciones más amplio . Por ejemplo, el C64 utilizó la conmutación de bancos para permitir una RAM total de 64 KB y, al mismo tiempo, proporcionar ROM y E/S mapeadas en memoria . El Atari 130XE podía permitir que sus dos procesadores (el 6502 y el ANTIC ) accedieran a bancos de RAM separados, lo que permitía a los programadores crear grandes campos de juego y otros objetos gráficos sin utilizar la memoria visible para la CPU.
Los microcontroladores (microprocesadores con un hardware de entrada/salida significativo integrado en el chip) pueden utilizar la conmutación de bancos, por ejemplo, para acceder a múltiples registros de configuración o a la memoria de lectura/escritura en el chip. Un ejemplo es el microcontrolador PIC . Esto permite utilizar palabras de instrucción cortas para ahorrar espacio durante la ejecución rutinaria del programa, a costa de instrucciones adicionales necesarias para acceder a registros que se utilizan con poca frecuencia, como los que se utilizan para la configuración del sistema al inicio.
En 1985, las empresas Lotus e Intel introdujeron la Especificación de memoria expandida (EMS) 3.0 para su uso en ordenadores compatibles con IBM PC que ejecutasen MS-DOS . Microsoft se unió para las versiones 3.2 en 1986 y 4.0 en 1987 y la especificación pasó a conocerse como Lotus-Intel-Microsoft EMS o LIM EMS. [6] [11] [12] Es una forma de técnica de conmutación de bancos que permite más de los 640 KB de RAM definidos por la arquitectura original de IBM PC, al dejar que aparezca por partes en una "ventana" de 64 KB ubicada en el Área de memoria superior . [13] Los 64 KB se dividen en cuatro "páginas" de 16 KB que se pueden cambiar de forma independiente. Algunos juegos de ordenador hicieron uso de esto, y aunque EMS está obsoleto, la característica es hoy en día emulada por los sistemas operativos Microsoft Windows posteriores para proporcionar compatibilidad con versiones anteriores de esos programas.
La posterior especificación de memoria extendida (XMS), también ahora obsoleta, es un estándar para, en principio, simular la conmutación de bancos para memoria por encima de 1 MB (llamada " memoria extendida "), que no es directamente direccionable en el modo real de los procesadores x86 en los que se ejecuta MS-DOS. XMS permite copiar la memoria extendida en cualquier lugar de la memoria convencional, por lo que los límites de los "bancos" no son fijos, pero en todos los demás aspectos funciona como la conmutación de bancos de EMS , desde la perspectiva de un programa que lo utiliza. Las versiones posteriores de MS-DOS (a partir de la versión 5.0) incluyeron el controlador EMM386, que simula la memoria EMS utilizando XMS, lo que permite que los programas utilicen memoria extendida incluso si fueron escritos para EMS. Microsoft Windows también emula XMS, para aquellos programas que lo requieren.
La conmutación de bancos también se utilizó en algunas consolas de videojuegos . [14] El Atari 2600 , por ejemplo, solo podía direccionar 4 KB de ROM, por lo que los cartuchos de juego 2600 posteriores contenían su propio hardware de conmutación de bancos para permitir el uso de más ROM y, por lo tanto, permitir juegos más sofisticados (a través de más código de programa e, igualmente importante, mayores cantidades de datos de juego como gráficos y diferentes etapas de juego). [15] El Nintendo Entertainment System contenía un 6502 modificado , pero sus cartuchos a veces contenían un megabit o más de ROM, direccionado a través de una conmutación de bancos llamada Controlador Multi-Memoria . Los cartuchos de Game Boy usaban un chip llamado MBC (Controlador de Banco de Memoria), que no solo ofrecía conmutación de bancos de ROM, sino también conmutación de bancos de SRAM de cartucho , e incluso acceso a periféricos como enlaces infrarrojos o motores retumbantes. La conmutación de bancos todavía se usaba en sistemas de juegos posteriores. Varios cartuchos de Sega Mega Drive , como Super Street Fighter II, tenían más de 4 MB de tamaño y requerían el uso de esta técnica (4 MB es el tamaño máximo de dirección). La consola portátil GP2X de Gamepark Holdings utiliza conmutación de banco para controlar la dirección de inicio (o desplazamiento de memoria) del segundo procesador.
En algunos tipos de pantallas de video de computadora , se puede utilizar la técnica relacionada de doble almacenamiento en búfer para mejorar el rendimiento del video. En este caso, mientras el procesador actualiza el contenido de un conjunto de ubicaciones de memoria física, el hardware de generación de video accede y muestra el contenido de un segundo conjunto. Cuando el procesador ha completado su actualización, puede indicar al hardware de visualización de video que intercambie los bancos activos, de modo que la transición visible en la pantalla esté libre de artefactos o distorsión. En este caso, el procesador puede tener acceso a toda la memoria a la vez, pero el hardware de visualización de video cambia de banco entre partes de la memoria de video. Si los dos (o más) bancos de memoria de video contienen imágenes ligeramente diferentes, el ciclo rápido (cambio de página) entre ellos puede crear animaciones u otros efectos visuales que, de lo contrario, el procesador podría ser demasiado lento para llevar a cabo directamente.
La conmutación de bancos fue suplantada posteriormente por la segmentación en muchos sistemas de 16 bits , que a su vez dio paso a las unidades de gestión de memoria de paginación . Sin embargo, en los sistemas integrados, la conmutación de bancos todavía se utiliza a menudo por su simplicidad, bajo costo y, a menudo, mejor adaptación a esos contextos que a la computación de propósito general.
En dichas tarjetas se utiliza un interruptor DIP de ocho posiciones para seleccionar uno (o más) de los ocho bancos de memoria.
Con la selección de banco de memoria, el espacio de memoria se organiza en varios bancos separados de hasta 64 K cada uno.
Cromemco fue el primer fabricante de microcomputadoras en refinar y explotar la conmutación de bancos.