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:

           

  1. Registros límite: Delimita la zona de memoria a la que puede acceder un programa.     Si dir >lim inf && dir < lim sup   à 0 KB
  2. Registros base y límite: Si dir < lim à dir + base = dir mem.
  3. Bits de protección de memoria: utilizado en el IBM 360, en función del valor de unos  bits específicos puede acceder, y otros aspectos, como leer, escribir….
  4. Tablas de acceso: Utilizado en los sistemas paginados y segmentados. Más estricto.
  5. Se pueden ofrecer también mecanismos más sofisticados. Un esquema habitual consiste en usar una estructura de anillo de protección donde los anillos interiores gozan de mayores privilegios que los anillos externos. Normalmente, el anillo 0 está reservado para las funciones del núcleo del S.O y las aplicaciones están situadas a un nivel más alto. Algunos servicios del S.O pueden ocupar un anillo intermedio. Los principios básicos del sistema de anillos son los siguientes:

 

-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.