Mostrando entradas con la etiqueta Paginacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta Paginacion. Mostrar todas las entradas
Es un sistema de paginación con el cual, además de las ventajas de la paginación convencional, se busca disminuir los tiempos de respuesta y aumentar la cantidad de programas en memoria. Para lograr estos objetivos se hace uso de un intercambiador perezoso (llamado paginador) el cual carga a memoria solo las páginas que serán utilizadas por el programa en ejecución, de esta manera se logra un menor tiempo de carga y un ahorro en cuanto a espacio utilizado por dicho programa, ya que, por un lado, no necesitamos que todo el programa este en memoria para comenzar su ejecución mientras que, por otra parte, al no estar el programa completo en memoria, disminuimos considerablemente el espacio que éste ocupa.
Ya que el paginador solo busca las páginas que se necesitan para ejecutar algún programa, debemos agregar un bit que nos diga si las referencias de memoria son válidas o no, de lo contrario, al no encontrar una página no podríamos diferenciar si el paginador aún no la carga o si esta es realmente una referencia inválida.

Paginación por demanda

El proceso que se sigue es el siguiente:

  • Se intenta leer la página requerida
  • Si la página requerida ya esta en memoria, simplemente se lee.
  • Si no está en memoria, revisa si la referencia es válida.
  • Si la referencia es inválida, se aborta.
  • Si la referencia es válida, se intenta cargar la página.
  • Cuando la página sea cargada, se reintenta la instrucción.
paginacion por demanda



Al buscar una página, si esta no está en memoria, necesitará ser cargada. A este proceso se le llama fallo de página.

Al iniciar la ejecución de un programa, la tabla de páginas cuenta con todas sus entradas inválidas por lo cual el paginador fallará hasta tener lo necesario para iniciar el programa. Luego de esta carga inicial se comprobará si la siguiente página a utilizar ya está en memoria, en caso de que la página se encuentre, ésta es leída, pero cuando la página no es encontrada (y es una referencia válida) tenemos dos posibilidades:
Si existe un frame libre, se carga y se lee.
Si no tenemos frames libres, se intercambia la página de algún frame por la información a utilizar.

El criterio utilizado para seleccionar qué página será intercambiada varía dependiendo de la implementación del sistema. Muchos de los problemas que presenta el sistema de paginación por demanda son debido a los fallos de página y principalmente a saber cuál es la página más conveniente para intercambiar. Esto se debe a que no podemos saber cuales páginas serán utilizadas prontamente y cuales no se volverán a utilizar

Fallos de páginas

Como hemos visto anteriormente, cuando un proceso requiere una página que no está en memoria se genera un fallo de página. La gran mayoría de las dificultades de la paginación por demanda se deben a cómo los fallos de página son tratados.

Gestión de un fallo de página
En primer lugar, para que los fallos de página puedan ser tratados correctamente necesitamos un sistema que sea capaz de reiniciar una instrucción, de esta manera pasará lo siguiente:

  • Una instrucción necesita una página que no está en memoria.
  • Se genera fallo de página (No se puede satisfacer la instrucción).
  • Se carga a memoria la página requerida.
  • Se reinicia la instrucción



Como vemos en este proceso existe una carga a memoria, éste es uno de los factores determinantes para saber si la paginación por demanda es conveniente o no, puesto que, en el peor de los casos, puede existir una carga en memoria por instrucción lo que nos daría tiempos de ejecución mucho peores que con una paginación regular.

Es una estrategia de organización de la memoria que consiste en dividir la memoria en porciones de igual tamaño, a dichas porciones se las conoce como marcos de página o simplemente como páginas. Las páginas están definidas por un número de página, que identifica de forma única a cada página (dentro del espacio de memoria de un proceso). Cada página se asigna en exclusividad a un proceso.

Desde el punto de vista de la paginación la traducción de las direcciones de memoria se basa en dos conceptos:

  • El dispositivo traductor divide las direcciones lógicas en 2 partes de la siguiente forma: los n bits más significativos identifican la página mientras que el resto identifica el desplazamiento.
  • Cuando el traductor dinámico de páginas recibe, en una dirección lógica, un número de página este examina una tabla (llamada tabla de páginas) en la cual se relacionan las páginas lógicas con las páginas físicas y obtiene la dirección real (Número de marco) de la siguiente forma:
paginacion

Dispositivo de traducción de direcciones paginadas


Se dispone de la tabla de páginas de cada proceso en memoria para llevar a cabo la traducción. La tabla de páginas se indexa por número de página.
El dispositivo de traducción de direcciones paginadas debe ser un dispositivo muy rápido, ya que se usa con cada acceso a memoria que se realiza. El tamaño de la tabla de páginas es uno de los aspectos que más influye en el diseño del dispositivo e incluso en la organización de la propia tabla. Otro aspecto relevante es la localización de dicha tabla, la cual puede encontrarse en el traductor o guardada en memoria:

