Модель системы обработки информации
Автор работы: Пользователь скрыл имя, 14 Апреля 2014 в 20:45, курсовая работа
Краткое описание
При проектировании вычислительных устройств возникает необходимость в проверке работоспособности, оценке качества, надежности функционирования и определения статистических параметров разрабатываемого устройства. Но поскольку необходимо исследовать вычислительную систему до ее фактического изготовления, то прибегают к построению модели устройства. На этой модели наблюдают за работой проектируемой вычислительной системы и собирают и анализируют ее статистические параметры. Преимущество использования модели для изучения характеристик объекта заключается в возможности проанализировать за короткий промежуток времени большое количество разнообразных ситуаций, возможных в объекте. Использование для этого фактического устройства позволило бы вести сбор статистических параметров только в масштабе реального времени
Содержание
Введение 2
1 Постановка задачи 3
2 Представление объекта моделирования в виде системы массового обслуживания 4
3 Описание процесса функционирования в виде временной диаграммы 6
4 Разработка ГСЧ 7
4.1 ГСЧ 1А и ГСЧ1Б 7
4.2 ГСЧ 2А и ГСЧ2Б 8
4.3 Оценка качества ГСЧ 10
5 Разработка алгоритмической модели объекта 19
6 Моделирование с целью оценки заданных характеристик объекта 20
7 Анализ результатов моделирования 31
Заключение 34
Список использованных источников 35
Прикрепленные файлы: 1 файл
ПЗ.doc
— 3.19 Мб (Скачать документ)При запуске программы на экране появляется окно, где пользователь может запустить выполнение моделирования, или, нажав на кнопку Генераторы, ознакомится с работой ГСЧ.
Для запуска процесса моделирования нужно нажать на кнопку Поехали!. После завершения процесса моделирования на экране появится информация о модели и рассчитанные статистические показатели. На рисунках 7-16 показаны результаты десяти моделирований работы ЭВМ.
Ознакомление с работой генераторов псевдослучайных величин можно осуществить нажатием кнопки Генераторы, при этом появится окно для подсчета статистических параметров работы генераторов.
Рисунок 8
Рисунок 9
Рисунок 10
Рисунок 11
Рисунок 12
Рисунок 13
Рисунок 14
Рисунок 15
Рисунок 16
Рисунок 17
Анализ результатов моделирования
Запустим программу на моделирование и исследуем выданные результаты. В поле На момент завершения моделирования отображено состояние модели в последнюю секунду имитации. Рассмотрим эти сведения:
Прошло времени: 1296000
Количество сигналов, сгенерированных датчиками: 42487
Количество сигналов, поступивших в канал (от датчиков и от ЭВМ): 42494
Количество сигналов, удаленных из канала из-за переполнения: 275
Количество сигналов, поступивших из канала в ЭВМ: 42230
Количество сигналов, направленных обратно в канал из-за поломки ЭВМ: 7
Количество сигналов, обработанных в ЭВМ: 42222
ЭВМ вышла из строя, раз: 9
ЭВМ была восстановлена, раз: 9
Состояние ЭВМ: активна
ЭВМ обрабатывает сигнал: да
Время нахождения ЭВМ в активном состоянии: 1284852
Время нахождения ЭВМ в состоянии восстановления: 11148
Время фактической обработки сигналов на ЭВМ: 1077764
Время, когда ЭВМ была в активном состоянии, но не обрабатывала сигналы: 207088
Видно, что количество сигналов поступивших в канал, больше количества сгенерированных датчиками сигналов. Это свидетельствует о том, что при поломке ЭВМ обрабатываемый сигнал возвращался обратно в канал. Найдем разность между количеством сигналов, поступивших в канал и количеством сигналов сгенерированных датчиками 42494 – 42487 = 7. Теперь обратим внимание на строку
Количество сигналов, направленных обратно в канал из-за поломки ЭВМ: 7
Это говорит о том, что подсчет параметров в программе ведется правильно. А то, что количество сигналов, вернувшихся в канал из-за поломки ЭВМ, ничтожно мало по сравнению с общим количеством сгенерированных сигналов означает, что поломки в ЭВМ происходят достаточно редко и даже если не возвращать заявки обратно в канал, а просто удалять, это не приведет к заметному уменьшению показателя эффективности.
Теперь обратим внимание на строку
Количество сигналов, удаленных из канала из-за переполнения: 275
Это число не так уж и мало, как предыдущее, но все равно не велико относительно общего числа полученных сигналов от датчиков. Попробуем найти причину переполнения канала, для этого прочитаем запись событий:
...
130848: Поступил сигнал от датчика
130848: Сигнал добавлен в канал
130866: Обработка сигнала завершена
130867: Сигнал прочитан из канала
130867: Сигнал запущен на обработку
130884: Поступил сигнал от датчика
130884: Сигнал добавлен в канал
130901: Поломка ЭВМ
130901: Обрабатываемый сигнал направлен обратно в канал
130901: Сигнал добавлен в канал
130919: Поступил сигнал от датчика
130919: Сигнал добавлен в канал
130919: Удаление сигнала из-за переполнения канала
130948: Поступил сигнал от датчика
130948: Сигнал добавлен в канал
130948: Удаление сигнала из-за переполнения канала
130985: Поступил сигнал от датчика
130985: Сигнал добавлен в канал
130985: Удаление сигнала из-за переполнения канала
131006: Поступил сигнал от датчика
131006: Сигнал добавлен в канал
131006: Удаление сигнала из-за переполнения канала
131027: Поступил сигнал от датчика
131027: Сигнал добавлен в канал
131027: Удаление сигнала из-за переполнения канала
131053: Поступил сигнал от датчика
131053: Сигнал добавлен в канал
131053: Удаление сигнала из-за переполнения канала
131074: Поступил сигнал от датчика
131074: Сигнал добавлен в канал
131074: Удаление сигнала из-за переполнения канала
131097: Поступил сигнал от датчика
131097: Сигнал добавлен в канал
131097: Удаление сигнала из-за переполнения канала
131124: Поступил сигнал от датчика
131124: Сигнал добавлен в канал
131124: Удаление сигнала из-за переполнения канала
131145: Поступил сигнал от датчика
131145: Сигнал добавлен в канал
131145: Удаление сигнала из-за переполнения канала
131183: Поступил сигнал от датчика
131183: Сигнал добавлен в канал
131183: Удаление сигнала из-за переполнения канала
...
Видно, что большое количество сообщений удаляется после поломки ЭВМ, т. к. она перестает обрабатывать сигналы, а от датчиков они все равно поступают в канал, а его емкость ограничена.
Теперь обратим внимание на статистические параметры модели, отображенные в нижней части окна программы:
Коэффициент готовности ЭВМ: 0,991398148
Коэффициент загрузки ЭВМ: 0,8388234598
Показатель эффективности: 0,9937627980
Видно, что коэффициент готовности ЭВМ очень высок, это связано с тем, что ЭВМ редко ломается и быстро восстанавливается. За все время моделирования ЭВМ ломалась 9 раз, а время ее бездействия составило 11148 секунд (это чуть больше трех часов), а общее время моделирования – 15 суток.
Коэффициент загрузки ЭВМ также не достаточно высок, это означает, что в данной системе сигналы от датчиков поступают не достаточно часто и ЭВМ простаивает 1/6 времени работы.
Основным параметром, по которому будем судить об эффективности всей системы, является показатель эффективности, равный 0,9937627980. Это означает, что 99% заявок обрабатываются, а лишь 1% теряется. Данные характеристики являются неплохими для вычислительной системы.
Заключение
В ходе выполнения данной курсовой работы были разработаны четыре генератора псевдослучайных величин: ГСЧ 1А, ГСЧ 1Б, ГСЧ 2А, ГСЧ 2Б. Проверено качество их работы по гистограмме распределения. Все генераторы показали хорошие результаты. Погрешность распределения для генератора ГСЧ 1А оказалась равной 3,97%, для генератора ГСЧ 1Б – 3,68%, для ГСЧ 2А – 4,56%, для ГСЧ 2Б – 4,05%.
Разработана структурная схема моделируемой системы. После чего с использованием генераторов была построена алгоритмическая модель системы. На основе алгоритмической модели разработана программа, позволяющая имитировать работу системы. С помощью данной программы были получены статистические параметры работы модели. Показатель эффективности работы системы равен 99%, что является очень хорошим результатом. Коэффициент загрузки ЭВМ составил 84%, что означает недостаточно полное использование ресурсов ЭВМ. Коэффициент готовности ЭВМ оказался равным 99%, это может говорить о том, что поломки ЭВМ не приводят к длительному простою.
Оценивая, в общем, состояние системы, можно сказать, что ее применение оправдано и достаточно эффективно.
Список использованных источников
1.
Сигачева Т.Н. Моделирование случайных
процессов с различными
2. Советов Б.Я., Яковлев С.А.. Моделирование систем: Учебник для вузов / Б.Я. Советов, С.А. Яковлев. — 6-е издание, стереотипное — М.: Высшая школа, 2009. — 343 с:
3. Советов Б.Я., Яковлев С.А. Моделирование систем: Практикум. Учебное пособие для вузов. М.: Высшая школа, 2009.- 295с.
Приложение
Исходный код программы.
!!!!!!! Generators !!!!!!!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Kursach
{
public partial class Generators : Form
{
public Generators()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
double GenRand1a()
{
Random rand = new Random();
double temp;
temp = Convert.ToDouble(rand.Next(
return 20.0 + 20.0 * temp;
}
double GenRand1b()
{
Random rand = new Random();
double temp;
temp = Convert.ToDouble(rand.Next(
return 15.0 + 20.0 * temp;
}
private void gen1_Click(object sender, EventArgs e)
{
Random rand = new Random();
double temp;
temp = Convert.ToDouble(rand.Next(
int Intervals = int.Parse(num_inter1.Text);
int Kolvo = int.Parse(num_kolvo1.Text);
if (Intervals == -1 || Kolvo == -1)
{
MessageBox.Show("Введено неверное значение", "My Application", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
return;
}
double[] MyNums = new double[Kolvo];
int i;
listBox1.Items.Clear();
for (i = 0; i < Kolvo; i++)
{
MyNums[i] = (radioButton1.Checked) ? (20.0 + 20.0 * Convert.ToDouble(rand.Next(
listBox1.Items.Add(Math.Round(
}
int[] Interval = new int[Intervals];
for (i = 0; i < Intervals; i++)
{
Interval[i] = 0;
}
double Delta = ((radioButton1.Checked) ? 20.0 : 20.0) / Intervals;
delta1.Text = Delta.ToString();
int j;
double Lev = (radioButton1.Checked) ? 20.0 : 15.0;
for (i = 0; i < Kolvo; i++)
{
if (MyNums[i] == Lev)
Interval[0]++;
for (j = 0; j < Intervals; j++)
{
if ((MyNums[i] > Delta * j + Lev) &&
(MyNums[i] <= Delta * (j + 1) + Lev))
{
Interval[j]++;
}
}
}
dataGridView1.RowCount = Intervals + 1;
double S1, H1, S = 0, SOtkl = 0;
for (i = 0; i < Intervals; i++)
{
dataGridView1.Rows[i].Cells[0]
dataGridView1.Rows[i].Cells[1]
H1 = Math.Round((double)Interval[i] / (Kolvo * Delta), 4);
dataGridView1.Rows[i].Cells[2]
S1 = Math.Round((double)Interval[i] / Kolvo, 4);
dataGridView1.Rows[i].Cells[3]
S += S1;
SOtkl += Math.Round(Math.Abs(H1 - (1.0 / (radioButton1.Checked ? 20.0 : 20.0))) * Delta, 4);
}
sump1.Text = S.ToString();
potk1.Text = SOtkl.ToString();
double PogrRasp = Math.Round(SOtkl / S * 100.0, 4);
pogr1.Text = PogrRasp.ToString() + "%";
chart1.Series["Series1"].
chart1.Series["Series2"].
for (i = 0; i < Intervals; i++)
{
chart1.Series["Series1"].
chart1.Series["Series2"].
}
}
private void gen2_Click(object sender, EventArgs e)
{
int Intervals = int.Parse(num_inter2.Text);
int Kolvo = int.Parse(num_kolvo1.Text);
if (Intervals == -1 || Kolvo == -1)
{
MessageBox.Show("Введено неверное значение", "My Application", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
return;
}
double[] MyNums = new double[Kolvo];
int i;
int n = 500;
double step = 0.00001;
int j;
double[] granica = new double[n + 1];
if (radioButton3.Checked)
{
double pos = 36;
double sq = 0, sq1;
do
{
sq += VeibulZakon(pos, 36, 0.95) * step;
pos += step;
} while (pos < 42);
sq1 = sq / n;
granica[0] = 36;
pos = 36;
for (j = 1; j < n; j++)
{
sq = 0;
do
{
sq += VeibulZakon(pos, 36, 0.95) * step;
pos += step;
} while (sq < sq1);
granica[j] = pos;
}
granica[n] = 42;
}
else
{
double pos = 20;
double sq = 0, sq1;
do
{
sq += VeibulZakon(pos, 20, 0.85) * step;
pos += step;
} while (pos < 27);
sq1 = sq / n;
granica[0] = 20;
pos = 20;
for (j = 1; j < n; j++)
{
sq = 0;
do
{
sq += VeibulZakon(pos, 20, 0.85) * step;
pos += step;
} while (sq < sq1);
granica[j] = pos;
}
granica[n] = 27;
}
Random rand = new Random();
listBox1.Items.Clear();
for (i = 0; i < Kolvo; i++)
{
int interval;
interval = rand.Next(n);
double left_val = granica[interval];
double right_val = granica[interval + 1];
MyNums[i] = Convert.ToDouble(rand.Next(
listBox2.Items.Add(Math.Round(
}
int[] Interval = new int[Intervals];
for (i = 0; i < Intervals; i++)
{
Interval[i] = 0;
}
double Delta = ((radioButton3.Checked) ? 6.0 : 7.0) / Intervals;
delta2.Text = Delta.ToString();
double Lev = (radioButton3.Checked) ? 36.0 : 20.0;