Курсовые работы, лабораторные, доклады для студентов
можете скачать и поделиться с другими,
если не жалко.

 
на правах рекламы


Моделирование КЭШ ЗУ


Лабораторная работа №3 по курсу
«Организация ЭВМ и систем»

«Моделирование КЭШ ЗУ».




Задание
1. Домашнее задание.

1.1. Ознакомиться с разделами лекций и рекомендуемой литературы, посвященными КЭШ.
1.2. Подготовить схему взаимодействия КЭШ, процессора и ОЗУ.
1.3. Разработать алгоритмы замещения строк (т.е. алгоритм определения той строки, которую приходится удалять при необходимости ввода в КЭШ новой информации и отсутствии в нем свободного места).
1.4. Разработать набор тестовых примеров для проверки правильности функционирования модели в режимах:
• Чтения при кэш-попадании/кэш-промахе
• Записи с использованием алгоритма замещения строк
• Поддержки когерентности данных в КЭШ и ОЗУ

2. Рабочее задание.
2.1. Создать:
Ø модель КЭШ устройства, «прозрачного» для процессора и обеспечивающего кэширование наиболее часто использующейся информации;
Ø модель процессора, имитирующую его обращения к оперативной памяти для чтения и записи информации. Реализовать возможность задания адреса, данных и типа операции (запись\чтение). Также обеспечить возможность выполнения произвольного количества циклов чтения\записи по заданному диапазону адресов. Связать модель процессора с моделью КЭШ устройства.
Ø модель ОЗУ. Обеспечить возможность сохранения, загрузки и случайного заполнения ОЗУ. Связать модель оперативной памяти с моделью процессора через модель «прозрачного» КЭШ устройства.
Объем КЭШ-памяти определяется из таблицы 1.

Таблица 1
Номер по журналу Объем КЭШ-памяти
Чётный 128 слов
Нечётный 256 слов

Приоритетная часть КЭШ определяется из таблицы 2.

Таблица 2
Остаток от деления номера по журналу на 4 - Приоритетная часть
0 - Алгоритм минимальной частоты использования
1 - Алгоритм последнего времени использования
2 - Стековый алгоритм
3 - Случайный алгоритм

Разрядность машинного слова определяется из таблицы 3.

Таблица 3
Номер по журналу Разрядность
Чётный 8 бит
Нечётный 16 бит

Объем ОЗУ определяется из таблицы 4.

Таблица 4
Номер по журналу Объем ОЗУ
Чётный 32 Кбайта
Нечётный 16 Кбайт


В модели КЭШ устройства 1 строка кэширует 1 машинное слово.
В качестве содержания признаковой части использовать адреса соответствующей информации в оперативной памяти.
2.2 Продемонстрировать работоспособность моделей преподавателю (циклы чтения и записи).
2.3 Провести статистическое исследование чтения данных по случайным и последовательным адресам.
2.4 Результаты моделирования оформить в виде отчёта.

Схема взаимодействия КЭШ, процессора и ОЗУ
Моделирование КЭШ ЗУ



Условные обозначения:

ПР – процессор
РО – регистр отклика
ПР Ч – признаковая часть
Н – накопитель
ПРИОР – приоритетная часть
Ai – адрес
Д – данные

Принцип работы КЭШ ЗУ:

В признаковой части хранятся адреса ячеек ОЗУ, информация из которых хранится в КЭШ. При поступлении из процессора адреса ячейки, по которому нужно произвести обращение, определяется, есть ли уже этот адрес в признаковой части. Если есть, то обращение к ОЗУ блокируется и осуществляется работа с КЭШ. При этом в регистр отклика заносится 1. Если нет, то происходит обращение к ОЗУ. Для организации замены информации в КЭШ при ее заполнении используется приоритетная часть.

Алгоритм замены информации в КЭШ для метода бинарной матрицы:

Приоритетная часть представляет собой матрицу, количество строк в которой равняется количеству слов в КЭШ. При обращении:
1) Строка с номером вызванной ячейки заполняется единицами за исключением позиции с номером этой ячейки.
2) Соответствующий ячейке столбец заполняется нулями.
Заменяется та ячейка, которой соответствует строка со всеми нулями.


Набор тестовых примеров для проверки правильности
функционирования модели КЭШ ЗУ в различных режимах


Режим чтения при кэш-попадании/кэш-промахе:

