La conmutación de bancos de memoria[1] es una técnica utilizada en el campo del diseño de computadoras para aumentar la cantidad de memoria principal accesible. Por ejemplo, una computadora que utilice una unidad central de procesamiento (CPU) con un bus de direcciones de 16 bits y un bus de datos de 8 bits es capaz de direccionar directamente 216 bytes de memoria (64 KiB). Sin embargo, cuando una computadora con esta CPU además es capaz de conmutar bancos de memoria, podría seleccionar entre varios bancos de hasta 64 KiB cada uno. De esta forma, una CPU con la capacidad de direccionar directamente 64 KiB podría acceder a 512 KiB de memoria principal si utilizara ocho bancos de memoria de 64 KiB, aunque en un instante dado solo podría acceder a un banco (el seleccionado en ese momento).[2]
En ocasiones, la conmutación de bancos de memoria es llamada paginación, y los bancos de memoria son llamados páginas.[3] Sin embargo, la conmutación de bancos de memoria no debe ser confundida con la paginación de memoria, ya que en la paginación de memoria son los programas los que se dividen en bloques del mismo tamaño (páginas) y estas pueden ser guardadas y recuperadas de almacenamiento secundario, permitiendo, por ejemplo, que para un programa aparentemente haya más memoria principal disponible de la que queda libre de forma contigua.[4]
Historia
El uso de la conmutación de bancos de memoria empezó en la época de las minicomputadoras a mediados de la década de 1960.[5]
La CDC-160, por ejemplo, era una minicomputadora con un bus de direcciones de 12 bits, lo que le permitía direccionar directamente 212 (4096) posiciones de memoria. La CDC-160 fue mejorada en 1962 con el lanzamiento del modelo CDC-160A que tenía la habilidad de direccionar más memoria que la CDC-160 gracias a la conmutación de bancos de memoria. La CDC-160A implementaba varios bancos de memoria (8 como máximo), lo que le permitía acceder hasta a 32,768 posiciones de memoria.[6][7]
La capacidad de conmutar bancos de memoria llegó a ser aún más importante con la introducción de las microcomputadoras a mediados de la década de 1970.
Usos
Cromemco
La primera microcomputadora que utilizó la conmutación de bancos de memoria era la Cromemco Z-1 lanzada en 1976.[9] Esta microcomputadora utilizó el microprocesador Z80 que era capaz de direccionar directamente 64 KiB de RAM. Cada tarjeta de memoria en esta microcomputadora tenía un 8 interruptores DIP para elegir cuales eran los bancos donde la tarjeta residía. Cada banco tenía la capacidad de 64 KiB, por eso cuando disponía de ocho bancos de memoria, la capacidad de memoria de la microcomputadora aumentaba a 512 KiB. Mediante la ejecución de una instrucción de entrada/salida del microprocesador Z80 se podía seleccionar el banco activo.[2]
IBM
La computadora IBM PC fue lanzada en 1981. La IBM PC utilizó el microprocesador 8088 que tenía 20 líneas de direcciones y, por eso, podía direccionar directamente 220 posiciones (1 MiB) de memoria principal. En 1985 se creó la “especificación de memoria expandida” para definir la conmutación de bancos de memoria en la IBM PC. Como resultado la memoria de la IBC PC pudo ser expandida, no estando limitada a 1 MiB.[10]
ZX Spectrum 128K
Las microcomputadoras ZX Spectrum 128K (1985) y ZX Spectrum 128 +2 (1986) utilizan un procesador Z80. Este procesador tiene un bus de direcciones de 16 bits y un bus de datos de 8 bits (1 bytes), los cuales le permiten direccionar solamente 64 KiB (216) de memoria principal en total. Para ampliar esta cantidad de memoria accesible estas microcomputadoras usan la técnica de conmutación de bancos de memoria, dividiendo la memoria en bancos de 16 KiB. En concreto disponen de 128 KiB de RAM (en 8 bancos) y 32 KiB de ROM (en 2 bancos). Para una configuración dada de los bancos, el procesador solo puede acceder al banco de memoria ROM seleccionado, el 0 o el 1 (a través de las direcciones de la 0x0000 a la 0x3FFF en hexadecimal), al banco 5 de RAM (direcciones de la 0x4000 a la 0x7FFF), al banco 2 de RAM (direcciones de la 0x8000 a la 0xBFFF) y a un banco de RAM seleccionado de entre todos los disponibles (direcciones de la 0xC000 a la 0xFFFF). Para seleccionar a qué banco de ROM y qué banco de RAM se quiere acceder, un programa escribe en el puerto de entrada/salida 0x7FFD.
Las microcomputadoras ZX Spectrum 128 +3 (1987) y ZX Spectrum 128 +2A (1988) tienen el mismo procesador y utilizan la técnica de conmutación de bancos de memoria para acceder a 128 KiB de RAM y 64 KiB de ROM.[11]
Microcontroladores
Algunos microcontroladores (microprocesadores que incluyen en el mismo circuito integrado una considerable circuitería de entrada/salida y habitualmente incluso memoria principal) usan la conmutación de bancos de memoria, por ejemplo, para acceder a múltiples bancos de registros de configuración o de memoria principal. Un ejemplo es el microcontrolador PIC 16F, el cual, divide su memoria RAM en bancos. Esto permite que las instrucciones del procesador sean más cortas, disminuyendo el espacio que ocupa el programa en memoria. Sin embargo, se requiere añadir instrucciones adicionales para acceder a algunos registros que se usan con menos frecuencia.[12]
NASA
Un ejemplo del uso de la conmutación de bancos de memoria en un sistema embebido ocurrió en la misión a Marte llamada Mars Pathfinder en 1997. Esta misión de NASA llevó a Marte un pequeño vehículo de seis ruedas, un Mars rover que se llamó Sojourner, para explorar y sacar fotos del planeta. Sojourner fue controlado por un microprocesador 80C85 que podía direccionar directamente 64 KiB de memoria. El Sojourner tenía 256 KiB de memoria estática (SRAM) distribuida en 4 bancos de 64 KiB cada uno y utilizaba una instrucción de entrada/salida del microprocesadorla para seleccionar el banco de memoria activo.[13]