готов лаби 4 курс 1 сим / Вычислительные системы / Lab7
.docМіністерство освіти і науки, молоді та спорту України
Кіровоградський національний технічний університет
Механіко-технологічний факультет
Кафедра програмного забезпечення
Дисципліна:«Обчислювальні системи»
Лабораторна робота № 7
Тема: «Моделювання роботи мультипроцесора UMA, який використовує координатні комутатори»
Виконав:ст.гр.КІ-09-2
Кірнус Л.Є.
Перевірив: викладач
Доренський О.П.
м. Кіровоград 2012
Теоретичні відомості
Як відомо шинні багатопроцесорні системи при одній загальнійй шині обмежують кількість UMA - може бути мультипроцесорів 32 або 64. Щоб обійти це обмеження, потрібна інша схема з'єднання мережі. Дуже простою схемою з'єднання n ЦП та k модулів пам'яті є координатний комутатор (рис.1.1).
На кожному перетині горизонтальної (вхідної) та вертикальної (вихідної) лінії розташовується координатний перемикач. Він представляє собою невеликий перемикач, який може бути відкритим, або закритим, у залежності від того, чи повинні бути з'єднані вертикальна та горизонтальна лінія або ні.
Одна з самих цікавих властивостей КМ (координатних комутаторів) полягає в тому, що він представляє собою мережу, яка не блокується. ЦУ означає, що жоден з центральних процесорів не отримує відмови у з'єднанні від того що якийсь з перемикачів уже зайнятий. Більш того, при такій схемі не потрібно планувати доступ до там'яті. Навіть якщо сім будь яких з'єднань вже встановлено, завжди можна з'єднати ЦП, який залишився з вільним модулем пам'яті.
Основний недолік координатного комутатора полягає в тому, що кількість перемикачів зростає пропорційно квадрата від кількості ЦП. При 1000 ЦП та 1000 модулів пам'яті потрібен 1000000 перемикачів.
Завдання
Використовуючи, будь яку ОС (MS-DOS, Linux, Windows XX і т.д.) напишіть програму-емулятор координатного комутатора 8х8, який дозволяє виконувати з'єднання всіх ЦП з усіма модулями пам'яті, при цьому на вході з клавіатури повинні вводитися дані у вигляді числа (0000 0001 або 0010 0010). Де молоший напівбайт це номер ЦП, а старший номер МП.
Лістинг програми
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Buttons, ExtCtrls, SRValEdt;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Label2: TLabel;
Timer1: TTimer;
Panel3: TPanel;
Edit1: TEdit;
BitBtn1: TBitBtn;
Label3: TLabel;
Panel4: TPanel;
SliderEdit1: TSliderEdit;
BitBtn2: TBitBtn;
Label4: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
table: array[1..8,1..8] of string=(('00000000','00000001','00000010','00000011','00000100','00000101','00000110','00000111'),
('00010000','00010001','00010010','00010011','00010100','00010101','00010110','00010111'),
('00100000','00100001','00100010','00100011','00100100','00100101','00100110','00100111'),
('00110000','00110001','00110010','00110011','00110100','00110101','00110110','00110111'),
('01000000','01000001','01000010','01000011','01000100','01000101','01000110','01000111'),
('01010000','01010001','01010010','01010011','01010100','01010101','01010110','01010111'),
('01100000','01100001','01100010','01100011','01100100','01100101','01100110','01100111'),
('01110000','01110001','01110010','01110011','01110100','01110101','01110110','01110111'));
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i,j,k: integer;
trying: boolean;
begin
if Edit1.Text='' then
begin
MessageDlg('Введіть значення в поле!', mtInformation,[mbOk], 0);
exit;
end;
//Проверка на корректность введенного значения
trying:=false;
for i:=1 to 8 do
for j:=1 to 8 do
if Edit1.Text=table[i,j] then
trying:=true;
if trying=false then
begin
MessageDlg('Введіть правильний параметр!', mtInformation,[mbOk], 0);
exit;
end;
//Конец проверки на корректность
//Очистка таблички
for i:=1 to 8 do
for j:=1 to 8 do
StringGrid1.Cells[i,j]:='';
for i:=1 to 8 do
begin
for j:=1 to 8 do
begin
if Edit1.Text=table[i,j] then
begin
for k:=1 to i do
StringGrid1.Cells[k,j]:='========';
for k:=1 to j do
StringGrid1.Cells[i,k]:=' |';
StringGrid1.Cells[i,j]:='CONNECT';
exit;
end;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//StringGrid1.Font.Color:=clBlue;
StringGrid1.Cells[0,1]:='0000';
StringGrid1.Cells[0,2]:='0001';
StringGrid1.Cells[0,3]:='0010';
StringGrid1.Cells[0,4]:='0011';
StringGrid1.Cells[0,5]:='0100';
StringGrid1.Cells[0,6]:='0101';
StringGrid1.Cells[0,7]:='0110';
StringGrid1.Cells[0,8]:='0111';
StringGrid1.Cells[1,0]:='0000';
StringGrid1.Cells[2,0]:='0001';
StringGrid1.Cells[3,0]:='0010';
StringGrid1.Cells[4,0]:='0011';
StringGrid1.Cells[5,0]:='0100';
StringGrid1.Cells[6,0]:='0101';
StringGrid1.Cells[7,0]:='0110';
StringGrid1.Cells[8,0]:='0111';
SliderEdit1.Value:=150;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i,j,k: integer;
begin
randomize;
for i:=1 to 8 do
for j:=1 to 8 do
StringGrid1.Cells[i,j]:='';
i:=random(9);
j:=random(9);
//Исключаем ноль из случайного выбора
while (i=0) or (j=0) do
begin
i:=random(9);
j:=random(9);
end;
for k:=1 to i do
StringGrid1.Cells[k,j]:='========';
for k:=1 to j do
StringGrid1.Cells[i,k]:=' |';
StringGrid1.Cells[i,j]:='CONNECT';
Edit1.Text:=table[i,j];
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if Timer1.Enabled=true then
begin
Timer1.Enabled:=false;
BitBtn2.Font.Color:=clGreen;
BitBtn2.Caption:='Старт';
end
else
begin
Timer1.Interval:=SliderEdit1.Value;
Timer1.Enabled:=true;
BitBtn2.Font.Color:=clRed;
BitBtn2.Caption:='Стоп';
end;
end;
end.