Автор: Пользователь скрыл имя, 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
Приложение
Приложение 1.
package Memory;
//абстрактный класс Cache моделирует работу кэш памяти.
public abstract class Cache {
/*класс Cache содержит следущие атрибуты:
DelayTime - время доступа к кэш-памяти;
Volume - объем кэш-памяти;
Data - данные хранящиеся кэш-памяти;
Tag - теги, соответсвующие номерам ячеек в ОП;
LRU, LFU - метка выбранного алгоритма кэширования.
*/
public int DelayTime=10;
public int Volume;
public int [] Tag;
public String [] Data;
public String LRU = "LRU";
public String LFU = "LFU";
//конструктор класса
public Cache(int Volume){
SetVolume(Volume);
Data= new String[Volume];
Tag = new int[Volume];
}
//метод SetVolume. Устанавливает объем кэш памяти.
public void SetVolume(int Volume){
this.Volume=Volume;
}
//абстрактный метод getType. Позволяет получить название алгоритма.
public abstract String getType();
//абстрактный метод writeData. Запись данных в кэш. Реализован в классе-наследнике.
public abstract void writeData(String data,int addres);
//метод ShowData. Возвращает строку, в которой содержатся данные кэш-памяти.
public String ShowData(){
String value ="";
for (int i=0;i< Data.length;i++){
value=value+"["+i+"]: "+Tag[i]+" | "+Data[i] + " ";
}
return value;
}
//метод FindData.Поиск данных в кэше. Возвращет true или false, в зависимости от того, найдено ли значение или нет.
public boolean FindData(int teg) {
boolean isFounded=true;
//время доступа к кэш-памяти. Заключается
в конструкцию try{} catch{}, т.к. возможен
выброс исключительной
try{
Thread.sleep(0, DelayTime);
}
catch(InterruptedException ex){
}
for (int i=0;i< Data.length;i++){
if (Tag[i]==teg) {
isFounded=true;
}
else{
isFounded=false;
}
}
return isFounded;
}
}
package Memory;
//класс RAM моделирует работу оперативной памяти
public class RAM {
//класс RAM содержит следующие атрибуты:
//DelayTime - время доступа к ОП;
//Volume - объем ОП;
//Data - данные хранящиеся в ОП.
public int DelayTime=100;
public int Volume;
public String [] Data;
//конструктор класса
public RAM(int vol){
//вызов метода SetData.
SetData(vol);
}
//метод SetData. Заполнение ОП данными. Данные типа String, наборы нулей и единиц.
public void SetData(int vol){
String str;
Data = new String [vol];
Data[0]="0";
for (int i=1;i< Data.length;i++){
int d = i;
str="";
for (int r=0; d>0;r++){
str=d%2+str;
d=d/2;
}
Data[i]=str;
}
}
//метод FindData.Поиск данных
public String FindData(String data){
String value ="";
//время доступа к ОП. Заключается
в конструкцию try{} catch{}, т.к. возможен
выброс исключительной
try{
Thread.sleep(0,DelayTime);
}
catch(InterruptedException ex){}
for (int i=0;i< Data.length;i++){
if (Data[i].equals(data)) {
value=data;
break;
}
else {
value="";
}
}
return value;
}
//метод FindAddress. Возвращет номер ячейки ОП запрашиваемых данных.
public int FindAddress(String data){
int value = 0;
for (int i=0;i< Data.length;i++){
if (Data[i].equals(data)) {
value=i;
break;
}
}
return value;
}
//метод ShowData. Возвращает строку, в которой содержатся данные ОП.
public String ShowData(){
String value ="";
for (int i=0;i< Data.length;i++){
value=value+"["+i+"]: "+Data[i] + "\n";
}
return value;
}
}
package Algorithms;
//импортируем данные из Сache
import Memory.Cache;
//класс наследник от Cache
public class LFU extends Cache {
public LFU(int Volume){
super(Volume);
}
//frequence - наименее часто запрашиваемый
//index - ячейка кэша,в которую
private int[] frequence=new int[Volume];
private int index;
Информация о работе Алгоритмы кэширования данных и их эффективность