unidad 4 administraciÓn de la memoria

23
UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA 4.1 Gestión de Memoria La memoria es uno de los recursos más importantes de la computadora y, en consecuencia, la parte del sistema operativo responsable de tratar con este recurso, el gestor de memoria, es un componente básico del mismo. El gestor de memoria del sistema operativo debe hacer de puente entre los requisitos de las aplicaciones y los mecanismos que proporciona el hardware de gestión de memoria. Se trata de una de las partes del sistema operativo que está más ligada al hardware. Esta estrecha colaboración ha hecho que tanto el hardware como el software de gestión de memoria hayan ido evolucionando juntos. Las necesidades del sistema operativo han obligado a los diseñadores del hardware a incluir nuevos mecanismos que, a su vez, han posibilitado el uso de nuevos esquemas de gestión de memoria. De hecho, la frontera entre la labor que realiza el hardware y la que hace el software de gestión de memoria es difusa y ha ido también evolucionando. Por lo que se refiere a la organización del capítulo, en primer lugar se presentarán los requisitos que debe cumplir la gestión de memoria en un sistema con multiprogramación. A continuación, se mostrarán las distintas fases que conlleva la generación de un ejecutable y se estudiará cómo es el mapa de memoria de un proceso. En las siguientes secciones, se analizará cómo ha sido la evolución de la gestión de la memoria, desde los sistemas multiprogramados más primitivos hasta los sistemas actuales basados en la técnica de memoria virtual. Por último, se presentará el concepto de proyección de archivos y se estudiarán algunos de los servicios POSIX y Win32 de gestión de memoria. El índice del capítulo es el siguiente: • Objetivos del sistema de gestión de memoria. • Modelo de memoria de un proceso. • Esquemas de memoria basados en asignación contigua. • Intercambio. • Memoria virtual. • Archivos proyectados en memoria. • Servicios de gestión de memoria. Objetivos del Sistema de Gestión de Memoria En un sistema con multiprogramación, el sistema operativo debe encargarse de realizar un reparto transparente, eficiente y seguro de los distintos recursos de la máquina entre los diversos procesos, de forma que cada uno de ellos crea que «tiene una máquina para él solo». Esto es, el sistema operativo debe permitir que los programadores desarrollen sus aplicaciones sin verse afectados por la posible coexistencia de su programa con otros durante su ejecución. Como se ha analizado en capítulos anteriores, en el caso del procesador esta multiplexación se logra almacenando en el bloque de control de cada proceso el contenido de los registros del procesador correspondientes a dicho proceso, salvándolos y restaurándolos durante la ejecución del mismo. En el caso de la memoria, el sistema operativo, con el apoyo del hardware de gestión de memoria del procesador, debe repartir el almacenamiento existente proporcionando un espacio de memoria independiente para cada proceso y evitando la posible interferencia voluntaria o involuntaria de cualquier otro proceso. Se podría considerar que, en el caso del procesador, se realiza un reparto en el tiempo, mientras que en el de la memoria, se trata de un reparto en el espacio (Aclaración 4.1). La acción combinada de estos dos mecanismos ofrece a los programas una abstracción de procesador virtual que les independiza del resto de

Upload: gnm1234567

Post on 25-Jun-2015

569 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA 4.1 Gestión de Memoria

La memoria es uno de los recursos más importantes de la computadora y, en consecuencia, la parte del sistema operativo responsable de tratar con este recurso, el gestor de memoria, es un componente básico del mismo. El gestor de memoria del sistema operativo debe hacer de puente entre los requisitos de las aplicaciones y los mecanismos que proporciona el hardware de gestión de memoria. Se trata de una de las partes del sistema operativo que está más ligada al hardware. Esta estrecha colaboración ha hecho que tanto el hardware como el software de gestión de memoria hayan ido evolucionando juntos. Las necesidades del sistema operativo han obligado a los diseñadores del hardware a incluir nuevos mecanismos que, a su vez, han posibilitado el uso de nuevos esquemas de gestión de memoria. De hecho, la frontera entre la labor que realiza el hardware y la que hace el software de gestión de memoria es difusa y ha ido también evolucionando.Por lo que se refiere a la organización del capítulo, en primer lugar se presentarán los requisitos que debe cumplir la gestión de memoria en un sistema con multiprogramación. A continuación, se mostrarán las distintas fases que conlleva la generación de un ejecutable y se estudiará cómo es el mapa de memoria de un proceso. En las siguientes secciones, se analizará cómo ha sido la evolución de la gestión de la memoria, desde los sistemas multiprogramados más primitivos hasta los sistemas actuales basados en la técnica de memoria virtual. Por último, se presentará el concepto de proyección de archivos y se estudiarán algunos de los servicios POSIX y Win32 de gestión de memoria. El índice del capítulo es el siguiente:• Objetivos del sistema de gestión de memoria.• Modelo de memoria de un proceso.• Esquemas de memoria basados en asignación contigua.• Intercambio.• Memoria virtual.• Archivos proyectados en memoria.• Servicios de gestión de memoria.Objetivos del Sistema de Gestión de MemoriaEn un sistema con multiprogramación, el sistema operativo debe encargarse de realizar un reparto transparente, eficiente y seguro de los distintos recursos de la máquina entre los diversos procesos, de forma que cada uno de ellos crea que «tiene una máquina para él solo». Esto es, el sistema operativo debe permitir que los programadores desarrollen sus aplicaciones sin verse afectados por la posible coexistencia de su programa con otros durante su ejecución.Como se ha analizado en capítulos anteriores, en el caso del procesador esta multiplexación se logra almacenando en el bloque de control de cada proceso el contenido de los registros del procesador correspondientes a dicho proceso, salvándolos y restaurándolos durante la ejecución del mismo.En el caso de la memoria, el sistema operativo, con el apoyo del hardware de gestión de memoria del procesador, debe repartir el almacenamiento existente proporcionando un espacio de memoria independiente para cada proceso y evitando la posible interferencia voluntaria o involuntaria de cualquier otro proceso.Se podría considerar que, en el caso del procesador, se realiza un reparto en el tiempo, mientras que en el de la memoria, se trata de un reparto en el espacio (Aclaración 4.1). La acción combinada de estos dos mecanismos ofrece a los programas una abstracción de procesador virtual que les independiza del resto de los proceso.

4.1.1 Organización de la Memoria.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 caché 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: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

Page 2: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

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 maquina.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 porque preocuparse sobre dónde residirá la aplicación cuando se ejecute.Memoria Caché. Es un tipo de memoria que se coloca entre la memoria principal y la CPU y que acelera el funcionamiento del ordenador o computadora, ya que permite ejecutar instrucciones y leer y escribir datos a una gran velocidad. Se denomina también CPU caché. Es un banco de memoria especial, a diferencia de la caché de disco, que es una parte de la memoria RAM del ordenador.Es una memoria muy rápida, de tipo RAM estática (SRAM), cuyos chips tienen un tiempo de acceso entre cinco y seis veces menor que la RAM dinámica (DRAM), que se utiliza habitualmente como memoria principal. Su precio es mucho mayor que el de la RAM.Existen dos niveles de memoria caché: la L1 o interna, un banco de memoria que está dentro del chip de la CPU, y la L2 o externa, que puede estar dentro de ese chip o en un chip aparte. La L2 alimenta a la L1 y puede acelerar la ejecución de determinadas aplicaciones, pero no de otras, ya que depende de su diseño.

4.1.2 Administración de Memoria.La parte del sistema operativo que administra la memoria se llama administrador de memoria y su labor 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.       Los sistemas de administración de memoria se pueden clasificar en dos tipos: los que desplazan los procesos de la memoria principal al disco y viceversa durante la ejecución y los que no.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.Espacio de Direcciones.Los espacios de direcciones involucrados en el manejo de la memoria son de tres tipos:•          Direcciones físicas: son aquellas que referencian alguna posición en la memoria física.•          Direcciones lógicas: son las direcciones utilizadas por los procesos.  Sufren una serie de transformaciones, realizadas por el procesador (la MMU), antes de convertirse en direcciones físicas.•          Direcciones lineales: direcciones lineales se obtienen a partir de direcciones lógicas tras haber aplicado una transformación dependiente de la arquitectura.Los programas de usuario siempre tratan con direcciones virtuales; nunca ven las direcciones físicas reales.Unidad de Manejo de Memoria.

La unidad de manejo de memoria (MMU) es parte del procesador.  Sus funciones son:•          Convertir las direcciones lógicas emitidas por los procesos en direcciones físicas.•          Comprobar que la conversión se puede realizar.  La dirección lógica  podría no tener una dirección física asociada.  Por ejemplo, la página correspondiente a una dirección se puede haber trasladado a una zona de almacenamiento secundario temporalmente.•          Comprobar que el proceso que intenta acceder a una cierta dirección de memoria tiene permisos para ello.•          La MMU se Inicializa para  cada proceso del sistema.  Esto permite que cada proceso pueda usar el rango completo de direcciones lógicas (memoria virtual), ya que las conversiones de estas direcciones serán distintas para cada proceso.•          En todos los procesos se configura la MMU para que la zona del núcleo solo se pueda acceder en modo privilegiado del procesador.•          La configuración correspondiente al espacio de memoria del núcleo es idéntica en todos los procesos.

