Лабораторная работа №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) Проведем статистическое исследование:
Программный код модели КЭШ ЗУ
Выводы
В данной лабораторной работе было проведено моделирование КЭШ ЗУ. В смоделированной программе можно посмотреть его работу в различных режимах (чтение/запись), проверить правильность осуществления замены информации, провести статистическое исследование чтения данных.
Список использованной литературы
1) Огнев И. В., Борисов В. В. «Ассоциативные среды». – М.: Радио и связь, 2000. – 312 с.
2) Конспект лекций по курсу «Организация ЭВМ и систем»
«Организация ЭВМ и систем»
«Моделирование КЭШ ЗУ».
Задание
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.
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) Конспект лекций по курсу «Организация ЭВМ и систем»
Скачать Лабораторную работу на тему:
Моделирование КЭШ ЗУ
Моделирование КЭШ ЗУ