Моделирование вычислительной сети

Содержание 

Введение            4

1 Описание  моделируемой системы и задание  на моделирование   6

2 Структурная  схема модели системы       8

3 Результат  работы модели                 16

4 Эксперимент  пользователя                17

5 Расчет статистических  показателей              26

Заключение                  30

Список использованной литературы              31

Приложение А                  32

Приложение Б                  38 
 

 

      Введение 

       Модель — способ замещения реального объекта, используемый для его изучения. Модель вместо исходного объекта используется в случаях, когда эксперимент опасен, дорог, происходит в неудобном масштабе пространства и времени (долговременен, слишком кратковременен, протяжен), невозможен, неповторим, ненагляден и т. д. Процесс моделирования есть процесс перехода из реальной области в виртуальную (модельную) посредством формализации, далее происходит изучение модели (собственно моделирование) и, наконец, интерпретация результатов как обратный переход из виртуальной области в реальную. Этот путь заменяет прямое исследование объекта в реальной области, то есть лобовое или интуитивное решение задачи. 

       Сегодня наблюдается повсеместное и всё ускоряющееся усложнение и увеличение всевозможных систем, охватывающих все сферы жизнедеятельности человека.  Проведение экспериментов над ними часто весьма дорогостояще, часто вообще невозможно. В то же время нельзя мириться с убытками, наносимыми ошибками в планировании. Для подобных случаев и предназначаются такие дисциплины, как моделирование систем, и языки программирования, как GPSS, позволяющие с определённой вероятностью проанализировать поведение системы с заданными показателями. Для этого необходимо корректно отразить в программе структуру исследуемой системы, а также её временные показатели. Наиболее проработанной областью для GPSS являются различные системы массового обслуживания – заводы, магазины, склады. Использование моделирования позволяет оптимизировать работу системы без проведения реальных экспериментов.

       Целью данного курсового проекта является построение имитационной модели вычислительной сети и определение её оптимальных критериев для минимизации убытков. Исходя из этого, можно выделить следующие задачи:

    1. Построение имитационной модели предприятия;
    2. Проведение имитационных экспериментов и сбор статистики;
    3. Анализ полученных данных, выводы о результатах моделирования.

       Для достижения поставленной цели используется система имитационного моделирования  GPSS.

         

 

1 Описание моделируемой  системы и задание  на моделирование 

       Система обработки информации содержит мультиплексный канал и N мини-ЭВМ. На вход канала через интервалы времени T1 микросекунд поступают сообщения от датчиков. В канале они буферизируются и предварительно обрабатываются на протяжении Т2 микросекунд. Потом сообщения поступают на обработку в ту мини-ЭВМ, которая имеет наименьшую длину входной очереди. Емкости входных накопителей всех мини-ЭВМ рассчитаны на хранение пяти сообщений. Если в момент прихода сообщения входные накопители всех мини-ЭВМ полностью заполнены, то сообщение получает отказ. Время обработки сообщения во всех мини-ЭВМ равно T3 микросекунд.

       Есть  две возможности уменьшения числа  сообщений, получающих отказ:

  • увеличение емкости входных накопителей ЭВМ;
  • ускорение обработки сообщений в ЭВМ при достижении суммы 
    длин очередей во всех ЭВМ некоторого порогового значения 
    (авральный режим).

       Увеличение  на единицу емкости входного накопителя требует S1 единиц стоимости на каждое сообщение.

       Переключение  ЭВМ в авральный режим происходит тогда, кода суммарное количество сообщений во входных накопителях всех мини-ЭВМ достигает значения 3N. В этом случае все мини-ЭВМ уменьшают время обработки сообщения на k (k <T3) микросекунд, что требует k ´ S2 единиц стоимости на каждое сообщение. Все мини-ЭВМ в авральный режим переводятся одновременно.

       Убытки  за каждое сообщение, которому отказано в обработке, оставляют S3 единиц стоимости, единица времени работы одной ЭВМ в авральном режиме обходится в S4 единиц стоимости.

       Определить, при каких емкостях входных накопителей и авральной скорости обработки сообщений достигается минимум суммарных затрат (убытков от отказов сообщениям в обслуживании, затрат на увеличение емкости входных накопителей и затрат на поддержку аврального режима).

       Варианты  заданий приведены в таблице 1. 

       Таблица 1 – Исходные данные

Вариант Параметры
N T1 T2 T3 S1 S2 S3 S4
1 3 11±5 9±3 35 10 5 100 2
2 4 21±9 18±4 90 20 7 150 3
3 5 26±10 20±5 135 18 6 120 4
4 6 30±10 25±5 188 20 5 130 3
 
 
 

 

