|
Memoria virtual (parte I) |
|
|
|
Por Jose Manuel Tella Llop, extraído de microsoft.public.es.windows98
Bueno, voy a intentar explicar en pocas "hojas" lo que es la memoria virtual y como la utilizan los procesadores y los sistemas operativos. Windows 95/98 no es una excepcion en esto. Y por cierto, este tema que me lo habeis solicitado varias veces, es un "embolao" de cuidado. Explicarlo bien es dificil sin caer en tecnicismos que alguno será necesario. Y además yo redacto muy mal y me cuesta bastante explicarme) GESTION DE MEMORIA ------------------- Hay dos partes principales en cualquier sistema de gestión de memoria: 1) Proteccion: para evitar que una tarea acceda a la memoria o datos de otra tarea o del sistema operativo. Y para evitar acceso indebido al hardware. 2) Traduccion de direcciones: para dar flexibilidad al sistema operativo a la hora de asignar memoria a las tareas y de paso "puede" y de echo se utiliza como un mecanismo clave de protección (segun veremos mas adelante). TRADUCCION DE direcciones -------------------------- La memoria "fisica" de un ordenador es una secuencia de bytes, que empieza en el 0 y termina en....por ejemplo 64 megas. Es decir un "array" de bytes. Cada byte tiene una dirección : el numero que ocupa posicionalmente en la memoria. Esta dirección es conocida como "dirección fisica". (quiero "olvidarme, que además en los procesadores 386 y superiores de intel, existe la llamada "segmentacion", pero en principio vamos a oldiar esto...... a proposito). Las direcicones que va a utilizar un programa (en modo protegido), no son esas. Siempre son traducidas, o mapeadas, en direcciones de memoria fisica por un mecanismo de "traduccion de direcciones". Este mecanismo, nos introduce en el concepto de "dirección virtual". Se llama de esta manera porque no corresponde directamente a posiciones de memoria "fisica", sino que a trave de una "funcion de mapeado" equivale a una dirección de memoria fisica. Es decir este mecanismo, al "apuntar" a una dirección de memoria, lo que hace es buscar, por ejemplo en unas tablas internas, la correspondencia entre esta dirección y la dirección real "fisica" del dato. La traduccion de dirección "virtual" a "fisica" tambien proporciona proteccion de memoria, ya que podría disponerse por ejemplo, que ciertas direcciones fisicas de memoria no se mapeen desde ninguna dirección virtual. Además de esta proteccion, en la funcion de traduccion de direcciones, se pueden identificar cierta direcciones virtuales como "no validas". Esto amplia el mecanismo de proteccion. Para no tener que generar una dirección fisica cuando se presenta un dirección virtual no valida, el mecanismo de traduccion de direcciones informa de una "excepcion", de forma que el software del sistema operativo, puede tomar la accion que considere oportuna. MEMORIA VIRTUAL --------------- La memoria virtual es una tecnica para proporcionar la ilusion de un espacio de memoria mucho mayor que la memoria fisica de una maquina. Esta "ilusion" permite que los programas se hagan sin tener encuenta el tamaño exacto de la memoria fisica. La ilusion e la memoria virtual está soportada por el mecanismo de traduccion de memoria, junto con una gran cantidad de almacenamiento rapido en disco duro. En cualquier momento el espacio de direcciones virtual, está mapeado de tal forma que una pequeña parte de él, está en memoria real y el resto almacenado en el disco. Debido a que solo la parte de memoria virtual que está almacenada en la memoria principal, es accesible a la CPU, segun un programa va ejecutandose, la vecindad 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 paginacion). Por ejemplo, un programa de aplicacion grande, podría mostrar un menú con muchas funciones. Al seleccionar una funcion del menú, se ejecutarian varias rutinas especificas de dicha funcion, pero no se referenciarian las rutinas de las funciones restantes. En un sistema de memoria virtual, la ejecucion de la funcion seleccionada del menú, se soportaria trayendo el codigo y los datos para esa funcion a la memoria principal (si no estuviese ya allí). El resto podría o no sacarse del disco a memoria real. Mientras la memoria fisica fuese lo bastante grande para contener el codigo y datos de cualquier funcion elemental de nuestro menú, el tamaño total de la memoria fisica, podría ser mucho menor que el tamaño total de nuestro programa. El mecanismo de paginacion, tambien recoge estadisticas de utilizacion de las partes de memoria virtual que estan residentes en memoria real o fisica. Estas estadisticas ayudan al sistema operativo a decidir que se puede devolver a disco cuando el espacio de memoria principal está muy "achuchado". PROTECCION ----------- Hay dos clases de proteccion usadas en el 386 y superiores (y en general en cualquier CPU, incluso de los grandes sistemas): - 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 traduccion de direcciones virtuales diferente a cada tarea.
- Los otros mecanismos funcionan dentro de una tarea: para proteger al propio sistema operativo de la intrusion por parte de esa tarea, y al uso de registros especiales del procesador e instrucciones reservadas unicamente al sistema operativo.
PROTECCION ENTRE TAREAS ----------------------- Tal y como comentamos, se consigue poniendo cada tarea en un espacio de direcciones virtuales diferentes, al asignar un mapa de traduccion de traduccion virtual a fisica diferente. Ya que una tarea no puede generar una dirección virtual que se mapee a otra parte de la memoria fisica usada por otra tarea, las tareas estan aisladas unas de otras. El sistema operativo se podrái almacenar como una tarea independiente y aislada del resto. Sin embargo el mecanismo de proteccion del sistema operativo, es diferente y lo veremos mas adelante. Ese mecanismo, permite al sistema operativo, el ser compartido por todas las tareas y accederse dentro de cada una de ellas, mientras que por otra parte lo protege de las aplicaciones. El sistema operativo es compartido por todas las tareas, disponiendo que una parte del mapa de dirección virtual a fisica sea la misma para todas las tareas y almacanado el sistema operativo en esa parte comun del espacio de direcciones virtual. Esta parte del espacio de direcciones virtual que es comun a todas las tareas se llama "espacio de direcciones GLOBAL". La parte de espacio de direcciones virtuales que es unica para una tarea simple, se llama "espacio de direcciones LOCAL". Una consecuencia inmediata de tener un espacio de direcciones local diferente para cada tarea, es que la referencia a la "misma" dirección virtual en cada tarea, corresponde a diferentes direccicones "fisicas". De esta manera se consigue el aislamiento de tareas. Una refenrenca, en cambio, en el espacio de direcciones global (donde está el SO), en cualquiera de las tareas se traducirá en la "misma" dirección fisica para todas las tareas. PROTECCION DENTRO DE UNA TAREA ------------------------------- Dentro de una tarea se definen 4 niveles de privilegio de ejecucion, para proteger el acceso a parte de la tarea de acuerdo con la seneibilidad de los datos. Los niveles son numerados de 0 a 3, con un cero, el mas privilegiado, y con un 3 el menos privilegiado. El nivel 0 se conoce como nivel de privilegio interno y el 3 como nivel de privilegio externo. Cada segmento de memoria, esta asicuado a un nivel de privilegio. Este nivel de privilegio limita el acceso al segmento a los programas con privilegio suficiente. Siempre que un programa intenta acceder a otro segmento (evidentemente de su espacio virtual de direcciones), se comprueba el nivel de privilegio del segmento en el cual se accede, con el nivel de privilegio del segmento al cual queremos acceder. A un programa se le permite acceder a un segmento de datos con un nivel de privilegio igual o menor al segmento en ejecucion. Un intento de ir a un niver superior, es ilegal y provoca una "excepcion" para informar del intento de violacion al sistema operativo. El uso tipico de los niveles de privilegio, es poner el núcleo del sistema operativo en el nivel 0, resto del sistema operativo al nivel 1, y las aplicaciones al nivel 3. Esto deja el nivel 2 para los niveles de software intermedio. Dada esta asignacion, el sistema operativo (nevel 0) tiene derecho de pernada sobre el resto de segmentos. El resto del sistema operativo (nivel 1) puede acceder a todos los segmentos excepto el 0. La aplicaicon de nivel 3, solo puede acceder a sus propios segmentos. Esta asignacion, protege al núcleo del sistema operativo de cualquier intruso. ----------------------------------------------------- Esto como introducción para mepezar a abrir boca...... CONTINUARA.......(si no lo impedis).
Volver a
Artículos y FAQs
|