

Unidad 5 - Gestion de la Memoria
5.1 Conceptos Fundamentales
La memoria es uno de los principales recursos de la computadora. Aunque actualmente la mayoría de los sistemas de cómputo cuentan con una alta capacidad de memoria, de igual manera las aplicaciones actuales tienen también altos requerimientos de ella, lo que sigue generando escasez de memoria en los sistemas multitarea y/o multiusuario.
La labor del administrador de memoria 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.
Memoria real. La memoria real o principal es en donde son ejecutados los programas y procesos de una computadora y es el espacio real que existe en memoria para que se ejecuten los procesos. Por lo general esta memoria es de mayor costo que la memoria secundaria, pero el acceso a la información contenida en ella es de más rápido acceso. Solo la memoria cache es más rápida que la principal, pero su costo es a su vez mayor.
Memoria virtual. El término memoria virtual se asocia a dos conceptos que normalmente a parecen unidos:
1. El uso de almacenamiento secundario para ofrecer al conjunto de las aplicaciones la ilusión de tener más memoria RAM de la que realmente hay en el sistema. Esta ilusión de existe tanto a nivel del sistema, es decir, teniendo en ejecución mas aplicaciones de las que realmente caben en la memoria principal, sin que por ello cada aplicación individual pueda usar mas memoria de la que realmente hay o incluso de forma más general, ofreciendo a cada aplicación más memoria de la que existe físicamente en la máquina.
2. Ofrecer a las aplicaciones la ilusión de que están solas en el sistema, y que por lo tanto, pueden usar el espacio de direcciones completo. Esta técnica facilita enormemente la generación de código, puesto que el compilador no tiene por qué preocuparse sobre dónde residirá la aplicación cuando se ejecute.

5.2 Organización De La Memoria.
Para que un proceso pueda ejecutarse debe estar ubicado en la memoria principal del ordenador. Una parte del sistema operativo se va a encargar de gestionar la memoria principal, de forma que los procesos puedan residir en la memoria sin conflictos. La gestión de la memoria implica varias tareas, una de ellas es llevar un registro de qué zonas están libres (es decir, no están siendo utilizadas por ningún proceso), y qué zonas están ocupadas por qué procesos. Otra tarea importante surge en sistemas en los que no todos los procesos, o no todo el código y datos de un proceso, se ubican en la memoria principal. En estos sistemas, a menudo se debe pasar parte, o la totalidad del código y datos de un proceso, de memoria a disco, o viceversa; siendo el sistema operativo responsable de esta tarea. De esta forma se libera al usuario de realizar estas transferencias de información, de las cuales no es consciente.
Existen varias formas de gestionar la memoria. Por lo común, la forma de gestión dependerá de la máquina virtual que se quiera proporcionar y del hardware subyacente. Con independencia de la forma de gestión es necesario decidir qué estrategias se deben utilizar para obtener un rendimiento óptimo.
Jerarquía de la memoria .Los programas y datos necesitan estar en la memoria principal para ser ejecutados, o para poder ser referenciados. Los programas o datos que no se necesitan de inmediato pueden guardarse en la memoria secundaria hasta que se necesiten, y en ese momento se transfieren a la memoria principal para ser ejecutados o referenciados. Los soportes de memoria secundaria, como cintas o discos, son en general menos caros que la memoria principal, y su capacidad es mucho mayor. Normalmente, es mucho más rápido el acceso a la memoria principal que a la secundaria.