Page 3: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

Intercambio.El objetivo del intercambio es dar cabida a la ejecución de más aplicaciones de las que pueden residir simultáneamente en la memoria del sistema:Consiste en trasladar el código y los datos de un proceso completo de memoria al sistema de almacenamiento secundario, para cargar otro previamente almacenado, no permiten a un proceso utilizar más memoria RAM de la que realmente existe en el sistema.  Esta técnica  puede ser ineficiente ya que se tiene que hacer el intercambio completo del proceso, aunque éste solo vaya a ejecutar una pequeña porción del código.Durante el intercambio un proceso puede ser sacado temporalmente de memoria y llevado a un lugar especial del disco y posteriormente vuelto a memoria y continuada su ejecución. El lugar de almacenamiento temporal suele ser un espacio suficientemente grande como para acomodar copias de las imágenes de memoria de todos los usuarios.Asignación Contigua.La memoria principal normalmente se divide en dos particiones:•          Sistema operativo residente, normalmente en la parte baja de memoria con los vectores de interrupción.•          Procesos de usuario en la parte alta.Asignación de Partición Simple.Puede utilizarse un esquema de registro de relocalización y limite para proteger un proceso de usuario de otro y de cambios del código y datos del sistema operativo.El registro de relocalización contiene la dirección contiene la dirección física mas pequeña; el registro limite contiene el rango de las direcciones lógicas cada dirección lógica debe ser menor al registro limite.Asignación de particiones múltiples.Bloques de distintos tamaños están distribuidos en memoria, cuando llega un proceso se le asigna un hueco  suficientemente grande para acomodarle.El sistema operativo debe tener información sobre:

Particiones asignadas. Particiones libres (huecos). Asignación de partición dinámica.

El proceso de compactación es una instancia particular del problema de asignación de memoria dinámica, el cual es el cómo satisfacer una necesidad de tamaño n con una lista de huecos libres. Existen muchas soluciones para el problema. El conjunto de huecos es analizado para determinar cuál hueco es el más indicado para asignarse.Las estrategias más comunes para asignar algún hueco de la tabla son:•          Primer ajuste: Consiste en asignar el primer hueco con capacidad suficiente. La búsqueda puede iniciar ya sea al inicio o al final del conjunto de huecos o en donde terminó la última búsqueda. La búsqueda termina al encontrar un hueco lo suficientemente grande. •          Mejor ajuste: Busca asignar el espacio más pequeño de los espacios con capacidad suficiente. La búsqueda se debe de realizar en toda la tabla, a menos que la tabla esté ordenada por tamaño. Esta estrategia produce el menor desperdicio de memoria posible. •          Peor ajuste: Asigna el hueco más grande. Una vez más, se debe de buscar en toda la tabla de huecos a menos que esté organizada por tamaño. Esta estrategia produce los huecos de sobra más grandes, los cuales pudieran ser de más uso si llegan procesos de tamaño mediano que quepan en ellos. Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son mejores que el peor ajuste en cuanto a minimizar tanto el tiempo del almacenamiento. Ni el primer o el mejor ajuste es claramente el mejor en términos de uso de espacio, pero por lo general el primer ajuste es más rápido.Problema: La fragmentación.

4.1.3  Jerarquía de MemoriaSe conoce como jerarquía de memoria a la organización piramidal en niveles, que tienen los ordenadores.En un ordenador hay una jerarquía de memorias atendiendo al tiempo de acceso y a la capacidad que normalmente son factores contrapuestos  por razones económicas y en muchos casos también físicas. Comenzando desde el procesador al exterior, es decir en orden creciente de tiempo de acceso y capacidad, se puede establecer  la siguiente jerarquía:Los puntos básicos relacionados con la memoria pueden resumirse en:

Page 4: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

Cantidad Velocidad Coste

La cuestión de cantidad es simple, cuanta más memoria haya disponible, más podrá usarse.La velocidad óptima para la memoria es la velocidad a la que el procesador puede trabajar.El costo de la memoria no debe ser excesivo, para que sea factible construir un equipo accesible. Los niveles que componen la jerarquía de memoria habitualmente son:

Nivel0:Registros Nivel1:Memoria caché Nivel2:Memoria Principal Nivel3:Discoduro(memoria secundaria)virtual

Nivel 0: Registros: Estos registros interaccionan continuamente con la CPU.Los registros tienen de acceso muy pequeño y una capacidad mínima, normalmente igual a la palabra del procesador (1 a 8 bytes).Nivel 1: Memoria cache: Este nivel de memoria se coloca entre la CPU y la memoria central. Es una memoria mucha más pequeña que la memoria principal pero de acceso  muchísimo más rápido.La memoria cache es extremadamente cara.Es una memoria tan rápida, porque está integrada en el procesador.Los programas en memoria principal se pasan  a la memoria cache antes de ejecutarse. En la memoria cache se pueden ejecutar mucho que en la principal.Nivel 2: la memoria principal: (También conocida como memoria RAM).Tiene almacenamiento volátil o temporal. Es decir los datos desaparecen cuando se apaga el ordenador. Los discos duros almacenan los datos de esas posibilidades tiene una serie de ventajas e inconvenientes:El costo por bit es mayor en la memoria principal que un disco duro. Es mucho más rápido leer en memoria principal que un disco duro. Nivel 3: memoria secundaria:Los soportes de memoria secundaria, como cintas o discos, son en general menos caros que la memoria principal, y su capacidad es mucho mayor. 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.Esquema4.1.4 Estrategias para la administración de la memoriaEstán dirigidas a la obtención del mejor uso posible del recurso del almacenamiento principal. Se dividen en las siguientes categorías:

Estrategias de búsqueda Estrategias de búsqueda por demanda Estrategias de búsqueda anticipada Estrategias de colocación Estrategias de reposición

Las “estrategias de búsqueda” están relacionadas con el hecho de cuándo obtener el siguiente fragmento de programa o de datos para su inserción en la memoria principal. En la “búsqueda por demanda” el siguiente fragmento de programa o de datos se carga al almacenamiento principal cuando algún programa en ejecución lo referencia. Se considera que la “búsqueda anticipada” puede producir un mejor rendimiento de sistema. Las “estrategias de colocación” están relacionadas con la determinación del lugar de la memoria donde se colocará (cargará) un programa nuevo. Las “estrategias de reposición” están relacionadas con la determinación de qué fragmento de programa o de datos desplazar para dar lugar a los programas nuevos.Asignación Contigua de Almacenamiento Versus No Contigua En la “asignación contigua” cada programa ocupa un bloque contiguo y sencillo de localizaciones de almacenamiento. En la “asignación no contigua” un programa se divide en varios bloques o “segmentos” que pueden almacenarse en direcciones que no tienen que ser necesariamente adyacentes, por lo que es más compleja pero más eficiente que la asignación continua. Asignación Contigua de Almacenamiento de Un Solo Usuario Se consideran S. O. que ya poseen desarrollado el “sistema de control de entrada / salida”: IOCS: input / output control system El

Page 5: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

tamaño de los programas está limitado por la cantidad de memoria principal, pero se puede superar este límite con técnicas de “recubrimientos”, con las siguientes características.

Si una sección particular del programa ya no es necesaria, se carga otra sección desde el almacenamiento secundario ocupando las áreas de memoria liberadas por la sección que ya no se necesita.

La administración manual por programa del recubrimiento es complicada y dificulta el desarrollo y el mantenimiento.

Protección en los sistemas de un solo usuario El usuario tiene un completo control sobre la totalidad del almacenamiento principal: El almacenamiento se divide en porciones que contienen el S.O; el programa del usuario y

una porción sin usar.

El programa del usuario podría destruir áreas del S.O que podrían: Detener el sistema Producir salidas erróneas

El S.O deberá estar protegido contra el proceso usuario:La protección se instrumenta mediante un “registro de límites” incorporado a la CPUContiene la dirección de la instrucción más alta utilizada por el S.O.Si se intenta ingresar el S.O la instrucción es interceptada y el proceso finaliza.Procesamiento por lotes de flujo único: Los sistemas de un solo usuario se dedican a un trabajo durante más tiempo del que toma su ejecución. Los trabajos requieren de:

“tiempo de instalación”: el necesario para preparar el entorno operativo requerido. “tiempo de descarga”: el necesario para desmontar el entorno operativo que fue requerido. Durante la instalación y descarga de los trabajos la CPU no está ejecutando dichos trabajos

requeridos, por lo cual: Automatizar la “transición de trabajo a trabajo” reduce la cantidad de tiempo perdido entre trabajos. Surgieron los sistemas de “procesamiento por lotes”.

