public class Cache
extends java.lang.Object
Esta clase representa a la cache raster. Consta de una seríe de páginas (CachePages) que son buffers con los bloques de datos cacheados en un instante dado. Esta cache tiene una estructura en forma de array donde cada elemento es una página de caché. Las páginas se agrupan en bloques de N páginas denominados grupos. La variable nelemsGroup contiene el número de páginas de cada grupo.
La politica de reemplazo es que una página siempre va a un conjunto determinado por el calculo cto = pag % nelemsGroup. Si hay hueco vacío en el grupo se añadirá en el siguiente hueco pero si hay que reeplazar se reeplazará la página que más tiempo haga su último acceso.
Esta caché lleva el control de que páginas están cargadas a través de un array de de booleanos donde cada elemento representa a una página de datos del raster. Si el elemento en la posición N de dicho array es true significa que la página está cacheada. Si es false no lo estará.
La página de datos actualmente accedida debe estar cacheada por lo que está clase debe llevar el control de que página se está accediendo o a sido accedida por última vez. La variable que nos dice que página está siendo accedida es loadPage y pageBuffer será la variable que apunta al buffer de esta página. Cuando se cambia de página en un acceso estas dos variables deben cambiar a sus nuevos valores.
Otro parámetro que controla esta clase es que página de cada grupo ha sido accedido con mayor frecuencia. Esto es útil porque siempre se reemplaza la página de un grupo que haga más tiempo que haya sido accedida bajo la premisa de que "las páginas con accesos recientes tienen mayor probabilidad de volver a ser usadas". Esto es controlado por la variable lastAccess que es usada para implementar el algoritmo LRU. Cada vez que una página de un grupo es accedida su contador de lastAccess se pone a 0. El resto de contadores de las páginas del grupo se incrementa en uno. Siempre se sustituye la página del grupo con valor más grande en el contador.
Constructor and Description |
---|
Cache(CacheStruct cacheStruct,
int dataSourceWidth)
Contructor
|
Cache(int nBands,
int dataType,
int dataSourceWidth,
int dataSourceHeight)
Inicializamos la variables.
|
Cache(int nBands,
int dataType,
int dataSourceWidth,
int dataSourceHeight,
java.lang.Object driverParam)
Inicializamos la variables.
|
Modifier and Type | Method and Description |
---|---|
boolean |
anyPageModified()
Consulta si alguna página de memoria tiene modificaciones para volcar a disco
|
void |
assignBand(int nBand,
ICacheDataSource[] cacheDataSource)
Asigna una banda de disco a todas las páginas.
|
void |
clearCache(int nBands)
Limpia los trozos de caché en disco.
|
int |
convertPageInGroupToPageInCache(int group,
int pageInGroup)
Convierte una página dentro de un grupo de la caché en un número de
página de caché.
|
void |
deleteBand(int nBand)
Elimina una banda de la caché.
|
PageBuffer |
getAccessPage()
Obtiene la página de datos actualmente accedida
|
int |
getBitsPag()
Obtiene el número de bits por página para poder calcular el desplazamiento binario
de la dirección de acceso de la petición.
|
CacheStruct |
getCacheStruct()
Obtiene la estructura de ca caché
|
ICacheDataSource |
getHddPage(int nPage,
int nBand)
Obtiene la fuente de datos de una banda de una página de disco.
|
int |
getHPag()
Obtiene la altura de la página de cache en líneas.
|
int[][] |
getLastAccess()
Obtiene el array que contiene los valores de la antigüedad del acceso dentro del
grupo.
|
int |
getNBands()
Obtiene el número de bandas
|
int |
getNGroups()
Obtiene el número de grupos de caché
|
int |
getNPags()
Obtiene el número de páginas de la caché
|
int |
getNTotalPags()
Obtiene el número total de páginas del raster
|
int |
getNumberCachePageFromNumberRasterPage(int pag)
Obtiene el número de página de caché donde está cargada la página del raster
que se ha pasado por parámetro.
|
int[] |
getNumberGroupFromNumberRasterPage(int pag)
Obtiene el número de página de caché (en formato grupo/página dentro del grupo)
donde está cargada la página del raster que se ha pasado por parámetro.
|
int |
getNumberInAccessPage()
Obtiene el número de página cargada en el buffer
|
int |
getOffset()
Para extraer el desplazamiento de una dirección (línea de raster) hay que hacer una operación And con
con la altura de la página -1.
|
PageBuffer |
getPageBuffer(int group,
int posInGroup)
Obtiene la página de datos del grupo definido en el parámetro group y de la
posición pag dentro de ese grupo.
|
PageBuffer |
getPageBufferFromNumberCachePage(int pag)
Obtiene la página de datos de la posición pag
|
PageBuffer |
getPageBufferFromNumberRasterPage(int pag)
Obtiene la página de datos a partir del número de página de raster
|
int[] |
getPageNumberInCache()
Obtiene el array con los números de página que hay cargados
en cada bloque de cache
|
int |
getPagsPerGroup()
Obtiene el número de páginas que tiene cada grupo
|
int |
getRasterPageNumberInPosition(int nCachePage)
Obtiene el número de página del raster cargada en una página de caché especificada
en el parámetro.
|
int |
getRasterPageNumberInPosition(int group,
int posInGroup)
Obtiene el número de página del raster cargada en una página de caché especificada
en el parámetro.
|
boolean |
isInCache(int nPag)
Array de booleanos donde cada elemento es una página del raster y dice si la página
está cacheada o no.
|
boolean |
isModified(int nCachePag)
Consulta si una página de caché ha sido modificada desde que se cargó en caché o no.
|
boolean |
isModified(int group,
int posInGroup)
Consulta si una página de caché ha sido modificada desde que se cargó en caché o no.
|
void |
loadPage(int group,
int posInGroupPageToReplace,
int nPag)
Carga una página especificada en el parámetro nPag con los datos necesarios.
|
int |
posInGroupPagToReplace(int group)
Obtiene la posición del grupo de la página a reemplazar, es decir la de máximo valor
en el vector lastAccess.
|
void |
resetCache()
Salva a disco todas las páginas en memoria caché e inicializa estructuras de datos.
|
void |
savePage(int group,
int posInGroupPageToReplace,
int nPag)
Salva una página especificada en el parámetro nPag a disco.
|
void |
setAccessPage(PageBuffer pb,
int pagNumber)
Asigna el buffer de la página accedida por referencia
|
void |
setCacheStruct(CacheStruct cacheStruct)
Asigna la estructura de ca caché
|
void |
setModify(int nCachePag)
Pone como modificada una página de caché
|
void |
setModify(int group,
int posInGroup)
Pone como modificada una página de caché
|
void |
setPageAsLoadInCache(int nPag)
Marca una página como cargada en caché.
|
void |
setPageAsNotLoadInCache(int nPag)
Desmarca una página como cargada en caché.
|
void |
setRasterPageNumberInPosition(int nCachePage,
int nRasterPage)
Asigna el número de página del raster cargada en una página de caché especificada.
|
void |
setRasterPageNumberInPosition(int group,
int posInGroup,
int nRasterPage)
Asigna el número de página del raster cargada en una página de caché especificada.
|
void |
setZeroInLastAccess(int group,
int posInGroup)
Asigna un cero en la posición del array que contiene la antigüedad de acceso dentro
del grupo.
|
void |
show()
Imprime la información de estructura de caché
|
void |
unsetModify(int nCachePag)
Pone como no modificada una página de caché
|
void |
unsetModify(int group,
int posInGroup)
Pone como no modificada una página de caché
|
int |
updateLastAccess(int group)
Actualiza los últimos accesos del grupo pasado por parámetro.
|
public Cache(int nBands, int dataType, int dataSourceWidth, int dataSourceHeight, java.lang.Object driverParam) throws java.io.FileNotFoundException, NotSupportedExtensionException, RasterDriverException
nBands
- Número de bandasdataType
- Tipo de dato de la páginadataSourceWidth
- ancho de la fuente de datosdriverParam
- parámetro para el driverjava.io.FileNotFoundException
NotSupportedExtensionException
RasterDriverException
public Cache(int nBands, int dataType, int dataSourceWidth, int dataSourceHeight)
nBands
- Número de bandasdataType
- Tipo de dato de la páginadataSourceWidth
- ancho de la fuente de datospublic Cache(CacheStruct cacheStruct, int dataSourceWidth)
cacheStruct
- public void clearCache(int nBands) throws java.io.IOException
java.io.IOException
public int getBitsPag()
public int getHPag()
public boolean isInCache(int nPag)
public void setPageAsLoadInCache(int nPag)
nPag
- Número de página a marcar.public void setPageAsNotLoadInCache(int nPag)
nPag
- Número de página a desmarcar.public int getRasterPageNumberInPosition(int nCachePage)
nCachePage
- Número de página de caché de la que se quiere saber que página del
raster hay cargada.public int getRasterPageNumberInPosition(int group, int posInGroup)
group
- Grupo en el que se encuentra la páginaposInGroup
- Posición dentro del grupo en el que está la páginapublic void setRasterPageNumberInPosition(int nCachePage, int nRasterPage)
nCachePage
- Número de página de cachénRasterPage
- Número de página de raster a asignarpublic void setRasterPageNumberInPosition(int group, int posInGroup, int nRasterPage)
nCachePage
- Número de página de cachénRasterPage
- Número de página de raster a asignarpublic int getNumberCachePageFromNumberRasterPage(int pag)
pag
- Página del rasterpublic int[] getNumberGroupFromNumberRasterPage(int pag)
pag
- Página del rasterpublic int[][] getLastAccess()
public void setZeroInLastAccess(int group, int posInGroup)
group
- Número de grupoposInGroup
- Posición de la página dentro del grupo.public int getNumberInAccessPage()
public int getPagsPerGroup()
public PageBuffer getPageBufferFromNumberCachePage(int pag)
pag
- Número de página de caché a recuperarpublic PageBuffer getPageBufferFromNumberRasterPage(int pag)
pag
- Número de página raster a recuperarpublic PageBuffer getPageBuffer(int group, int posInGroup)
group
- Grupo de la página requeridapag
- Número de página dentro del grupopublic PageBuffer getAccessPage()
public void setAccessPage(PageBuffer pb, int pagNumber)
pb
- public boolean isModified(int nCachePag)
nCachePag
- Número de página de caché (posición de esta)public boolean isModified(int group, int posInGroup)
group
- Grupo en el que se encuentra la páginaposInGroup
- Posición dentro del grupo en el que está la páginapublic void setModify(int nCachePag)
nCachePag
- Número de página de caché (posición de esta)public void setModify(int group, int posInGroup)
group
- Grupo en el que se encuentra la páginaposInGroup
- Posición dentro del grupo en el que está la páginapublic void unsetModify(int nCachePag)
nCachePag
- Número de página de caché (posición de esta)public void unsetModify(int group, int posInGroup)
group
- Grupo en el que se encuentra la páginaposInGroup
- Posición dentro del grupo en el que está la páginapublic int getNPags()
public int getNBands()
public CacheStruct getCacheStruct()
public void setCacheStruct(CacheStruct cacheStruct)
CacheStruct
- public int getNGroups()
public int getNTotalPags()
public int[] getPageNumberInCache()
public int getOffset()
public int convertPageInGroupToPageInCache(int group, int pageInGroup)
group
- pageInGroup
- public int updateLastAccess(int group)
group
- Número de grupo a actualizar sus accesospublic int posInGroupPagToReplace(int group)
group
- Número de grupo a obtener la página de reemplazopublic void loadPage(int group, int posInGroupPageToReplace, int nPag)
group
- Grupo sobre el que se carga la página nPagposInGroupPageToReplace
- Posición dentro del grupo sobre el que se carga la páginanPag
- Página a cargarpublic void savePage(int group, int posInGroupPageToReplace, int nPag) throws java.io.IOException
group
- Grupo del que se salva la página nPagposInGroupPageToReplace
- Posición dentro del grupo del que se salva la páginanPag
- Página a salvarjava.io.IOException
public void resetCache() throws java.io.IOException
java.io.IOException
public void deleteBand(int nBand) throws java.io.IOException
nBand
- Número de banda a eliminarjava.io.IOException
public void assignBand(int nBand, ICacheDataSource[] cacheDataSource) throws java.io.IOException
cacheDataSource
- Fuente de las páginas. Es la referencia a disco de ellas.java.io.IOException
public ICacheDataSource getHddPage(int nPage, int nBand)
nPage
- Página de la que se quiere la bandanBand
- Banda de la que se quiere la fuente de datospublic boolean anyPageModified()
public void show()