La memoria caché, es una memoria de alta velocidad, mucho más rápida que la memoria principal. La memoria caché es extremadamente cara, si se compara con la principal, por lo que sólo se utilizan memorias caché relativamente pequeñas La memoria caché introduce un nivel adicional de transferencia de información en el sistema. Los programas en memoria principal se pasan a la memoria caché antes de ejecutarse. En la memoria caché se pueden ejecutar mucho más rápido que en la principal..
5.3 Nivel Físico De Memoria: Espacio De Direcciones Lineal. Jerarquía De Memorias Y Caché. El Espacio De Direcciones En El Lenguaje De Alto Nivel. Elementos Y Fases En La Traducción De Direcciones: Compi-Lación, Enlace, Carga Del Programa, Traducción Dinámica.
Jerarquía de almacenamiento
Los componentes fundamentales de las computadoras de propósito general son la CPU, el espacio de almacenamiento y los dispositivos de entrada/salida. La habilidad para almacenar las instrucciones que forman un programa de computadora y la información que manipulan las instrucciones es lo que hace versátiles a las computadoras diseñadas según la arquitectura de programas almacenados
Una computadora digital representa toda la información usando el sistema binario. Texto, números, imágenes, sonido y casi cualquier otra forma de información puede ser transformada en una sucesión de bits, o dígitos binarios, cada uno de los cuales tiene un valor de 1 ó 0. La unidad de almacenamiento más común es el byte, igual a 8 bits. Habilidad para acceder a información no contigua
• Acceso aleatorio significa que se puede acceder a cualquier localización de la memoria en cualquier momento en el mismo intervalo de tiempo, normalmente pequeño.
• Acceso secuencial significa que acceder a una unidad de información tomará un intervalo de tiempo variable, dependiendo de la unidad de información que fue leída anteriormente. El dispositivo puede necesitar buscar (posicionar correctamente el cabezal de lectura/escritura de un disco), o dar vueltas (esperando a que la posición adecuada aparezca debajo del cabezal de lectura/escritura en un medio que gira continuamente).
Habilidad para cambiar la información
• Las memorias de lectura/escritura o memorias cambiables permiten que la información se reescriba en cualquier momento. Una computadora sin algo de memoria de lectura/escritura como memoria principal sería inútil para muchas tareas. Las computadoras modernas también usan habitualmente memorias de lectura/escritura como memoria secundaria.
• La memorias de sólo lectura retienen la información almacenada en el momento de fabricarse y la memoria de escritura única (WORM) permite que la información se escriba una sola vez en algún momento tras la fabricación. También están las memorias inmutables, que se utilizan en memorias terciarias y fuera de línea. Un ejemplo son los CD-ROMs.
• Las memorias de escritura lenta y lectura rápida son memorias de lectura/escritura que permite que la información se reescriba múltiples veces pero con una velocidad de escritura mucho menor que la de lectura. Un ejemplo son los CD-RW.
Direccionamiento de la información
• En la memoria de localización direccionable, cada unidad de información accesible individualmente en la memoria se selecciona con su dirección de memoria numérica. En las computadoras modernas, la memoria de localización direccionable se suele limitar a memorias primarias, que se leen internamente por programas de computadora ya que la localización direccionable es muy eficiente, pero difícil de usar para los humanos.
• En las memorias de sistema de archivos, la información se divide en Archivos informáticos de longitud variable y un fichero concreto se localiza en directorios y nombres de archivos "legible por humanos". El dispositivo subyacente sigue siendo de localización direccionable, pero el sistema operativo de la computadora proporciona la abstracción del sistema de archivos para que la operación sea más entendible. En las computadora modernas, las memorias secundarias, terciarias y fuera de línea usan sistemas de archivos.
• En las memorias de contenido direccionable (content-addressable memory), cada unidad de información legible individualmente se selecciona con una valor hash o un identificador corto sin relación con la dirección de memoria en la que se almacena la información. La memoria de contenido direccionable pueden construirse usando software o hardware; la opción hardware es la opción más rápida y cara.
Capacidad de memoria
A inicios de 1970 aparecen las memorias realizadas por semiconductores, como las utilizadas en la serie de computadoras IBM 370. La velocidad de las computadoras se incrementó, multiplicada por 100.000 aproximadamente y la capacidad de memoria creció en una proporción similar. Este hecho es particularmente importante para los programas que utilizan tablas de transposición: a medida que aumenta la velocidad de la computadora se necesitan memorias de capacidad proporcionalmente mayor para mantener la cantidad extra de posiciones que el programa está buscando. Memorias de mayor capacidad podrán ser utilizadas por programas con tablas de Hash de mayor envergadura, las cuales mantendrán la información en forma permanente.
• Minicomputadoras: se caracterizan por tener una configuración básica regular que puede estar compuesta por un monitor, unidades de disquete, disco, impresora, etc. Su capacidad de memoria varía de 16 a 256 Kbyte.
• Macro computadoras: son aquellas que dentro de su configuración básica contienen unidades que proveen de capacidad masiva de información, terminales (monitores), etc. Su capacidad de memoria varía desde 256 a 512 Kbyte, también puede tener varios megabytes o hasta gigabytes según las necesidades de la empresa.
• Microcomputadores y computadoras personales: con el avance de la microelectrónica en la década de los 70 resultaba posible incluir todos los componentes del procesador central de una computadora en un solo circuito integrado llamado microprocesador. Ésta fue la base de creación de unas computadoras a las que se les llamó microcomputadoras. El origen de las microcomputadoras tuvo lugar en los Estados Unidos a partir de la comercialización de los primeros microprocesadores (INTEL 8008, 8080). En la década de los 80 comenzó la verdadera explosión masiva, de los ordenadores personales (Personal Computer PC) de IBM. Esta máquina, basada en el microprocesador INTEL 8008, tenía características interesantes que hacían más amplio su campo de operaciones, sobre todo porque su nuevo sistema operativo estandarizado (MS-DOS, Microsoft Disk Operating Sistem) y una mejor resolución óptica, la hacían más atractiva y fácil de usar. El ordenador personal ha pasado por varias transformaciones y mejoras que se conocen como XT(Tecnología Extendida), AT(Tecnología Avanzada) y PS/2...
Traductores: cambian el código utilizado por nosotros a código máquina. Hay tres tipos:
Ensambladores: Traduce un lenguaje, lenguaje Assembler a lenguaje máquina. El lenguaje assembler asocia identificador mnemotécnico a cada instrucción del conjunto de instrucciones del procesador
Compiladores: traducen el lenguaje de alto nivel a código máquina.
Intérpretes: traducen instrucción por instrucción. Es un proceso lento, pero es el más adecuado para la verificación de os programas.
Al programa realizado en un lenguaje de alto nivel se le llama fuente y al programa que obtenemos después de aplicar el compilador, se le llama objeto.
Utilidades:
1- Editores: sirven para realizar un programa directamente en pantalla.
2- Clasificación: sirven para ordenar registros.
3- Manipulador de ficheros: copias, impresiones,
Aplicaciones:
1- Gestión: son programas que utilizan continuamente E/S.
2- Cálculo: son programas que con un mínimo de instrucciones, puede realizar cálculos.
3- Paquetes de programas: son aplicaciones ya hechas
Una interface es el límite que separa los recursos físicos o lógicos pero que lleva implícito una forma de acoplamiento o entendimiento entre ellos. Memoria fija (firmware): Es una memoria que lleva las instrucciones en lenguaje máquina. Estas memorias son de tipo ROM. Esta memoria provoca la carga del sistema operativo en la memoria RAM, a continuación ya podemos comunicarnos con el sistema. Sin este tipo de memoria no podríamos trabajar.
Unidad de control
• CPU - Unidad aritmetico-lógica
• Ordenador - Unidad de E/S
• Memoria interna
• Sistema Físico - Almacenamiento secundario(Hardware)
• Entrada
• Sistema Informático - Periféricos - Salida
• Entrada/salida
• Memoria fija (Firmware)
• Sistema Lógico - Programas de control
• (Software) - Programas de servicio

