Tipos de memoria, organización y funcionamiento
PROM
"Programmable Read Only Memory", memoria programable de solo
lectura. Memoria ROM que permite una programación y posteriormente un
número indeterminado de lecturas pero no puede ser modificada.
EPROM
Erasable Programmable Read Only Memory", memoria programable y
borrable de solo lectura. Memoria PROM que permite reprogramación por medio de
un dispositivo especial y borrado por medio de luz ultravioleta.
DRAM
Dinamic Random Access Memory", memoria dinámica de acceso aleatorio. Es
el tipo de memoria mas común y económica, construida con capacitores por lo que
necesitan constantemente refrescar el dato que tengan almacenado, haciendo el
proceso hasta cierto punto lento.
SDRAM
Synchronous Dinamic Random Access Memory", memoria dinámica de acceso
aleatorio. Tecnología DRAM que utiliza un reloj para sincronizar con el
microprocesador la entrada y salida de datos en la memoria de un chip. Se ha
utilizado en las memorias comerciales como SIMM,
DIMM,
y actualmente la familia de memorias DDR
(DDR, DDR2, DDR3, DDR4, GDDR, etc.), entran en esta clasificación.
RDRAM
Rambus DRAM", memoria dinámica de acceso aleatorio para tecnología
Rambus. Memoria DRAM de alta velocidad desarrollada para procesadores con
velocidad superior a 1 GHz, en esta clasificación se encuentra la familia de
memorias RIMM.
SRAM
Static Random Access Memory", memoria estática de acceso aleatorio. Memoria
RAM muy veloz y relativamente cara, construida con transistores, que no
necesitan de proceso de refresco de datos. Anteriormente había módulos de
memoria independientes, pero actualmente solo se encuentra integrada dentro de
microprocesadores y discos duros para hacerlos mas eficientes.
SIP
Es la sigla de ("Single In-line Package"), lo que traducido
significa soporte simple en línea: son los primeros tipos de memorias DRAM (RAM
de celdas construidas a base de capacitores), que integraron en una sola
tarjeta varios módulos de memoria TSOP, lográndose comercializar mayores
capacidades en una sola placa. Las terminales se concentraron en la parte baja
en forma de pines (30) que se insertaban dentro de las ranuras especiales de
latarjeta principal (Motherboard).
DIP
Es de las memorias ram de escritorio más viejas y las siglas DIP’s quieren decir: Dual inline packages, que traducido al español seria: Paquetes de doble línea. La mayoría de los chips de memoria son empaquetados en paquetes de plástico o de cerámica llamados: doble paquetes en línea o DIP. Un DIP es un paquete rectangular con las filas de los pernos a lo largo de sus dos bordes más largos. Estas son las pequeñas cajas de negro que se ven en las SIMM, DIMM o estilos de envoltura más grande. El DIP ha sido el estándar para el empaquetado de circuitos integrados desde la invención de la PC’s. Los antiguos sistemas informáticos utilizaban memorias DIP directamente, ya sea soldados o integrados a la placa base o eran colocados en los zócalos que estaban soldados en las motherboards. La mayoría de los sistemas de la época tenían una pequeña cantidad de memoria 1MB (menos de un megabyte) el problema de las memorias que venían soldadas a la placa base era que si fallaba la memoria había que prácticamente que votar la motherboard.
SIMMs y DIMMs
Se trata de
la forma en que se juntan los chips de memoria, del tipo que sean, para
conectarse a la placa base del ordenador. Son unas plaquitas alargadas con
conectores en un extremo; al conjunto se le llama módulo.
El número de
conectores depende del bus de datos del microprocesador, que más que un autobús es
la carretera por la que van los datos; el número de carriles de dicha carretera
representaría el número de bits de información que puede manejar cada vez.
- SIMMs: Single
In-line Memory Module, con 30 ó 72 contactos. Los de 30 contactos pueden
manejar 8 bits cada vez, por lo que en un 386 ó 486, que tiene un bus de
datos de 32 bits, necesitamos usarlos de 4 en 4 módulos iguales. Miden
unos 8,5 cm (30 c.) ó 10,5 cm (72 c.) y sus zócalos suelen ser de color blanco.
Los SIMMs de
72 contactos, más modernos, manejan 32 bits, por lo que se usan de 1 en 1 en
los 486; en los Pentium se haría de 2 en 2 módulos (iguales), porque el bus de
datos de los Pentium es el doble de grande (64 bits).
- DIMMs: más alargados (unos 13 cm), con 168 contactos y en zócalos generalmente negros; llevan dos muescas para facilitar su correcta colocación. Pueden manejar 64 bits de una vez, por lo que pueden usarse de 1 en 1 en los Pentium, K6 y superiores. Existen para voltaje estándar (5 voltios) o reducido (3.3 V).
Banco de memoria
Es el número de posiciones de un sistema, o
dicho de otra manera, número de informaciones que contiene una memoria. Es la
unidad de almacenamiento de datos.La capacidad total de memoria será un dato
esencial para calibrar la potencia de un computador. La capacidad de la memoria
se mide en múltiplos de byte (8 bits): kilobytes (1.024 bytes) y megabytes
(1.024 kilobytes).
Formado por
uno o varios "chips" que forman la RAM, ésta es una de las dos partes
que componen la memoria principal. Los PC actuales contienen una serie de
zócalos donde se insertan los denominados módulos SIMM (Single Inline Memory
Module) formados estos a su vez por varios "chips"; esta construcción
modular permite añadir más módulos, y por tanto más memoria, cuando resulta necesario
de una forma muy sencilla; eso si, respetando unas reglas de colocación en
cuanto a su número y tamaño.
Bit de paridad
Un bit de paridad
es un dígito
binario que indica si el número de bits con un valor de 1 en
un conjunto de bits es par o impar. Los bits de paridad conforman el
método de detección de errores más simple.La paridad par es un caso especial del control de redundancia cíclica (CRC), donde el bit de CRC se genera por el polinomio x+1.
Nótese que este método detecta los errores, pero no los corrige (salvo en el caso de que la palabra transmitida sea de tamaño 1 bit). Existen dos variantes de este método, bit de paridad par y bit de paridad impar.
Fallas
¿Qué síntomas
puede tener un sistema que tiene fallada la memoria RAM?
En muchas
situaciones de errores graves, un usuario necesitará saber
si la memoria RAM del sistema
está dañada.
La memoria dañada puede
ocasionar múltiples y variados problemas en una computadora. A
continuación, detallamos algunos síntomas de posibles errores en la memoria
RAM. Es importante destacar que estos síntomas también pueden presentarse por otras
situaciones de errores. La idea es siempre ir descartando, a través de pruebas,
las posibles fuentes del error.
Síntomas de un sistema con la memoria RAM fallada:
Síntomas de un sistema con la memoria RAM fallada:
- La
computadora no se inicia, y en su lugar lanza beeps (o pitidos). O en la
primera pantalla que muestra la PC al encenderse,
especifica claramente que la memoria está fallada.
- El
sistema operativo se detiene o lanza mensajes de error de Fallas de
Protección General (Ver Origen
de las fallas de protección general), Operaciones Ilegales,
Excepciones Fatales, etc.
- La
computadora se reinicia
de forma aleatoria.
Tiempo de acceso
Tiempo de acceso es el retardo temporal o latencia entre
una petición a un sistema electrónico y la fiscalización de la misma o la
devolución de los datos solicitados.
·
En un ordenador,
es el intervalo de tiempo entre el instante en el cual una unidad de control de instrucción inicia una solicitud de datos o una solicitud
para almacenar datos, y el instante en el
cual los datos son obtenidos o se inicia el almacenamiento.
Funciones de un manejador de memoria
Los sistemas de memoria virtual separan las direcciones de memoria utilizadas por un proceso de las direcciones físicas reales, permitiendo la separación de procesos e incrementando la cantidad efectiva de memoria de acceso aleatorio utilizando la paginación. La calidad de la gestión de la memoria es crucial para las prestaciones del sistema.
El recolector de basura es la asignación y liberación automática de los recursos de memoria para un programa. La implementación suele ser a nivel del lenguaje de programación en contraposición a la gestión manual de memoria, que asigna y libera los recursos de memoria de un ordenador de forma explícita.
Asignación continua simple
El sistema operativo (s.o.)
es el responsable de asignar memoria principal a los procesos para que puedan
ser ejecutados.
En un modelo de memoria con asignación contigua, todo el espacio lógico de un proceso(Código, Datos, Pila) ha de estar ubicado de forma contigua en memoria principal, es decir en direcciones físicas consecutivas
Cuando un proceso finaliza libera la memoria ocupada.
En un modelo de memoria con asignación contigua, todo el espacio lógico de un proceso(Código, Datos, Pila) ha de estar ubicado de forma contigua en memoria principal, es decir en direcciones físicas consecutivas
Cuando un proceso finaliza libera la memoria ocupada.
Asignación de memoria
La asignación de memoria consiste en
el proceso de asignar memoria para propósitos específicos, ya
sea en tiempo de compilación o de ejecución. Si es en tiempo de compilación es estática,
si es en tiempo de ejecución es dinámica y si son variables locales a un
grupo de sentencias se denomina automática.1
Asignación particionada
La tarea
principal del Sistema de Gestión de memoria es cargar los programas en la
memoria principal para su ejecución en el procesador.
En casi
todos los sistemas multiprogramados modernos, esta tarea requiere un
sofisticado esquema llamado memoria virtual, la cual esta basada en el uso de
una de dos técnicas básicas: segmentación o paginación.
Existen
técnicas más simples que no requieren el uso de la memoria virtual como la
partición, partición simple y la segmentación simple.
PARTICIONES ESTÁTICAS
PARTICIONES ESTÁTICAS
En la
mayoría de los esquemas de gestión de memoria, el sistema operativo ocupa una
parte fija de la memoria principal y que el resto de la memoria esta disponible
para ser usado por varios procesos. El esquema más sencillo de gestión de la
memoria disponible es dividir en regiones con límites fijos.
TAMAÑO DE
PARTICION
Una
posibilidad es emplear particiones de igual tamaño en este caso, cualquier
proceso cuyo tamaño sea menor o igual que el tamaño de la partición puede
cargarse en cualquier partición libre.
Las
particiones estáticas de igual tamaño plantean dos dificultades
Un programa
puede ser demasiado grande para caber en la partición. El programador debe
diseñar el programa mediante superposiciones. Cuando se necesita un módulo que
no este presente el programa de usuario debe cargar dicho módulo en la
partición del programa, superponiéndose a los programas y datos que se
encuentren en ella.
El uso de la memoria principal Es ineficiente. Cualquier programa sin importar lo pequeño que sea, ocupara una partición completa.
El uso de la memoria principal Es ineficiente. Cualquier programa sin importar lo pequeño que sea, ocupara una partición completa.
Este
fenómeno, en el que se malgasta el espacio interno de una partición cuando el
bloque de datos cargados Es más pequeño que la partición se denomina
fragmentación interna.
PARTICIONES DINAMICASCon la partición dinámica, las particiones son variables en número y longitud. Cuando se carga un proceso en la memoria principal, se le asigna exactamente tanta memoria como necesita y no más.
Este método comienza bien, pero desembarca en una situación en la que hay un gran número de guecos pequeños en la memoria. La memoria comienza a estar más fragmentada y su rendimiento decae. Este fenómeno se denomina fragmentación externa y se refiere al hecho que la memoria externa a todas las particiones se fragmenta cada vez más.
Una técnica para vencer la fragmentación externa Es la compactación, el sistema operativo desplaza los procesos para que estén contiguos, de forma que toda la memoria libre quede junta en un bloque. La dificultad de la compactación esta en que Es un procedimiento que consume tiempo, la compactación necesita de renunciación dinámica. Es decir se debe poder mover un programa de una región a otro de la memoria principal sin invalidar la referencia a la memoria del programa.
Memoria virtual
Muchas aplicaciones requieren acceso a más información (código y datos) que la que se puede mantener en memoria física. Esto es así sobre todo cuando el sistema operativo permite múltiples procesos y aplicaciones ejecutándose simultáneamente. Una solución al problema de necesitar mayor cantidad de memoria de la que se posee consiste en que las aplicaciones mantengan parte de su información en disco, moviéndola a la memoria principal cuando sea necesario. Hay varias formas de hacer esto.
Una opción es que la aplicación misma sea responsable de decidir qué información será guardada en cada sitio (segmentación), y de traerla y llevarla. La desventaja de esto, además de la dificultad en el diseño e implementación del programa, es que es muy probable que los intereses sobre la memoria de dos o varios programas generen conflictos entre sí: cada programador podría realizar su diseño teniendo en cuenta que es el único programa ejecutándose en el sistema. La alternativa es usar memoria virtual, donde la combinación entre hardware especial y el sistema operativo hace uso de la memoria principal y la secundaria para hacer parecer que el ordenador tiene mucha más memoria principal (RAM) que la que realmente posee. Este método es invisible a los procesos. La cantidad de memoria máxima que se puede hacer ver que hay tiene que ver con las características del procesador. Por ejemplo, en un sistema de 32 bits, el máximo es 232, lo que da 4096 Megabytes (4 Gigabytes). Todo esto hace el trabajo del programador de aplicaciones mucho más fácil, al poder ignorar completamente la necesidad de mover datos entre los distintos espacios de memoria.
Aunque la memoria virtual podría estar implementada por el software del sistema operativo, en la práctica casi siempre se usa una combinación de hardware y software, dado el esfuerzo extra que implicaría para el procesador.
Segmentación
de memoria
La segmentación es una técnica de gestión de memoria que pretende acercarse más al punto de vista del usuario. Los programas se desarrollan, generalmente, en torno a un núcleo central (principal) desde el que se bifurca a otras partes (rutinas) o se accede a zonas de datos (tablas, pilas, etc).
Desde este punto de vista, un programa es un conjunto de componentes lógicos de tamaño variable o un conjunto de segmentos, es decir, el espacio lógico de direcciones se considera como un conjunto de segmentos, cada uno definido por un identificador, y consistente de un punto de inicio y el tamaño asignado.1
La segmentación de un programa la realiza el compilador y en ella cada dirección lógica se expresará mediante dos valores: Número de segmento (s) y desplazamiento dentro del segmento (d).
Una de las implementaciones más obvias y directas de un espacio de memoria segmentado es asignar un segmento distinto a cada una de las secciones del espacio en memoria de un proceso.
La segmentación también ayuda a incrementar la modularidad de un programa: Es muy común que las bibliotecas enlazadas dinámicamente estén representadas en segmentos independientes.
Paginación de memoria
En sistemas
operativos de computadoras, los sistemas de paginación de memoria dividen los programas en pequeñas
partes o páginas. Del mismo modo, la memoria es dividida en trozos del mismo
tamaño que las páginas llamados marcos de página. De esta forma, la
cantidad de memoria desperdiciada por un proceso es el final de su última
página, lo que minimiza la fragmentación interna y evita la externa.
En un
momento cualquiera, la memoria se encuentra ocupada con páginas de diferentes
procesos, mientras que algunos marcos están disponibles para su uso. El sistema
operativo mantiene una lista de estos últimos marcos, y una tabla por cada
proceso, donde consta en qué marco se encuentra cada página del proceso. De
esta forma, las páginas de un proceso pueden no estar contiguamente ubicadas en
memoria, y pueden intercalarse con las páginas de otros procesos.
En la tabla de páginas de un proceso, se encuentra la
ubicación del marco que contiene a cada una de sus páginas. Las direcciones
lógicas ahora se forman como un número de página y de un desplazamiento dentro
de esa página (conocido comúnmente como offset). El número de página es
usado como un índice dentro de la tabla de páginas, y una vez obtenida la
dirección del marco de memoria, se utiliza el desplazamiento para componer la
dirección real o dirección física. Este proceso se realiza en una parte del
computador específicamente diseñada para esta tarea, es decir, es un proceso
hardware y no software.
De esta
forma, cuando un proceso es cargado en memoria, se cargan todas sus páginas en
marcos libres y se completa su tabla de páginas.
Veamos un
ejemplo:
Número de marco
|
Programa.#página
|
Dirección física
|
0
|
Programa
A.0
|
1000:0000
|
1
|
Programa
A.1
|
1000:1000
|
2
|
Programa
A.2
|
1000:2000
|
3
|
Programa
D.0
|
1000:3000
|
4
|
Programa
D.1
|
1000:4000
|
5
|
Programa
C.0
|
1000:5000
|
6
|
Programa
C.1
|
1000:6000
|
7
|
Programa
D.2
|
1000:7000
|
La tabla de
la derecha muestra una posible configuración de la memoria en un momento dado,
con páginas de 4Kb. La forma en que se llegó a este estado puede haber sido la
siguiente:
Se tienen
cuatro procesos, llamados A, B, C y D, que ocupan respectivamente 3, 2, 2 y 3
páginas.
- El
programa A se carga en memoria (se le asignan los marcos 0, 1 y 2)
- El
programa B se carga en memoria (se le asignan los marcos 3 y 4)
- El
programa C se carga en memoria (se le asignan los marcos 5 y 6)
- El
programa B termina, liberando sus páginas
- El
programa D se carga en memoria (se le asignan los marcos 3 y 4 que usaba
el proceso B y el marco 7 que permanecía libre)
De esta
forma, las tablas simplificadas de cada proceso se ven de esta forma:
Proceso A
|
|
Página
|
Dirección física
|
0
|
1000:0000
|
1
|
1000:1000
|
2
|
1000:2000
|
Proceso B
|
|
Página
|
Dirección física
|
-
|
-
|
-
|
-
|
Proceso C
|
|
Página
|
Dirección física
|
0
|
1000:5000
|
1
|
1000:6000
|
Proceso D
|
|
Página
|
Dirección física
|
0
|
1000:3000
|
1
|
1000:4000
|
2
|
1000:7000
|
Ahora
consideremos qué sucede cuando un programa quiere acceder a su memoria. Si el
programa A contiene una referencia a la memoria con dirección 20FE, se
realizará el siguiente procedimiento. 20FE es 0010000011111110 en notación
binaria (en un sistema de 16 bit), y en el ejemplo se están usando páginas de
4Kb de tamaño. Cuando la petición de la dirección de memoria 20FE es realizada,
la Unidad de Gestión de
memoria se ve de esta forma:
0010000011111110 = 20FE
|__||__________|
|
|
|
v
|
Posición de memoria dentro de la página (0FE)
v
Número de página (0010 = 2)
Tabla de paginación
|
|||||
Entrada a la tabla de páginas
|
|||||
n = @
página física
|
V
|
P
|
L
|
E
|
M
|
* n = bits de la @ lógica
-log2(número de palabras de una página).
* V: bit de validez.
* P: bit de persistencia.
* L: bit de derecho a lectura.
* E: bit de derecho a escritura.
* M: bit de modificación.
Al usar
páginas de 4096 bytes, todas las ubicaciones dentro de una página pueden ser
representadas por 12 bits, en el sistema binario (212=4096), lo que
deja 4 bits para representar el número de página. Si las páginas hubieran sido
de la mitad del tamaño (2048) se podrían tener 5 bits para el número de página,
lo que significa que a menor tamaño de página se pueden tener tablas con más
páginas.
Cuando el
pedido de acceso a memoria es realizado, la MMU busca en la tabla de
páginas del proceso que realizó el pedido por la relación en memoria física. En
nuestro ejemplo, la página número 2 del proceso A corresponde al marco número 2
en memoria física, con dirección real 1000:2000, por lo tanto, la MMU devolverá
la dirección del marco en memoria física, con el desplazamiento dentro de esa
página: 1000:20FE.
Segmentación
Paginada
Paginación y
segmentación son técnicas
diferentes, cada una de las cuales busca brindar las ventajas enunciadas
anteriormente.
Para la segmentación se necesita que estén cargadas en memoria, áreas de tamaños variables. Si se requiere cargar un segmento en memoria; que antes estuvo en ella y fue removido a memoria secundaria; se necesita encontrar una región de la memoria lo suficientemente grande para contenerlo, lo cual no es siempre factible; en cambio "recargar" una pagina implica solo encontrar un merco de pagina disponible.
A nivel de paginación, si quiere referenciar en forma cíclicas n paginas, estas deberán ser cargadas una a una generándose varias interrupciones por fallas de paginas; bajo segmentación, esta pagina podría conformar un solo segmento, ocurriendo una sola interrupción, por falla de segmento. No obstante, si bajo segmentación, se desea acceder un área muy pequeña dentro de un segmento muy grande, este deberá cargarse completamente en memoria, desperdiciándose memoria; bajo paginación solo se cargara la página que contiene los ítems referenciados.
Puede hacerse una combinación de segmentación y paginación para obtener las ventajas de ambas. En lugar de tratar un segmento como una unidad contigua, este puede dividirse en páginas. Cada segmento puede ser descrito por su propia tabla de páginas.
Los segmentos son usualmente múltiplos de páginas en tamaño, y no es necesario que todas las páginas se encuentren en memoria principal a la vez; además las páginas de un mismo segmento, aunque se encuentren contiguas en memoria virtual; no necesitan estarlo en memoria real.
Las direcciones tienen tres componentes: (s, p,d), donde la primera indica el numero del segmento, la segunda el numero de la pagina dentro del segmento y la tercera el desplazamiento dentro de la pagina. Se deberán usar varias tablas:
Para la segmentación se necesita que estén cargadas en memoria, áreas de tamaños variables. Si se requiere cargar un segmento en memoria; que antes estuvo en ella y fue removido a memoria secundaria; se necesita encontrar una región de la memoria lo suficientemente grande para contenerlo, lo cual no es siempre factible; en cambio "recargar" una pagina implica solo encontrar un merco de pagina disponible.
A nivel de paginación, si quiere referenciar en forma cíclicas n paginas, estas deberán ser cargadas una a una generándose varias interrupciones por fallas de paginas; bajo segmentación, esta pagina podría conformar un solo segmento, ocurriendo una sola interrupción, por falla de segmento. No obstante, si bajo segmentación, se desea acceder un área muy pequeña dentro de un segmento muy grande, este deberá cargarse completamente en memoria, desperdiciándose memoria; bajo paginación solo se cargara la página que contiene los ítems referenciados.
Puede hacerse una combinación de segmentación y paginación para obtener las ventajas de ambas. En lugar de tratar un segmento como una unidad contigua, este puede dividirse en páginas. Cada segmento puede ser descrito por su propia tabla de páginas.
Los segmentos son usualmente múltiplos de páginas en tamaño, y no es necesario que todas las páginas se encuentren en memoria principal a la vez; además las páginas de un mismo segmento, aunque se encuentren contiguas en memoria virtual; no necesitan estarlo en memoria real.
Las direcciones tienen tres componentes: (s, p,d), donde la primera indica el numero del segmento, la segunda el numero de la pagina dentro del segmento y la tercera el desplazamiento dentro de la pagina. Se deberán usar varias tablas:
- SMT
(tabla de mapas de segmentos): una para cada proceso. En cada entrada de
la SMT se almacena la información descrita bajo segmentación pura, pero en
el campo de dirección se indicara la dirección de la PMT (tabla de mapas
de páginas) que describe a las diferentes páginas de cada segmento.
- PMT
(tabla de mapas de páginas): una por segmento; cada entrada de la PMT
describe una página de un segmento; en la forma que se presento la pagina
pura.
- TBM
(tabla de bloques de memoria): para controlar asignación de páginas por
parte del sistema operativo.
- JT
(tabla de Jobs): que contiene las direcciones de comienzo de cada una de
las SMT de los procesos que se ejecutan en memoria.
los overlays son fragmentos o secciones de un
programa, son secciones de un programa o sistema operativo con el cual se va
trabajando para que el sistema operativo no sea tan pesado a la hr de trabajar
con el.
el programador divide el total de instrucciones para que sean cargados en la memoria ram y trabajar con el cuando no se necesite se desecha y sigue con la siguiente seccion (overlay). asi solo trabaja con lo que necesita, sino tendria que leer el programa completo y ahi empesar con los procesos e instrucciones.
el programador divide el total de instrucciones para que sean cargados en la memoria ram y trabajar con el cuando no se necesite se desecha y sigue con la siguiente seccion (overlay). asi solo trabaja con lo que necesita, sino tendria que leer el programa completo y ahi empesar con los procesos e instrucciones.
Swapping
Es un mecanismo o modo de interrelacionar la memoria principal (la que contiene el Programa en ejecución, los datos de proceso inmediato y los resultados intermedios) con la secundaria, de tal modo que se produce un intercambio de programas entre ambas cuyo resultado es la simulación de un sistema multitarea o la potenciación de memoria central a base de recursos de la memoria secundaria.
Es un mecanismo o modo de interrelacionar la memoria principal (la que contiene el Programa en ejecución, los datos de proceso inmediato y los resultados intermedios) con la secundaria, de tal modo que se produce un intercambio de programas entre ambas cuyo resultado es la simulación de un sistema multitarea o la potenciación de memoria central a base de recursos de la memoria secundaria.

No hay comentarios:
Publicar un comentario