Conmutación de bancos de memoria

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]

Uso de la conmutación de bancos de memoria en las microcomputadoras ZX Spectrum 128K y ZX Spectrum 128 +2. El procesador de estas microcomputadoras tiene un bus de direcciones de 16 bits y un bus de datos de 8 bits, por tanto, solo puede direccionar (acceder directamente a) 64 KiB de memoria principal (a través de las direcciones de la 0x0000 a la 0xFFFF en hexadecimal). Para disponer de más memoria principal (128 KiB de RAM + 32 KiB de ROM) estas microcomputadoras usan conmutación de bancos de memoria. En este caso la memoria RAM se divide en 8 bancos y la memoria ROM en 2 bancos de 16 KiB cada uno. No obstante, en un instante dado el procesador solo puede direccionar 3 bancos de RAM (el 2, el 5 y otro a elegir), y un banco de ROM (el 0 o el 1)

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 editar

 
Cromemco Z-1: la primera microcomputadora que utilizó conmutación de bancos de memoria.
 
Control Data 160-A era una minicomputadora que utilizó conmutación de bancos de memoria

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 editar

Cromemco editar

 
8 interruptores DIP, localizados en una tarjeta de memoria de Cromemco para la selección de bancos de memoria[8]

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 editar

 
Acceso a la memoria expandida en el IBM PC

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 editar

 
Mediante la conmutación de bancos de memoria la microcomputadora ZX Spectrum 128K puede acceder al doble de memoria RAM de la que puede direccionar el procesador directamente

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 (2 16 ) 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 editar

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 editar

 
Sojourner en la superficie de Marte

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]

Referencias editar

  1. Garzón Villar, Mª Luisa; Sampalo de la Torre, Mª de los Ángeles; Leyva Cortés, Esteban; Prieto Tinoco, Ignacio (2004). Informática. Temario de oposiciones al cuerpo de profesores de enseñanza secundaria 2. Editorial MAD. p. 34. ISBN 84-665-1150-4. 
  2. a b Garland, Harry (1982). Diseño de sistemas microprocesadores. Madrid, España: Paraninfo. pp. 95-96. ISBN 84-283-1157-9. 
  3. «Historia de los ordenadores Sinclair». computeremuzone.com. 29 de junio de 2009. Consultado el 3 de mayo de 2023. 
  4. Silva, Martín (2015). «Capítulo 3:Memoria». Sistemas Operativos (1ª edición). Marcombo, S.A. p. 93. ISBN 9788426722768. 
  5. Bell, Gordon; Newell, Allen (1971). Computer structures: readings and examples. Mc Graw Hill. p. 156. 
  6. 160 Computer Programming Manual. Control Data Corporation. 1960. Consultado el 14 de enero de 2015. 
  7. Control Data 160-A Computer Programming Manual. Control Data Corporation. 1963. Consultado el 14 de enero de 2015. 
  8. Garland, Harry (1977). «Design Innovations in Personal Computers». Computer (IEEE Computer Society) 10 (3): 25. doi:10.1109/c-m.1977.217669. «An eight-position DIP switch on such cards is used to select one (or more) of eight banks of memory». 
  9. Hogan, Thom (1981). «Share and Share Alike: Multiuser Hardware Explained». InfoWorld 3 (11): 18. «Cromemco was the first microcomputer manufacturer to refine and exploit bank switching.» 
  10. Duncan, Ray (1986). «Lotus/Intel/Microsoft Expanded Memory». Byte (en inglés) 10 (11): 168. 
  11. Romero, Santiago (marzo de 2009). «Paginación de memoria 128K». Magazine ZX (17). Consultado el 30 de abril de 2023. 
  12. Verle, Milan. «3.1 Características Básicas del PIC16f887». Microcontroladores PIC – Programación en C con ejemplos. MikroElektronika. 
  13. E. Tunstel, R. Welch, B. Wilcox (1998), Embedded control of a miniature science rover for planetary exploration .