5.4 Elementos Y Objetivos De La Gestión De Memoria.
Se denomina gestión de memoria al acto de gestionar la memoria de un dispositivo informático. De forma simplificada se trata de proveer mecanismos para asignar secciones de memoria a los programas que las solicitan, y a la vez, liberar las secciones de memoria que ya no se utilizan para que estén disponibles para otros programas. La gestión de la memoria principal de un ordenador es una tarea de suma importancia para el funcionamiento del mismo.
Los sistemas de memoria virtual separan las direcciones de memoria utilizadas por un proceso de las direcciones físicas reales, permitiendo la separación de procesos e incrementando la cantidad efectiva de memoria de acceso aleatorio utilizando la paginación. La calidad de la gestión de la memoria es crucial para las prestaciones del sistema.
La memoria física de un sistema se divide en dos categorías:
• memoria de acceso aleatorio: comprende circuitos integrados y es, en consecuencia, muy veloz.
• memoria de almacenamiento masivo: comprende dispositivos magnéticos (disco duro, cintas magnéticas, etcétera) y es mucho más lenta.
La memoria física consiste en un área de almacenamiento temporal para los programas y los datos que se usan. A grandes rasgos, mientras más grande sea el espacio de memoria, más aplicaciones se podrán ejecutar al mismo tiempo. Además, mientras más rápida sea la memoria, más rápida será la reacción del sistema. Por eso, el sistema operativo debe estar organizado de manera lo suficientemente eficiente como para obtener el mejor rendimiento posible.
Características:
Los sistemas de gestión de memoria de sistemas operativos multitarea normalmente tratan con las siguientes tareas:
• Reasignación: En los sistemas con memoria virtual, los programas en la memoria debe ser capaz de residir en diferentes partes de la memoria en diferentes momentos. Esto se debe a que cuando el programa se cambió de nuevo en la memoria después de ser intercambiado por un tiempo que no siempre se puede colocar en el mismo lugar. La unidad de gestión de memoria virtual también debe hacer frente a la concurrencia. gestión de memoria en el sistema operativo por lo tanto debe ser capaz de trasladar los programas en la memoria y manejar referencias de la memoria y las direcciones en el código del programa para que siempre apuntan a la ubicación correcta en la memoria.
• Protección: Los procesos no deberían poder referenciar la memoria de otros procesos sin permiso, para evitarlo existe la protección de memoria, que evita que código malicioso o erróneo de un programa interfiera con la operación de otros programas en ejecución.
• Memoria compartida: Aunque la memoria utilizada por diferentes procesos suele estar protegida, algunos procesos puede que sí tengan que compartir información y, para ello, han de acceder la misma sección de memoria. La memoria compartida es una de las técnicas más rápidas para posibilitar la comunicación entre procesos.
• Organización lógica: Los programas a menudo están organizados en módulos, algunos de los cuales pueden ser compartidos por diferentes programas, algunos son de sólo-lectura y otros contienen datos que se pueden modificar. La gestión de memoria es responsable de manejar esta organización lógica, que se contrapone al espacio de direcciones físicas lineales. Una forma de lograrlo es mediante la segmentación de memoria.
• Organización física: La memoria suele dividirse en un almacenamiento primario de alta velocidad y uno secundario de menor velocidad. La gestión de memoria del sistema operativo se ocupa de trasladar la información entre estos dos niveles de memoria.
• Gestión de memoria en DOS: Además de la gestión estándar de memoria, la barrera de los 640 KB de MS-DOS y los sistemas compatibles dieron lugar al desarrollo de programas conocidos como gestores de memoria cuando las memorias principales de los PC comenzaron a ser mayores que 640 KB a finales de los años 1980 (véase memoria convencional). Estos desplazan porciones del sistema operativo fuera de su localización tradicional para incrementar la cantidad de memoria convencional o semiconvencional disponible para otras aplicaciones. El EMM386 es un ejemplo, el cual fue parte de la instalación estándar de las últimas versiones de DOS, así como el QEMM. Estos permitieron el uso de memoria más allá de la barrera de los 640 KB, donde la memoria solía estar reservada a la memoria de acceso aleatorio, y memorias