En el “procesamiento por lotes de flujo único” los trabajos se agrupan en “lotes” encolándose para su ejecución.

El “procesador de flujos de trabajos”: Lee las instrucciones del “lenguaje de control de trabajos”. Facilita la preparación del trabajo siguiente. Emite instrucciones al operador del sistema. Automatiza funciones anteriormente manuales. Cuando finaliza un trabajo efectúa las “operaciones de mantenimiento” apropiadas para

facilitar la transición del siguiente trabajo.De las diversas organizaciones de memoria las que realizan una asignación no contigua (paginación, segmentación y segmentación paginada) del almacenamiento permiten implantar una administración virtual de la memoria.Para cualquiera de las tres formas de organizar esta memoria virtual habrá que  determinar:Estrategias de obtención. Determinan cuándo se debe transferir una página o un segmento del almacenamiento secundario al primario. Las estrategias de obtención por demanda esperan a que un proceso en ejecución haga referencia a una página o a un segmento antes de traerla/lo. Los esquemas de obtención anticipada intentan determinar por adelantado a qué páginas o segmentos hará referencia un proceso. Si la probabilidad de una referencia es alta y hay espacio disponible, entonces se trae al almacenamiento primario la página o segmento antes de que se haga la referencia explícita.Estrategias de colocación. Determinan en qué lugar de la memoria principal se debe colocar una página o un segmento entrante. Los sistemas de paginación vuelven trivial la decisión de colocación, porque una página entrante se puede ubicar en cualquier marco de página disponible. Los sistemas con segmentación requieren estrategias de colocación como las tratadas en el contexto de los sistemas de multiprogramación con particiones dinámicas.Estrategias de reemplazo. Sirven para decidir qué página o segmento se debe desplazar para dejar espacio a una página o segmento entrante cuando está completamente ocupada 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

Page 6: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

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.La fragmentación puede ser:Fragmentación Externa: existe el espacio total de memoria para satisfacer un requerimiento, pero no es contigua.Fragmentación Interna: la memoria asignada puede ser ligeramente mayor que la requerida; esta referencia es interna a la partición, pero no se utiliza.La fragmentación externa se puede reducir mediante la compactación para colocar toda la memoria libre en un solo gran bloque, pero est a solo es posible si la relocalización es dinámica y se hace en tiempo de ejecución.Paginación.Es una técnica de manejo de memoria, en la cual el espacio de memoria se divide en secciones físicas de igual tamaño, denominadas marcos de página. Los programas se dividen en unidades lógicas, denominadas páginas, que tienen el mismo tamaño que los marcos de páginas. De esta forma, se puede cargar una página de información en cualquier marco de página.Las páginas sirven como unidad de almacenamiento de información y de transferencia entre memoria principal y memoria auxiliar o secundaria. Cada marco se identifica por la dirección de marco, que está en la posición física de la primera palabra en el marco de página.Las páginas de un programa necesitan estar contiguamente en memoria, aunque el programador lo observe de esta forma. Los mecanismos de paginación permiten la correspondencia correcta entre las direcciones virtuales (dadas por los programas) y las direcciones reales de la memoria que se reverencien.Ventajas de la paginación.

Es posible comenzar a ejecutar un programa, cargando solo una parte del mismo en memoria, y el resto se cargara bajo la solicitud.

No  es necesario que las paginas estén contiguas en memoria, por lo que no se necesitan procesos de compactación cuando existen marcos de paginas libres dispersos en la memoria.

Es fácil controlar todas las páginas, ya que tienen el mismo tamaño. El mecanismo de traducción de direcciones (DAT) permite separar los conceptos de espacio

de direcciones y espacios de memoria. Todo el mecanismo es transparente al usuario. Se libera al programador de la restricción de programar para un tamaño físico de memoria,

con lo que s e aumenta su productividad. Se puede programar en función de una memoria mucho más grande a la existente.

Al no necesitarse cargar un programa completo en memoria para su ejecución, se puede aumentar el número de programas multiprogramándose.

Se elimina el problema de fragmentación externa.

Desventajas de la paginación. El costo de hardware y software se incrementa, por la nueva información que debe

manejarse y el mecanismo de traducción de direcciones necesario. Se consume mucho más recursos de memoria, tiempo en el CPU para su implantación. Se deben reservar áreas de memoria para las PMT de los procesos. Al no ser fija el tamaño de estas, se crea un problema semejante al de los programas (como

asignar un tamaño óptimo sin desperdicio de memoria, u “ovearhead” del procesador). Aparece el problema de fragmentación interna. Así, si se requieren 5K para un programa,

pero las paginas son de 4K, deberán asignárseles 2 paginas (8k), con lo que quedan 3K sin utilizar.

 La suma de los espacios libres dejados de esta forma puede ser mayor que el de varias paginas, pero no podrá ser utilizado.

Debe asignarse un tamaño promedio a las páginas, evitando que si son muy pequeñas, se necesiten TABLAS BMT y PMT muy grandes, y si son muy grandes, se incremente el grado de fragmentación interna.

Segmentación.Es un esquema de manejo de memoria mediante el cual la estructura del programa refleja su

Page 7: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

división lógica; llevándose a cabo una agrupación lógica de la información en bloques de tamaño variable denominados segmentos. Cada uno de ellos tienen información lógica del programa: subrutina, arreglo, etc. Luego, cada espacio de direcciones de programa consiste de una colección de segmentos, que generalmente reflejan la división lógica del programa.La segmentación permite alcanzar los siguientes objetivos:Modularidad de programas: cada rutina del programa puede ser un bloque sujeto a cambios y recopilaciones, sin afectar por ello al resto del programa.Estructuras de datos de largo variable: Ej. Stack, donde cada estructura tiene su propio tamaño y este puede variar.Protección: se puede proteger los módulos del segmento contra accesos no autorizados.Comparación: dos o más procesos pueden ser un mismo segmento, bajo reglas de protección; aunque no sean propietarios de los mismos.Enlace dinámico entre segmentos: puede evitarse realizar todo el proceso de enlace antes de comenzar a ejecutar un programa. Los enlaces se establecerán solo cuando sea necesario.Ventajas de la segmentación.

El programador puede conocer las unidades lógicas de su programa, dándoles un tratamiento particular.

Es posible compilar módulos separados como segmentos el enlace entre los segmentos puede suponer hasta tanto se haga una referencia entre segmentos.

Debido a que es posible separar los módulos se hace más fácil la modificación de los mismos. Cambios dentro de un modulo no afecta al resto de los módulos.

Es fácil el compartir segmentos. Es posible que los segmentos crezcan dinámicamente según las necesidades del programa

en ejecución. Existe la posibilidad de definir segmentos que aun no existan. Así, no se asignara memoria,

sino a partir del momento que sea necesario hacer usos del segmento. Un ejemplo de esto, serian los arreglos cuya dimensión no se conoce hasta tanto no se comienza a ejecutar el programa. En algunos casos, incluso podría retardar la asignación de memoria hasta el momento en el cual se referencia el arreglo u otra estructura de dato por primera vez.

Desventajas de la segmentación. Hay un incremento en los costos de hardware y de software para llevar a cabo la

implantación, así como un mayor consumo de recursos: memoria, tiempo de CPU, etc. Debido a que los segmentos tienen un tamaño variable se pueden presentar problemas de

fragmentación externas, lo que puede ameritar un plan de reubicación de segmentos en memoria principal.

Se complica el manejo de memoria virtual, ya que los discos almacenan la información en bloques de tamaños fijos, mientras los segmentos son de tamaño variable. Esto hace necesaria la existencia de mecanismos más costosos que los existentes para paginación.

Al permitir que los segmentos varíen de tamaño, puede ser necesarios planes de reubicación a nivel de los discos, si los segmentos son devueltos a dicho dispositivo; lo que conlleva a nuevos costos.

No se puede garantizar, que al salir un segmento de la memoria, este pueda ser traído fácilmente de nuevo, ya que será necesario encontrar nuevamente un área de memoria libre ajustada a su tamaño.

La compartición de segmentos permite ahorrar memoria, pero requiere de mecanismos adicionales da hardware y software.

Estas desventajas tratan de ser minimizadas, bajo la técnica conocida como Segmentación paginada

4.1.5  Multiprogramación con Particiones Fijas y variablesPara implementar la multiprogramación, se puede hacer uso de particiones fijas o variablesen 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.Una vez implementada la partición, hay dos maneras de asignar los procesos a ella. La primera es mediante el uso de una cola única  que asigna los procesos a los espacios disponibles de la memoria conforme se vayan desocupando. El tamaño del hueco de memoria disponible es usado para localizar en la cola el primer proceso que quepa en él. Otra forma de asignación es buscar en la cola el proceso de tamaño mayor que se ajuste al hueco, sin embargo hay que tomar en

Page 8: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

