Diferencia entre revisiones de «Criterios de reemplazo»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
 
(No se muestran 76 ediciones intermedias de 20 usuarios)
Línea 1: Línea 1:
= '''Criterios de reemplazo''' =
+
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].
  
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.
El fallo de página se da cuando se accede a una posición de memoria que esta descargada en disco.
+
   
 +
Tasa fallos página = total fallos de pagina/total accesos a pagina
  
                    nº fallos pág.       
+
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.  
  tasa fallos pág = -----------------
 
                    nº accesos pág.
 
  
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.
 +
 
 +
== Criterio de página óptima (OPT, MIN) ==
  
* Arranque en frío : se dan muchos fallos de página al principio, ya que los procesos se acaban de lanzar y ninguno esta cargado en memoria principal.
+
Este es un criterio teórico que viene a establecer la cota inferior de la tasa de ''fallos de página''. Consiste en escoger la página que mayor tiempo va a tardar en utilizarse. Este es el mejor caso, pero se necesita conocimiento de futuro, de ahí que sea un criterio teórico.
* Arranque en caliente : se suponen ya cargadas las páginas de los procesos en memoria principal.
 
  
==Criterios==
+
Ejemplo: Secuencia de acceso a página : 2,2,3,1,1,3,4,5,1,1,2,3,4
Ejemplo: Secuencia de acceso a página : 2,2,3,1,1,3,4,5,1,1,2,3,4
 
 
           Suponiendo arranque en frío   
 
           Suponiendo arranque en frío   
                                         ___1____ 2_____3_____4___
+
                                      Marco Marco Marco Marco
                   memoria principal     |    |    |    |    |
+
                                         1    2    3    4
                    de 4 marcos          |_____|_____|_____|_____|
+
                   Memoria principal +-----+-----+-----+-----+
 +
                    de 4 marcos      |    |    |    |    |  
 +
                                      +-----+-----+-----+-----+
  
;1. Criterio de página óptima: Este es un criterio teórico que viene a establecer la cota inferior de la ''tasa de fallos de página''. Consiste en escoger la página que mayor tiempo va a tardar en utilizarse. Este es el mejor caso, pero se necesita conocimiento de futuro, de ahí que sea un criterio teórico.
 
 
*[[sol_1|Solución]]
 
*[[sol_1|Solución]]
;2. Criterio de página pésima: Este también es teórico y viene a establecer la cota superior de la ''tasa de fallos de página'', para ver lo peor que podría comportarse un criterio. Consiste en seleccionar la página que menor tiempo tardará en usarse.
+
 
 +
Otra forma de evaluar la eficiencia de un criterio de selección de página víctima es observando su curva paracorde, que relaciona el nº de fallos de página con el nº de marcos. La de un buen criterio se aproximará a la curva del criterio óptimo, y la de uno malo, a la del criterio al azar, o incluso pésimo.
 +
 
 +
[[Archivo:Curvas paracordes.jpg]]
 +
 
 +
En el siguiente ejemplo real se compara la efectividad de varios criterios en varios programas:
 +
 
 +
[[Archivo:img26.png]]
 +
 
 +
== Criterio de página pésima (MAX)==
 +
 
 +
Este también es teórico y viene a establecer la cota superior de la ''tasa de fallos de página'', para ver lo peor que podría comportarse un criterio. Consiste en seleccionar la página que menor tiempo tardará en usarse. También implica tener conocimiento de futuro, por lo que no es implementable en la práctica.
 +
 
 
*[[sol_2|Solución]]
 
*[[sol_2|Solución]]
;3. Criterio MRU('''M'''ost '''R'''ecently '''U'''sed): Se selecciona la última página   a la que se ha accedido. Podría implementarse con una LIFO por orden de acceso.
+
 
 +
== Criterio de selección estocástica (aleatoria) ==
 +
 
 +