5.5 Transparencia. Concepto De Espacio Virtual. Reubicación Estática Y Dinámica. Hardware De Traducción De Direcciones.
Espacio Virtual: es donde un grupo de personas comprende los siguientes elementos:
• Desean interactuar para satisfacer sus necesidades o llevar a cabo roles específicos.
• Comparten un propósito determinado que constituye la razón de ser de la comunidad virtual.
Con unos sistemas informáticos que medían las interacciones y facilitan la cohesión entre los miembros. La comunidad Virtual queda definida por 3 aspectos distintos:
1.- La comunidad virtual como un lugar: en el que los individuos pueden mantener relaciones de carácter social o económico.
2.- La comunidad virtual como un símbolo: ya que la comunidad virtual posee una dimensión simbólica. Los individuos tienden a sentirse simbólicamente unidos a la comunidad virtual, creándose una sensación de pertenencia.
3.- La comunidad virtual como virtual: las comunidades virtuales poseen rasgos comunes a las comunidades físicas, sin embargo el rasgo diferenciador de la comunidad virtual es que ésta se desarrolla, al menos parcialmente, enun lugar virtual, o en un lugar construido a partir de conexiones telemáticas.
REUBICACIÓN DE MEMORIA.: se refiere a la capacidad de cargar y ejecutar un programa dado, en un lugar arbitrario de la memoria.
Podríamos decir, que las direcciones lógicas o virtuales son identificaciones usadas para referenciar la información, dentro del espacio de direcciones de un proceso, mientras que las direcciones físicas, designan la posición actual de la memoria real, donde los elementos de información son almacenados en tiempo de ejecución.

PROTECCIÓN Y USO COMPARTIDO.
La integridad o la protección de un sistema de multiprogramado, depende entre otras cosas, del aislamiento de los distintos espacios de direcciones, es decir no solamente, el sistema operativo debe ser protegido de intromisiones no autorizadas por parte de los procesos de usuario, sino que cada proceso, debe estar prevenido contra los accesos que accidentalmente o intencionadamente se puedan realizar en áreas de memoria asignadas a otros procesos.
El sistema operativo se encarga de copiar los datos compartidos, desde el espacio de direcciones del proceso en ejecución a todas las particiones que participan.
Realmente esta solución no tiene mucho sentido, ya que no proporciona ningún ahorro de memoria.
5.6 Gestión De La Memoria Principal.


Para ejecutar un programa es preciso cargarlo en la memoria; mientras se ejecuta, el programa accede a las instrucciones y datos que están en la memoria; en algún momento el programa termina y su espacio de memoria se declara disponible, y el siguiente programa puede cargarse y ejecutarse. El S.O en lo referente a la gestión de memoria se encarga de:
• Saber cuáles partes de la memoria se están usando actualmente y quién las está usando.
• Decidir cuáles procesos se cargarán en la memoria cuando se disponga de espacio.
• Asignar y liberar espacio de memoria según se necesite.
La Memoria Principal es un recurso muy importante que se ha de gestionar, porque se ha de disponer de velocidad. Hay dos tipos de tiempos cuando hablamos de memoria:
• Tiempo de acceso. Tiempo de finalización de una petición menos el tiempo de inicio de la petición.
• Tiempo de ciclo de la memoria. Desde que finaliza una petición hasta que se inicia la siguiente petición. Este se ve detenidamente por el Hardware.
5.7 GESTIÓN DEL ESPACIO CONTIGUO.
La memoria principal se encuentra dividida en dos partes:
• SO residente (kernel), normalmente en posiciones bajas de la memoria junto al vector de interrupciones
• Zona para los procesos de usuario, normalmente en posiciones altas de la memoria
La zona para procesos de usuarios se encuentra dividida a su vez en varias particiones que se asignarán a los procesos
• Particionamiento estático: las particiones se establecen en el momento de arranque del SO y permanecen fijas durante todo el tiempo
• Particionamiento dinámico: las particiones cambian de acuerdo a los requisitos de los procesos.