cuenta que tal método discrimina a los procesos más pequeños. Dicho problema podría tener solución si se asigna una partición pequeña en la memoria al momento de hacer la partición inicial, el cual sería exclusivo para procesos pequeños.Multiprogramación de partición fija: traducción y carga absolutas.Los trabajos se traducen con ensambladores y compiladores absolutos para ser ejecutados solo dentro de una partición especifica. Si un trabajo estaba listo para su ejecución y se ocupa su partición, entonces ese trabajo debe esperar, aun cuando están disponibles otras particiones.Fragmentación en la multiprogramación de partición fija:En los sistemas  de multiprogramación de partición fija, la fragmentación se produce cuando los trabajos del usuario  no llenan completamente sus particiones asignadas, o cuando una partición permanece sin usar por que es demasiado pequeña para alojar un trabajo que se encuentra en espera.Multiprogramación con particiones variables:El sistema operativo lleva una tabla indicando cuáles partes de la memoria están disponibles y cuáles están ocupadas. Inicialmente, toda la memoria está disponible para los procesos de usuario y es considerado como un gran bloque o hueco único de memoria. Cuando llega un proceso que necesita memoria, buscamos un hueco lo suficientemente grande para el proceso. Si encontramos uno, se asigna únicamente el espacio requerido, manteniendo el resto disponible para futuros procesos que requieran de espacio.

4.2 Memoria RealLa 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.La memoria principal puede ser considerada como un arreglo lineal de localidades de almacenamiento de un byte de tamaño. Cada localidad de almacenamiento tiene asignada una dirección que la identifica. La memoria principal es el lugar donde el CPU lee las instrucciones a ejecutar, así como algunos datos a emplear.Sin IntercambioMono Programación sin Intercambio o Paginación. Cuando solo se tiene un proceso que ocupe la memoria a la vez, el esquema de la administración de la memoria es el más sencillo que hay. Sin embargo, éste método ya no tiene aplicación en la actualidad, ya que era visto en las computadoras con sistemas operativos de un solo usuario y una sola tarea. El usuario introducía su disco a la computadora (por lo general, la máquina no contaba con disco duro) y ejecutaba su aplicación, la cual acaparaba toda la máquina.Ejemplos de distribución de la memoria principal con un sistema operativo y un solo proceso de usuarioLa memoria se divide entre el sistema operativo y el proceso de un solo usuario. La más conocida es la que muestra el inciso c, que es la usada por las PC’ de IBM. Los controladores de dispositivo los almacena en memoria ROM, en un bloque de 8K de la parte superior del espacio de direcciones de 1M.El ejemplo más claro de este esquema es el que podemos ver en el sistema operativo MS-DOS, en que el usuario escribe un comando al sistema y al ejecutarse el sistema operativo lo carga a memoria desde el disco y realiza sus funciones. Cuando el proceso termina la memoria es liberada y le muestra al usuario el indicador de comandos (prompt) en la pantalla.Multiprogramación y Uso de MemoriaEsta organización facilita la programación de una aplicación al dividirla en dos o más procesos. Además ofrece la capacidad de tener más de un proceso a la vez en memoria así puede ofrecer servicios a varios usuarios a la vez.El esquema de multiprogramación incrementa el aprovechamiento del CPU, dado que a diferencia de la mono programación en donde solo un proceso reside en memoria a la vez limitando el uso del procesador a las llamadas que requiera dicho proceso, desperdiciando un promedio del 80% del tiempo del procesador. En cambio la multiprogramación, al tener varios procesos en la memoria principal y dividiéndose el tiempo de uso del procesador, logra reducir drásticamente el desperdicio del procesador.Multiprogramación con Particiones FijasPara poder implementar la multiprogramación, se puede hacer uso de particiones fijas o variables

Page 9: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

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.Una vez implementada la partición, hay dos maneras de asignar los procesos a ella. La primera es mediante el uso de una cola única (figura 2a) que asigna los procesos a los espacios disponibles de la memoria conforme se vayan desocupando. El tamaño del hueco de memoria disponible es usado para localizar en la cola el primer proceso que quepa en él. Otra forma de asignación es buscar en la cola el proceso de tamaño mayor que se ajuste al hueco, sin embargo hay que tomar en cuenta que tal método discrimina a los procesos más pequeños. Dicho problema podría tener solución si se asigna una partición pequeña en la memoria al momento de hacer la partición inicial, el cual sería exclusivo para procesos pequeños.Particiones fijas en memoria con una cola única de entrada. (b) Particiones fijas en memoria con colas exclusivas para cada tamaño diferente de la partición. El espacio asignado a la partición 2 está en desuso.Esta idea nos lleva a la implementación de otro método para particiones fijas, que es el uso de diferentes colas independientes. Exclusivas para cierto rango en el tamaño de los procesos. De esta manera al llegar un proceso, éste sería asignado a la cola de tamaño más pequeño que la pueda aceptar. La desventaja en esta organización es que si una de las colas tiene una larga lista de procesos en espera, mientras otra cola esta vacía, el sector de memoria asignado para ese tamaño de procesos estaría desperdiciándose.Con IntercambioTrae a la memoria un proceso entero, lo ejecuta durante un rato y vuelve a guardarlo en disco. Sólo el proceso A está en la memoria, luego se crean o se traen del disco los procesos B y C.A se intercambia al disco Llega D y B sSe trae otra vez a A. Cuando el intercambio crea múltiples huecos en la memoria, es posible combinar tales huecos en un solo (compactación de la memoria).Es importante la cuestión de cuanta memoria debe asignarse a un proceso cuando se crea o se intercambia a memoria. Si los procesos se crean con un tamaño fijo que nunca cambia, la asignación es sencilla: el SO asigna exactamente lo que se necesita, ni más ni menos.Si los segmentos de datos de los procesos pueden crecer, se asigna un poco de memoria adicional cada vez que se intercambie un proceso a la memoria o se cambie de lugar. Los procesos pueden tener dos segmentos capaces de crecer. Ejemplo de asignación de procesos en la memoria principal.Usando un proceso de asignación Round-Robin con un quantum de 1 unidad de tiempo, el proceso P2 terminaría en la unidad de tiempo 14, liberando esa cantidad de memoria, Entonces el sistema operativo checa la lista de trabajos y asigna el siguiente proceso que quepa en el espacio de memoria liberado. El proceso P4 produce el mapa de memoria.  El proceso P1 terminará en la unidad de tiempo 28 para producir el mapa y entonces se asigna el proceso P5 generando el mapa.Cuando a un proceso se le asigna un espacio y es cargado a la memoria principal, puede entonces competir para el uso del CPU.

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ámicaEl proceso de compactación del punto anterior es una instancia particular del problema de asignación de memoria dinámica, el cual es el cómo satisfacer una necesidad de tamaño n con una lista de huecos libres. Existen muchas soluciones para el problema. El conjunto de huecos es analizado para determinar cuál hueco es el más indicado para asignarse. Las estrategias más comunes para asignar algún hueco de la tabla son:Primer Ajuste: Consiste en asignar el primer hueco con capacidad suficiente. La búsqueda puede iniciar ya sea al inicio o al final del conjunto de huecos o en donde terminó la última búsqueda. La búsqueda termina al encontrar un hueco lo suficientemente grande.Mejor Ajuste: Busca asignar el espacio más pequeño de los espacios con capacidad suficiente. La búsqueda se debe de realizar en toda la tabla, a menos que la tabla esté ordenada por tamaño.

Page 10: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

Esta estrategia produce el menor desperdicio de memoria posible.Peor Ajuste: Asigna el hueco más grande. Una vez más, se debe de buscar en toda la tabla de huecos a menos que esté organizada por tamaño. Esta estrategia produce los huecos de sobra más grandes, los cuales pudieran ser de más uso si llegan procesos de tamaño mediano que quepan en ellos.Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son mejores que el peor ajuste en cuanto a minimizar tanto el tiempo del almacenamiento. Ni el primer o el mejor ajuste es claramente el mejor en términos de uso de espacio, pero por lo general el primer ajuste es más rápido.

4.2.1 Administración de la Memoria con Mapas de BitsLa memoria se divide en unidades de asignación, tal vez solo de unas cuantas palabras o quizás de varios kilobytes. A cada unidad de asignación corresponde un bit del mapa de bits, que es 0 si la unidad esta libre y 1 si está ocupada (o viceversa).Bit 0 si la unidad está desocupadaBit 1 si la unidad está ocupadaCuanto menor sea la unidad de asignación, mayor será el mapa de bits.El tamaño del mapa de bits depende  solo del tamaño de la memoria y del tamaño de la unidad de asignaciónEjemplo de un Mapa de Bits para la Administración de la Memoria.Un mapa de bits es una forma sencilla para llevar un registro de las palabras de la memoria en una cantidad fija de memoria, puesto que el tamaño del mapa sólo depende del tamaño de la memoria y el tamaño de la unidad de asignación

