Алгоритмы кэширования данных и их эффективность

Автор: Пользователь скрыл имя, 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

Файлы: 4 файла

Графики.xlsx

— 16.78 Кб (Открыть, Скачать)

Курсовая работа.docx

— 413.90 Кб (Открыть, Скачать)

Приложение.docx

— 41.71 Кб (Скачать)

Приложение

Приложение 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;

Титульник и содержание.docx

— 21.73 Кб (Открыть, Скачать)

Информация о работе Алгоритмы кэширования данных и их эффективность