5.8 Políticas de gestión de huecos libres. Particiones fijas (MFT) y variables (MVT). Estructuras de control. El problema de la fragmentación. Compactación.
Multiprogramación con particiones fijas
Para poder implementar la multiprogramación, se puede hacer uso de particiones fijas o variables en la memoria. En el caso de las particiones fijas, la memoria se puede organizar dividiéndose en diversas partes, las cuales pueden variar en tamaño. Esta partición la puede hacer el usuario en forma manual, al iniciar una sesión con la máquina.
Compactación de memoria: Cuando un proceso llega y necesita memoria, el sistema operativo busca en la tabla de huecos alguno lo suficientemente grande para el proceso. Si el hueco es muy grande, lo parte en dos. Una parte es asignada al proceso y la otra se identifica como hueco. Cuando el proceso termina y la memoria es liberada, el espacio es identificado como un hueco más en la tabla y si el nuevo hueco es adyacente con otro, ambos huecos se unen formando un solo hueco más grande. En ese momento se debe de checar si no existen procesos a los que este nuevo hueco pueda darles cabida. Asignación dinámica
Administración de la memoria con mapas de bits: Este tipo de administración divide la memoria en unidades de asignación, las cuales pueden ser tan pequeñas como unas cuantas palabras o tan grandes como varios kilobytes. A cada unidad de asignación le corresponde un bit en el mapa de bits, el cual toma el valor de 0 si la unidad está libre y 1 si está ocupada (o viceversa).Muestra una parte de la memoria y su correspondiente mapa de bits.
Administración de la memoria con listas ligadas: Otra forma de mantener un registro de la memoria es mediante una lista ligada de los segmentos de memoria asignados o libres, en donde un segmento puede ser un proceso o un hueco entre dos procesos. La memoria está mostrada como una lista ligada de segmentos. Cada entrada de la lista especifica un hueco (H) o un proceso (P), la dirección donde comienza, su longitud y un apuntador a la siguiente entrada.
Asignación del hueco de intercambio: En algunos sistemas, cuando el proceso se encuentra en la memoria, no hay un hueco en el disco asignado a él. Cuando deba intercambiarse, se deberá asignar un hueco para él en el área de intercambio del disco. Los algoritmos para la administración del hueco de intercambio son los mismos que se utilizan para la administración de la memoria principal.
Fragmentación.La fragmentación es la memoria que queda desperdiciada al usar los métodos de gestión de memoria que se vieron en los métodos anteriores. Tanto el primer ajuste, como el mejor y el peor producen fragmentación externa. La fragmentación es generada cuando durante el reemplazo de procesos quedan huecos entre dos o más procesos de manera no contigua y cada hueco no es capaz de soportar ningún proceso de la lista de espera. Tal vez en conjunto si sea espacio suficiente, pero se requeriría de un proceso de desfragmentación de memoria o compactación para lograrlo. Esta fragmentación se denomina fragmentación externa.


