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

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

            if (recent[mostRecent] < recent[i])

                mostRecent = i;

        }

        for (int i = 0; i < recent.length; i++)

            recent[i] = (mostRecent == i) ? 1: ++recent[i];

        return mostRecent;

    }

} 
 
 

package CPU;

//имортируем  данные из других классов

import Memory.Cache;

import Memory.RAM;

// класс  CPU моделирует работу процессора  и реализует интерфейс Runnable

public class CPU implements Runnable  {

    //класс CPU содержит следущие атрибуты:

    //memory - ОП, к которой процессор  будет обращаться;

    //cache - кэш, к которому процессор  будет обращаться;

    //form - форма,на которой будет происходить  выполнение программы;

    //datamemory - данные из ОП;

    //ref - обращения процессора к ОП;

    //t - поток, в котором работает  процессор.

    private RAM memory;

    private Cache cache;

    private Form form;

    private String [] datamemory;

    private int [] ref = null;

    private Thread t;

    //конструктор класса CPU,куда передаем все атрибуты процессора

    public CPU(RAM memory, Cache cache,String[] DataMemory, Form form,int [] Ref){

        this.cache=cache;

        this.memory=memory;

        this.form=form;

        this.datamemory=DataMemory;

        this.ref = Ref;

        t=new Thread(this);

    }

    //запуск процессора

    public void start(){

        t.start();

    }

    // метод run, который составляет  поток обращений процессора к  ОП

    public void run(){

        form.VolumeCache.setEnabled(false);

        form.jLabel9.setVisible(true);

        form.jButton3.setEnabled(false);

        form.LRUbutton.setEnabled(false);

        form.LFUbutton.setEnabled(false);

        //кол-во попаданий и промахов

        float Hit = 0;

        float Miss = 0;

        //логическая переменная, определяющая  кэш промах или попадание.

        boolean hit;

        String data;

        int Address = 0;

        for (int i = 0; i <ref.length ; i++) {

            //поиск данных в кэше, и возвращение true или false, в случае попадания или промаха

            hit = cache.FindData(ref[i]);

            //если данные не найдены,то чтение данных из ОП с последующей записью в кэш.

            if (!hit){

                data=memory.FindData(datamemory[ref[i]]);

                Address=memory.FindAddress(datamemory[ref[i]]);

                cache.writeData(data,Address);

                form.Statistics.setText(form.Statistics.getText()+"Cache: "+cache.ShowData()+"\n");

                Miss=Miss+1;

            }

            //если данные найдены, то читаем  из кэша

            else{

                form.Statistics.setText(form.Statistics.getText()+"Cache: "+cache.ShowData()+"\n");

                Hit=Hit+1;

            }

            form.jProgressBar1.setValue(form.jProgressBar1.getMaximum()*(i+1)/ref.length);

        }

        //вывод статистики

        if (cache.getType().equals("LRU")){

           form.jTextField1.setText(""+Hit);

           form.jTextField3.setText(""+Miss);

           form.jTextField5.setText(""+(Hit/(Hit+Miss))*100+"%");

           form.jTextField7.setText(""+(Miss/(Hit+Miss))*100+"%");

        }

        else

        {

           form.jTextField2.setText(""+Hit);

           form.jTextField4.setText(""+Miss);

           form.jTextField6.setText(""+(Hit/(Hit+Miss))*100+"%");

           form.jTextField8.setText(""+(Miss/(Hit+Miss))*100+"%");

        }

        form.Statistics.setText(form.Statistics.getText()+"Кол-во попаданий: "+Hit+"\nКол-во промахов: "+Miss+"\nПроцент попадания: " +Hit/(Hit+Miss)+"%\nПроцент промаха: "+ Miss/(Hit+Miss)+"%");

        form.VolumeCache.setEnabled(true);

        form.jButton3.setEnabled(true);

        form.jLabel9.setVisible(false);

        form.jProgressBar1.setValue(0);

        form.LRUbutton.setEnabled(true);

        form.LFUbutton.setEnabled(true);

    }

} 
 

package CPU;

import Algorithms.*;

import Memory.*;

import java.util.Random;

import java.util.StringTokenizer;

import javax.swing.JOptionPane;

public class Form extends javax.swing.JFrame {

    //proc - процессор

    //cache - кэш

    //RAM - ОП

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

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

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