La Memoria
La memoria física consiste en un área
de almacenamiento temporal para los programas y los datos que se
usan. A grandes rasgos, mientras más grande sea el espacio de
memoria, más aplicaciones se podrán ejecutar al mismo tiempo.
Además, mientras más rápida sea la memoria, más rápida será la
reacción del sistema. Por eso, el sistema operativo debe estar
organizado de manera lo suficientemente eficiente como para obtener
el mejor rendimiento posible.
Gestión de memoria
Se denomina gestión de memoria al acto de gestionar
la memoria de un dispositivo informático. De forma simplificada
se trata de proveer mecanismos para asignar secciones de memoria a
los programas que las solicitan, y a la vez, liberar las secciones de
memoria que ya no se utilizan para que estén disponibles para otros
programas.
La gestión de memoria también debe realizar las siguientes
funciones:
- permitir que la memoria se comparta (en sistemas de multiprocesos).
- asignar bloques de espacio de memoria a distintas tareas;
- proteger los espacios de memoria utilizados (por ejemplo, evitar que un usuario modifique una tarea realizada por otro usuario).
- optimizar la cantidad de memoria disponible, específicamente a través de sistemas de expansión de memoria.
Expansión de memoria
Existen dos formas posibles de expandir la memoria:- Dividiendo un programa de modo que una parte permanezca en la memoria de acceso aleatorio y que una parte se cargue en la memoria cuando se necesite acceder a los datos.
- Utilizando un mecanismo de memoria virtual que consiste en utilizar el disco duro como memoria principal y almacenar solamente las instrucciones y los datos utilizados por el procesador en la memoria RAM. El sistema operativo realiza esta operación creando un archivo temporal (conocido como SWAP o "archivo de intercambio") en el que se almacena la información cuando la memoria RAM ya no es suficiente. Esta operación produce una disminución considerable en el rendimiento, dado que se puede acceder al disco duro mucho más rápido que a la memoria RAM.
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. Los sistemas de gestión de memoria de sistemas
operativos multitarea normalmente tratan con las siguientes
tareas:
Reasignación: En los sistemas con memoria virtual, los programas en la memoria
debe ser capaz de residir en diferentes partes de la memoria en
diferentes momentos. Esto se debe a que cuando el programa se cambió
de nuevo en la memoria después de ser intercambiado por un tiempo
que no siempre se puede colocar en el mismo lugar. La unidad de
gestión de memoria virtual también debe hacer frente a la
concurrencia gestión de memoria en el sistema operativo por lo tanto
debe ser capaz de trasladar los programas en la memoria y manejar
referencias de la memoria y las direcciones en el código del
programa para que siempre apuntan a la ubicación correcta en la
memoria.
Protección: Los procesos no deberían poder referenciar la memoria de otros
procesos sin permiso, para evitarlo existe la protección de
memoria, que evita que código malicioso o erróneo de un programa
interfiera con la operación de otros programas en ejecución.
Memoria compartida: Aunque la memoria utilizada por diferentes procesos suele estar
protegida, algunos procesos puede que sí tengan que compartir
información y, para ello, han de acceder la misma sección de
memoria. La memoria compartida es una de las técnicas más rápidas
para posibilitar la comunicación entre procesos.
Organización lógica: Los programas a menudo están organizados en módulos, algunos de
los cuales pueden ser compartidos por diferentes programas, algunos
son de sólo-lectura y otros contienen datos que se pueden modificar.
La gestión de memoria es responsable de manejar esta organización
lógica, que se contrapone al espacio de direcciones físicas
lineales. Una forma de lograrlo es mediante la segmentación de
memoria.
Organización física: La memoria suele dividirse en un almacenamiento primario de alta
velocidad y uno secundario de menor velocidad. La gestión de memoria
del sistema operativo se ocupa de trasladar la información entre
estos dos niveles de memoria.
Memoria dinámica
Es un tipo de tecnología de memoria RAM. La memoria dinámica
de acceso aleatorio se usa principalmente en los módulos
de memoria RAM y en otros dispositivos, como memoria
principal del sistema. Se denomina dinámica, ya que para
mantener almacenado un dato, se requiere revisar el mismo y
recargarlo, cada cierto período, en un ciclo de refresco
Es memoria que se reserva en tiempo de ejecución. Su principal
ventaja frente a la estática, es que su tamaño puede variar durante
la ejecución del programa. (En C, el programador es encargado
de liberar esta memoria cuando no la utilice más). El uso de memoria
dinámica es necesario cuando no conocemos el número de
datos/elementos a tratar; sin embargo es algo más lento, ya que el
tiempo ejecución depende del espacio que se vaha usar Hay que
mencionar que la memoria estática es más rápida ya que está
disponible desde que se inicio el programa.
Memoria estática
Es un tipo de memoria basada en semiconductores que a diferencia
de la memoria DRAM, es capaz de mantener los datos,
mientras esté alimentada, sin necesidad de circuito de
refresco. Sin embargo, sí son memorias volátiles, es decir que
pierden la información si se les interrumpe la alimentación
eléctrica.
Es la memoria que se reserva en el momento de la compilación
antes de comenzar a ejecutar el programa. Los objetos son creados al
iniciar el programa y destruidos al finalizar el mismo. Mantienen la
misma localización en memoria durante todo el transcurso del
programa hasta que son destruidos. Los objetos administrados de
este modo son: variables globales, variables estáticas de
funciones, miembros static de clases y literales de
cualquier tipo.
Asignación de memoria
En informática, la asignación de memoria es el método de
reservar memoria para fines específicos, por lo general,
ejecución de programas. En otras palabras, es una forma de
distribuir los recursos de memoria limitados, entre múltiples
fragmentos de datos y códigos.
En la asignación dinámica de
memoria, la memoria necesaria se asigna a medida que se necesita
durante el tiempo de ejecución. Esto contrasta con
la asignación estática de memoria, donde se asigna
memoria en tiempo de compilación, antes de que el programa
sea ejecutado.
La Asignación estática de memoria
La Asignación estática de memoria consiste en el
proceso de asignar memoria en tiempo de compilación antes
de que el programa asociado sea ejecutado, a diferencia de
la asignación dinámica o la automática donde
la memoria se asigna a medida que se necesita en tiempo de
ejecución. La asignación estática de memoria es el proceso
de asignar memoria en tiempo de compilación antes
de que el programa sea ejecutado. Esto contrasta con
la asignación dinámica de memoria, donde la memoria necesaria
se asigna a medida que se necesita durante el tiempo de
ejecución.
Por ejemplo, en programación, las constantes, que son conocidas
en tiempo de compilación, tienen asignadas las porciones de memoria
de forma estática antes de la ejecución del programa. También
todas a las variables declaradas estáticamente se les asignan una
porción estática de memoria.El inconveniente de la reserva estática es que la cantidad de
memoria se reserva siempre antes de conocer los datos concretos del
problema.
Asignación dinámica de la memoria
La asignación dinámica de la memoria es la asignación de
almacenamiento de memoria para utilización por parte de un programa
de computador durante el tiempo de ejecución de ese
programa. Es una manera de distribuir la propiedad de recursos de
memoria limitada entre muchas piezas de código y datos.
Un objeto asignado dinámicamente permanece asignado hasta que es
desasignado explícitamente, o por el programador o por un recolector
de basura; esto es notablemente diferente de la asignación
automática de memoria y de la asignación estática de memoria (la
de las variables estáticas). Se dice que tal objeto tiene tiempo
de vida dinámico.
La memoria dinámica es un espacio de almacenamiento que se puede
solicitar en tiempo de ejecución. Además de solicitar espacios de
almacenamiento, también podemos liberarlos (en tiempo de ejecución)
cuando dejemos de necesitarlos. El número de particiones y su
tamaño es variable, las cuales son creadas dinámicamente para que
se acomoden a las necesidades de cada proceso solicitante. Cuando
un proceso termine o sea retirado de memoria el gestor de memoria
puede devolver el espacio vacante al fondo de áreas de memoria
libres a partir del cual se efectúan las asignaciones de
particiones. El gestor de memoria puede continuar creando y
asignando particiones a procesos solicitantes hasta que agote toda la
memoria física o alcance el máximo grado de multiprogramación
permitido.
La segmentación
La segmentación es una forma de administrar la memoria que permite que el usuario vea la memoria como una colección de segmentos (partes), cada uno de los cuales tiene un nombre y un tamaño (que, además, puede variar dinámicamente).- Segmentación simple: cada proceso está dividido en varios segmentos. Un proceso carga todos los segmentos en partes dinámicas que no necesitan ser contiguas.
- Segmentación de memoria virtual: como la segmentación simple, excepto que no es necesario cargar todos los segmentos de un proceso. Los segmentos no residentes necesarios se traen después de forma automática.
- Descriptor: Identificador único del segmento (dentro del espacio de memoria del proceso).
- Tamaño del segmento
Ventajas de la segmentación
- Al usuario se le simplifica el manejo de estructuras de datos de tamaño dinámico.
- Se facilita el que los procesos compartan memoria.
- Los segmentos pueden estar protegidos según la semántica de su contenido.
- Cuando un proceso requiere más memoria se crea un nuevo segmento.
- Es posible la redimensión de segmentos siempre que haya posiciones libres contiguas, o crear un nuevo segmento y copiar el contenido del anterior
- Es posible que los segmentos crezcan dinámicamente según las necesidades del programa en ejecución.
- Existe la posibilidad de definir segmentos que aun no existan. Así, no se asignara memoria, sino a partir del momento que sea necesario hacer usos del segmento. Un ejemplo de esto, serian los Arrays cuya dimensión no se conoce hasta tanto no se comienza a ejecutar el programa. En algunos casos, incluso podría retardar la asignación de memoria hasta el momento en el cual se referencia el Array u otra estructura de dato por primera vez.
Paginación
Paginación Simple
La memoria principal se divide en varios marcos del mismo tamaño.
Cada proceso se divide en varias páginas iguales del mismo tamaño
que los marcos. Un proceso carga todas sus páginas en marcos
disponibles n necesariamente contigua.
Paginación de memoria virtual
Cómo la paginación simple excepto que no es necesario cargar
todas las páginas de un proceso. Las páginas no residentes
necesarias se traen después en forma automática.
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.
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
comooffset). 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:
La tabla de arriba 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.
Cuando ejecutamos un programa este puede caber o no en la memoria física, si se da la situación de que el proceso es mayor que la memoria, el SO se encarga de mantener en memoria las partes del programa que estamos usando y el resto en el disco duro. Pues bien, la técnica llamada ‘paginación’ se encarga del intercambio de información entre nuestra memoria y el disco duro cuando tiene que pasar información de la memoria al disco duro debido a lo comentado antes
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.
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 arriba 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)
Paginación en memoria virtual
El único inconveniente de paginación pura es que todas las páginas de un proceso deben estar en memoria para que se pueda ejecutar. Esto hace que si los programas son de tamaño considerable, no puedan cargarse muchos a la vez, disminuyendo el grado de multiprogramación del sistema. Para evitar esto, y aprovechando el principio de cercanía de referencias donde se puede esperar que un programa trabaje con un conjunto cercano de referencias a memoria (es decir con un conjunto residente más pequeño que el total de sus páginas), se permitirá que algunas páginas del proceso sean guardadas en un espacio de intercambio (fragmentación interna) mientras no se necesiten.Cuando ejecutamos un programa este puede caber o no en la memoria física, si se da la situación de que el proceso es mayor que la memoria, el SO se encarga de mantener en memoria las partes del programa que estamos usando y el resto en el disco duro. Pues bien, la técnica llamada ‘paginación’ se encarga del intercambio de información entre nuestra memoria y el disco duro cuando tiene que pasar información de la memoria al disco duro debido a lo comentado antes
La memoria virtual
La memoria virtual es una técnica de gestión de la memoria que permite que el sistema operativo disponga, tanto para el software de usuario como para sí mismo, de mayor cantidad de memoria que esté disponible físicamente. La mayoría de los ordenadores tienen cuatro tipos de memoria: registros en la CPU, la memoria caché (tanto dentro como fuera del CPU), la memoria RAM y el disco duro. En ese orden, van de menor capacidad y mayor velocidad a mayor capacidad y menor velocidad.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.
Marcos de Paginas
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.
Tablas de páginas
En las tablas 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.
No hay comentarios.:
Publicar un comentario