domingo, noviembre 12, 2006
Proyecto 1 SO II
Introducción
Universidad Tecnológica Centroamericana UNITEC
Sistemas Operativos II
Reporte del proyecto # 1
Alumno: Douglas Yovanny Velásquez Escoto
Cuenta: 971269
Catedrático: Ing. Egdares Futch H.
Lugar y Fecha: Tegucigalpa M.D.C 29 de octubre de 2006
Descripción y funcionamiento del proyecto
Este proyecto consiste en el desarrollo en el lenguaje de programación Java (J2SE), un simulador programado para investigar las diferencias relativas de los algoritmos de asignación de memoria y las políticas de reemplazo de páginas (FIFO, LRU, LFU y OPT). El programa generara estadísticas, apropiadas para cada módulo.
El simulador consta de tres módulos:
1) Generador de strings de referencia a memoria
El simulador cuenta con una opción para generar un archivo conteniendo 10,000 strings de referencia a memoria (direcciones de 20 bits), generadas de la siguiente manera:
• La dirección de referencia inicial se escoge de forma aleatoria para comenzar.
• Para las demás referencias a memoria, la siguiente referencia a memoria será dentro la misma página, con probabilidad s (alta).
• Si la siguiente referencia a memoria no es dentro de la página actual, entonces con alguna otra probabilidad o (alta), la referencia será en la página antes de la actual (actual-1) o la página después de la actual (actual+1), equiprobablemente, de acuerdo al principio de la Localidad de Referencias.
• En caso contrario, se escoge de forma aleatoria (podría volver a ser la actual o actual-1 o actual+1).
El archivo tiene el formato Dinero, indicando únicamente si la referencia a cada página es lectura o escritura (tipos Dinero 0 y 1).
2) Manejador de memoria contigua
El módulo manejador de memoria contigua simula el uso de asignación de memoria en sistemas operativos no paginados. Implemente las políticas first-fit y best-fit, asumiendo que los procesos no crecen ni se encogen, en un computador con 256 KB de RAM.
Este módulo usa como input un archivo de strings de referencia generado por el módulo descrito en 1), interpretándolo de tal manera que la acción 0 indica “asignar memoria” y la acción “1” indica “desasignar memoria”. Las direcciones generadas se usarán de la siguiente manera: los primeros cuatro bits denotan el Process ID, los siguientes 16 bits denotan el tamaño de la memoria solicitada, en bytes. Este módulo manejar errores, si acaso un proceso solicita más memoria (crece), o desasigna memoria (encoge) sin estar cargado en RAM.
• Fusión de bloques libres: cuando un proceso termine (“desasigne memoria”), la memoria que el proceso tenía asignadas se regresa a la lista de disponibles. Se combinar agujeros que estén adyacentes uno a otro para formar un bloque libre más grande, con el fin de reducir el nivel de fragmentación.
• Compactación: el manejador de memoria compacta la memoria si detecta fragmentación externa, que ocurrirá cuando un proceso nuevo pida memoria y no se pueda asignar debido a fragmentación.
La salida del módulo consiste de las siguientes estadísticas
Tamaño de la memoria, memoria libre, memoria usada, numero de agujeros, número de procesos activos, número de veces compactada, fragmentación externa, fragmentación interna, referencias procesadas, se muestra de forma gráfica, y si puede desplegar esta información cuando el usuario lo solicite.
Quote:
Ejemplo:
Tamaño de la memoria = 262144 bytes, asignados = 113165, libres = 148979
Actualmente hay 3 “agujeros” y 5 procesos activos
Se ha compactado la memoria 7 veces
Fragmentación: interna=23% externa=32%
Direcciones procesadas=862
Lista de agujeros:
Agujero 1: Posición Inicial: 75895, Tamaño: 66175
..
Lista de procesos:
process id: 8, Posición Inicial: 218683, Tamaño del Proceso: 23132, Memoria utilizada: 100%
..
Se puede cambiar la velocidad de la simulación estableciendo intervalos de pause desde 1 milisegundo o ejecutarse paso a paso cada referencia del archivo generado por el modulo 1)
Además muestra los mensajes que incluye los errores
Quote:
Ejemplo:
Acción :0, Proceso :14, Memoria :17560
No se puede asignar memoria, Process id: 14, requiere: 17560, Asignado: 0
Acción :1, Proceso :14, Memoria :18975
No se puede liberar memoria, no se encuentra el proceso, Process id: 14, requiere: 18975
Acción :1, Proceso :14, Memoria :19911
No se puede liberar memoria, no se encuentra el proceso, Process id: 14, requiere: 19911
Acción :0, Proceso :14, Memoria :19179
No se puede asignar memoria, Process id: 14, requiere: 19179, Asignado: 18538
Acción :0, Proceso :14, Memoria :20367
No se puede asignar memoria, Process id: 14, requiere: 20367, Asignado: 0
..
3) Manejador de memoria paginada
El módulo manejador de memoria paginada sirve para investigar la efectividad relativa de las estrategias de reemplazo de páginas FIFO, LRU, LFU, Second Chance (CLOCK) y OPT para algunos parámetros del sistema. El objeto es medir el número de page faults generados por cada estrategia.
Para este módulo, se asume que cada proceso obtiene 1 megabyte (1024 kilobytes) de memoria virtual, divididos en 1K páginas y un tamaño de página de 1024 bytes. Es decir que el proceso puede generar direcciones virtuales con referencias de página de 0 a 1023, que vendrán del archivo de strings de referencia generado por el módulo 1).
La simulación proporción información sobre los page faults ocurridos para cada una de las estrategias al proporcionar el número de page frame que se utilizara:
Ejemplo de salida: (100 page frame)
Estrategia de reemplazo de páginas FIFO, número de page foults = 1260
Estrategia de reemplazo de páginas LRU, número de page foults = 1264
Estrategia de reemplazo de páginas LFU, número de page foults = 1928
Estrategia de reemplazo de páginas CLOCK, número de page foults = 1260
Estrategia de reemplazo de páginas OPT, número de page foults = 952
Cómo se compila y usa el proyecto
Se requiere Maquina Virtual de Java
Versión recomendada: 1.5.0 (build 1.5.0_05-b05)
Para compilar se ejecuta el archivo Make.bat que contiene lo siguiente
.-Compilación de archivos
\j2sdk1.4.2_05\bin\javac generadorString.java
\j2sdk1.4.2_05\bin\javac MCBestFit.java
…
\j2sdk1.4.2_05\bin\javac Proyecto1.java
.-Cada uno de los archivos .java
Creación del jar ejecutable
\j2sdk1.4.2_05\bin\jar cvfm Proyecto1.jar MANIFEST.MF BloqueMemoria.class generadorString.class …
.-Cada uno de los archivos .class que se genero en la compilación
.-\j2sdk1.4.2_05\bin\ la ubicación donde se encuentra el archivo javac y jar
Para ejecutar
javaw –jar Proyecto1.jar o ejecutar desde el explorador de Windows
La cual presentar una ventana con diferentes botones y cuadros de texto para acceder a los 3 módulos
Descripción de rutinas y procedimientos usados
Clases usadas
generadorString
MCBestFit
MCBesttFitForm
MCFirstFitForm
MCFistFit
MemoriaContinua
memPaginacion
Proyecto1
Clase generadorString
Esta clase hace el trabajo del modulo 1
java.lang.Object
generadorString
________________________________________
establecerS
Set de la probabilidad s
establecerO
Set de la probabilidad s
establecerTamPage
Set del tamaño de la página
CrearArchivo
Crea el archivo en donde se almacenara los 10,000 string de referencia a memoria, generados por el método GenerarLinea
GenerarLinea
Genera si la referencia es de escritura o lectura (tipos Dinero 0 y 1)
Determina si es la primera referencia ejecuta el método generarDireccionInicial
Si no generarDireccionProbabilidad
generarDireccionInicial
Genera un número aleatorio de 0 a (2^20)-1, y lo convierte a hexadecimal
generarDireccionProbabilidad
Utiliza la Probabilidades s y o para genera la siguiente dirección a través de método
generarDireccionPagina en caso contrario genera con generarDireccionInicial
generarDireccionPagina
Genera la dirección en base a la página que se especifica en generarDireccionProbabilidad
Clase MemoriaContinua
Clase abstracta que implementa el modulo 2 tanto para best-fit como para First-fit
java.lang.Object
java.lang.Thread
MemoriaContinua
abrirArchivo
Abre el archivo generado por el módulo 1
RunInicia la simulación mediante hilo
iniciarValores
Establece los valores del tamaño de la memoria a utilizar y los objetos para dibujar
iniciarSimulacion
Llama a los métodos del la clase concreta para crear el árbol de memoria crearArbolMemoria y agrega el bloque inicial de memoria conteniendo el tamaño total (256K);
Continuar
Cuando se detiene la ejecución del hilo Continuar reanuda la ejecución, con esta función se implementa la ejecución paso a paso de las referencias de memoria
procesarLinea
Cada una de las referencias de memoria se procesa en este método, determinando si se agrega un nuevo proceso, si se quita el proceso, si se agrega o quita memoria al proceso, si se compacta la memoria, mediante las búsquedas utilizando los métodos de búsquedas definidos.
Este método genera el mensaje de la simulación a demás de los mensajes de error.
agregarProceso
Agrega un nuevo proceso también quita del espacio disponible de memoria
quitarProceso
Quita un proceso y une los espacios de memoria libre, combinando agujeros que estén adyacentes, este método une el espacio adyacente que se encuentra adelante, y para el espacio adyacente que se encuentra atrás, utiliza la llamada al método unirAnterior
buscarProceso
Busca un proceso en el árbol de procesos por id
mostrarProcesos
Utilizado para dibujar
dMemoria
Dibuja la memoria libre
dProceso
Dibuja los procesos en su correspondiente ubicación, con su fragmentación interna utilizando las coordenadas obtenidas por obtenerPorcentaje
obtenerPorcentaje
Establece la simetría del dibujo y la escala a transformar las posiciones de memoria
Compactar
Compacta la memoria cuando hay fragmentación externa
Listar
Muestra la estadística de la simulación
ComparadorTamano
Para ordenar el árbol de memoria por tamaño
ComparadorDireccion
Para ordenar el árbol de memoria por posición
ComparadorProceso
Para ordenar el árbol de procesos por id
ComparadorProcesoPosIni
Para ordenar el árbol de procesos por posición
Clase MCBesttFitForm
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
MCBesttFitForm
Clase de interfase de usuario que llama a la clase
MCBestFit
Métodos heredados de JFrame
Clase MCBestFit
Esta clase implementa la política Best-fit del modulo 2 extendida de la clase MemoriaContinua
java.lang.Object
java.lang.Thread
MemoriaContinua
MCBestFit
crearArbolMemoria
Crea el árbol que se utilizara para administrar los espacios disponibles.
buscarMemoria
Busca en el árbol el bloque de memoria.
unirAnterior
Unir una bloque de memoria que se acaba de liberar con el bloque libre anterior consecutivo, si existe ese bloque.
Clase MCFirstFitForm
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
MCFirstFitForm
Clase de interfase de usuario que llama a la clase
MCFistFit
Métodos heredados de JFrame
Clase MCFistFitEsta clase implementa la política First-fit del modulo 2 extendida de la clase MemoriaContinua
java.lang.Object
java.lang.Thread
MemoriaContinua
MCFistFit
crearArbolMemoria
Crea el árbol que se utilizara para administrar los espacios disponibles.
buscarMemoria
Busca en el árbol el bloque de memoria.
unirAnterior
Unir una bloque de memoria que se acaba de liberar con el bloque libre anterior consecutivo, si existe ese bloque.
Clase memPaginacion
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
memPaginacion
Clase que implementa el módulo 3
iniciarSimulacion
Inicializa las listas y los valores para la simulación y lee cada línea del archivo generado por el modulo uno y llama a los metodos FIFO, LRU,LFU,CLOCK y OPT
Y al final muestra la información de los page foults.
FIFO
Implementa la estrategia de reemplazo de página FIFO
LRU
Implementa la estrategia de reemplazo de página LRU
LFU
Implementa la estrategia de reemplazo de página LFU
Desplazar
Desplaza un bit con alguna frecuencia en la lista de bits del algoritmo LFU
CLOCK
Implementa la estrategia de reemplazo de página CLOCK
OPT
Implementa la estrategia de reemplazo de página OPT
abrirArchivo
Abre el archivo generado por el modulo 1 y lo deja listo para ser leído por el método iniciarSimulacion
Comentarios de implementación y preguntas indicadas
Comentarios del módulo 2
En este módulo se utilizo una clase abstracta que implementa la memoria continua utilizando dos árboles uno para manejar los espacios libres y otra para manejar los procesos.
Los árboles utilizados son de tipo TreeSet de la clase de Java
Las clases concretas son las que implementan las politicas best-fit y First-fit
En las políticas Best-fit se utiliza el comparador ComparadorTamano para crear el árbol de memoria, para que el árbol se encuentre ordenado por tamaño.
Las búsqueda por tamaño se realiza mediante el método de búsqueda del la clase TreeSet tailSet que devuelve la rama de los nodos mayores al valor especificado en la búsqueda, si este nodo existe es el primero y se obtiene mediante el metodo fisrt () del conjunto de la clase de java SortedSet
Las búsquedas por dirección se realizan linealmente a través de un recorrido por el árbol
En las políticas First-fit se utiliza el comparador ComparadorDireccion para crear el árbol de memoria, para que el árbol se encuentre ordenado por posiciones de memoria.
Las búsqueda por dirección se realiza mediante el método de búsqueda del la clase TreeSet tailSet que devuelve la rama de los nodos mayores al valor especificado en la búsqueda, si este nodo existe es el primero y se obtiene mediante el método fisrt () del conjunto de la clase de java SortedSet
Las búsquedas por tamaño se realizan linealmente a través de un recorrido por el árbol.
Las búsquedas de procesos se implementan de igual manera
En las políticas First-fit ,en la fusión de bloques libres para encontrar el nodo adyacente anterior en el árbol de memoria se utiliza el método de búsqueda del la clase TreeSet headSet que devuelve la rama de los nodos menores al valor especificado en la búsqueda, si este nodo existe es el ultimo y se obtiene mediante el metodo last() del conjunto de la clase de java SortedSet .
En las políticas Best-fit, en la fusión de bloques libres para encontrar el nodo adyacente anterior en el árbol de memoria se realiza un recorrido de todo el árbol, hasta encontrar un bloque adyacente anterior ya que como esta ordenado por tamaño, no se sabe cual es la posición que tiene en la memoria cada nodo.
Comentarios del módulo 3
En el módulo 3 se utilizo la clase Vector de java para implementar las estrategias de reemplazo de paginas al igual que para implementar el bit se utilizo la clase vector
La clase vector es de tipo lista.
Resumen de los page foults
Probabilidad s = 0.80 y o 0.80
10 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 1433
Estrategia de reemplazo de páginas LRU, número de page foults = 1433
Estrategia de reemplazo de páginas LFU, número de page foults = 2226
Estrategia de reemplazo de páginas CLOCK, número de page foults = 1433
Estrategia de reemplazo de páginas OPT, número de page foults = 1335
50 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 1390
Estrategia de reemplazo de páginas LRU, número de page foults = 1389
Estrategia de reemplazo de páginas LFU, número de page foults = 2073
Estrategia de reemplazo de páginas CLOCK, número de page foults = 1390
Estrategia de reemplazo de páginas OPT, número de page foults = 1120
100 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 1329
Estrategia de reemplazo de páginas LRU, número de page foults = 1327
Estrategia de reemplazo de páginas LFU, número de page foults = 1931
Estrategia de reemplazo de páginas CLOCK, número de page foults = 1329
Estrategia de reemplazo de páginas OPT, número de page foults = 1002
Probabilidad s = 0.95 y o 0.95
10 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 128
Estrategia de reemplazo de páginas LRU, número de page foults = 125
Estrategia de reemplazo de páginas LFU, número de page foults = 406
Estrategia de reemplazo de páginas CLOCK, número de page foults = 128
Estrategia de reemplazo de páginas OPT, número de page foults = 121
50 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 118
Estrategia de reemplazo de páginas LRU, número de page foults = 120
Estrategia de reemplazo de páginas LFU, número de page foults = 338
Estrategia de reemplazo de páginas CLOCK, número de page foults = 118
Estrategia de reemplazo de páginas OPT, número de page foults = 114
100 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 114
Estrategia de reemplazo de páginas LRU, número de page foults = 114
Estrategia de reemplazo de páginas LFU, número de page foults = 150
Estrategia de reemplazo de páginas CLOCK, número de page foults = 114
Estrategia de reemplazo de páginas OPT, número de page foults = 114
Preguntas
1)¿Qué estrategia de reemplazo de páginas escogería usted y por qué? Debe considerar los resultados obtenidos y el esfuerzo que le llevó implementar cada estrategia. Discuta lo que sus resultados muestran acerca de los méritos relativos de FIFO, LRU, LFU, Second Chance (CLOCK) y OPT para cada una de las diferentes combinaciones de parámetros.
La estrategia OPT es la de mejor rendimiento
La estrategia LFU es la de peor rendimiento
Las estrategias FIFO y LRU tienen casi el mismo rendimiento con diferencia que cuando se aumenta el número de frames se puede ver una mejora la mayoría de veces mejorando LRU
FIFO y CLOCK mantienen el mismo rendimiento
El peor
Yo escogería la estrategia de replazo LRU ya que es la mejor después de OPT, y no es tan difícil de implementar como OPT ya que este debe conocer todas las referencias de memoria de antemano.
2) ¿Qué aspectos de la administración de memoria encontró que fue más difícil implementar?
La más difícil fue la memoria continua ya que se tienen que mantener información de los agujeros y los procesos y toda la implementación que realiza manejar memoria continua.
3) ¿Qué aspectos de la administración de la memoria encontró más fácil implementar?
La estrategia de reemplazo FIFO es la mas fácil de implementar, también lo es LRU.
4) ¿Qué cambiaría en su diseño actual?
En las estrategias de reemplazo se pueden implementar más mejoras a los algoritmos, por lo demás no cambiaria nada a este diseño.
Universidad Tecnológica Centroamericana UNITEC
Sistemas Operativos II
Reporte del proyecto # 1
Alumno: Douglas Yovanny Velásquez Escoto
Cuenta: 971269
Catedrático: Ing. Egdares Futch H.
Lugar y Fecha: Tegucigalpa M.D.C 29 de octubre de 2006
Descripción y funcionamiento del proyecto
Este proyecto consiste en el desarrollo en el lenguaje de programación Java (J2SE), un simulador programado para investigar las diferencias relativas de los algoritmos de asignación de memoria y las políticas de reemplazo de páginas (FIFO, LRU, LFU y OPT). El programa generara estadísticas, apropiadas para cada módulo.
El simulador consta de tres módulos:
1) Generador de strings de referencia a memoria
El simulador cuenta con una opción para generar un archivo conteniendo 10,000 strings de referencia a memoria (direcciones de 20 bits), generadas de la siguiente manera:
• La dirección de referencia inicial se escoge de forma aleatoria para comenzar.
• Para las demás referencias a memoria, la siguiente referencia a memoria será dentro la misma página, con probabilidad s (alta).
• Si la siguiente referencia a memoria no es dentro de la página actual, entonces con alguna otra probabilidad o (alta), la referencia será en la página antes de la actual (actual-1) o la página después de la actual (actual+1), equiprobablemente, de acuerdo al principio de la Localidad de Referencias.
• En caso contrario, se escoge de forma aleatoria (podría volver a ser la actual o actual-1 o actual+1).
El archivo tiene el formato Dinero, indicando únicamente si la referencia a cada página es lectura o escritura (tipos Dinero 0 y 1).
2) Manejador de memoria contigua
El módulo manejador de memoria contigua simula el uso de asignación de memoria en sistemas operativos no paginados. Implemente las políticas first-fit y best-fit, asumiendo que los procesos no crecen ni se encogen, en un computador con 256 KB de RAM.
Este módulo usa como input un archivo de strings de referencia generado por el módulo descrito en 1), interpretándolo de tal manera que la acción 0 indica “asignar memoria” y la acción “1” indica “desasignar memoria”. Las direcciones generadas se usarán de la siguiente manera: los primeros cuatro bits denotan el Process ID, los siguientes 16 bits denotan el tamaño de la memoria solicitada, en bytes. Este módulo manejar errores, si acaso un proceso solicita más memoria (crece), o desasigna memoria (encoge) sin estar cargado en RAM.
• Fusión de bloques libres: cuando un proceso termine (“desasigne memoria”), la memoria que el proceso tenía asignadas se regresa a la lista de disponibles. Se combinar agujeros que estén adyacentes uno a otro para formar un bloque libre más grande, con el fin de reducir el nivel de fragmentación.
• Compactación: el manejador de memoria compacta la memoria si detecta fragmentación externa, que ocurrirá cuando un proceso nuevo pida memoria y no se pueda asignar debido a fragmentación.
La salida del módulo consiste de las siguientes estadísticas
Tamaño de la memoria, memoria libre, memoria usada, numero de agujeros, número de procesos activos, número de veces compactada, fragmentación externa, fragmentación interna, referencias procesadas, se muestra de forma gráfica, y si puede desplegar esta información cuando el usuario lo solicite.
Quote:
Ejemplo:
Tamaño de la memoria = 262144 bytes, asignados = 113165, libres = 148979
Actualmente hay 3 “agujeros” y 5 procesos activos
Se ha compactado la memoria 7 veces
Fragmentación: interna=23% externa=32%
Direcciones procesadas=862
Lista de agujeros:
Agujero 1: Posición Inicial: 75895, Tamaño: 66175
..
Lista de procesos:
process id: 8, Posición Inicial: 218683, Tamaño del Proceso: 23132, Memoria utilizada: 100%
..
Se puede cambiar la velocidad de la simulación estableciendo intervalos de pause desde 1 milisegundo o ejecutarse paso a paso cada referencia del archivo generado por el modulo 1)
Además muestra los mensajes que incluye los errores
Quote:
Ejemplo:
Acción :0, Proceso :14, Memoria :17560
No se puede asignar memoria, Process id: 14, requiere: 17560, Asignado: 0
Acción :1, Proceso :14, Memoria :18975
No se puede liberar memoria, no se encuentra el proceso, Process id: 14, requiere: 18975
Acción :1, Proceso :14, Memoria :19911
No se puede liberar memoria, no se encuentra el proceso, Process id: 14, requiere: 19911
Acción :0, Proceso :14, Memoria :19179
No se puede asignar memoria, Process id: 14, requiere: 19179, Asignado: 18538
Acción :0, Proceso :14, Memoria :20367
No se puede asignar memoria, Process id: 14, requiere: 20367, Asignado: 0
..
3) Manejador de memoria paginada
El módulo manejador de memoria paginada sirve para investigar la efectividad relativa de las estrategias de reemplazo de páginas FIFO, LRU, LFU, Second Chance (CLOCK) y OPT para algunos parámetros del sistema. El objeto es medir el número de page faults generados por cada estrategia.
Para este módulo, se asume que cada proceso obtiene 1 megabyte (1024 kilobytes) de memoria virtual, divididos en 1K páginas y un tamaño de página de 1024 bytes. Es decir que el proceso puede generar direcciones virtuales con referencias de página de 0 a 1023, que vendrán del archivo de strings de referencia generado por el módulo 1).
La simulación proporción información sobre los page faults ocurridos para cada una de las estrategias al proporcionar el número de page frame que se utilizara:
Ejemplo de salida: (100 page frame)
Estrategia de reemplazo de páginas FIFO, número de page foults = 1260
Estrategia de reemplazo de páginas LRU, número de page foults = 1264
Estrategia de reemplazo de páginas LFU, número de page foults = 1928
Estrategia de reemplazo de páginas CLOCK, número de page foults = 1260
Estrategia de reemplazo de páginas OPT, número de page foults = 952
Cómo se compila y usa el proyecto
Se requiere Maquina Virtual de Java
Versión recomendada: 1.5.0 (build 1.5.0_05-b05)
Para compilar se ejecuta el archivo Make.bat que contiene lo siguiente
.-Compilación de archivos
\j2sdk1.4.2_05\bin\javac generadorString.java
\j2sdk1.4.2_05\bin\javac MCBestFit.java
…
\j2sdk1.4.2_05\bin\javac Proyecto1.java
.-Cada uno de los archivos .java
Creación del jar ejecutable
\j2sdk1.4.2_05\bin\jar cvfm Proyecto1.jar MANIFEST.MF BloqueMemoria.class generadorString.class …
.-Cada uno de los archivos .class que se genero en la compilación
.-\j2sdk1.4.2_05\bin\ la ubicación donde se encuentra el archivo javac y jar
Para ejecutar
javaw –jar Proyecto1.jar o ejecutar desde el explorador de Windows
La cual presentar una ventana con diferentes botones y cuadros de texto para acceder a los 3 módulos
Descripción de rutinas y procedimientos usados
Clases usadas
generadorString
MCBestFit
MCBesttFitForm
MCFirstFitForm
MCFistFit
MemoriaContinua
memPaginacion
Proyecto1
Clase generadorString
Esta clase hace el trabajo del modulo 1
java.lang.Object
generadorString
________________________________________
establecerS
Set de la probabilidad s
establecerO
Set de la probabilidad s
establecerTamPage
Set del tamaño de la página
CrearArchivo
Crea el archivo en donde se almacenara los 10,000 string de referencia a memoria, generados por el método GenerarLinea
GenerarLinea
Genera si la referencia es de escritura o lectura (tipos Dinero 0 y 1)
Determina si es la primera referencia ejecuta el método generarDireccionInicial
Si no generarDireccionProbabilidad
generarDireccionInicial
Genera un número aleatorio de 0 a (2^20)-1, y lo convierte a hexadecimal
generarDireccionProbabilidad
Utiliza la Probabilidades s y o para genera la siguiente dirección a través de método
generarDireccionPagina en caso contrario genera con generarDireccionInicial
generarDireccionPagina
Genera la dirección en base a la página que se especifica en generarDireccionProbabilidad
Clase MemoriaContinua
Clase abstracta que implementa el modulo 2 tanto para best-fit como para First-fit
java.lang.Object
java.lang.Thread
MemoriaContinua
abrirArchivo
Abre el archivo generado por el módulo 1
RunInicia la simulación mediante hilo
iniciarValores
Establece los valores del tamaño de la memoria a utilizar y los objetos para dibujar
iniciarSimulacion
Llama a los métodos del la clase concreta para crear el árbol de memoria crearArbolMemoria y agrega el bloque inicial de memoria conteniendo el tamaño total (256K);
Continuar
Cuando se detiene la ejecución del hilo Continuar reanuda la ejecución, con esta función se implementa la ejecución paso a paso de las referencias de memoria
procesarLinea
Cada una de las referencias de memoria se procesa en este método, determinando si se agrega un nuevo proceso, si se quita el proceso, si se agrega o quita memoria al proceso, si se compacta la memoria, mediante las búsquedas utilizando los métodos de búsquedas definidos.
Este método genera el mensaje de la simulación a demás de los mensajes de error.
agregarProceso
Agrega un nuevo proceso también quita del espacio disponible de memoria
quitarProceso
Quita un proceso y une los espacios de memoria libre, combinando agujeros que estén adyacentes, este método une el espacio adyacente que se encuentra adelante, y para el espacio adyacente que se encuentra atrás, utiliza la llamada al método unirAnterior
buscarProceso
Busca un proceso en el árbol de procesos por id
mostrarProcesos
Utilizado para dibujar
dMemoria
Dibuja la memoria libre
dProceso
Dibuja los procesos en su correspondiente ubicación, con su fragmentación interna utilizando las coordenadas obtenidas por obtenerPorcentaje
obtenerPorcentaje
Establece la simetría del dibujo y la escala a transformar las posiciones de memoria
Compactar
Compacta la memoria cuando hay fragmentación externa
Listar
Muestra la estadística de la simulación
ComparadorTamano
Para ordenar el árbol de memoria por tamaño
ComparadorDireccion
Para ordenar el árbol de memoria por posición
ComparadorProceso
Para ordenar el árbol de procesos por id
ComparadorProcesoPosIni
Para ordenar el árbol de procesos por posición
Clase MCBesttFitForm
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
MCBesttFitForm
Clase de interfase de usuario que llama a la clase
MCBestFit
Métodos heredados de JFrame
Clase MCBestFit
Esta clase implementa la política Best-fit del modulo 2 extendida de la clase MemoriaContinua
java.lang.Object
java.lang.Thread
MemoriaContinua
MCBestFit
crearArbolMemoria
Crea el árbol que se utilizara para administrar los espacios disponibles.
buscarMemoria
Busca en el árbol el bloque de memoria.
unirAnterior
Unir una bloque de memoria que se acaba de liberar con el bloque libre anterior consecutivo, si existe ese bloque.
Clase MCFirstFitForm
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
MCFirstFitForm
Clase de interfase de usuario que llama a la clase
MCFistFit
Métodos heredados de JFrame
Clase MCFistFitEsta clase implementa la política First-fit del modulo 2 extendida de la clase MemoriaContinua
java.lang.Object
java.lang.Thread
MemoriaContinua
MCFistFit
crearArbolMemoria
Crea el árbol que se utilizara para administrar los espacios disponibles.
buscarMemoria
Busca en el árbol el bloque de memoria.
unirAnterior
Unir una bloque de memoria que se acaba de liberar con el bloque libre anterior consecutivo, si existe ese bloque.
Clase memPaginacion
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
memPaginacion
Clase que implementa el módulo 3
iniciarSimulacion
Inicializa las listas y los valores para la simulación y lee cada línea del archivo generado por el modulo uno y llama a los metodos FIFO, LRU,LFU,CLOCK y OPT
Y al final muestra la información de los page foults.
FIFO
Implementa la estrategia de reemplazo de página FIFO
LRU
Implementa la estrategia de reemplazo de página LRU
LFU
Implementa la estrategia de reemplazo de página LFU
Desplazar
Desplaza un bit con alguna frecuencia en la lista de bits del algoritmo LFU
CLOCK
Implementa la estrategia de reemplazo de página CLOCK
OPT
Implementa la estrategia de reemplazo de página OPT
abrirArchivo
Abre el archivo generado por el modulo 1 y lo deja listo para ser leído por el método iniciarSimulacion
Comentarios de implementación y preguntas indicadas
Comentarios del módulo 2
En este módulo se utilizo una clase abstracta que implementa la memoria continua utilizando dos árboles uno para manejar los espacios libres y otra para manejar los procesos.
Los árboles utilizados son de tipo TreeSet de la clase de Java
Las clases concretas son las que implementan las politicas best-fit y First-fit
En las políticas Best-fit se utiliza el comparador ComparadorTamano para crear el árbol de memoria, para que el árbol se encuentre ordenado por tamaño.
Las búsqueda por tamaño se realiza mediante el método de búsqueda del la clase TreeSet tailSet que devuelve la rama de los nodos mayores al valor especificado en la búsqueda, si este nodo existe es el primero y se obtiene mediante el metodo fisrt () del conjunto de la clase de java SortedSet
Las búsquedas por dirección se realizan linealmente a través de un recorrido por el árbol
En las políticas First-fit se utiliza el comparador ComparadorDireccion para crear el árbol de memoria, para que el árbol se encuentre ordenado por posiciones de memoria.
Las búsqueda por dirección se realiza mediante el método de búsqueda del la clase TreeSet tailSet que devuelve la rama de los nodos mayores al valor especificado en la búsqueda, si este nodo existe es el primero y se obtiene mediante el método fisrt () del conjunto de la clase de java SortedSet
Las búsquedas por tamaño se realizan linealmente a través de un recorrido por el árbol.
Las búsquedas de procesos se implementan de igual manera
En las políticas First-fit ,en la fusión de bloques libres para encontrar el nodo adyacente anterior en el árbol de memoria se utiliza el método de búsqueda del la clase TreeSet headSet que devuelve la rama de los nodos menores al valor especificado en la búsqueda, si este nodo existe es el ultimo y se obtiene mediante el metodo last() del conjunto de la clase de java SortedSet .
En las políticas Best-fit, en la fusión de bloques libres para encontrar el nodo adyacente anterior en el árbol de memoria se realiza un recorrido de todo el árbol, hasta encontrar un bloque adyacente anterior ya que como esta ordenado por tamaño, no se sabe cual es la posición que tiene en la memoria cada nodo.
Comentarios del módulo 3
En el módulo 3 se utilizo la clase Vector de java para implementar las estrategias de reemplazo de paginas al igual que para implementar el bit se utilizo la clase vector
La clase vector es de tipo lista.
Resumen de los page foults
Probabilidad s = 0.80 y o 0.80
10 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 1433
Estrategia de reemplazo de páginas LRU, número de page foults = 1433
Estrategia de reemplazo de páginas LFU, número de page foults = 2226
Estrategia de reemplazo de páginas CLOCK, número de page foults = 1433
Estrategia de reemplazo de páginas OPT, número de page foults = 1335
50 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 1390
Estrategia de reemplazo de páginas LRU, número de page foults = 1389
Estrategia de reemplazo de páginas LFU, número de page foults = 2073
Estrategia de reemplazo de páginas CLOCK, número de page foults = 1390
Estrategia de reemplazo de páginas OPT, número de page foults = 1120
100 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 1329
Estrategia de reemplazo de páginas LRU, número de page foults = 1327
Estrategia de reemplazo de páginas LFU, número de page foults = 1931
Estrategia de reemplazo de páginas CLOCK, número de page foults = 1329
Estrategia de reemplazo de páginas OPT, número de page foults = 1002
Probabilidad s = 0.95 y o 0.95
10 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 128
Estrategia de reemplazo de páginas LRU, número de page foults = 125
Estrategia de reemplazo de páginas LFU, número de page foults = 406
Estrategia de reemplazo de páginas CLOCK, número de page foults = 128
Estrategia de reemplazo de páginas OPT, número de page foults = 121
50 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 118
Estrategia de reemplazo de páginas LRU, número de page foults = 120
Estrategia de reemplazo de páginas LFU, número de page foults = 338
Estrategia de reemplazo de páginas CLOCK, número de page foults = 118
Estrategia de reemplazo de páginas OPT, número de page foults = 114
100 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 114
Estrategia de reemplazo de páginas LRU, número de page foults = 114
Estrategia de reemplazo de páginas LFU, número de page foults = 150
Estrategia de reemplazo de páginas CLOCK, número de page foults = 114
Estrategia de reemplazo de páginas OPT, número de page foults = 114
Preguntas
1)¿Qué estrategia de reemplazo de páginas escogería usted y por qué? Debe considerar los resultados obtenidos y el esfuerzo que le llevó implementar cada estrategia. Discuta lo que sus resultados muestran acerca de los méritos relativos de FIFO, LRU, LFU, Second Chance (CLOCK) y OPT para cada una de las diferentes combinaciones de parámetros.
La estrategia OPT es la de mejor rendimiento
La estrategia LFU es la de peor rendimiento
Las estrategias FIFO y LRU tienen casi el mismo rendimiento con diferencia que cuando se aumenta el número de frames se puede ver una mejora la mayoría de veces mejorando LRU
FIFO y CLOCK mantienen el mismo rendimiento
El peor
Yo escogería la estrategia de replazo LRU ya que es la mejor después de OPT, y no es tan difícil de implementar como OPT ya que este debe conocer todas las referencias de memoria de antemano.
2) ¿Qué aspectos de la administración de memoria encontró que fue más difícil implementar?
La más difícil fue la memoria continua ya que se tienen que mantener información de los agujeros y los procesos y toda la implementación que realiza manejar memoria continua.
3) ¿Qué aspectos de la administración de la memoria encontró más fácil implementar?
La estrategia de reemplazo FIFO es la mas fácil de implementar, también lo es LRU.
4) ¿Qué cambiaría en su diseño actual?
En las estrategias de reemplazo se pueden implementar más mejoras a los algoritmos, por lo demás no cambiaria nada a este diseño.