Se trata también de un criterio teórico, serviría para aproximar la cota media de la ''tasa de fallos de página''. Consiste en seleccionar una página al azar.
 +
 
 +
Dado que su implementación es trivial, cualquier algoritmo que dé resultados similares a este será un mal criterio, pues seguro que su eficiencia será menor que la de no implementar ningún criterio y seleccionar una página al azar.
 +
 
 +
== Criterio MRU('''M'''ost '''R'''ecently '''U'''sed) ==
 +
 
 +
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:
 +
 
 +
[[Archivo:MRU.jpg]]
 +
 
 
*[[sol_3|Solución]]
 
*[[sol_3|Solución]]
;4. Criterio de selección estocástica (aleatoria): Consiste en seleccionar una página al azar.
+
 
;5. Criterio 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. Un problema es que suele suceder que las páginas más usadas tienden a estar mucho tiempo en memoria principal y este criterio va contra eso.
+
== Criterio 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:
  
 
*[[sol_5|Solución]]
 
*[[sol_5|Solución]]
  
;6.Criterio NRU ('''N'''ot '''R'''ecently '''U'''sed): Ofrece dos bits para cada página:
+
== Criterio NRU ('''N'''ot '''R'''ecently '''U'''sed) ==
* bit R : Se pone a 1 si la página ha sido usada (tanto para lectura como para escritura).
 
* bit M : Se pone a 1 si la página es modificada (escritura).
 
Para seleccionar la página victima buscamos que cumpla uno de los siguientes criterios de bits si no hay ninguno se utiliza el siguiente:
 
  
# R=0, M=0 .           
+
Ofrece dos bits para cada página:
# R=0, M=1 .
+
* Bit R : Se pone a 1 si la página ha sido usada (tanto para lectura como para escritura).
# R=1, M=0 .
+
* Bit M : Se pone a 1 si la página es modificada (escritura).
# R=1, M=1 .
 
  
Claramente deben realizarse periodos de puesta a 0, que no tienen porque ser simultáneamente en R y M.
+
En resumen, el bit R se pondrá a 1 ante cualquier tipo de acceso, y el bit M se pondrá a 1 sólo ante eventos de escritura.
 +
 
 +
Para seleccionar la página víctima iteramos sobre los marcos cargados en memoria (comenzando por el primero de ellos) buscando el que cumpla lo siguiente, en este orden:
 +
 
 +
# R=0, M=0
 +
# R=0, M=1
 +
# R=1, M=0
 +
# R=1, M=1
 +
 
 +
Periódicamente se pone a cero el bit R.
 +
 
 +
[[Archivo:LRU.jpg]]
  
 
*[[sol_6|Solución]]
 
*[[sol_6|Solución]]
  
;7.Criterio de 2ª oportunidad: Se trata de la unión del dos criterios, FIFO más NRU sin el bit M. Tampoco se pone R a 0 periódicamente. Consiste en recorrer la cola hasta encontrar una página con R a 0 y los procesos que vaya encontrando con R a 1 se les pone R a 0 y se les da una segunda oportunidad poniéndolos al final de la cola.
+
== Criterio de 2ª oportunidad ==
 +
 
 +
Se trata de la combinación de los criterios FIFO y NRU, pero sin emplear el bit M de NRU. Cuando hay que seleccionar una página víctima, se recorre la lista de páginas por orden de carga en memoria hasta encontrar alguna que tenga el bit R a 0. Durante la iteración, si se encuentra una cuyo bit R valga 1, se pone a 0, se retira de la lista y se añade al final (para darle una segunda oportunidad). Cuando se añade una nueva página, se añade al final de la cola con el bit R a 1.
 +
Añadir que, en este caso, no se pone el bit R a 0 periódicamente, ya que se hace directamente con la 2ª oportunidad.
 +
 
 +
[[Archivo:Segunda Oportunidad.jpg]]
  
 
*[[sol_7|Solución]]
 
*[[sol_7|Solución]]
  
