¿Cuántas variables se almacenan en la memoria RAM?

3

Acabo de crear una memoria RAM simple en Minecraft (con redstone) , con 4 bits para la dirección y 4 bits almacenados en cada celda. Nuestro próximo objetivo es almacenar diferentes tipos de variables en él y procesarlos de manera diferente.

No somos ingenieros, por lo que realmente no sabemos nada, pero ya hemos hecho algunas cosas bastante complejas y creemos que podemos hacerlo. El problema es que no podemos descubrir cómo almacenar variables de más bits que las que se pueden almacenar en una sola celda. Daré un ejemplo.

Piense en una variable de 16 bits. Pensamos que no tendría sentido crear celdas tan grandes, por lo que decidimos almacenar esos datos almacenando 4 bits en cada celda. Pero eso no es suficiente, tenemos que relacionar esas 4 células entre sí. Así que pensamos que teníamos que crear celdas de 8 bits, con 4 bits de contenido y 4 bits para almacenar la dirección donde se almacenan los siguientes 4 bits de la variable. Sin embargo, 4 bits de dirección no son nada para una memoria RAM, no podemos almacenar nada allí. Así que necesitaríamos al menos 8 bits para la dirección. 4 bits de contenido también son bastante bajos, y también necesitamos al menos otros 4 bits para almacenar el tipo de variable.

Bueno, finalmente pensamos que esa técnica era absurda y que no se haría así en la vida real. Y no sabemos cómo hacerlo ahora. He buscado en la web cómo funciona la memoria RAM y las pocas páginas que encontré que eran demasiado complejas para nuestras necesidades. ¿Podría alguien explicarnos cómo se hace esto en la vida real y cómo podemos aplicarlo en redstone?

    
pregunta user36034

3 respuestas

3

No está claro lo que realmente está preguntando, pero es común almacenar valores binarios que son más anchos que la unidad de memoria direccionable. Por ejemplo, si desea almacenar palabras de 16 bits en una memoria con direccionamiento de bytes, entonces use dos bytes. Eso también significa que el software debe saber qué byte se almacena primero.

En tu caso, parece que tienes palabras nativas de 4 bits. Para almacenar un valor de 16 bits, use 4 palabras. Una vez más, su software tendrá que saber qué convención está utilizando, como palabra baja primero o palabra alta primero.

Dado que su memoria solo tiene 4 líneas de dirección, su tamaño está limitado a 16 palabras nativas. El tamaño de su palabra nativa parece ser de 4 bits, por lo que su memoria solo puede contener 64 bits. Eso significa que se agotará completamente con dos valores de 32 bits o cuatro valores de 16 bits, por ejemplo.

    
respondido por el Olin Lathrop
3

Hay tres enfoques comunes para almacenar elementos mayores de una porción de memoria. Suponiendo que la memoria es 16x4 (como en su ejemplo), un enfoque sería especificar que los valores de 8 bits se almacenan en uno de los ocho pares de registros (los tres bits superiores seleccionan un par, y el bit inferior identifica un registro dentro del par ), y los valores de 16 bits se almacenan en uno de los cuatro cuartetos. Un segundo enfoque es especificar que cualquier grupo de dos o cuatro registros consecutivos puede considerarse como un registro más largo. El tercer enfoque es especificar por separado la dirección de las partes superior e inferior del registro compuesto.

El primer enfoque es simple desde el punto de vista del hardware, y tiene la ventaja de que se necesitan menos bits para seleccionar un registro más largo que uno corto (liberando así bits de código de operación). El segundo enfoque hace que las cosas sean un poco más agradables desde el punto de vista de la programación, pero requiere la capacidad de realizar un incremento de dirección, con propagación de acarreo, entre búsquedas. El tercer enfoque es bueno desde el punto de vista del software, pero requiere especificar el doble de bits de direccionamiento que el primero.

    
respondido por el supercat
2

Tal vez esto ayude. En la vida real, puedes comprar memoria organizada de diferentes maneras, y puedes crear una de todas formas que quieras. Pero hablemos de tu memoria, has alcanzado los 4 bits de ancho, lo que en la vida real sería un poco molesto a menos que pongas dos lado a lado para formar 8 bits, ya que la mayoría de las cosas funcionan como bytes (8 bits) y no Nibbles (4 bits). Así que hablemos 8 bits para que quede más claro.

Memoria real

Ahora puedo comprar una parte de memoria de 8 bits que dice que contiene 256 bytes de memoria. Piense en 256 de sus nuevos bloques de 8 bits apilados uno encima del otro. Cada uno de esos bloques tiene una dirección, por simplicidad dicen que son la dirección 0-255. Ahora, cuando quiera que uno de esos valores esté almacenado en la memoria, simplemente solicite la memoria en el bloque 124.

Direccionamientosimple

Siconvirtieras256valoresenbinarios,necesitarías8dígitosbinariospararepresentarlosatodos.Entonces,suprimerbloquedememoriasería00000000,elsiguiente00000001,elsiguiente00000010.SipiensaquepodríaconstruirunamaneraenMinecraftparahabilitarsololasalidade1deesos256bloquesdependiendodequébitsdeladirecciónseestablecieron.

Almacenarvaloresgrandes

Esoestábien,pero¿cómoalmacenasvariablesde16bitsovariablesde32bits?Enunlenguajedeprogramaciónusualmentetienenelconceptodetipos.Entonces,uncharpuedeserde8bits,uncortopuedeserde16bits,ydigamosqueunintesde32bits.Ahoraelcompiladorsabelalongituddecadaunodeesostiposyconoceladireccióndeinicioparasuvariable.Entoncescuandodicesintx=64250;(quees0hFAFAenhexadecimal)Luego,enelcódigo,encontraráladireccióndeiniciodexyluegolapondráen4bytesconvalordedatos.

Lo mismo sucede cuando haces una solicitud de lectura. Si intenta leer desde x, realizará 4 accesos antes de que le devuelva su número.

Espero que ayude a algunos.

    
respondido por el Some Hardware Guy

Lea otras preguntas en las etiquetas