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

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

    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

     //переопределенный метод поиск  данных в кэше, возвращаюший true или  false

    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

    //переопределенный метод поиск  данных в кэше, возвращаюший true или  false

    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++) {

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

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

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