;8.Criterio LRU ('''L'''east '''R'''ecently '''U'''sed): Criterio en contraposición al MRU. En MRU elegíamos aquella página que hubiéramos utilizado más recientemente (la primera de la pila de acceso) mientras que en LRU elegimos como página víctima lo contrario: La última página de la pila.
+
;Criterio del reloj: Es una variante en la manera de implementar la 2ª oportunidad. Se emplea una lista circular. En lugar de eliminar y añadir elementos al final de la FIFO, mantenemos un puntero a la página siguiente de la última página víctima seleccionada, de manera que, para dar la 2ª oportunidad a una página, sólo hemos de poner su bit R a 0 y pasar al siguiente.
 +
 
 +
*[[sol_reloj|Solución]]
 +
 
 +
==Criterio de la 3ª oportunidad (Método Multics)==
 +
Es otra variante del criterio NRU, en la que se mantiene una lista ordenada por orden de carga. Ante una sustitución, la primera candidata es la más antigua.
 +
 
 +
Si dicha página tiene el bit R a 1, se pone a 0.
 +
 
 +
Si dicha página tiene el bit R a 0, existen dos casos:
 +
*Si tiene el bit M a 1, se pone a 0.
 +
*Si tiene el bit M a 0, se selecciona como página víctima.
 +
 
 +
[[Archivo:Tercera oportunidad.jpg]]
 +
 
 +
*[[sol_tercera_oportunidad|Solución]]
 +
 
 +
== Criterio LRU ('''L'''east '''R'''ecently '''U'''sed) ==
 +
 
 +
Es justamente el criterio contrario al MRU. En LRU elegimos la página que más tiempo lleve sin ser accedida. Se implementa mediante una FIFO que mantiene el '''orden de acceso''' a las páginas. Es decir, cada vez que se accede a una página, en caso de estar ya en la FIFO, se retira de la cola y se añade al final.
  
 
*[[sol_8|Solución]]
 
*[[sol_8|Solución]]
  
;'''Criterio del reloj''': Igual que el de 2º oportunidad (FIFO + NRU sin bit M) pero mantenemos un puntero a la ultima pagina examinada.
+
== Criterio LFU ('''L'''east '''F'''recuently '''U'''sed) ==
 +
 
 +
Se selecciona a la página que haya sido accedida con menor frecuencia. Se implementa mediante un contador. Básicamente, por cada acceso se incrementa el contador de uso de la página. La página víctima será aquella con menor contador. Cuando una página es expulsada a disco su contador pasa a ser cero. Es inviable en la práctica, pues supone mantener contadores de tamaños muy grande, uno por cada página en memoria, y por cada acceso a memoria podría ser necesario ejecutar una rutina que actualice la lista.
 +
 
 +
*[[sol_9|Solución]]
 +
 
 +
== Aproximación discreta LRU ==
  
*[[sol_reloj|Solución]]
+
Se tiene un bit R y un contador por cada página. Cuando una página es cargada a un marco, se carga con su bit R a 1 y su contador inicial a 0. Cuando pasa un período determinado de tiempo (viene dado en el enunciado) se itera sobre toda la lista de páginas, y pueden ocurrir dos cosas:
 +
* '''Si su bit R está a 1''': Se ponen su bit R a cero y su contador se incrementa.
 +
* '''Si su bit R está a 0''': No se hace nada.
 +
 
 +
Cuando hay que seleccionar una página víctima, se escoge aquella cuyo contador sea más pequeño. En caso de empate, habrá que establecer un criterio de desempate.
  
;9.Aproximación discreta LRU: Se usa el bit R.  
+
*[[sol_9.2|Solución]]
  
*[[sol_9|Solución]]
+
== Sustitución por envejecimiento ==
  