4.2.2 Administración de Memoria con Listas EnlazadasOtra forma de contabilizar la memoria es mantener una lista enlazada de segmentos de memoria libres y asignados, donde un segmento es un proceso o bien un agujero entre dos procesosEste ordenamiento tiene la ventaja de que cuando un proceso termina o es intercambiado a disco, es fácil de actualizar la lista. Cuando un proceso termina o se intercambia a disco, la actualización de la lista es sencilla. Un proceso que termina tiene dos vecinos (P-procesos o H-huecos).Cuatro Combinaciones de Vecinos para el Proceso que Termina, x Si los procesos y huecos se mantienen en una lista ordenada por dirección, pueden usarse varios algoritmos para asignar memoria a un proceso recién creado.Primer Ajuste.- El administrador de memoria explora la lista de segmentos hasta hallar un hueco lo bastante grande. Luego el hueco se divide en dos partes, una para el proceso y una para la memoria desocupada.Siguiente Ajuste.- Funcionamiento similar al anterior, sólo que el algoritmo recuerda en qué punto de la lista se quedó la última vez que encontró un hueco apropiado. La siguiente vez que se le pide hallar un hueco, inicia la búsqueda en ese punto de la lista, no en el principio.Mejor Ajuste.- Se explora toda la lista y se trata de hallar un hueco de tamaño cercano al requerido.Ajuste Rápido.- Mantiene listas individuales para algunos de los tamaños que se solicitan en forma más común.

4.2.3.- Asignación del Hueco de IntercambioEn 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.En otros sistemas, al caerse un proceso, se le asigna un hueco de intercambio en el disco. Cuando el proceso sea intercambiado, siempre pasará al hueco asignado, en vez de ir a otro lugar cada vez. Cuando el proceso concluya, se libera el hueco de intercambio. La única diferencia es que el hueco en disco necesario para un proceso debe representarse como un número entero de bloques del disco. Por ejemplo, un proceso de 13.5 K debe utilizar 14K (usando bloques de 1K).FragmentaciónLa 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

Page 11: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

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.Existe otro tipo de fragmentación conocida como fragmentación interna, la cual es generada cuando se reserva más memoria de la que el proceso va realmente a usar. Sin embargo a diferencia de la externa, estos huecos no se pueden compactar para ser utilizados. Se debe de esperar a la finalización del proceso para que se libere el bloque completo de la memoria.

4.3 Memoria VirtualAún cuando la tecnología detrás de la construcción de las implementaciones modernas de almacenamiento es realmente impresionante, el administrador de sistemas promedio no necesita estar al tanto de los detalles. De hecho, solamente existe un factor que los administradores de sistemas deberían tener en consideración: Nunca hay suficiente RAM.Mientras que esta frase puede sonar al principio un poco cómica, muchos diseñadores de Sistemas Operativos han empleado una gran cantidad de tiempo tratando de reducir el impacto de esta limitación. Esto lo han logrado mediante la implementación de la memoria virtual. Una forma de combinar RAM con un almacenamiento más lento para darle al sistema la apariencia de tener más RAM de la que tiene instalada realmente.

4.3.1 PaginaciónLa mayoría de los sistemas de memoria virtual emplean una técnica llamada paginación, la cual se describirá ahora. En cualquier computadora existe un conjunto de direcciones de la memoria que los programas pueden producir. Cuando un programa utiliza una instrucción como MOVE REG, 1000, éste desplaza el contenido de la dirección de memoria 1000 a REG (o viceversa, según la computadora). Las direcciones se pueden generar mediante el uso de la indización, registros de base, registros de segmento y otras maneras. Estas direcciones generadas por el programa se llaman direcciones virtuales y forman el espacio de dirección virtual. En computadoras sin memoria virtual, la dirección virtual se coloca directamente en el bus de la memoria y se provoca que la palabra de la dirección virtual con la misma dirección sea leída o escrita. Cuando se usa la memoria virtual, las direcciones virtuales no pasan directamente al bus de la memoria. En su lugar, se dirigen a una unidad de administración de la memoria (MMU), que es un chip o un conjunto de chips que delinea las direcciones virtuales en las direcciones de la memoria física como se ilustra en la figura 1.Un ejemplo de la forma en que trabaja este delineamiento se muestra en la figura 2. En este ejemplo, se tiene una computadora que puede generar direcciones de 16bits, desde 0 hasta 64K. Estas son las direcciones virtuales. Esta computadora tiene sólo 32K de memoria física, de manera que aunque puedan escribirse programas de 64K, no pueden cargarse en la memoria en su totalidad y ejecutarse. No obstante, debe estar presente una copia completa de la imagen del núcleo de un programa, hasta de 64K, en el disco, de manera que las partes se pueden traer al sistema conforme se necesiten.El espacio de dirección virtual se divide en unidades llamadas páginas. Las unidades correspondientes en la memoria física se denominan cuadros de página. Las páginas y los cuadros de página siempre son del mismo tamaño. En este ejemplo tienen 4K, pero por lo común también se utilizan tamaños de 512bytes, 1K y 2K. Con 64K de espacio de dirección virtual y 32K de memoria física, se tienen 16 páginas virtuales y 8 cuadros de página. Las transferencias entre la memoria y el disco siempre están en unidades de una página. Cuando el programa intenta accesar la dirección 0, mediante el uso de la instrucción MOVE REG, 0, la dirección virtual 0 se envía a la MMU. La MMU observa que esta dirección virtual queda en la página 0 (de 0 a 4095), que, de acuerdo con su delineamiento, es el cuadro de página 2 (de 8192 a 12387). Por lo tanto, transforma la dirección en 8192 y coloca la dirección 8192 en el bus. La tarjeta de la memoria no sabe nada en absoluto acerca de la MMU y simplemente advierte una solicitud de lectura o escritura de la dirección 8192, la cual respeta. Por lo tanto, la MMU ha

Page 12: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

delineado efectivamente todas las direcciones virtuales entre 0 y 4095 en las direcciones físicas 8192 a 12387.Análogamente, una instrucción MOVE REG, 8192 se transforma efectivamente en página se delinea en el cuadro de página físico 6 (direcciones físicas de la 24576 a la 28671). Para poner un tercer ejemplo, la dirección virtual 21500 tiene 20bytes desde el inicio de la página virtual 5 (direcciones virtuales de la 20480 a la 24575) y se delinea en la dirección física 12288 + 20 =12308.Por sí misma, esta capacidad de delinear las 16 páginas virtuales en alguno de los ocho cuadros de página fijando adecuadamente el mapa de la MMU no soluciona el problema de que el espacio de dirección virtual sea mayor que la memoria física. Como sólo tenemos ocho cuadros de página físicos, sólo ocho de las páginas virtuales de la figura 2 se delinean en la memoria física. Las otras, que se muestran como una cruz en la figura, no se delinean. En el hardware real, 1bit presente/ausente de cada captación lleva el control de si la página se delinea o no.¿Qué sucede si el programa intenta utiliza una página no delineada, por ejemplo, mediante el uso de la instrucción MOVE REG, 32780, la cual es el byte 12 dentro de la página virtual 8 (que da comienzo en 32768)? La MMU advierte que la página no está delineada (lo que indica la cruz de la figura) y hace que la CPU atrape al Sistema Operativo. Esta trampa se llama falla de la página. El Sistema Operativo toma un cuadro de página con poco uso y vuelve a escribir su contenido en el disco. Después captura la página recién referida en el cuadro de página que acaba de liberarse, cambia el mapa y reinicia la ejecución capturada.Por ejemplo, si el Sistema Operativo decidiera excluir el cuadro de página 1, cargaría la página virtual 8 en la dirección física 4K y haría dos cambios al mapa de la MMU. Primero, marcaría la captación de la página virtual 1 como no delineada, para atrapar cualquier acceso futuro a las direcciones virtudes entre 4K y 8K. Después sustituiría la cruz de la captación de la página virtual 8 por un 1, de manera que cuando se vuelve a ejecutar la instrucción atrapada, esta delinee la dirección virtual 32780 en la dirección física 4108.Ahora observemos el interior de la MMU para ver cómo trabaja y por qué se ha elegido utilizar un tamaño de página que es una potencia de 2. En la figura 3 se observa un ejemplo de una dirección virtual, 8196 (0010000000000100 en binario), que se delinea mediante el uso del mapa de MMU de la figura 2. La dirección virtual de 16bits que llega se divide en un número de página de 4bits  y un valor de compensación de 12bits dentro de la página. Con 4bits para el número de la página, podemos representar 16 páginas y con 12bits para el valor de compensación, podemos direccionar los 4096bytes dentro de una página. El número de páginas se utiliza como índice en la tabla de la página, lo que produce el cuadro de página que corresponde a la página virtual. Si el bit presente/ausente es 0, se provoca una trampa. Si es 1, el número de cuadro de página que se halla en la tabla de la página se copia en los 4bits de alto orden del registro de salida, junto con el valor de compensación de 12bits, que se copia sin modificación de la dirección virtual que entra. Después el registro de salida se coloca en el bus de la memoria como la dirección de la memoria física.4.3.2 SegmentaciónLa paginación proporciona una técnica para implementar un espacio de direcciones lineales grande en una memoria física limitada. Para algunas aplicaciones, conviene más un espacio de dirección bidimensional. En teoría, cada programa debe de tener un número muy grande de segmentos (por ejemplo, 232), de los cuales cada uno conste de un número grande de byte (por ejemplo, también 232). Los primeros segmentos de 64K Podrían reservarse para procedimientos, datos, pilas y grupos, que pertenezcan al programa en ejecución. Los segmentos restantes podrán contener cada uno un archivo por segmento, de modo que los procesos pudieran direccionar en forma directa todos sus archivos, sin tener que abrirlos y utilizar primitivas especiales de E/S para leerlos y escribirlos. Cada archivo podría crecer y contraerse completamente en forma independiente de los otros en esta disposición, con cada byte de la memoria direccionada por una pareja (segmento, valor de compensación).Los diseñadores del sistema MULTICS (Corbato y Vyssotsky 1965; Daley y Neumann 1965; Organick, 1972) intentaron construir un sistema segmentado de este tipo, con éxito moderado. Ningún sistema importante desde aquella vez ha intentado nada tan grandioso, aunque la idea de utilizar una memoria segmentada muy grande para eliminar la E/S del archivo sigue siendo atractiva como siempre. En el diseño de MULTICS, la idea era que cada segmento debía permitir una entidad lógica, como un archivo, procedimiento o arreglo. Por lo tanto, a diferencia de la paginación, donde por lo general el programador no tiene conocimiento de los límites de la página, con la segmentación el programador (o el compilador) hizo un intento definitivo por colocar diferentes objetos en segmentos distintos. Esta estrategia facilitó la compartición de

