Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Міністерство освіти і науки, молоді та спорту України
Кіровоградський національний технічний університет
Механіко-технологічний факультет
Кафедра програмного забезпечення
Дисципліна: «Обчислювальні системи»
Лабораторна робота №8
Тема: «Моделювання роботи симетричного мультипроцесора UMA з загальною шиною»
Виконав: ст. гр. КІ-09-2
Кірнус Л.Є.
Перевірив: викладач
Доренський О.П.
Кіровоград 2012
Розробити програму-емулятор роботи симетричного мультипроцесора UMA з загальною шиною на засадах багатопроцесорності у системі.
Код програми:
using System;
using System.Windows.Forms;
using System.Threading;
using System.IO;
namespace UMA
{
public partial class Form1 : Form
{
public string Path; // Змінна для створення по дескриптору текстових файлів
public string Str_1, Str_2, Str_3, Str_4;
public int i,Mas;
public Random Rm = new Random(); // Змінна для генерації випадкових чисел
StreamWriter Write; // Змінна для роботи з текстовими файлами (запис)
public Form1()
{
InitializeComponent();
}
// ------------------------------------ Імітація процесів
// Процес №1
public void Proc_1()
{
Thread Thread_1 = new Thread(Function_1); // Створення потоку
Thread_1.Start(); // Запуск потоку
Thread_1.Join(300); // Чекаємо доки потік, за допомогою функції Function_1, обробить дані
label1.Text = Str_1;
}
// Процес №2
public void Proc_2()
{
Thread Thread_2 = new Thread(Function_2); // Створення потоку
Thread_2.Start(); // Запуск потоку
Thread_2.Join(600); // Чекаємо доки потік, за допомогою функції Function_2, обробить дані
label2.Text = Str_2;
}
// Процес №3
public void Proc_3()
{
Thread Thread_3 = new Thread(Function_3); // Створення потоку
Thread_3.Start(); // Запуск потоку
Thread_3.Join(900); // Чекаємо доки потік, за допомогою функції Function_3, обробить дані
label3.Text = Str_3;
}
// Процес №4
public void Proc_4()
{
Thread Thread_4 = new Thread(Function_4); // Створення потоку
Thread_4.Start(); // Запуск потоку
Thread_4.Join(1200); // Чекаємо доки потік, за допомогою функції Function_4, обробить дані
label4.Text = Str_4;
}
// ------------------------------------ Потокові функції
public void Function_1()
{
Str_1 = "#1 Stop!";
Path = @"CPU#1.txt"; // Створюємо текстовий файл CPU#1.txt
Write = File.CreateText(Path); // Відкриваємо його для запису даних
Write.WriteLine(Str_1); // Записуємо у нього значення змінної Str_1
Write.Close(); // Звершуємо роботу з текстовим файлом
}
public void Function_2()
{
Str_2 = "#2 Stop!";
Path = @"CPU#2.txt"; // Створюємо текстовий файл CPU#2.txt
Write = File.CreateText(Path); // Відкриваємо його для запису даних
Write.WriteLine(Str_2); // Записуємо у нього значення змінної Str_2
Write.Close(); // Звершуємо роботу з текстовим файлом
}
public void Function_3()
{
Str_3 = "#3 Stop!";
Path = @"CPU#3.txt"; // Створюємо текстовий файл CPU#3.txt
Write = File.CreateText(Path); // Відкриваємо його для запису даних
Write.WriteLine(Str_3); // Записуємо у нього значення змінної Str_3
Write.Close(); // Звершуємо роботу з текстовим файлом
}
public void Function_4()
{
Str_4 = "#4 Stop!";
Path = @"CPU#4.txt"; // Створюємо текстовий файл CPU#4.txt
Write = File.CreateText(Path); // Відкриваємо його для запису даних
Write.WriteLine(Str_4); // Записуємо у нього значення змінної Str_4
Write.Close(); // Звершуємо роботу з текстовим файлом
}
// ---------------------------------------------------------
private void Form1_Load(object sender, EventArgs e)
{
}
// --------------------- Кнопка "Блоку керування шиною" ------------------------
private void button1_Click(object sender, EventArgs e)
{
if (checkBox1.CheckState == CheckState.Checked) // Якщо, лінія запиту шини (BRQ) опитана
{
Mas = Rm.Next(0,2); // Генеруємо випадкові числа від "0" до "2"
if (Mas == 0) // Яккщо "0" - запускаємо на виконання мультипроцесор UMA
{
MessageBox.Show("Линия (BGT) свободна!", "System info");
MessageBox.Show("Сигнал занятости на линии (SACK) отсутствует!", "System info");
MessageBox.Show("Обработка данных...", "System info");
Proc_1(); // Обробка данных першим CPU
MessageBox.Show("Процесор №1 обработал данные!", "System info");
label1.Text = "Null";
Proc_2(); // Обробка данных другим CPU
MessageBox.Show("Процесор №2 обработал данные!", "System info");
label2.Text = "Null";
Proc_3(); // Обробка данных третім CPU
MessageBox.Show("Процесор №3 обработал данные!", "System info");
label3.Text = "Null";
Proc_4(); // Обробка данных четвертим CPU
MessageBox.Show("Процесор №4 обработал данные!", "System info");
label4.Text = "Null";
MessageBox.Show("Данные успешно обработаны!", "System info");
}
else
{
MessageBox.Show("Шина данных занята! Подождите...", "System info");
}
}
else
{
MessageBox.Show("Опросите линию запроса шины (BRQ)!", "System info");
}
}
}
}