Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
05.06.2015
Размер:
54.27 Кб
Скачать

Міністерство освіти і науки, молоді та спорту України

Кіровоградський національний технічний університет

Механіко-технологічний факультет

Кафедра програмного забезпечення

Дисципліна:«Обчислювальні системи»

Лабораторна робота № 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.

2

Соседние файлы в папке Вычислительные системы