Page 13: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

objetos entre múltiples procesos. La idea de la memoria segmentada ha sobrevivido hasta la fecha. En una forma muy moderada, es común en muchas microcomputadoras basadas en la 68000. Una implementación común proporciona soporte de hardware hasta para 16 procesos, cada uno con 1024 páginas de 2K o 4K. Para apegarnos a las páginas de 4K en este ejemplo, cada proceso tiene un espacio de dirección virtual de 4M, consistente en 1024 páginas de 4K cada una. Este esquema podría implementarse dando a cada proceso su tabla de página con 1024 números de cuadro de página, pero por lo general no se implanta de esta manera. En su lugar, el hardware de la MMU contiene una tabla con 16 secciones, una para cada uno de los hasta 16 procesos. Cada sección tiene 64 descriptores de segmentos, de modo que el espacio de dirección de cada proceso de 4M se divide  hasta en 64 segmentos, donde cada uno contiene 16 páginas. Las tablas de segmentos y páginas se representan en la figura 4(a).Cada uno de los descriptores del segmento contiene la longitud del segmento (de 0 a 16 páginas), bits de protección que indican si el segmento se puede leer o escribir y un apuntador a la tabla de páginas. Las tablas de páginas contienen cada una hasta 16 captaciones, donde cada una de ellas apunta a un cuadro de página en la memoria (en realidad, conteniendo el número del cuadro de página).Cuando el Sistema Operativo da inicio a un proceso, éste carga un número de proceso de 4bits en un registro especial de hardware. Siempre que el proceso hace referencia a la memoria, la MMU traslada la dirección virtual como sigue. Toma el número de proceso de 4bits y los 6bits de alto orden de la dirección virtual de 22bits (que se necesita para la dirección 4M) y los combina en un número de 10bits que se usa como índice en la tabla de segmentos y para localizar el descriptor del segmento relevante.Después verifica los bits de protección en el descriptor del segmento para ver si se permite el acceso. Si el acceso se permite, entonces la MMU verifica el número de página que se extrajo de la dirección virtual contra el campo de longitud del segmento en el descriptor del segmento, con el fin de ver si el segmento es lo suficientemente grande. Si lo es, el número de página se emplea como índice en la tabla de páginas, cuya dirección se proporciona en el descriptor del segmento. (Todas las tablas de páginas se guardan en una memoria rápida especial dentro de la MMU.) Una vez que se halla el número del cuadro de página, éste se combina con el campo del valor de compensación de la dirección virtual para formar la dirección de la memoria física, que después se coloca en el bus.Una de las características importantes de este diseño de MMU es que cuando el Sistema Operativo realiza un cambio de proceso, todo lo que tiene que hacer es cambiar el registro del número de proceso de 4bits. No tiene que volver a cargar todas las tablas de segmento o páginas. Dos o más procesos pueden compartir un segmento simplemente haciendo que sus descriptores de segmentos apunten a la misma tabla de páginas. Cualquier variación hecha a las páginas de ese segmento por algún proceso se hace automáticamente visible para las otras.Mientras que el diseño de la figura 4 proporciona cada uno de los 16 procesos con sólo 64 segmentos de 64K cada uno, la idea se puede extender sin dificultad a espacios de dirección mayores al precio de requerir más espacio en la tabla dentro de la MMU. La mayor parte del espacio en la tabla es para las tablas de páginas. Si se tuviese cuatro veces más memoria para la tabla de páginas dentro de la MMU y estuviésemos satisfechos con 4 procesos en vez de 16, la MMU podría soportar 64 segmentos de 1M por proceso.A pesar de que este espacio de dirección claramente no es suficiente para contener todos los archivos que un usuario posee, comienza a aproximarse cuando menos a contener todos los archivos que un proceso dado necesita mientras éste se ejecuta. Después de todo, no muchos programas necesitan más de, por ejemplo, 50 archivos y la mayoría de los archivos están muy por debajo de 1M.Vale la pena señalar que el esquema de segmentación de la figura 4 no es el único posible. En el sistema MULTICS cada proceso tenía una tabla de segmentos almacenada en la memoria central. Cada captación de la tabla apuntaba a una tabla de páginas, también almacenada en la memoria central. Las tablas de segmentos y páginas podían ser tan grandes que ellas mismas se paginaban. El hardware especial estaba presente para evitar tener que hacer referencia a las tablas de segmentos y páginas en relación con páginas de uso muy pesado. Este hardware almacenaba las 16 captaciones usadas más recientemente (segmento, página) en una memoria asociativa para agilizar su localización.

4.3.3 Algoritmo de Sustitución de PáginasCuando ocurre una falla de una página, el Sistema Operativo tiene que escoger una página para

Page 14: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

retirarla de la memoria con el fin de dejar espacio para la página que tiene que traerse. Si la página por ser retirada se ha modificado en su estancia en la memoria, ésta debe reescribirse en el disco para actualizar la copia del disco. Sin embargo, si la página no se ha alterado (por ejemplo, una página contiene texto de un programa), la copia del disco ya está actualizada, así que no se necesita volver a escribirla. La página por leer simplemente se escribe encima de la página que se expulsa.Aunque sería posible elegir una página al azar para sustituirla en cada falla de una página, el rendimiento del sistema es mucho más óptimo si se elige una página que no se ha utilizado en demasía. Si se retira una página que se ha empleado de demasía, probablemente tendrá que devolverse con rapidez, lo cual producirá un costo extra. En la sección que sigue se describirá algunos de los algoritmos más interesantes que se han descubierto. Sustitución de página no usada recientemente con el fin de permitir al Sistema Operativo colectar estadísticas útiles acerca de qué páginas se están utilizando y cuáles no, la mayoría de las computadoras con memoria virtual tienen dos bits asociados con cada página. Un bit, el bit R o referido, es colocado por el hardware en cualquier lectura o escritura en la página. El otro bit, el bit M o modificado, lo forma el hardware cuando se escribe la página (es decir, se almacena un byte contenido en él). Es importante comprender que estos bits se deben actualizar en cada referencia de la memoria, de manera que es esencial que sean fijados por el hardware. Una vez que un bit se haya fijado en 1, éste seguirá siendo 1 hasta que el Sistema Operativo lo devuelva a 0 en software. Si el hardware no tiene bis R y M, éstos pueden simularse de la manera siguiente. Cuando un proceso se inicia, todas sus captaciones de la tabla de páginas se marcan como ausentes de la memoria. Tan pronto como se haga referencia a cualquier página, ocurrirá una falla de página. Después el Sistema Operativo fija el bit R (en sus tablas internas), cambian la captación de la tabla de páginas para que apunte a la página correcta, con el modo READ ONLY (sólo de lectura) y reinicia la instrucción. Si después se reescribe la página, ocurrirá otra falla de página, permitiendo que el Sistema Operativo fije el bit M y cambie el modo de la página por READ/WRITE (lectura/escritura). Los bits R y M se pueden utilizar para construir un algoritmo de paginación simple como sigue. Cuando un proceso se inicia, ambos bits de página de todas sus páginas se colocan en 0 por parte del Sistema Operativo. En forma periódica (por ejemplo, en cada interrupción del reloj), se elimina el bit R, con el fin de distinguir las páginas que no se han transferido recientemente de aquellas que si lo han hecho. Cuando ocurre una falta de página, el Sistema Operativo inspecciona todas las páginas y las divide en cuatro categorías basadas en los valores corrientes de sus bits R y M:

