Objetivo
Una memoria es similar en concepto a un almacén donde se guardan objetos del mismo tipo. Por ejemplo, motores, sillas, lápices, etc. Los objetos se almacenan en un lugar determinado y se extraen de dicho lugar cuando se necesitan haciendo referencia a una dirección donde se encuentran disponibles. De forma similar, una memoria simple permite guardar o recuperar datos de alguna de sus celdas de almacenamiento.
El funcionamiento de una memoria es también similar al funcionamiento de un almacén. Para almacenar un nuevo objeto se le asigna una localidad y se deja el objeto en esa localidad. Para recuperar el objeto es necesario conocer la localidad donde se encuentra y con ello se podrá recuperar.
Las memorias tienen tres acciones principales: leer, escribir y reiniciarse. Cuando la memoria realiza una lectura se requiere indicar la dirección o posición del dato que se va a recuperar. La segunda acción es similar a la primera, solo que además de una dirección se necesita el valor que se escribirá en la celda. Por último, el reinicio de la memoria sucede cuando se realiza la acción de escritura y lectura de manera simultánea lo que produce que la celda se reinicie.
Problemática
Las memorias tienen ciertos problemas comunes que afectan las acciones de escritura o lectura, derivando en errores y pérdidas de información. A continuación se describen algunos de ellos:
- Dirección inexistente. Sucede cuando se necesita escribir o leer y se hace referencia a una dirección inexistente, generando un error en la acción.
- Dato inexistente. Es parecido al primer problema común, pero en este caso es lo contrario porque la dirección sí existe pero el dato no.
- Sobreflujo de datos. Se refiere a que el dato a escribir es muy grande y sobrepasa la capacidad de la celda de memoria, provocando un error por la dimensión del dato.
Teoría
Una memoria es un vector finito de elementos y está relacionado con el concepto matemático matriz y en particular, con el concepto secuencia. Una matriz está definida como un conjunto de elementos distribuidos en filas y columnas delimitados en corchetes, en otras palabras, una matriz se representa como m filas horizontales y n columnas verticales. En cambio, una secuencia es una serie de elementos ordenados que suceden unos de otros.
De manera ilustrativa, a continuación se muestra la representación de una matriz:
Como se puede observar en la imagen anterior, los primeros tres elementos de la fila 1 de la matriz son a11, a12, a13, en tanto el elemento a1n hace referencia a un elemento finito. Dicho lo anterior, la columna 1 de la matriz está compuesta por a11, a21 y am1.
Diagrama de Clase
El anterior diagrama de clase de una memoria simple, está compuesto por 2 atributos, 2 parámetros y 3 métodos. A continuación, se detalla la información de la clase memoria.
Atributos:
- MaximoElementos: Es la cantidad máxima de registros en la memoria. Secuencia: Es el vector donde se almacenan los datos.
Parámetros:
- Dirección: Es el número que identifica la celda de memoria que guarda un dato.
- Valor: Es el dato a escribir o leer de la celda de memoria.
Métodos:
- Lectura(): Este método ejecuta una operación de lectura sobre la memoria, contiene el parámetro dirección, que es la dirección de memoria que se quiere recuperar y retorna el valor consultado.
- Escritura(): Este método ejecuta la operación escritura sobre la memoria de la computadora, contiene el parámetro dirección, que es la dirección donde se va almacenar el dato y valor que es el dato que se quiere almacenar.
- Reinicio(): Este método realiza un reinicio sobre la memoria, para ejecutar la acción se requiere la dirección de la celda de memoria y el valor.
Usos
Una memoria simple está diseñada para almacenar datos de un solo tipo de dato que puede ser entero, flotante o del tipo carácter. Por ejemplo, se puede crear una memoria que únicamente guarde y lea números enteros, esto implica que para trabajar con números flotantes o datos de tipo carácter se debe crear una nueva memoria para ese tipo de dato. Esta memoria es útil cuando solo se tiene un solo tipo de dato a guardar.
Estrategias de implementación
Sí se desea implementar una memoria simple en lenguajes orientados a objetos se debe seguir el paradigma de programación orientada a objetos. En implementaciones con lenguajes que no-’orientados a objetos’ se recomienda una estrategia para la asignación de variables. Por ejemplo, el atributo ‘color de ojos’ de la clase ‘persona’ se puede representar de la forma:
‘persona_ColorDeOjo’ o ‘personaColorDeOjo’
Además, es importante mencionar que la posición de las celdas de memoria siempre deben empezar en 1, debido a que la posición 0 se suele utilizar para otras funciones.
En una implementación de datos simples todas las celdas guardan un solo tipo de dato, por ejemplos, enteros (1,2,3,n). Para una implementación de datos complejos cada celda debe permitir guardar distintos tipos de datos, como enteros, flotantes o caracteres, ejemplo, (1,2.5,e).
Análisis del concepto
Ventajas:
- Solo se permite almacenar un solo tipo de dato simple.
Desventajas:
- Múltiples memorias para almacenar múltiples tipos de datos.
- Capacidad de procesamiento limitada.
Conceptos relacionados
Esta información presentada muestra el diseño de una memoria simple para guardar un único tipo de dato. Para guardar varios tipos de datos será necesario implementar una memoria simple para cada uno, o implementar una memoria para almacenar datos complejos. Aunque a veces no es necesario crear más memorias, simplemente se requiere optimizar el funcionamiento de una memoria para hacer más eficientes las acciones de lectura, escritura y reinicio. Además, hay que recordar que la memoria caché esta relacionada con el rendimiento de una memoria simple o una memoria compleja, por ello, se debe analizar que procesos de la memoria caché maximizan o minimizan el rendimiento.
Pruebas de la implementación
- Dirección inexistente: Crear una memoria con 10 celdas, leer la posición máxima +1, para esta prueba el valor de entrada es: 11, obteniendo como salida un error.
- Dirección negativa: Crear una memoria con 10 celdas, leer la posición mínima -1, el dato de entrada será 0, el resultado de esta prueba será un error.
- Dato demasiado grande: Crear una memoria con 10 celdas de capacidad de 5 bits cada una, intentar guardar un dato de 10 bits en la celda 1, generando un error debido a que se rebaso el límite de capacidad de la celda.
- Sincronía: Crear una memoria con 10 celdas, medir el tiempo de la lectura del dato de la celda 1, medir el tiempo de lectura del dato de la celda 10, sí la prueba es satisfactoria ambos tiempos de lectura deben ser iguales.
- Rendimiento: Crear una memoria con 10 celdas, medir el tiempo de lectura de la celda 1, medir 100 veces el tiempo de lectura de la celda 1, la prueba es correcta sí los tiempos son proporcionales.