2 Структурная схема  модели системы 

       Описанная система представляет собой систему массового обслуживания с неограниченным потоком заявок, а происходящие в ней процессы – по сути своей процессы обслуживания. Поэтому для наглядного представления структуры системы была построена Q–схема, представленная на рисунке 1. 

Рисунок 1 - Q-схема системы массового обслуживания 

       BUFF – накопитель мультиплексного канала;

       MCH – мультиплексный канал, в котором происходит буферизация поступающих сообщений;

       MIN – выбор наименьшей очереди;

       Q=N – проверка заполнения накопителя ЭВМ. Если накопитель заполнен, сообщение теряется;

       1..n – входные накопители мини-ЭВМ;

       EVM1..EVMn – мини-ЭВМ, обрабатывающие сообщения;

         Сообщения поступают в канал с частотой T1 микросекунд. Сначала поступающие сообщения попадают в накопитель мультиплексного канала. Если накопитель пуст и канал не занят, сообщение обрабатывается в нём T2 микросекунд. Затем выбирается мини-ЭВМ с наименьшей длиной очереди входного накопителя. Если её накопитель заполнен, то сообщение удаляется из системы и теряется S3 единиц стоимости, иначе сообщение становится в очередь. Затем проверяется, не достигло ли суммарное количество сообщений в накопителях 3N. Если нет, то все мини-ЭВМ обрабатывают сообщения с одинаковой скоростью T3 микросекунд. Иначе включается авральный режим - все мини-ЭВМ уменьшают время обработки сообщения на k микросекунд, что требует k* S2 единиц стоимости на каждое сообщение и S4 – за микросекунду работы аврального режима. Также возможно увеличение ёмкости входных накопителей всех мини-ЭВМ, что требует S1 единиц стоимости за увеличение ёмкости на 1.

       Так как нам необходимо отслеживать  суммарные затраты, складывающиеся из убытков от отказов сообщениям в обслуживании, затрат на увеличение емкости входных накопителей и затрат на поддержку аврального режима, нам потребуются величины:

    1. Ёмкость входного накопителя мини-ЭВМ;
    2. Количество обработанных сообщений;
    3. Количество сообщений, обработанных в авральном режиме;
    4. Суммарное время действия аврального режима;
    5. Количество потерянных сообщений.

     В модели необходимо реализовать:

    1. Задание исходных данных;
    2. Сегмент имитации буферизации и предварительной обработки;
    3. Сегмент имитации выбора наименьшей очереди и её проверки;
    4. Сегмент имитации штатной обработки ЭВМ;
    5. Сегмент имитации авральной обработки ЭВМ;
    6. Сегмент учёта потерянных сообщений;
    7. Сегмент задания времени моделирования и расчёта результатов.

     Исходя  из необходимости исследования приведённых  выше величин, дадим описание основной программе.

     Сегмент буферизации тривиален и будет  реализован с помощью одного устройства и одной очереди.

     Далее необходимо выбрать наименьшую очередь – для этого используем оператор SELECT, который ищет минимальную очередь, записывая её № в параметр EVM.

     Затем длина очереди сравнивается с максимальной ёмкостью накопителя Ncapacity. Если они равны, значит все накопители заполнены и сообщение переходит в сегмент учёта потерянных сообщений GOOUT.

     Иначе увеличивается сохраняемая величина ALLENTERS, отвечающая за учёт всех обработанных сообщений. Сообщение поступает в накопитель выбранной ЭВМ. Этот факт также отражается в занятии сообщением места в общей очереди MAINSTREAM, представляющей собой сумму очередей всех накопителей. Производится сравнение её длины и величины 3N. Если очередь меньше, сообщение обрабатывается в штатном режиме. В противном случае система переходит в авральный режим AVRALMODE.

     Штатный режим обработки реализуется  также, как и буферизация, но с  использованием двух очередей.

     Авральный режим аналогичен штатному, но изменяется время обработки и учитывается  количество обработанных сообщений  AVRCOUNT и общее время работы режима AVRTIME.

     

     Рисунок 2 – Сегмент буферизации и предварительной обработки 

     При поступлении сообщение становится в очередь BUF. Если устройство M свободно, производится буферизация.

     

     Рисунок 3 – Сегмент выбора наименьшей очереди и её проверки 

     Выбирается  мини-ЭВМ с наименьшей длиной очереди с помощью блока SELECT. Если её накопитель заполнен, то сообщение удаляется из системы и теряется S3 единиц стоимости, иначе сообщение становится в очереди P$EVM и MS. Затем проверяется, не достигло ли суммарное количество сообщений в накопителях 3N. Если очередь меньше, сообщение обрабатывается в штатном режиме. В противном случае система переходит в авральный режим AVRALMODE.  

     

     Рисунок 4 – Сегмент штатной обработки 

     Сообщение обрабатывается в мини-ЭВМ и уходит из системы.

     

     Рисунок 5 – Сегмент авральной обработки 

     

     Рисунок 6 – Сегмент учёта потерянных сообщений 

     Учёт  потерянных сообщений ведётся с  помощью сохраняемой величины LOOSE.

     В программе нам будет удобнее  использовать не величину k, а результирующее время обработки сообщений в авральном режиме  Tavr = T3-k, т.к. в этом случае вычисление будет производиться только один раз – при подсчёте убытков, а не на каждом прогоне для вычисления Tavr.

     Получаем  два оптимизируемых показателя: ёмкость  входного накопителя NCapacity и время обработки в авральном режиме Tavr, причём NCapacity может изменяться от 5 до бесконечности, а Tavr – от T3 до 1.

     Необходимо  подобрать эти показатели таким  образом, чтобы минимизировать убытки, вычисляемые:

     SUMM VARIABLE -(10#X$ALLENTERS#(Ncapacity-5)+(35-Tavr)#5#X$AVRCOUNT+100#X$LOOSE+2#X$AVRTIME#3)

     В программе приведённая величина инвертируется для удобства использования  в эксперименте. Таким образом  речь идёт уже о максимизации получаемого  значения.

 

      3 Результат работы  модели 

     В результате запуска модели для первого варианта при k=1 была получена следующая статистика: 

     

     Рисунок 7 – Значения сохраняемых величин 

     Обработаны  были 1016 сообщений, из них 897 – в авральном  режиме за время 29954 микросекунд, 22 сообщения  было потеряно. Суммарные затраты составили 186409 единиц стоимости.

     Можно отметить, что большую часть времени  система работала в авральном режиме. В сравнении с затратами на авральную обработку потерянные сообщения составляют незначительную часть затрат. В связи с этим стоит в первую очередь заняться уменьшением затрат на авральную обработку.

 

      4 Эксперимент пользователя 

     Так как имеются две оптимизируемые величины, каждая из которых может  изменяться в широком диапазоне  значений, следует воспользоваться  экспериментом пользователя.

     В пользовательском эксперименте для  задания последовательности команд и исходных данных каждого прогона модели удобно использовать PLUS-процедуру. Такая процедура может инициализировать генераторы случайных чисел, выполнять команды и управлять имитацией.

     Для примера возьмём значения первого  варианта.

     Напишем на данном языке:

     experiment go(Par1,Par2)                                                                                                                       

     begin                                                                                                                                 

       temporary CurYield, ShowString, CommandString;

       Ncapacity=Par1;

       Tavr=Par2;

       CurYield=GetResult();

       ShowString= PolyCatenate("Summ ", String(CurYield), ".  ");

       ShowString=PolyCatenate(ShowString,"  Capacity  ",String(Ncapacity),".");

       ShowString=PolyCatenate(ShowString,"  k time  ",String(Tavr),".");

       DoCommand(PolyCatenate("SHOW """,ShowString,"""",""));                                                                                                      

     END;

     Данный  эксперимент в качестве параметров принимает числа Par1 и Par2, которые будут присвоены соответственно ёмкости входных накопителей и времени обработки в авральном режиме.

     procedure GetResult()

     begin

      temporary Sum, CurYield,Ind_i;

      Ind_i=1;

      Sum=0;

      while (Ind_i<4)do

        begin

             CurYield=DoTheRun(Ind_i);

             Sum=Sum+ CurYield;

             Ind_i=Ind_i+1;

        end;

      Return (Sum/(Ind_i-1));

     end;

     В приведённой процедуре выполняются 3 прогона модели, а в переменную Sum записывается среднее арифметическое суммарных затрат прогонов.

     procedure DoTheRun(Run_Number)

     begin

      DoCommand("Clear off");

      temporary CommandString;

     CommandString=Catenate("RMULT ",Run_Number#3);

     DoCommand(CommandString);

     DoCommand("Start 1");

     Return (-(10#X$ALLENTERS#(Ncapacity-5)+ (35 - Tavr)#5#X$AVRCOUNT+100#X$LOOSE+2#X$AVRTIME#3));

     end;

     В данной процедуре происходит сброс  генераторов случайных чисел, очистка  сохраняемых величин и сброс  статистики. Возвращаемое значение – суммарные затраты.

     Для поиска оптимальных параметров используется следующий эксперимент:

     experiment SeekOpt()                                                                                                                       

     begin

       temporary ShowString, CommandString;

       temporary Prev1, Cur1, Flag1, Tprev;

        Ncapacity=4;

        Prev1=100000;

        Flag1=1;

        while (Flag1 'NE' 0) do

          begin

            Ncapacity=Ncapacity+1;

            Tavr=36;

            while (Tavr 'GE' 2) do

              begin   

                Tprev=Tavr;

                Tavr=Tavr-1;

                Cur1=GetResult();

                if(Cur1<Prev1) then

                 begin

                    if (Prev1<0) then

                  begin

                        ShowString=PolyCatenate(" Optimum.Summ ", String(Prev1),".");

                        ShowString = PolyCatenate (ShowString, "  Capacity  ",String(Ncapacity),".");

                        ShowString = PolyCatenate (ShowString, "  k time  ",String(Tprev),".");

                        CommandString = PolyCatenate ("SHOW """,ShowString,"""","");

                        DoCommand(CommandString);

                        Flag1=0;

                        Tavr=0;

                      end;

                    else Prev1=Cur1;

              end;

                else Prev1=Cur1;   

              end; 

          end; 

     end;

     Так как оптимизируются два параметра, потребуется два цикла, один из которых  будет вложенным. При изучении статистики было установлено, что показатель k и время авральной обработки приоритетнее изменений ёмкости накопителей. Кроме того k ограничен отрезком [0;35], а ёмкость ограничена только минимумом 5, поэтому вложенный цикл будет изменять показатель Tavr =T3-k.

     Переменная  Flag1 используется для управления внешним циклом. Сначала ей присваивается значение 1, условие выхода из цикла: Flag1 = 0. В переменной Prev1 хранится значение затрат на предыдущем шаге. Вначале ей присваивается очень большое положительное значение, чтобы получаемые затраты на первом шаге заведомо были больше. На каждой итерации внешнего цикла ёмкость накопителей увеличивается на 1. Перед входом в цикл оно устанавливается равным 4, однако прогоны начнутся со значения 5.

     Для управления внутренним циклом используется значение времени авральной обработки  Tavr. На каждой новой итерации внешнего цикла значение Tavr устанавливается равным 36, но прогоны начинаются со значения 35, т.е. время авральной обработки равно штатному времени обслуживания (k=0). На каждой итерации внутреннего цикла время обработки в авральном режиме уменьшается на 1. Цикл продолжается до тех пор, пока Tavr >=2. Так как значение сначала уменьшается, а затем производится моделирование, финальным значением Tavr станет 1.

     Переменная  Curl получает значение затрат на текущем шаге. Если предыдущее значение затрат меньше текущего, то выдается результат вместе с оптимальными показателями и осуществляется выход из цикла. В противном случае цикл продолжается.

     В результате проведения оптимизационного эксперимента получим:

     " Optimum.Summ -181924.  Capacity  5.  k time  35."

     Алгоритм  поиска решения базируется на том, что экономические показатели реальных систем обычно представляют собой функции, имеющие единственный локальный экстремум, который и является глобальным. Для того, чтобы перепроверить полученный результат, проведём эксперимент, в котором на каждой итерации вложенного цикла Tavr будет увеличиваться на 1 от 1 до 35.

     experiment SeekOptInv()                                                                                                                       

     begin

       temporary ShowString, CommandString;

       temporary Prev1, Cur1, Flag1, Tprev, Nprev;

        Ncapacity=4;

        Prev1=100000;

        Flag1=1;

        while (Flag1 'NE' 0) do

          begin

            Ncapacity=Ncapacity+1;

            Tavr=0;

            while (Tavr 'LE' 34) do

              begin  

                Nprev=Ncapacity;

                if (Tavr=0) then

                 begin

                  Tprev=35;

                  Nprev=Ncapacity-1;

                 end;

                else Tprev=Tavr;

                Tavr=Tavr+1;

                Cur1=GetResult();

                if(Cur1<Prev1) then

                 begin

                    if (Prev1<0) then

                  begin

                        ShowString=PolyCatenate(" Optimum.Summ ", String(Prev1),".");

                        ShowString=PolyCatenate(ShowString,"  Capacity  ",String(Nprev),".");

                        ShowString=PolyCatenate(ShowString,"  k time  ",String(Tprev),".");

                        CommandString =PolyCatenate("SHOW """,ShowString,"""","");

                        DoCommand(CommandString);

                        Flag1=0;

                        Tavr=35;

                      end;

                    else Prev1=Cur1;

              end;

                else Prev1=Cur1;   

              end; 

Моделирование вычислительной сети