Clase 0: no referido, no modificado. Clase 1: no referido, modificado. Clase 2: referido, no modificado. Clase 3: referido, modificado.

Aunque las páginas de la clase 1 parecen, a primera vista, imposible, éstas ocurren cuando una página de la clase 3 tiene eliminado su bit R por una interrupción del reloj. Las interrupciones del reloj no eliminan el bit M porque esta información se necesita para saber si la página tiene que reescribirse en el disco o no. El algoritmo no usado recientemente o NRU retira una página elegida al azar de la clase no vacía con la numeración inferior. Está implícito en este algoritmo que es mejor eliminar una página modificada que no ha sido referida en cuando menos un pulso del reloj (comúnmente de 20mseg) que una página limpia que se usa en demasía. El principal atractivo de NRU es que es fácil de entender, eficiente de implementar y ofrecer un rendimiento que, aunque ciertamente no es óptimo, con frecuencia adecuado.Sustitución de páginas donde la primera que entra es la primera que saleAlgoritmo de paginación de bajo costo general. First In First Out (FIFO, por sus siglas en ingles). El primero en entrar será el primero en salir. El Sistema Operativo conserva una lista de todas las páginas que están actualmente en la memoria, donde la página que está a la cabeza de la lista es la más antigua y la de la cola es la de más reciente ingreso. Al fallar la página, la página que está a la cabeza se retira y se anexa la nueva en la cola de la lista. Una variación de FIFO es la segunda oportunidad. Que consiste en inspeccionar primero la página más antigua. Si su bit R es 0, la página se sustituye de inmediato. Si el bit R es 1, se elimina y la página se coloca al final de la lista de páginas, como si recién hubiera llegado a la memoria. Después continúa la búsqueda. Lo que está haciendo la segunda oportunidad es buscar una página antigua que no haya sido referida en el intervalo anterior del reloj. Si se han referido todas las páginas, la segunda oportunidad degenera.Una variación mínima a la técnica de la segunda oportunidad consiste en conservar todas las páginas en una lista circular. En vez de colocar las páginas al final de la lista para darles una

Page 15: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

segunda oportunidad, el apuntador al “frente” de la lista simplemente se adelanta una página, produciendo el mismo efecto. A esta variación a menudo se le  llama reloj.Intuitivamente podría parecer que cuantos más cuadros de página tiene la memoria, menos serán las fallas de páginas que un programa experimentará. Belady y otros (1969) descubrieron un ejemplo contrario, en el cual FIFO provocaba más fallas de páginas con cuatro cuadros de página que con tres. Esta extraña situación se ha venido a conocer como anomalía de Belady. Esta se ilustra en la figura 5 para un programa con cinco páginas virtuales, numeradas de 0 a 4. Las páginas se refieren en el orden 0 1 2 3 0 1 4 0 1 2 3 4 En la figura 5(a) se observa cómo se produce un total de nueve fallas de páginas con tres cuadros de página. En la figura 5(b) se tienen diez fallas de páginas con cuatro cuadros de página.4.3.4 Aspectos de Diseño Para el SistemasEn las secciones anteriores hemos explicado la forma en que funciona la paginación y hemos dado algunos de los algoritmos básicos de sustitución de páginas. Pero no basta conocer la mecánica al desnudo. Para diseñar un sistema, se tiene que saber mucho más para hacerlo trabajar adecuadamente. Es como la diferencia entre saber cómo mover la torre, el caballo, el alfil y otras piezas del ajedrez y ser un buen jugador. En las secciones que siguen, analizaremos otros aspectos que deben considerar los diseñadores de Sistemas Operativos en forma detenida con el fin de obtener un buen rendimiento de un sistema de paginación. El modelo del conjunto de trabajo en la forma más pura de la paginación, los procesos se inician con ninguna de sus páginas en la memoria. Tan pronto como la CPU intenta capturar la primera instrucción, ésta obtiene una falla de la página, provocando que el Sistema Operativo traiga la página que contiene la primera instrucción. Por lo general después de ésta se presentan rápidamente otras fallas de página de variables globales y la pila. Después de un rato, el proceso tiene la mayoría de las páginas. Esta estrategia se llama paginación por demanda, porque las páginas se cargan sólo por demanda, no con anticipación. Desde luego, es bastante fácil escribir un programa de prueba que lea en forma sistemática todas las páginas de un espacio de dirección grande, provocando tantas fallas de páginas que no hay suficiente espacio en la memoria para contenerlas. Por fortuna, la mayoría de los procesos no trabajan en esta forma. Ellos exhiben una localidad de referencia, lo que significa que durante cualquier fase de la ejecución, el proceso de un compilador de multipaso, por ejemplo, hace referencia exclusivamente de una fracción de todas las páginas y una fracción diferente en ésa.El conjunto de páginas que un proceso utiliza corrientemente se denomina su conjunto de trabajo (Denning, 1968a; Denning, 1980). Si todo el conjunto de trabajo está en la memoria, el proceso se ejecutará sin provocar muchas fallas hasta que pase a otra fase de la ejecución (por ejemplo, el siguiente paso del compilador). Si la memoria disponible es demasiado pequeña para contener todo el conjunto de trabajo, el proceso provocará muchas fallas de páginas y se ejecutará con mucha lentitud, ya que la ejecución de una instrucción comúnmente se lleva un microsegundo y la lectura de una página de un disco por lo general se lleva decenas de milisegundos. A una tasa de una o dos instrucciones por 30mseg, se necesitará mucho tiempo para terminar. Se dice que un programa que provoca fallas de página tras la ejecución de algunas instrucciones está en podación (Denning, 1968b).En un sistema de tiempo compartido, los procesos se pasan frecuentemente a un disco (es decir, todas sus páginas se retiran de la memoria) para permitir que otros procesos tomen su turno en la CPU. Surge la pregunta de qué se debe hacer cuando un proceso se vuelve a traer. Técnicamente, no necesita hacerse nada. El proceso simplemente provocará fallas de página hasta que se haya cargado su conjunto de trabajo. El problema es que tener 20, 50 o hasta 100 fallas de página cada vez que el proceso de carga es lento y también desperdicia tiempo considerable de la CPU, ya que al Sistema Operativo le toma algunos milisegundos del tiempo de la CPU el proceso de una falla de página. Por lo tanto, muchos sistemas de paginación intentan llevar el control del conjunto de trabajo de cada proceso y asegurar que esté en la memoria antes de permitir la ejecución del proceso. Este método se denomina modelo del conjunto de trabajo (Denning, 1970). Está diseñado para reducir considerablemente la tasa de fallas de páginas. A la carga de las páginas antes de permitir la ejecución de los procesos también se le llama prepaginación.La propiedad más importante del conjunto de trabajo es su tamaño. Si el tamaño total de los conjuntos de trabajo de todos los procesos contenidos “en la memoria” excede la memoria disponible, ocurrirá una podación. Obsérvese que el concepto integral de estar “en la memoria” es bastante borroso en un sistema de paginación. A lo que suele referirse es que el sistema

Page 16: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