;10.Sustitución por envejecimiento:
+
Se emplea un registro R de N bits, asociado a cada página. Por cada acceso se pone a 1 el bit más significativo. Periódicamente se desplaza hacia la derecha el registro R. La página víctima será la que tenga el menor valor en el registro R (en caso de empate se emplea otro criterio). La información que contienen los bits menos significativos se pierden al realizar desplazamientos. Este criterio permite mantener un historial de acceso a las páginas, para seleccionar como víctima aquella que lleve más tiempo sin ser accedida.
  
 
*[[sol_10|Solución]]
 
*[[sol_10|Solución]]
 +
 +
= Implementaciones =
 +
 +
En el [[Algoritmos de criterios de reemplazo|Portal de la comunidad]] se encuentran implementados algunos de los anteriores criterios como ayuda para ver su funcionamiento.
 +
Creo que los algoritmos están bien (coinciden con las soluciones), pero si alguien decide probarlos no estaría mal que los revisase por encima. --[[Usuario:Alexrdp|Alexrdp]] 16:24 6 jun 2011 (UTC)
 +
 +
8.3 [[Memoria_virtual_con_multiprogramacion | Otros aspectos relacionados con la memoria virtual]]

Revisión actual del 17:24 28 abr 2020

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.

Tasa fallos página = total fallos de pagina/total accesos a pagina

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.

Criterio de página óptima (OPT, MIN)

Este es un criterio teórico que viene a establecer la cota inferior de la tasa de fallos de página. Consiste en escoger la página que mayor tiempo va a tardar en utilizarse. Este es el mejor caso, pero se necesita conocimiento de futuro, de ahí que sea un criterio teórico.

Ejemplo: Secuencia de acceso a página : 2,2,3,1,1,3,4,5,1,1,2,3,4

         Suponiendo arranque en frío   
                                      Marco Marco Marco Marco
                                        1     2     3     4
                  Memoria principal  +-----+-----+-----+-----+
                   de 4 marcos       |     |     |     |     | 
                                     +-----+-----+-----+-----+

Otra forma de evaluar la eficiencia de un criterio de selección de página víctima es observando su curva paracorde, que relaciona el nº de fallos de página con el nº de marcos. La de un buen criterio se aproximará a la curva del criterio óptimo, y la de uno malo, a la del criterio al azar, o incluso pésimo.

Curvas paracordes.jpg

En el siguiente ejemplo real se compara la efectividad de varios criterios en varios programas:

Img26.png

Criterio de página pésima (MAX)

Este también es teórico y viene a establecer la cota superior de la tasa de fallos de página, para ver lo peor que podría comportarse un criterio. Consiste en seleccionar la página que menor tiempo tardará en usarse. También implica tener conocimiento de futuro, por lo que no es implementable en la práctica.

Criterio de selección estocástica (aleatoria)

Se trata también de un criterio teórico, serviría para aproximar la cota media de la tasa de fallos de página. Consiste en seleccionar una página al azar.

Dado que su implementación es trivial, cualquier algoritmo que dé resultados similares a este será un mal criterio, pues seguro que su eficiencia será menor que la de no implementar ningún criterio y seleccionar una página al azar.

Criterio 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.jpg

Criterio 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:

Criterio NRU (Not Recently Used)

Ofrece dos bits para cada página:

  • Bit R : Se pone a 1 si la página ha sido usada (tanto para lectura como para escritura).
  • Bit M : Se pone a 1 si la página es modificada (escritura).

En resumen, el bit R se pondrá a 1 ante cualquier tipo de acceso, y el bit M se pondrá a 1 sólo ante eventos de escritura.

Para seleccionar la página víctima iteramos sobre los marcos cargados en memoria (comenzando por el primero de ellos) buscando el que cumpla lo siguiente, en este orden:

  1. R=0, M=0
  2. R=0, M=1
  3. R=1, M=0
  4. R=1, M=1

Periódicamente se pone a cero el bit R.

LRU.jpg

Criterio de 2ª oportunidad

