Модель системы обработки информации

Автор работы: Пользователь скрыл имя, 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

 

    1. Анализ результатов моделирования

Запустим программу на моделирование и исследуем выданные результаты. В поле На момент завершения моделирования отображено состояние модели в последнюю секунду имитации. Рассмотрим эти сведения:

Прошло времени: 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. Сигачева Т.Н.  Моделирование случайных  процессов с различными законами распределения. Методические указания к лабораторной работе по дисциплине  “Моделирование” для студентов направления 552800 и специальности 220100/ Уфимс.  гос .авиац. техн. ун-т; Сост. Сигачева Т.Н.– Уфа, 2009 – 37 с.

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(1000000)) / 1000000;

            return 20.0 + 20.0 * temp;

        }

 

        double GenRand1b()

        {

            Random rand = new Random();

            double temp;

            temp = Convert.ToDouble(rand.Next(10000000)) / 10000000;

            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(1000000)) / 1000000;

            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(1000000)) / 1000000) : (15.0 + 20.0 * Convert.ToDouble(rand.Next(1000000)) / 1000000);

                listBox1.Items.Add(Math.Round(MyNums[i], 4));

            }

            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].Value = (Delta * i + Lev).ToString() + ".." + (Delta * (i + 1) + Lev).ToString();

                dataGridView1.Rows[i].Cells[1].Value = Interval[i].ToString();

                H1 = Math.Round((double)Interval[i] / (Kolvo * Delta), 4);

                dataGridView1.Rows[i].Cells[2].Value = H1.ToString();

                S1 = Math.Round((double)Interval[i] / Kolvo, 4);

                dataGridView1.Rows[i].Cells[3].Value = S1.ToString();

                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"].Points.Clear();

            chart1.Series["Series2"].Points.Clear();

            for (i = 0; i < Intervals; i++)

            {

                chart1.Series["Series1"].Points.AddXY((((Delta * i + Lev))), Math.Round((double)Interval[i] / (Kolvo * Delta), 4));

                chart1.Series["Series2"].Points.AddXY((((Delta * i + Lev))), 1.0 / (radioButton1.Checked ? 20.0 : 20.0));

            }

        }

 

        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(1000000)) / 1000000 * (right_val - left_val) + left_val;

                listBox2.Items.Add(Math.Round(MyNums[i], 4));

            }

            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;

Информация о работе Модель системы обработки информации