Автор: Пользователь скрыл имя, 09 Марта 2011 в 11:30, курсовая работа
Цель исследования – выявить эффективность алгоритмов кэширования данных LRU, LFU.
Задачи исследования:
•проанализировать предметную область;
•спроектировать и реализовать программную систему для анализа эффективности алгоритмов кэширования данных LRU, LFU;
•провести сравнительный анализ эффективности алгоритмов кэширования данных LRU, LFU.
Введение 3
1.Анализ предметной области 4
1.Структура кэш-памяти и схема ее работы 4
2.Алгоритмы кэширования 5
3.Ассоциативность и принципы локальности кэш-памяти 6
4.Словарь предметной области 7
2.Проектирование архитектуры разрабатываемой системы 8
1.Иерархия классов 8
2.Блок – схемы алгоритмов 8
3.Реализация системы на языке высокого уровня 10
4.Тестирование приложения 11
5.Исследование эффективности алгоритмов 13
Заключение 17
Список использованной литературы 18
Приложение 19
int lessFrequence;
//метод возвращает тип алгоритма
@Override
public String getType() {
return(LFU);
}
/*переопределяемый метод
передаем параметры data и address,данные и адрес в ОП соотвественно
просматриваем весь кэш,в
в противном случае записываем в первую пустую ячейку */
@Override
public void writeData(String data, int address) {
if (Data[Volume - 1] != null) {
index = AskFrequence();
Data[index] = data;
Tag[index] = address;
}
else {
for (int i = 0; i < Volume; i++)
if (Data[i] == null) {
Data[i] = data;
frequence[i] = 0;
Tag[i] = address;
break;
}
}
}
@Override
//переопределенный метод
public boolean FindData(int data) {
//время доступа к кэш-памяти. Заключается в конструкцию try{} catch{}, т.к. возможен выброс исключительной ситуации.
try {
Thread.sleep(0, DelayTime);
} catch (InterruptedException e) {}
//найденая строка кэш памяти
boolean isFounded = false;
for (int i = 0; i < Volume; i++) {
if(Tag[i] == data) {
isFounded = true;
break;
}
else
isFounded = false;
}
return isFounded;
}
//метод возвращает адреса
int AskFrequence() {
lessFrequence = 0;
for (int i = 1; i < frequence.length; i++) {
if (frequence[lessFrequence] > frequence[i])
lessFrequence = i;
}
for (int i = 0; i < frequence.length; i++)
frequence[i] = 0;
return lessFrequence;
}
}
package Algorithms;
//импортируем данные из Сache
import Memory.Cache;
//класс наследник от Cache
public class LRU extends Cache {
public LRU(int Volume){
super(Volume);
}
//recent - наименее новый из запрашиваемых
int[] recent = new int [Volume];
int foundedElement;
@Override
//метод возвращает тип алгоритма
public String getType() {
return(LRU);
}
@Override
//переопределяемый метод
public void writeData(String data, int addres) {
if (Data[Volume - 1] != null) {
int where = AskMostRecentess();
Data[where] = data;
Tag[where] = addres;
}
else {
for (int i = 0; i < Volume; i++)
if (Data[i] == null) {
Data[i] = data;
recent[i] = 1;
Tag[i] = addres;
break;
}
}
}
@Override
//переопределенный метод
public boolean FindData(int data) {
//время доступа к кэш-памяти. Заключается в конструкцию try{} catch{}, т.к. возможен выброс исключительной ситуации.
try {
Thread.sleep(0, DelayTime);
} catch (InterruptedException e) {}
//найденая строка кэш памяти
foundedElement = 0;
boolean isFounded = false;
for (int i = 0; i < Volume; i++) {
if(Tag[i] == data) {
isFounded = true;
foundedElement = i;
break;
}
else
isFounded = false;
}
//если данные были найдены,
тогда устанавливается, что
//для всех других строк
if (isFounded) {
for(int i = 0; i < Data.length; i++) {
recent[i] = (foundedElement == i) ? 1: ++recent[i];
}
}
return isFounded;
}
//метод возвращает адреса
int AskMostRecentess() {
int mostRecent = 0;
for (int i = 1; i < recent.length; i++) {
Информация о работе Алгоритмы кэширования данных и их эффективность