ICOM 5007- SISTEMAS OPERATIVOS

 

Instructor: Héctor M Lugo Cordero

e-mail: hector.lugo@ece.uprm.edu

 

Laboratorio 7 – Memoria Virtual

I Objetivos

 

II Teoría

 

El concepto de memoria se refiere básicamente a tener una pieza de software que utilice parte del hardware (e.g. disco duro) como RAM extra. Además le da la ilusión a los programas de que la memoria esta continua aún cuando típicamente no es así. Por tal razón los sistemas empotrados (“embedded systems”), no utilizan dicho mecanismo ya que tienen que tener tiempo de respuesta rápido y leer del disco duro toma más tiempo que del RAM. Típicamente estos sistemas contienen mucho más RAM que flash y otros tipos de memoria.

A pesar de la brevedad de las implementaciones, todas tienen técnicas en común entre las que podemos destacar: “page tables”, “paging”, “dynamic address translation” y “paging supervisor”. Antes de pasar a describir que hace cada uno de estos componentes es muy importante recordar que hay sectores del disco duro que no pueden ser movidos o utilizados para otra cosa (e.g. la tabla de interrupciones, archivos de sistema, el área del kernel, direcciones de dispositivos IO, etc.)

Page Tables:

Este componente es el que mantiene información acerca de donde comienza un área en memoria y cuanto tamaño ocupa la memoria virtual (este valor debe ser al menos 4k).

Paging:

Asi se le conoce al acto de guardar la memoria virtual en la memoria secundaria (disco duro) para luego ser restaurada cuando sea necesaria al RAM.

Dynamic Address Translator:

Este es el proceso de traducir la dirección virtual a dirección física. Aquí se puede generar un PageFaultException si se trata de usar una dirección que no existe.

Paging Supervisor:

Este componente se encarga de crear y mantener las tablas. De ocurrir un PageFaultException en el Dynamic Address Translator entonces este componente se encarga de reorganizar la tabla de devolver el valor correcto al Dynamic Address Translator para que este vuelva a buscar.

III Práctica

 

Implementarán una simulación de un manejador de memoria virtual en Java. Dicho manejador contendrá los componentes arriba mencionados PageTables, Paging, Dynamic Address Translator y Paging Supervisor. Claro esto no quiere decir que necesiten crear estas cuatro clases, puede ser que el proceso de Paging y el de Dynamic Address Translator sea simplemente llamar a un método. Definitivamente el Page Supervisor tiene que ser una clase aparte y posiblemente la acción de Page Table sea simplemente una estructura de datos.

 

Hint (no es la única manera de hacerlo, son libres de hacerlo de cualquier otra forma):

public class VMM{ //Virtual Memory Manager

            private Hashtable<JProcess, LinkedList<Instruction>> pages;

            public static VMM vmm = new VMM();

           

            private VMM()

            {

                        pages = new Hashtable<JProcess, LinkedList<Instruction>>();

            }

           

           

 

            /**

                 Devuelve la data de ps en un arreglo para que se pueda ver más rápido. Recuerden que

                 el tamaño de la data tiene que ser el del bloque que tiene reservado, aunque no todo el

                 bloque este siendo utilizado. Lanza una excepcion si el proceso no tiene una pagina

                 reservada.

            */

             public Instruction[] Page(JProcess ps) throws PageFaulException;

 

            /**

                 Devuelve la direccion fisica de vAddress

                 dentro de ps. O sea suma el offset vAddress a

                 la direccion base de ps.

                 AH = Bx * S + AS

                 AH es la direccion fisica

                 Bx es la direccion fisica base del proceso

                 S es el tamaño del bloque

                 AS es la dirección relativa del proceso

 

                 Lanza una excepcion si la dirección no existe para que Reallocate la arregle de ser  

                 posible

            */

            public int DAT(JProcess ps, int vAddress) throws PageFaultException;

 

            /**

                 Añade una instruccion al final de la data de ps

 

                 Lanza excepcion si la instrucción no cabe.

            */

            public void Store(JProcess ps, Instruction in) throws PageFaultException;

 

           /**

                 Añade una instruccion en la posición pos de la data de ps

 

                 Lanza excepcion si la instrucción no cabe.

            */

            public void Store(JProcess ps, Instruction in, int pos) throws PageFaultException;

           

 

           /**

                 Añade un bloque de instrucciones al final de la data de ps

 

                 Lanza excepcion si la instrucción no cabe.

            */

            public void Store(JProcess ps, LinkedList<Instruction> block) throws PageFaultException;

 

            /**

                 Reserva size posiciones de memoria (tamaño de la lista) para el proceso ps.

 

                 Lanza excepcion si el proceso ya tenia una pagina asociada (Reallocate debe ser

                 invocado en su lugar.

             */

            public void Allocate(JProcess ps, int size) thows PageFaultException;

            /**

                 Reorganiza la data (aumenta el tamaño máximo si es posible) de la lista de 

                 Instrucciones. Lanza una excepcion si es imposible realizar dicho cambio.

            */

            public void Reallocate(JProcess ps, int size) thows PageFaultException;

}