Выберем ячейку ОЗУ, из которой мы хотим считать информацию, например 1. После считывания сравним данные в КЭШ и ОЗУ. При кэш-попадании в регистре отклика появится 1.

Режим записи с использованием алгоритма замещения строк:

Для осуществления проверки проведем сначала чтение по последовательным адресам, количество которых немного больше количества слов в КЭШ (1024). Для определенности возьмем 1027 адресов. При этом очевидно, что ячейка в КЭШ, к которой дольше всего не было обращения, будет 4-й. В приоритетной части ей соответствует строка со всеми нулями. Теперь запишем информацию в одну из тех ячеек, которых нет в КЭШ. В КЭШ заменится 4-я строка.

Поддержка когерентности данных в КЭШ и ОЗУ:

При записи данных информация должна меняться как в ОЗУ, так и в КЭШ. Таким образом обеспечивается правильность выполнения следующего считывания по тому же адресу.

Моделирование КЭШ ЗУ

Моделирование проводилось с помощью среды программирования Borland Delphi7.

Заданные параметры:

Объем КЭШ-памяти - 4 Кбайта (1024 слов)
Приоритетная часть КЭШ - метод бинарной матрицы
Разрядность машинного слова - 32 бита
Объем ОЗУ - 32 Кбайта (8192 слов)

Описание программы

Программа позволяет смоделировать запись или чтение по заданному адресу, провести статистическое исследование чтения данных по случайным или последовательным адресам в заданном диапазоне и по его результатам подсчитать эффективность КЭШ. Можно также провести заполнение ОЗУ случайными данными.

Примеры работы программы

1) Заполним ОЗУ случайными данными и произведем чтение по первому адресу.

Моделирование КЭШ ЗУ



2) Проведем статистическое исследование:
Моделирование КЭШ ЗУ

Программный код модели КЭШ ЗУ

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ComCtrls, StdCtrls, Math, ExtCtrls;

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
UpDown1: TUpDown;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Label5: TLabel;
Edit2: TEdit;
GroupBox1: TGroupBox;
RadioGroup1: TRadioGroup;
Label6: TLabel;
Edit3: TEdit;
Label7: TLabel;
Edit4: TEdit;
Button4: TButton;
Label8: TLabel;
Label9: TLabel;
ProgressBar1: TProgressBar;
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
procedure Cache(addr: integer; value: string; mode: byte; var InCache: byte);
end;

const CacheSize = 1024;
RAMSize = 8192;

var
Form1: TForm1;
InCache: byte;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i,j: integer;
begin
with StringGrid1 do
begin
Cells[0,0]:='Номер';
Cells[1,0]:='РО';
Cells[2,0]:='Адрес';
Cells[3,0]:='Значение';
for i:=1 to CacheSize do
begin
Cells[0,i]:=IntToStr(i);
Cells[1,i]:='0';
Cells[2,i]:='0';
end;
end;
with StringGrid2 do
for i:=1 to CacheSize do
begin
Cells[0,i]:=IntToStr(i);
Cells[i,0]:=IntToStr(i);
for j:=1 to CacheSize do
Cells[j,i]:='0';
end;

with StringGrid3 do
begin
Cells[0,0]:='Адрес';
Cells[1,0]:='Значение';
for i:=1 to RAMSize do
Cells[0,i]:=IntToStr(i);
end;

Edit2.Text:='';
for i:=1 to 32 do
Edit2.Text:=Edit2.Text+IntToStr(Random(2));

Label9.Caption:='';
end;

procedure TForm1.Button3Click(Sender: TObject); //Заполнить ОЗУ случайными данными
var i: integer;
j:byte;
begin
Randomize;
for i:=1 to RAMSize do
begin
StringGrid3.Cells[1,i]:='';
for j:=1 to 32 do
StringGrid3.Cells[1,i]:=StringGrid3.Cells[1,i]+IntToStr(Random(2));
end;
end;

procedure TForm1.Cache(addr: integer; value: string; mode: byte; var InCache: byte);
var i,j,num,FirstEmpty: integer;
FullCache,fl: byte;
begin
InCache:=0;
FullCache:=1;
for i:=1 to CacheSize do //проверяем, есть ли в КЭШ
if addr = StrToInt(StringGrid1.Cells[2,i]) then
begin
InCache:=1;
num:=i;
break;
end
else
if StringGrid1.Cells[2,i] = '0' then
begin
FullCache:=0;
FirstEmpty:=i;
break;
end;