5.9 Intercambio (Swapping).
Es un mecanismo para mover programas entre memoria principal y secundaria, normalmente disco (dispositivo se swap). Con swapping, los programas pueden salir/entrar de/a memoria durante su tiempo de ejecución. Normalmente, un programa abandona la memoria para dejar espacio a otro. El swapping modifica el Sistemas Operativos II Gestión de la memoria 92 grafo de transición de estados de los procesos en un sistema multiprogramado, desdoblando los estados de bloqueado y preparado por dentro y fuera de memoria. El swapping aporta las siguientes ventajas:
• Permite influir en la gestión de procesos para controlar el grado de multiprogramación (planificación a medio plazo).
• Proporciona flexibilidad en la gestión de la memoria, permitiendo una utilización más eficiente del espacio.
Para soportar swapping se requiere espacio para el intercambio en almacenamiento secundario, generalmente disco. Se puede utilizar un dispositivo específico independiente, una partición del disco, o incluso compartir la misma del sistema de ficheros.
El direccionamiento de los programas debe ser relativo a un registro base (reubicación dinámica). El swapper establece el nuevo valor del registro base para un proceso cada vez que lo carga en memoria.
El sacar un programa de memoria está motivado por la necesidad de obtener espacio libre, generalmente para ejecutar otro programa (quizás uno más prioritario). El swapper debe seleccionar cuidadosamente qué programas van a salir. Ya que, como hemos comentado, el swapping condiciona la planificación de procesos, algunos de los criterios a aplicar para seleccionar el proceso a sacar están relacionados con los parámetros de la planificación. Los criterios suelen ser:
• El estado del proceso. Los programas bloqueados no plantean una necesidad inmediata de proceso.
• La prioridad del proceso.
• El tamaño del programa. Los programas mayores liberan más espacio al salir de memoria, pero será más costoso cargarlos de nuevo
• El tiempo que el programa lleva en memoria.
5.10 Descripción. Relación con la planificación de procesos.
Cuando se usa memoria virtual, o cuando una dirección es leída o escrita por la CPU, una parte del hardware dentro de la computadora traduce las direcciones de memoria generadas por el software (direcciones virtuales) en:
• la dirección real de memoria (la dirección de memoria física).
• una indicación de que la dirección de memoria deseada no se encuentra en memoria principal (llamado excepción de memoria virtual)
En el primer caso, la referencia a la memoria es completada, como si la memoria virtual no hubiera estado involucrada: el software accede donde debía y sigue ejecutando normalmente. En el segundo caso, el sistema operativo es invocado para manejar la situación y permitir que el programa siga ejecutando o aborte según sea el caso. La memoria irreal 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 ejecuten 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 física y el resto almacenado en el disco, y puede ser referenciado fácilmente.
Debido a 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 también simplifica la carga del programa para su ejecución, llamada reubicación, este procedimiento permite que el mismo programa se ejecute en cualquier posición de la memoria física.
5.11 Paginación.
Permiten la ubicación no contigua de programas para combatir la fragmentación y la degradación de la memoria. Al poder ubicarse de forma no contigua, un programa ya no necesita un hueco de su tamaño, sino que la cantidad total de memoria libre sea mayor o igual.
La ubicación no contigua requiere dividir los programas en trozos. En paginación, que es un caso particular del particionado fijo, el programa se divide en páginas del mismo tamaño.
Las tablas de páginas o segmentos proporcionan reubicación dinámica a nivel de página o de segmento. En paginación, el cargador busca marcos de página libres en memoria, carga las páginas del programa, crea la tabla de páginas con la correspondencia y carga su dirección en el PTBR. En segmentación el proceso es similar, salvo que requiere la asignación de huecos adecuados al tamaño de cada segmento del programa, así como la colaboración del compilador y el montador para establecer los tamaños.
5.12 Segmentación.
La segmentación, que es un caso particular de particionado variable, divide el programa en sus unidades lógicas (código,pila, datos, ...), denominadas segmentos.
Las direcciones lógicas de los programas no contiguos presentan una gran independencia de su ubicación física (direccionamiento virtual), proporcionada sobre la base de tablas de traducción de direcciones. Otra ventaja de los programas no contiguos es que facilita que varios programas compartan trozos entre ellos, por ejemplo el código, lo que permite un ahorro importante de memoria y de tiempo de carga.

5.13 Arquitectura De Un Sistema Segmentado. Circuitería De Tra-Ducción Y Estructuras De Control. Protección De Segmentos. Reubi-Cación Y Compartición De Áreas De Memoria. Combinación De La Segmentación Con La Paginación.

La segmentación es una técnica de gestión de memoria que pretende acercarse más al punto de vista del usuario. Los programas se desarrollan, generalmente, en torno a un núcleo central (principal) desde el que se bifurca a otras partes (rutinas) o se accede a zonas de datos (tablas, pilas, etc).
La segmentación de un programa la realiza el compilador y en ella cada dirección lógica se expresará mediante dos valores: Número de segmento (s) y desplazamiento dentro del segmento (d).
La segmentación también ayuda a incrementar la modularidad de un programa: Es muy común que las bibliotecas enlazadas dinámicamente estén representadas en segmentos independientes
5.14 Memoria virtual.
En un sistema sin memoria virtual, el sistema operativo divide la memoria principal en trozos y asigna uno a cada uno de los programas que están ejecutando en un instante determinado. La Figura 1.13 muestra el reparto típico de la memoria para el caso de un solo programa o de varios programas. Observe que el espacio asignado a un programa consiste en una zona de memoria principal contigua, es decir, no se asignan varios trozos disjuntos de memoria a un mismo programa. Por el contrario, como se verá más adelante, en los sistemas con memoria virtual no es necesario que los espacios de memoria asignados a los programas sean contiguos.

5.15 Generalidades.
La memoria virtual utiliza dos niveles de la jerarquía de memoria: la memoria principal y una memoria de respaldo (que suele ser el disco, aunque puede ser una memoria expandida).
Sobre memoria de respaldo se establece un mapa uniforme de memoria virtual. Las direcciones generadas por el procesador se refieren a este mapa virtual, pero, sin embargo, los accesos reales se realizan sobre la memoria principal.
Para su funcionamiento, la memoria virtual exige una gestión automática de la parte de la jerarquía de memoria formada por los niveles de memoria principal y de disco.
Insistimos en que la gestión de la memoria virtual es automática y la realiza el sistema operativo con ayuda del hardware de la máquina.