normalmente tiene un conjunto de procesos que considera como ejecutables, sin importar cuáles páginas estén realmente en la memoria. El planificador restringe sus elecciones a procesos en este conjunto.De cuando en cuando, este conjunto se cambia y se está utilizando el modelo del conjunto de trabajo, las páginas que comprenden los conjuntos de trabajo de nuevos procesos ejecutables se llevarán a la memoria. Es tarea del Sistema Operativo asegurar que la suma de los conjuntos de trabajo de los procesos ejecutables quepa en la memoria, si se necesita, reduciendo el grado de multiprogramación (es decir, teniendo menos procesos ejecutables).Para implementar el modelo del conjunto de trabajo, es necesario que el Sistema Operativo lleve el control de las páginas que están contenidas en el conjunto de trabajo. Una manera de monitorear esta información consiste en utilizar el algoritmo de envejecimiento que se analizó antes. Cualquier página que contenga 1bit entre los n bits de alto orden del contador se considera miembro del conjunto de trabajo. Si una página no se ha referido en n pulsos del reloj consecutivos, ésta se desecha del conjunto de trabajo. El parámetro n tiene que determinarse en forma experimental para cada sistema, pero el rendimiento del sistema no suele ser especialmente sensible al valor exacto.Políticas de distribución local versus globalEn las secciones anteriores se han estudiado varios algoritmos para elegir una página que se debe sustituir cuando ocurra una falla. Un aspecto importante asociado con esta elección (que se ha mantenido cuidadosamente oculto hasta ahora) es la forma en que debe asignarse o distribuirse la memoria entre los procesos ejecutables en competencia.Obsérvese la figura 6(a). En esta figura, tres procesos A, B y C, conforman el conjunto de procesos ejecutables. Supóngase que A obtiene una falla de página. ¿Debe el algoritmo de sustitución de páginas intentar hallar la página usada menos recientemente considerando sólo las seis páginas que se asignan en forma regular a A, o bien debe considerar todas las páginas que están en la memoria? Si sólo se concentra en las páginas de A, la página con el valor de edad más bajo es A5, de manera que se tenga la situación de la figura 6(b).Por el otro lado, si la página con el valor de edad más bajo se retira sin tomar en cuenta a qué página pertenece, se elegirá la página B3 y se tendrá la situación de la figura 6(c). Se dice que el algoritmo de la figura 6(b) es un algoritmo de sustitución de páginas local, mientras que se dice que la figura 6(c) es un algoritmo global. Los algoritmos locales corresponden a la asignación a cada proceso de una cantidad fija de la memoria. Los algoritmos globales asignan en forma dinámica cuadros de página entre los procesos ejecutables.En términos generales, los algoritmos globales funcionan mejor, especialmente cuando el tamaño del conjunto de trabajo puede variar con respecto a la duración de un proceso. Si se usa un algoritmo local y el conjunto de trabajo crece, se producirá podación, aun si hay muchos cuadros de páginas libres. Si el conjunto de trabajo se comprime, los algoritmos locales desperdician la memoria. Si se emplea un algoritmo global, el sistema debe decidir continuamente cuántos cuadros de página debe asignar a cada proceso. Una manera de hacerlo consiste en monitorear el tamaño del conjunto de trabajo como lo indican los bits de envejecimiento, pero este método no necesariamente previene la podación. El conjunto de trabajo puede cambiar de tamaño en microsegundos, mientras que los bits de envejecimiento son una medida cruda que se disemina sobre varios pulsos del reloj.Una manera más directa de controlar la podación y asignar la memoria en forma global consiste en utilizar el algoritmo de asignación de frecuencia de fallas de páginas o PFF. Para una clase grande de algoritmo de sustitución de páginas, entre ellos RLU, se sabe que la tasa de fallas disminuye a medida que se asignan más páginas. (La anomalía de Belady ocurrió con FIFO, el cual no tiene esta propiedad.) Esta propiedad se ilustra en la figura 7.La línea punteada marcada con A corresponde a una tasa de falla que es inaceptablemente alta, de manera que el proceso con fallas se le dan más cuadros de página para reducir dicha tasa. La línea punteada marcada con B corresponde a una tasa de falla tan baja que puede concluirse que el proceso tiene demasiada memoria asignada. En este caso los cuadros de páginas se retiran de ella. Por lo tanto, PFF intenta conservar la tasa de paginación dentro de límites aceptables. Si éste descubre que hay tantos procesos en la memoria que no es posible conservarlos todos debajo de A, entonces algún proceso se elimina de la memoria y sus cuadros de página se dividen entre los procesos restantes o bien se colocan en un pozo de páginas disponibles que se pueden utilizar en fallas de páginas subsiguientes.Tamaño de la páginaEl tamaño de la página es con frecuencia un parámetro que puede ser elegido por los diseñadores del Sistema Operativo. Aun si el hardware se ha diseñado con páginas de 512bytes,

Page 17: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

el Sistema Operativo puede considerar fácilmente a las páginas 0 y 1, 2, y 3, 4, y 5, y así sucesivamente, como 1K páginas asignando siempre dos cuadros de página consecutivos de 512bytes para ellas.La determinación del tamaño del tamaño de página óptimo requiere el equilibrio de varios factores que compiten. Para comenzar, un segmento elegido al azar de texto, datos o pila no llenará un número integral de páginas. En promedio, la mitad de la página final estará vacía. El espacio extra en esa página se desperdicia (fragmentación interna). Con n segmentos en la mayoría y un tamaño de página de p bytes, se desperdiciarán np/2bytes en la fragmentación interna. Este razonamiento argumenta un tamaño de página pequeño.Otro argumento de un tamaño de página pequeño se vuelve obvio si se piensa en un compilador que conste de 8 pases de 4K cada uno. Con un tamaño de página de 32K, al programa se le deben asignar 32K todo el tiempo. Con un tamaño de página de 16K, sólo necesita 16K. Con un tamaño de página de 4K o menor, solamente requiere 4K en cualquier instante. En general, un programa, que está en memoria, con un tamaño de página grande, ocasionará que una porción mayor del programa no se use, que uno con una página pequeña.Por otro lado, las página pequeñas indican que los programas necesitarán muchas páginas y por lo tanto una tabla de páginas grande. Un programa de 32K necesita sólo cuatro páginas de 8K, pero 64 páginas de 512bytes. Las transferencias al disco por lo general se hacen una página a la vez, donde la mayor parte del tiempo es para localización y demora rotacional, de manera que la transferencia de una página pequeña toma casi tanto tiempo como la transferencia de una página grande. Se podrían necesitar 64x15mseg para cargar 64 páginas de 512bytes, pero sólo 4x25mseg para cargar cuatro páginas de 8K.En algunas máquinas, la tabla de páginas debe cargarse en registros del hardware cada vez que la CPU cambie de un proceso a otro. En estas máquinas tener un tamaño pequeño significa que el tiempo que se requiere para cargar los registros de la página se hace mayor a medida que el tamaño de la página se hace menor. Además, el espacio ocupado por la tabla de páginas aumenta conforme disminuye el tamaño de la página

4.3.5 Liberación de PáginasUn proceso usuario puede emitir una “liberación voluntaria de página” para liberar el marco de página cuando ya no necesitara esa página Se puede eliminar el “desperdicio” y acelerar la ejecución. El inconveniente es que la incorporación de mandatos de liberación de páginas dentro de los programas de usuarios puede ser peligroso y retrasar el desarrollo de aplicaciones. “Los compiladores y S. O. deberían detectar automáticamente situaciones de liberación de página mucho antes de lo que es posible con estrategias de conjuntos de trabajo”.Tamaño de Página.Generalmente el almacenamiento real se divide en marcos o celdas de página de tamaño fijo Los interrogantes tienen que ver con el tamaño de las páginas, si todas las páginas tendrán igual tamaño, si en caso de utilizar páginas de diferente tamaño las páginas mayores deben ser o no múltiplos enteros de las menores, etc. Algunas consideraciones para determinar el tamaño de página son las siguientes:

Cuanto más pequeño sea el tamaño de una página, más páginas y marcos de páginas habrá y mayores serán las tablas de páginas.

El desperdicio de almacenamiento debido al tamaño excesivo de las tablas de página se llama fragmentación de tablas. Esto indica la necesidad de páginas más grandes.Con páginas grandes, grandes cantidades de información que nunca llegaría a ser referenciada, se paginarán hacia el almacenamiento primario: Esto indica la necesidad de páginas más pequeñas.Debido a que las transferencias de e / s del disco (paginación) consumen bastante tiempo, se debe minimizar la paginación que un proceso requiera: Esto indica la necesidad de páginas grandes.Los programas tienden a mostrar la propiedad de localidad de referencia y esta localidad tiende a ser pequeña: Esto indica la necesidad de páginas pequeñas. Los procedimientos y datos rara vez comprenden un número entero de páginas, por lo que los sistemas de paginación experimentan una “fragmentación interna”: El desperdicio promedio es de ½ página no usada por segmento (grupo) de página del segmento.Esto indica la necesidad de páginas pequeñas.Los tamaños de página más utilizados son: 512 b, 1 Kb, 2 Kb, 4 Kb. 

Page 18: UNIDAD 4 ADMINISTRACIÓN DE LA MEMORIA

Comportamiento de un Programa en la Paginación Respecto del porcentaje de las páginas de un proceso típico referenciadas desde el momento de iniciarse su ejecución Un proceso tiende a hacer referencia a una parte significativa de sus páginas inmediatamente después de iniciar su ejecución. El proceso puede concluir sin haber referenciado a algunas de sus páginas, correspondientes a rutinas que atienden errores que no se produjeron. Respecto de variar el tamaño de la página manteniendo constante la cantidad de almacenamiento primario. El número de fallos de páginas experimentados por un proceso en ejecución tiende a aumentar con el tamaño de la página, debido a que se traen al almacenamiento primario un mayor número de procedimientos y datos que no serán referenciados, restando lugar para los que sí lo serán. Respecto de cómo el promedio de tiempo interfallos (tiempo entre fallos de página) varía al aumentar el número de marcos de página asignados al proceso. Cuantos más marcos de página tenga un proceso, mayor será el tiempo entre los fallos de páginas. El punto de inflexión se da cuando el proceso tiene todo su conjunto de trabajo en el almacenamiento primario. Asignar marcos de página adicionales más allá del punto de inflexión no produce efectos significativos sobre el tiempo interfallos. Respecto del porcentaje de instrucciones de una página que son ejecutadas antes de transferirse el control a otra página, los valores experimentales obtenidos indican un máximo de 200 instrucciones por página de 1 kb.