Las direcciones identifican unívocamente una ubicación en la memoria. Tenemos dos tipos de
direcciones que son la dirección lógica y la dirección física. La dirección lógica se utiliza como
referencia para acceder a la dirección física. La diferencia fundamental entre la dirección lógica y
la dirección física es que la dirección lógica es generada por la CPU durante la ejecución de un
programa mientras que la dirección física se refiere a una ubicación en la unidad de memoria.
En la implementación de la memoria virtual, se utiliza una función de mapeo que traduce las
direcciones físicas en direcciones virtuales, o viceversa. Es decir, crea un mapeo entre el espacio de
direcciones físicas y el espacio de direcciones virtuales de cada proceso. Esto lo implementa la MMU.
Multiprogramación
Se denomina multiprogramación a una técnica por la que dos o más procesos pueden alojarse en la
memoria principal y ser ejecutados concurrentemente por el procesador o CPU.
Particiones Estáticas
En esta gestión consiste en dividir la memoria en varias zonas, asignando cada
zona de un tamaño diferente. Cualquier proceso cuyo tamaño sea menor o
igual que el tamaño de la partición puede cargarse en cualquier partición libre.
Si todas las particiones están ocupadas, el sistema operativo puede sacar un
proceso de una partición. Un programa puede que no se ajuste a una partición.
El programador debe diseñar el programa mediante superposiciones.
Particiones Dinámicas
Las particiones dinámicas son variables en número y longitud, esto quiere decir que
cuando se carga un proceso a memorial principal se le asigna el espacio que necesita
en memoria y no más. Esta partición comienza siendo muy buena pero en el
trascurso de uso deja un gran número de huecos pequeños en la memoria lo cual se
le denomina fragmentación externa. Se debe usar la compactación para evitar esta
fragmentación, el sistema operativo desplaza los procesos para que estén contiguos
de forma que todos los espacios de memoria libre se agrupen en un bloque
Segmentación
La memoria es dividida de acuerdo al tamaño de cada
proceso en pequeños fragmentos denominados
segmentos, el cual tiene un tamaño máximo
asignado. En memoria, los segmentos pueden ocupar
posiciones no necesariamente contiguas. Se elimina
la fragmentación interna manteniéndose la
fragmentación externa en cantidades inferiores
debido a la reducción del tamaño del segmento.
Paginación
La paginación consiste en dividir la memoria en un conjunto de marcos de
igual tamaño, cada proceso se divide en una serie de paginas del tamaño
de los marcos, incluso el espacio para el sistema operativo también esta
paginado, un proceso se carga en los marcos que requiera(todas las
paginas), no necesariamente contiguas es decir seguidas.
Tabla de páginas Cada página tiene un número que se utiliza como índice en la tabla
de páginas, lo que da por resultado el número del marco correspondiente a esa
página virtual. Si el bit presente / ausente es 0, se provoca un señalamiento (trap)
hacia el sistema operativo. Si el bit es 1, el número de marco que aparece en la tabla
de páginas se copia en los bits de mayor orden del registro de salida. La finalidad de
las tablas es asociar las páginas virtuales con los marcos.
Memoria Virtual
Es un método mediante el cual, un sistema operativo simula tener más memoria
principal que la que existe físicamente. Para implementar la memoria virtual se
utiliza un medio de almacenamiento secundario de alta velocidad de acceso,
generalmente en disco duro de la máquina. Un sistema de memoria virtual se
implementa utilizando paginación como método de administración de memoria
básica y algún mecanismo de intercambio (para descargar páginas de la memoria
principal hacia el disco duro y para cargar esas páginas de nuevo a la memoria).
Implementación
La implementación de memoria virtual es realizada a través de la técnica de paginación bajo demanda. En la
paginación bajo demanda los procesos residen en un dispositivo de disco y son puestos en memoria
principal cuando es necesario cargarlos para ejecutar. La carga del proceso en memoria no es total, sino que
implementa un cargador “perezoso” (lazy swapper), que cargará las páginas según se vayan necesitando.