Tabla de páginas en el traductor:

Se usa en equipos cuyo espacio de direcciones es de pocas páginas. El dispositivo de traducción contiene un conjunto de registros organizados como una memoria en los cuales almacena la tabla de páginas. Dicha tabla de páginas debe sustituirse (lo cual aumenta el tiempo de conmutación) en dos situaciones distintas: al cambiar de proceso y al transferir el control al s.o. (en este caso se reduce el tiempo de conmutación utilizando dos tablas separadas, una para los procesos y otra para el s.o., las cuales se utilizan dependiendo del modo de uso de la CPU, supervisor o usuario).

Tabla de páginas en memoria:

Se usa en equipos con mucha memoria, en los cuales el número de páginas puede llegar a ser muy alto con lo que el tiempo necesario para cargar las páginas en el traductor es demasiado alto. La tabla de páginas es guardada en la memoria principal y el dispositivo traductor tiene la dirección de comienzo y el tamaño de la tabla, debido a que la tabla está en la memoria principal se necesita, por cada acceso a memoria, un acceso a memoria adicional para obtener el número de página física asociado a la página lógica. Para mantener un tiempo de acceso aceptable se establece una memoria asociativa que conserva las parejas página lógica-página física utilizadas recientemente.
También hay dispositivos traductores que no utilizan tablas de páginas, buscan directamente la información en una memoria asociativa, y si no la encuentran, lanzan una excepción que manejará el sistema operativo. Así, el SO es el responsable de determinar la asociación entre números de página y números de marco, y además de actualizar la memoria asociativa, lo que da cierta flexibilidad.
La evaluación se hace en base a la tasa de fallos de página, que es el número de fallos de página entre el número de accesos totales a página, con lo que su valor oscila en el rango [0,1].
El fallo de página se produce cuando se accede a una posición de memoria que pertenece a una página de memoria que esta descargada en disco.

También hay que tener en cuenta el contexto, si estamos en arranque en frío o en caliente, así como el cumplimiento del principio de localidad espacial y temporal.

  • Arranque en frío: se dan muchos fallos de página al principio, ya que los procesos se acaban de lanzar y ninguno está cargado en memoria principal.
  • Arranque en caliente: se suponen ya cargadas las páginas de los procesos en memoria principal.

Algoritmo MRU(Most Recently Used)

Se selecciona la última página a la que se ha accedido. Podría implementarse con una LIFO por orden de acceso. Es una aproximación implementable en la práctica del criterio MAX, pudiendo así compararlo con otros criterios. Según el principio de localidad, mientras más recientemente se haya accedido a una página, más probable es que vuelva a accederse a ella. Por ello, este criterio es muy deficiente, siendo su curva cercana a la pésima:

MRU

Algoritmo por orden de carga FIFO

Se selecciona la página que más tiempo lleva cargada en memoria principal. Se implementa con una FIFO por orden de carga, es decir, a medida que se cargan en memoria principal las páginas son añadidas a la cola.
El inconveniente de este criterio es que las páginas más usadas son las que más tiempo deberían permanecer en memoria, y son las más atacadas. No se debe suponer que, si las páginas “dejarán de ser necesarias”, implica que “ya no sean necesarias”. Además, se produce la anomalía de Belady, efecto que consiste en la posibilidad de tener más fallos de página al aumentar el número de marcos en la memoria física:

FIFO



El espacio virtual se divide en paginas. Algunas paginas estan en memoria principal
  • El SO se encarga de que esten en memoria principal las paginas necesarias.
  • Para ello trata los fallos de pagina producidos por la MMU.
Las direcciones generadas por la cpu se dividen en :

  • numero de paginas (p): Utilizado en las tabla de paginas que contiene las direcciones base de cada pagina en la memoria física.
  • el desplazamiento de pagina (d) : Combinado con la dirección base definen la dirección de memoria física que es enviada a la unidad de memoria.
  • Traducción: proceso referencia (p,d): Se busca en la tabla de correspondencia de paginas para ver la p´(p real), la dirección real es p´+d. Por agilidad tabla de correspondencia cache.
  • Si no hay residencia de la pagina en memoria principal, sucede una falta de pagina. r=0 si pagina no esta en real, 1 si esta.


Elemento de la tabla de paginas

  • otras informaciones
  • copia en escritura
  • edad
  • no pagina (fija en memoria física)
  • rellenar a ceros
division de memoria