Se trata de la combinación de los criterios FIFO y NRU, pero sin emplear el bit M de NRU. Cuando hay que seleccionar una página víctima, se recorre la lista de páginas por orden de carga en memoria hasta encontrar alguna que tenga el bit R a 0. Durante la iteración, si se encuentra una cuyo bit R valga 1, se pone a 0, se retira de la lista y se añade al final (para darle una segunda oportunidad). Cuando se añade una nueva página, se añade al final de la cola con el bit R a 1. Añadir que, en este caso, no se pone el bit R a 0 periódicamente, ya que se hace directamente con la 2ª oportunidad.

Segunda Oportunidad.jpg

Criterio del reloj
Es una variante en la manera de implementar la 2ª oportunidad. Se emplea una lista circular. En lugar de eliminar y añadir elementos al final de la FIFO, mantenemos un puntero a la página siguiente de la última página víctima seleccionada, de manera que, para dar la 2ª oportunidad a una página, sólo hemos de poner su bit R a 0 y pasar al siguiente.

Criterio de la 3ª oportunidad (Método Multics)

Es otra variante del criterio NRU, en la que se mantiene una lista ordenada por orden de carga. Ante una sustitución, la primera candidata es la más antigua.

Si dicha página tiene el bit R a 1, se pone a 0.

Si dicha página tiene el bit R a 0, existen dos casos:

  • Si tiene el bit M a 1, se pone a 0.
  • Si tiene el bit M a 0, se selecciona como página víctima.

Tercera oportunidad.jpg

Criterio LRU (Least Recently Used)

Es justamente el criterio contrario al MRU. En LRU elegimos la página que más tiempo lleve sin ser accedida. Se implementa mediante una FIFO que mantiene el orden de acceso a las páginas. Es decir, cada vez que se accede a una página, en caso de estar ya en la FIFO, se retira de la cola y se añade al final.

Criterio LFU (Least Frecuently Used)

Se selecciona a la página que haya sido accedida con menor frecuencia. Se implementa mediante un contador. Básicamente, por cada acceso se incrementa el contador de uso de la página. La página víctima será aquella con menor contador. Cuando una página es expulsada a disco su contador pasa a ser cero. Es inviable en la práctica, pues supone mantener contadores de tamaños muy grande, uno por cada página en memoria, y por cada acceso a memoria podría ser necesario ejecutar una rutina que actualice la lista.

Aproximación discreta LRU

Se tiene un bit R y un contador por cada página. Cuando una página es cargada a un marco, se carga con su bit R a 1 y su contador inicial a 0. Cuando pasa un período determinado de tiempo (viene dado en el enunciado) se itera sobre toda la lista de páginas, y pueden ocurrir dos cosas:

  • Si su bit R está a 1: Se ponen su bit R a cero y su contador se incrementa.
  • Si su bit R está a 0: No se hace nada.

Cuando hay que seleccionar una página víctima, se escoge aquella cuyo contador sea más pequeño. En caso de empate, habrá que establecer un criterio de desempate.

Sustitución por envejecimiento

Se emplea un registro R de N bits, asociado a cada página. Por cada acceso se pone a 1 el bit más significativo. Periódicamente se desplaza hacia la derecha el registro R. La página víctima será la que tenga el menor valor en el registro R (en caso de empate se emplea otro criterio). La información que contienen los bits menos significativos se pierden al realizar desplazamientos. Este criterio permite mantener un historial de acceso a las páginas, para seleccionar como víctima aquella que lleve más tiempo sin ser accedida.

Implementaciones

En el Portal de la comunidad se encuentran implementados algunos de los anteriores criterios como ayuda para ver su funcionamiento. Creo que los algoritmos están bien (coinciden con las soluciones), pero si alguien decide probarlos no estaría mal que los revisase por encima. --Alexrdp 16:24 6 jun 2011 (UTC)

8.3 Otros aspectos relacionados con la memoria virtual