1. Introducción
La memoria es uno de los principales recursos de la computadora, por lo tanto debe de administrarse con mucho cuidado. Aunque actualmente la mayoría de los sistemas cuentan con una alta capacidad de memoria, de igual manera las aplicaciones actuales tienen también altos requerimientos de la misma, lo que sigue generando escasez de memoria en los sistemas multitarea y/o multiusuario.
La parte del sistema operativo que gestiona la memoria se llama administrador de memoria y su labor consiste en llevar un registro de las partes de memoria que se estén utilizando y aquellas que no, con el fin de asignar espacio en memoria a los procesos cuando éstos la necesiten y liberándola cuando terminen, así como administrar el intercambio entre la memoria principal y el disco en los casos en los que la memoria principal no le pueda dar capacidad a todos los procesos que tienen necesidad de ella..
Para optimizar el uso del CPU y de la memoria, el sistema operativo debe de tener varios procesos a la vez en la memoria principal, para lo cual dispone de varias opciones de administración tanto del procesador como de la memoria. La selección de uno de ellos depende principalmente del diseño del hardware para el sistema.
A continuación se muestran algunos conceptos necesarios para avanzar en el conocimiento sobre al gestión de memoria.
1.1 Principio de localidad de referencias:
-Temporal: Se accede a direcciones de memoria a las que se ha accedido recientemente.
-Espacial: Cuando accedemos a una posición de memoria es muy probable que se acceda próximamente a una cercana a ella.
1.2 Fragmentación de memoria:
-Desaprovechamiento de memoria, determina la calidad de un sistema de gestión de memoria.
-Dos tipos:
· Interna: Se debe a diferencias de tamaño entre la partición (zona de memoria) y el tamaño del proceso que está en esa partición.
Ejemplo: Partición de 2 KB y proceso de 1,5 KB -> desaprovechamiento de memoria de 0,5 KB.
· Externa: Los bloques o particiones de memoria libres no son contiguos.
| 5 KB |
| 2 KB |
| 8 KB |
| 5 KB |
Ejemplo:
(Rojo ocupado); Trabajo= 9KB
-No hay suficiente memoria contigua para almacenarlo a pesar de que si hay memoria disponible.
1.4 Reubicación:
-Posibilidad de ubicar el código en distintas zonas de memoria.
Ejemplo: Sistema multiprogramado, los programas no se cargan en la misma zona de memoria siempre.
-Dos tipos de reubicación:
· Estática: linker _ calcula las referencias absolutas (LOAD TIME). No permite sin embargo cambiar el programa a otra zona de memoria en tiempo de ejecución.
· Dinámica: calcula referencias absolutas en tiempo de ejecución (RUN TIME)
1.5 Protección y uso compartido:
Un proceso de usuario sólo puede acceder memoria localizada en su espacio de direccionamiento virtual y un espacio de memoria compartido para sus procesos-hijo.
Habilidad de separar completamente las tareas, al poder dar a cada tarea un
espacio de direcciones virtuales diferentes. Esto se hace dando un mapa de
traducción de direcciones virtuales diferente a cada tarea.
Los otros mecanismos funcionan dentro de una tarea: para proteger al propio
sistema operativo de la intrusión por parte de esa tarea, y al uso de registros
especiales del procesador e instrucciones reservadas únicamente al sistema
operativo.
Sólo un proceso kernel puede controlar y acceder cualquier espacio de
direccionamiento.
Existen distintos mecanismos de protección, entre ellos:
-Un programa puede acceder sólo a datos que estén en el mismo anillo o en un anillo de menor privilegio.
-Un programa puede hacer llamadas a servicios que residan en el mismo anillo o en anillos más privilegiados.
1.6 Memoria virtual:
La memoria virtual es una técnica para proporcionar la simulación de un espacio de memoria mucho mayor que la memoria física de una máquina. Esta "ilusión" permite que los programas se hagan sin tener en cuenta el tamaño exacto de la memoria física.
La ilusión de la memoria virtual está soportada por el mecanismo de
traducción de memoria, junto con una gran cantidad de almacenamiento rápido
en disco duro. Así en cualquier momento el espacio de direcciones
virtual hace un seguimiento de tal forma que una pequeña parte de él, está en
memoria real y el resto almacenado en el disco, y puede ser referenciado
fácilmente que sólo la parte de memoria virtual que está almacenada en la
memoria principal, es accesible a la CPU, según un programa va ejecutándose, la
proximidad de referencias a memoria cambia, necesitando que algunas partes de la
memoria virtual se traigan a la memoria principal desde el disco, mientras que
otras ya ejecutadas, se pueden volver a depositar en el disco (archivos de
paginación).
La memoria virtual ha llegado a ser un componente esencial de la mayoría de los S.O actuales. Y como en un instante dado, en la memoria sólo se tienen unos pocos fragmentos de un proceso dado, se pueden mantener más procesos en la memoria. Es más, se ahorra tiempo, porque los fragmentos que no se usan no se cargan ni se descargan de la memoria. Sin embargo, el S.O debe saber cómo gestionar este esquema.
La memoria virtual también simplifica la carga del programa para su ejecución llamado reubicación, este procedimiento permite que el mismo programa se ejecute en cualquier posición de la memoria física.
En un estado estable, prácticamente toda la memoria principal estará ocupada con fragmentos de procesos, por lo que el procesador y el S.O tendrán acceso directo a la mayor cantidad de procesos posibles, y cuando el S.O traiga a la memoria un fragmento, deberá expulsar otro. Si expulsa un fragmento justo antes de ser usado, tendrá que traer de nuevo el fragmento de manera casi inmediata. Demasiados intercambios de fragmentos conducen a lo que se conoce como hiperpaginación: donde el procesador consume más tiempo intercambiando fragmentos que ejecutando instrucciones de usuario. Para evitarlo el S.O intenta adivinar, en función de la historia reciente, qué fragmentos se usarán con menor probabilidad en un futuro próximo.
Los argumentos anteriores se basan en el principio de localidad que afirma que las referencias a los datos y el programa dentro de un proceso tienden a agruparse. Por lo tanto, es válida la suposición de que, durante cortos períodos de tiempo, se necesitarán sólo unos pocos fragmentos de un proceso.