5.16 Paginación bajo demanda.
La memoria virtual se construye generalmente sobre un esquema de paginación, ya sea paginación pura o segmentación paginada. Por tanto, las unidades de información que se transfieren entre la memoria principal y la secundaria son páginas. Las transferencias desde la memoria secundaria hacia la principal se realizan normalmente bajo demanda (paginación por demanda).
Cuando un proceso necesita acceder a una página que no están en memoria principal (a lo que se denomina fallo de página), el sistema operativo se encarga de transferirla desde la memoria secundaria. Si al intentar traer la página desde memoria secundaria se detecta que no hay espacio en la memoria principal (no hay marcos libres), será necesario expulsar una página de la memoria principal y transferirla a la secundaria. Por tanto, las transferencias desde la memoria principal hacia la secundaria se realizan normalmente por expulsión. El algoritmo para elegir qué página debe ser expulsada se denomina algoritmo de reemplazo y se analizará más adelante.
Para construir un esquema de memoria virtual sobre un procesador que ofrezca paginación, se utiliza el bit de la entrada de la tabla de paginas que indica si la pagina es válida. Estarán marcadas como inválidas todas las entradas correspondientes a las páginas que no están residentes en memoria principal en ese instante. Para estas páginas, en vez de guardarse la dirección del marco, se almacenará la dirección del bloque del dispositivo que contiene la página. Cuando se produzca un acceso a una de estas paginas, se producirá una excepción (fallo de página) que activará al sistema operativo que será el encargado de traerla desde la memoria secundaria.
El proceso de transferencia de datos a un equipo de cómputo se le llama procedimiento de lectura. El proceso de transferencia de datos desde la computadora hacia el almacenamiento se denomina procedimiento de escritura.

