Page Replacement - Proyecto ELO 329 POO


Descripción del problema y su solución
En el contexto académico sobre el funcionamiento de un sistema operativo la optimización del uso de la memoria es uno de los focos más importantes. Una de las grandes dificultades es el entendimiento de como se cargan y descarga información a la memoria, se busca entonces hacer mas intuitiva del como realiza estas operaciones el SO, permitiendo visualizar las interacciones de los elementos involucrados con la memoria.

Análisis del problema
La memoria es un arreglo de bytes identificados por su dirección, y la memoria es un recurso del sistema operativo, por lo que el sistema operativo asigna la memoria a los procesos. Para el mejor funcionamiento de la memoria, se necesita un buen método de almacenamiento de las instrucciones y de datos en la memoria, pero la gestión y asignación de memoria es normalmente difícil, ya que todos los procesos y tamaños no tienen el mismo tamaño, o la misma importancia en el sistema.
Para a mejora de estos inconvenientes, se necesita movimientos transparentes en la memoria (cargar en la memoria solo la información necesaria). Algo que puede ayudar en la Gestión de Memoria de forma transparente es la Paginación.
La paginación funciona de la siguiente manera:
-La memoria real se corta en marcos (frame). (Memoria física trabaja con marcos).
-Los espacios de trabajo se cortan en páginas virtuales del mismo tamaño (los procesos trabajan con páginas). 
La tabla de páginas virtuales asocia a cada página virtual 
Valid Bit (Bit V): Indica si la página está o no presente en la memoria.
Used Bit (Bit U): Indica si la página se está usando en la memoria, si se ha accedido a la página correspondiente.
Dirty Bit (Bit D): Indica si la página fue modificada luego de un acceso a ella.
Cuando hay fallo de página (que la página solicitada no está en memoria), el sistema debe cargar la página en memoria, y si no queda ningún espacio, el sistema debe descargar una página. Para este proceso, se usan los biy U y D.
Como grupo buscamos una representación amigable e interactiva con las personas que profundizan en como el procesador asigna tareas, es decir, poder visualizar el proceso e interferir en éste.

Algoritmo de Reemplazo de Páginas
FIFO (First In First Out)
-El orden de carga de páginas es igual al orden de descarga de páginas. 
-Hay una lista de páginas cargadas. Cuando se carga una carga una página se pone al final de la lista. Cuando hay que cargar una página se elige la primera de la Lista.
LRU (Least Recently Used)
-Se descarga la página menos recientemente usada, por lo que hay que conocer la secuencia de los accesos anteriores.
-Se usa una lista de prioridad de permanencia en memoria. Tiene mayor prioridad para quedarse en la memoria aquella página que se usó más recientemente y tiene menos prioridad aquella página que se usó menos recientemente. Se descarga la página de menos prioridad.
NFU (Not Frequently Used)
-Se quiere estimar la utilidad de las páginas cargadas con un costo menor.
-Cuando el sistema carga una página, la carga como válida y útil (Bit V y U).
-Cuando hay que descargar una página se realiza un examen circular de las páginas presentes:
-Si una página es útil (U=1), el sistema lo deja como inútil (U=0), y examina la página siguiente.
-Si una página es inútil (U=0), es la página a descargar.
-Cuando hay acceso, pone el bit U=1
NRU (Not Recently Used)
Se supone que hay dos bits U y D en el descriptivo de cada página. A cada acceso de página el hardware pone el bit U en 1. Además si la página se modifica, también pone el bit D en 1. Cuando se carga una página, el bit U es puesto en 1 y el valor del bit D se determina por el tipo de acceso que ha provocado la carga. Periódicamente, todos los bits U se pone en en 0 (por ejemplo cada 20 ms de reloj). Las páginas pueden así ser clasificadas de acuerdo a las siguiente cuatro categorías:
• Categoría 0: U=0, D=0
• Categoría 1: U=0, D=1
• Categoría 2: U=1, D=0
• Categoría 3: U=1, D=1
Cuando ocurre una falla de página, entre las páginas de menor categoría se reemplaza la más antiguamente cargada.
Casos de uso
Test de prueba
Algoritmo FIFO
Frames =3


Algoritmo LRU
Frames = 3

Diagrama de alto nivel (UML)



Pruebas
Interfaz gráfica



Opción configuración
Diálogos de entrada



Frames y accesos a paginas



Dificultades:

  1. El análisis de cada algoritmo, siendo el centro del proyecto conllevo a en reiteradas ocasiones volver a analizar la forma correcta de como representar cada algoritmo respectivo.
  2. Problema para ordenar objetos de un arreglo: para poder ordenar se implemento la clase Comparable se redefinio el método compareTo, pero al comento de compilar lanzaba un error. Solución fue usar un if para evitar que un objeto tuviese un puntero null.
  3. Al momento de realizar un JTextArea para leer un archivo de texto, si se intentaba cambiar el archivo de texto el texto nuevo se escribía a continuación del anterior. Solución usar .setText(null) para limpiar el área de texto antes de cagar un archivo de texto.
  4. Al usar Listeners para JRadioButton aún persiste el problema cuando se determina que ha cambiado el estado de los botones al presionar un botón y luego pasar el mouse se considera que es el mismo evento. En términos funcionales no presenta un error, usamos impresiones de texto en la consola y aparecen reiteradas impresiones de texto al presionar y luego pasar el mouse sobre la selección actual.