if InCache = 1 then //если информация есть в КЭШ
begin
for i:=1 to CacheSize do
StringGrid1.Cells[1,i]:='0';
StringGrid1.Cells[1,num]:='1';

if mode = 0 then //считывание
value:=StringGrid1.Cells[3,num]
else //запись
begin
StringGrid1.Cells[3,num]:=value;
StringGrid3.Cells[1,addr]:=value;
end;

for i:=1 to CacheSize do
StringGrid2.Cells[i,num]:='1';
for i:=1 to CacheSize do
StringGrid2.Cells[num,i]:='0';
end //если информации нет в КЭШ
else
begin
if mode = 0 then //считывание из ОЗУ
value:=StringGrid3.Cells[1,addr]
else //запись в ОЗУ
StringGrid3.Cells[1,addr]:=value;

if FullCache = 0 then //КЭШ не заполнена
begin
for i:=1 to CacheSize do
StringGrid1.Cells[1,i]:='0';
//StringGrid1.Cells[1,FirstEmpty]:='1';
StringGrid1.Cells[2,FirstEmpty]:=IntToStr(addr);
StringGrid1.Cells[3,FirstEmpty]:=value;

for i:=1 to CacheSize do
StringGrid2.Cells[i,FirstEmpty]:='1';
for i:=1 to CacheSize do
StringGrid2.Cells[FirstEmpty,i]:='0';
end
else //КЭШ заполнена
begin
for i:=1 to CacheSize do
begin
fl:=1;
for j:=1 to CacheSize do
if StringGrid2.Cells[j,i] = '1' then
begin
fl:=0;
break;
end;
if fl = 1 then //найдена ячейка КЭШ для замены
begin
for j:=1 to CacheSize do
StringGrid1.Cells[1,j]:='0';
//StringGrid1.Cells[1,i]:='1';
StringGrid1.Cells[2,i]:=IntToStr(addr);
StringGrid1.Cells[3,i]:=value;

for j:=1 to CacheSize do
StringGrid2.Cells[j,i]:='1';
for j:=1 to CacheSize do
StringGrid2.Cells[i,j]:='0';

break;
end;
end;
end;
end;

if mode = 0 then
Edit2.Text:=value;
end;

procedure TForm1.Button1Click(Sender: TObject); //запись
begin
Cache(UpDown1.Position,Edit2.Text,1,InCache);
end;

procedure TForm1.Button2Click(Sender: TObject); //чтение
begin
Cache(UpDown1.Position,'',0,InCache);
end;

procedure TForm1.Button4Click(Sender: TObject);
var i,addr1,addr2,k_in: integer;
begin
addr1:=StrToInt(Edit3.Text);
addr2:=StrToInt(Edit4.Text);
k_in:=0;
ProgressBar1.Min:=0;
ProgressBar1.Max:=addr2-addr1;
Randomize;
if RadioGroup1.ItemIndex = 0 then //последовательные адреса
for i:=addr1 to addr2 do
begin
Cache(i,'',0,InCache);
if InCache = 1 then inc(k_in);
Label9.Caption:=FloatToStrF(k_in/(i-addr1+1),ffFixed,16,3);
ProgressBar1.StepIt;
Refresh;
end
else //случайные
for i:=addr1 to addr2 do
begin
Cache(addr1+random(addr2-addr1+1),'',0,InCache);
if InCache = 1 then inc(k_in);
Label9.Caption:=FloatToStrF(k_in/(i-addr1+1),ffFixed,16,3);
ProgressBar1.StepIt;
Refresh;
end;
end;

end.


Выводы

В данной лабораторной работе было проведено моделирование КЭШ ЗУ. В смоделированной программе можно посмотреть его работу в различных режимах (чтение/запись), проверить правильность осуществления замены информации, провести статистическое исследование чтения данных.


Список использованной литературы

1) Огнев И. В., Борисов В. В. «Ассоциативные среды». – М.: Радио и связь, 2000. – 312 с.
2) Конспект лекций по курсу «Организация ЭВМ и систем»

Скачать Лабораторную работу на тему:
Моделирование КЭШ ЗУ

Lab3.zip [79,6 Kb] (cкачиваний: 80)

Теги: ЭВМ, программирование

Комментарии:

Оставить комментарий
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.