5.17 Descripción. Fallos de página. Políticas de reemplazo: LRU, LFU, NRU, etc.
Políticas de reemplazo: Las estrategias de reemplazo se pueden clasificar en dos categorías: reemplazo global y reemplazo local. Con una estrategia de reemplazo global, se puede seleccionar, para satisfacer el fallo de página de un proceso, un marco que actualmente tenga asociada una página de otro proceso. Esto es, un proceso puede quitarle un marco de pagina a otro. La estrategia de reemplazo local requiere que, para servir el fallo de página de un proceso, sólo puedan usarse marcos de páginas libres o marcos ya asociados al proceso.
En el caso de una estrategia local, el criterio de evaluación del algoritmo se aplica sólo a las páginas en memoria principal que pertenecen al proceso que causó el fallo de página. La descripción de los algoritmos, por tanto, se realizara sin distinguir entre los dos tipos de estrategias.
El objetivo básico de cualquier algoritmo de reemplazo es minimizar la tasa de fallos de página, intentando además que la sobrecarga asociada a la ejecución del algoritmo sea tolerable y que no se requiera una MMU con características específicas.
Reemplazos. Este algoritmo favorece a las páginas que fueron usadas recientemente. Funciona de la siguiente manera: cuando una página es referenciada, fija el bit de referencia para esa página. Similarmente, cuando una página es modificada, fija su bit de modificación. Usualmente estas operaciones son realizadas por el hardware, aunque puede hacerse también por software. En un tiempo fijo, el sistema operativo pone en 0 los bits de referencia de todas las páginas, de modo que las páginas con su bit de referencia en 1 son las que fueron referenciadas dentro del último intervalo de reloj. Cuando una página debe ser reemplazada, el sistema operativo divide las páginas en cuatro categorías:
• Categoría 0: no referenciada, no modificada
• Categoría 1: no referenciada, modificada
• Categoría 2: referenciada, no modificada
• Categoría 3: referenciada, modificada
Las mejores páginas para cambiar son las que se encuentran en la categoría 0, mientras que las peores son las de la categoría 3. Se desaloja al azar una página de la categoría más baja que no esté vacía. Este algoritmo se basa en la suposición de que es mejor desalojar una página modificada a la que no se ha hecho referencia en al menos un tic de reloj, en vez de una página limpia que se está usando mucho.
5.18 El modelo del conjunto de trabajo. Hiperpaginación. Políticas de frecuencia de fallos de página.
Hiperpaginación. Si el número de marcos de página asignados a un proceso no es suficiente para almacenar las páginas referenciadas activamente por el mismo, se producirá un número elevado de fallos de página. A esta situación se le denomina hiperpaginación (thrashing). Cuando se produce la hiperpaginación, el proceso pasa más tiempo en la cola de servicio del dispositivo de paginación que ejecutando. Dependiendo del tipo de asignación utilizado, este problema puede afectar a procesos individuales o a todo el sistema.
En un sistema operativo que utiliza una estrategia de asignación fija, si el número de marcos asignados al proceso no es suficiente para albergar su conjunto de trabajo en una determinada fase de su ejecución, se producirá hiperpaginación en ese proceso. Esto traerá consigo un aumento considerable de su tiempo de ejecución, pero, sin embargo, el resto de los procesos del sistema no se ven afectados directamente.
Políticas de administración de la memoria virtual .En un sistema de memoria virtual basado en paginación hay básicamente dos políticas que definen el funcionamiento del sistema de memoria:
• Política de reemplazo. Determina qué página debe ser desplazada de la memoria principal para dejar sitio a la pagina entrante.
• Política de asignación de espacio a los procesos. Decide cómo se reparte la memoria física entre los procesos existentes en un determinado instante.
Estos dos aspectos están muy relacionados entre sí y son determinantes en el rendimiento del sistema de memoria virtual.
• Frecuencia de Fallo de pagina
• Es un método efectivo para controlar la hiperpaginación
• Se establece un límite de tiempo,
• Cuando se produce un fallo de pagina se compara el tiempo trascurrido desde el ultimo fallo con el limite
• Es suficiente con que el hardware proporcione un bit de referencia
Si es menor que el limite, la nueva página se añade al conjunto de paginas residentes del proceso (se aumenta el número de marcos asignados al proceso) En caso contrario, todas las paginas que no han sido referenciadas desde el ultimo fallo de pagina se descartan, disminuyendo así el numero de marcos asignados al proceso.
5.19 Caracterización del Interblo-queo. Modelos formales.
Interbloqueo: El problema de los interbloqueos no se circunscribe únicamente al mundo de la informática, si que aparece en muchos otros ámbitos incluyendo el de la vida cotidiana.
Un conjunto de procesos está en interbloqueo si cada proceso está esperando un recurso que sólo puede liberar (o generar, en el caso de recursos consumibles) otro proceso del conjunto.
Normalmente, cada pro eso implicado en el interbloqueo estará bloqueado esperando un recurso, pero esto no es estrictamente necesario ya que el interbloqueo también existiría aunque los procesos involucrados realizasen una espera activa, La espera activa tiene como consecuencia un uso innecesario del procesador, pero, por lo que se refiere a los interbloqueos, no implica ninguna diferencia. A partir de esta definición, es preciso caracterizar un interbloqueo. Coffman [Coffman, 1971] identifica las siguientes condiciones como necesarias para que se produzca un interbloqueo:
1. Exclusión mutua. Los recursos implicados deben usarse en exclusión mutua, o sea, debe tratarse de recursos de uso exclusivo. Como se analizó previamente en esta exposición, los recursos compartidos no están involucrados en interbloqueos.
2. Retención y espera. Cuando no se puede satisfacer la petición de un proceso, este se bloquea manteniendo los recursos que tenía previamente asignados. Se trata de una condición que refleja una forma de asignación que corresponde con la usada prácticamente en todos los sistemas reales,
3. Sin expropiación. No se deben expropiar los recursos que tiene asignado un proceso. Un proceso sólo libera sus recursos voluntariamente.
4. Espera circular. Debe existir una lista circular de procesos tal que cada proceso en la lista esté.
5.20. Tratamiento del Interbloqueo.
Las técnicas para tratar el interbloqueo pueden clasificarse en tres categorías:
• Estrategias de detección y recuperación.
• Estrategias de prevención.
• Estrategias de predicción.
5.21 Detección y recuperación del interbloqueo.
Esta técnica de tratamiento de los interbloqueos presenta, como su nombre indica, dos fases:
• Fase de detección: Debe ejecutarse un algoritmo que determine si el estado actual del sistema está libre de interbloqueos y que, en caso de que no lo este, identifique qué procesos.
• Fase de recuperación: Una vez detectado el interbloqueo, se debe aplicar una acción que lo elimine. Como se analizara más adelante, esto implica generalmente abortar la ejecución algunos de los procesos implicados liberando de esta forma los recursos que tuvieran asignados. Debe existir, por tanto, un algoritmo que determine a qué procesos se les aplica esa medida drástica.
5.22 Algoritmos de detección. Criterios para la recuperación del interbloqueo.
Cuando el algoritmo de detección determina que existe un interbloqueo, tenemos barias alternativas. Una posibilidad es informar al operador de que se ha producido un interbloqueo y dejar que lo trate de forma manual. Otra forma es dejar que el sistema sea el que haga la recuperación del interbloqueo de forma automática. Existen dos opciones para romper un interbloqueo una de ellas consiste en interrumpir uno o más procesos para romper la cadena de espera circular, La otra consiste en desalojar recursos de uno o más de los procesos bloqueados.