sábado, 27 de noviembre de 2010

4.3 Memoria virtual

En años anteriores las personas se enfrentaron por primera vez con programas que eran demasiados grandes para almacenarse en la memoria. Una solución fue dividir al programa en fragmentos.

La tarea de dividir el programa en fragmentos tenía que ser realizada por el programador. El sistema operativo mantiene en la memoria principal las partes del programa que actualmente se están usando, y el resto se queda en el disco.

Paginación

La mayoría de los sistemas de memoria virtual emplean una técnica llamada paginación.

Las direcciones generadas por programas se denominan direcciones virtuales y constituyen el espacio de direcciones virtuales. El espacio de direcciones virtual se divide en unidades llamadas páginas. Las unidades correspondientes en la memoria física se denominan marcos de páginas. Los marcos y las páginas siempre tienen el mismo tamaño. El número de página se utiliza como índice de la tabla de páginas, produciendo el marco que corresponde a esa pagina virtual.

Tablas de páginas

La dirección virtual se divide en un número de página virtual y una distancia. El numero de página virtual sirve como índice para consultar la tabla de paginas y encontrar la entrada correspondiente a esa página.

El propósito de la tabla de páginas es transformar páginas virtuales en marcos de páginas.

Hay que resolver dos problemas importantes:

La tabla de páginas puede ser extremadamente grande.

· La transformación debe ser rápida.

El secreto de la tabla de página de multinivel es evitar de mantener todas las tablas de páginas en la memoria todo el tiempo, las tablas que no se necesiten no deben estar ahí.

TLB --- Buffers de consulta para traducción

El dispositivo, llamado TLB o también memoria asociativa. El TLB se encuentra dentro de la MMU y consiste en un pequeño número de entradas.

Todas las maquias con memoria virtual paginada tienen tablas de paginas reconocidas por el hardware, más un TLB.

Tablas de páginas invertidas

En este diseño, hay una entrada por cada marco de página de la memoria real, no por cada página del espacio de direcciones virtual.

4.2 Intercambio

En el esquema de “intercambio” los programas del usuario no requieren permanecer en la memoria principal hasta su terminación.

Podemos utilizar 2 estrategias de administración de memoria dependiendo del hardware disponible.

La estrategia más sencilla, llamada intercambio, su función principal es traer a la memoria cada proceso en su totalidad, ejecutarlo durante un cierto lapso de tiempo, y después volver a colocarlo en el disco.

La segunda estrategia, llamada memoria virtual, permite a los programas ejecutarse aunque solo estén temporalmente en la memoria principal.

Un punto muy importante que se debe tomar en cuenta es la cantidad de memoria que se debe asignar a un proceso cuando se crea o se trae a la memoria.

Administración de memoria con mapas de bits

Cuando la memoria se asigna dinámicamente, el SO debe de administrarla.

Existen 2 formas contabilizar la utilización de memoria:

· Mapa de bits

· Lista libres

Con mapa de bits, la memoria se divide en unidades de asignación. Cada unidad de asignación corresponde a un bit del mapa de bits, que es 0 si la unidad esta libre y 1 si está ocupada.

Cuanto menor sea la unidad de asignación, mayor será el mapa de bits.

Administración de memoria con listas enlazadas

Una forma de contabilizar la memoria es mantener una lista enlazada de segmentos de memoria libres y asignados, donde un segmento es un proceso o un agujero entre dos procesos.

Si los procesos y agujeros se mantienen en una lista ordenada por dirección, se pueden usar varios algoritmos. El algoritmo más sencillo es el primer ajuste. El algoritmo es rápido porque la búsqueda es la más corta posible.

Una variante menor del primer ajuste es el siguiente ajuste. Este algoritmo funciona igual que el primer ajuste, solo que toma nota de donde está cada vez que encuentra un agujero apropiado. El algoritmo comenzara a buscar en la lista a partir del lugar donde se quedo la última vez, en lugar de comenzar desde el principio como hace el primer ajuste.

Otro algoritmo es el mejor ajuste, este examina toda la lista y toma el agujero más pequeño que es adecuado. El mejor ajuste trata de encontrar un agujero con un tamaño adecuado al que necesita. El mejor ajuste es más lento que el primer ajuste porque debe examinar toda la lista cada vez que se invoque.

A fin de resolver el problema de partir un agujero con un tamaño casi igual al requerido para obtener un espacio al proceso y un agujero diminuto, se puede considerar el algoritmo del peor ajuste, es decir, tomar siempre al agujero más grande disponible, de manera que el agujero que sobre puede tener un tamaño suficiente para ser útil.

Los cuatro algoritmos pueden agilizarse manteniendo las listas separadas de procesos y agujeros.