50483

Код модифицированной программы: distribution.adb

Лабораторная работа

Информатика, кибернетика и программирование

В ходе выполнения лабораторной работы были выполнены следующие действия: Замена распределения случайных величин в соответствии с Пуассоновским распределением (описано в distribution.adb)В ходе выполнения программы процесс выполнения комментируется в окне сообщений. Ниже представлен пример рабочего процесса с/без использования мониторов.

Русский

2014-01-24

99.5 KB

1 чел.

Лабораторная работа №4

«Планирование производства на фабрике»

бригады №1

Выполнили:

Кузьменко Сергей

Сербин Виталий

Буренок Денис

Описание программы:

Код модифицированной программы:

distribution.adb

with Ada.Numerics.Float_Random;

use Ada.Numerics.Float_Random;

with ada.Text_IO;

use Ada.Text_IO;

with Ada.Numerics.Complex_Elementary_Functions;

use Ada.Numerics.Complex_Elementary_Functions;

package body DISTRIBUTIONS   is

  function  PROBABILITY (FORM_DIST : in DIST_KINDS)   return  DURATION is

  begin

     if FORM_DIST = TIME_MACH1 then

        return 0.03;

     end if;

      if FORM_DIST = TIME_MACH2 then

        return 0.07;

     end if;

      if FORM_DIST = TIME_MACH3 then

        return 0.11;

     end if;

      if FORM_DIST = INSPECTION then

        return 0.02;

     end if;

     end;

  function  INSP_RESULT  return  BOOLEAN is

     gen :Generator;

     fact : Integer := 1;

     lyamda : Float :=1.5;

     k: Integer;

  begin

     Reset(gen);

     k:= Random(gen);

     for i in 1..k loop

     fact := fact * i;

     end loop;

     Reset(gen);

     if ((lyamda**k)/fact)*Exp(-lyamda) > 0.05 then

        return true;

     else

        return false;

    end if;

  end;

end  DISTRIBUTIONS;

PLANT_SCHED.adb

-- MAIN procedure

-- from Didenko, CSD

-- 19 Feb 2010

with DISTRIBUTIONS;   use  DISTRIBUTIONS;

with  CALENDAR;   use  CALENDAR;

with  Ada.TEXT_IO;   use  Ada.TEXT_IO;

procedure  PLANT_SCHED   is

  package natural_io is new integer_io(natural);

  use natural_io;

  N_OF_FINISHED_PROD : NATURAL := 0;

  N_OF_REJECTS : NATURAL := 0;

  MACH1_AVAIL, MACH2_AVAIL, MACH3_AVAIL : NATURAL := 0;

--task 3

  number_between_1_n_2 : NATURAL := 0;

--task 3

  number_after_operation : NATURAL := 0;

  task   COORDINATOR is

     entry  SCHED;

  end COORDINATOR;

  task   MACH1 is

     entry  OPER1;

  end  MACH1;

  task   MACH2 is

entry  OPER2;

  end   MACH2;

  task MACH3 is

entry OPER1_N_2;

  end MACH3;

  task STOP_INSPECTION;

  task INSPECT is

entry PRODUCT;

entry TAKE_A_BREAK;

  end INSPECT;

  --task 3

  task STAND_BETWEEN_1_N_2 is

     entry FIRST;

     entry SECOND;

  end STAND_BETWEEN_1_N_2;

--task 3

task INSPECTION_STAND

  is

     entry READY;

     entry START1;

     entry START2;

end INSPECTION_STAND;

task body MACH1 is

     MACH1_JOB_DURATION : DURATION;

  begin

     MACH1_JOB_DURATION := PROBABILITY(TIME_MACH1);

     loop

        Put_Line("Starting task on MACH1");

        accept OPER1;

        delay MACH1_JOB_DURATION;

        Put_Line("Task on MACH1 finished");

 STAND_BETWEEN_1_N_2.FIRST;

        MACH1_JOB_DURATION:=PROBABILITY(TIME_MACH1);

     end loop;

end MACH1;

  --

task body STAND_BETWEEN_1_N_2 is

  begin

     loop

       select

           accept FIRST;

           number_between_1_n_2 := number_between_1_n_2 + 1;

        else

          null;

        end select;

          if  number_between_1_n_2 > 0 then

               select

                   accept Second;

                   number_between_1_n_2 := number_between_1_n_2 - 1;

                else null;

              end select;

          end if;

        delay 0.01;

     end loop;

end STAND_BETWEEN_1_N_2;

task body MACH2 is

     MACH2_JOB_DURATION : DURATION;

  begin

     MACH2_JOB_DURATION := PROBABILITY(TIME_MACH2);

     loop

         Put_Line("Starting task on MACH2");

        delay MACH2_JOB_DURATION;

        Put_Line("Task on MACH2 finished, standing after MACH2");

        STAND_BETWEEN_1_N_2.SECOND;

         INSPECTION_STAND.START1;

         MACH2_JOB_DURATION := PROBABILITY(TIME_MACH2);

     end loop;

end MACH2;

  task body INSPECTION_STAND is

  begin

     loop

        select

           accept START1;

           Put_Line("Inspection after MACH2 started");

           number_after_operation := number_after_operation + 1;

        else

           null;

        end select;

        select

           accept START2;

            Put_Line("Inspection after MACH3 started");

           number_after_operation := number_after_operation + 1;

        else

           null;

        end select;

        if number_after_operation > 0 then

        select

              accept READY;

             Put_Line("Inspection finished successfuly");

              number_after_operation := number_after_operation - 1;

         else null;

           end select;

        end if;

        delay 0.01;

        end loop;

  end INSPECTION_STAND;

task body MACH3 is

     MACH3_JOB_DURATION : DURATION;

begin

     MACH3_JOB_DURATION := PROBABILITY(TIME_MACH3);

       loop

        accept OPER1_N_2;

         Put_Line("Starting task on MACH3");

        delay MACH3_JOB_DURATION;

         Put_Line("Task on MACH3 finished, standing after MACH3");

 INSPECTION_STAND.START2;

        MACH3_JOB_DURATION := PROBABILITY(TIME_MACH3);

end loop;

end MACH3;

--

task body COORDINATOR is

  begin

     accept SCHED;

    loop

 loop

     select

  MACH1.OPER1;

  exit;

  or

  delay 0.01;

  end select;

     select

  MACH3.OPER1_N_2;

  exit;

         or

  delay 0.01;

      end select;

 end loop;

 select

                  accept SCHED;

 else

     null;

               end select;

     end loop;

end COORDINATOR;

--

task body STOP_INSPECTION is

 begin

  loop

   delay 120.00;

   INSPECT.TAKE_A_BREAK;

  end loop;

end STOP_INSPECTION;

--

  task body INSPECT is

  INSP_PASSED: BOOLEAN;

  EXAM_TIME : DURATION;

  START_MANUFACT, STOP_MANUFACT : TIME;

  DURATION_MANUFACT : DURATION;

  package DURATION_I0 is new FIXED_IO(DURATION);

  use DURATION_I0;

 begin

 START_MANUFACT := CLOCK;

 INSP_PASSED := INSP_RESULT;

 EXAM_TIME := PROBABILITY(INSPECTION);

 loop

                   INSPECTION_STAND.READY;

     delay EXAM_TIME;

  if INSP_PASSED then

              N_OF_FINISHED_PROD:= N_OF_FINISHED_PROD + 1;

              Put("Number of finished products ");

             Put(N_OF_FINISHED_PROD);

              Put_line("");

  else

              N_OF_REJECTS:= N_OF_REJECTS + 1;

              Put("Number of finished products ");

              Put(N_OF_REJECTS);

              Put_line("");

         end if;

  EXAM_TIME:= PROBABILITY(INSPECTION);

  INSP_PASSED:= INSP_RESULT;

          exit when N_OF_FINISHED_PROD = 200;

  if TAKE_A_BREAK'COUNT > 0 then

   accept TAKE_A_BREAK;

   delay 15.0;

  end if;

 end loop;

 STOP_MANUFACT := CLOCK;

       DURATION_MANUFACT := STOP_MANUFACT - START_MANUFACT;

       PUT ("Manufacture full cycle length ");

       PUT (DURATION_MANUFACT, 10, 2);

       Put_line("");

 end INSPECT;

begin

  --for I in 1..200 loop

     COORDINATOR.SCHED;

 --end loop;

end PLANT_SCHED;

Полученные результаты:

В ходе выполнения лабораторной работы были выполнены следующие действия:

  1.  Замена распределения случайных величин в соответствии с Пуассоновским распределением (описано в distribution.adb)
    1.  В ходе выполнения программы процесс выполнения комментируется в окне сообщений.
      1.  Ниже представлен пример рабочего процесса с/без использования мониторов. Полученные результаты свидетельствуют, что программа с разграничением доступа к ресурсу работает стабильнее, надежнее и быстрее.

 Пример результатов:

без мониторов

Starting task on MACH2

Starting task on MACH1

Starting task on MACH3

Task on MACH1 finished

Starting task on MACH1

Task on MACH1 finished

Starting task on MACH1

Task on MACH2 finished, standing after MACH2

Inspection after MACH2 started

Starting task on MACH2

Inspection finished successfuly

Number of finished products           1

Task on MACH1 finished

Starting task on MACH1

Task on MACH1 finished

Starting task on MACH1

Task on MACH3 finished, standing after MACH3

Inspection after MACH3 started

Starting task on MACH3

Inspection finished successfuly

Task on MACH2 finished, standing after MACH2

Number of finished products           2

................................

Task on MACH1 finished

Starting task on MACH1

Task on MACH3 finished, standing after MACH3

Inspection after MACH3 started

Starting task on MACH3

Inspection finished successfuly

Task on MACH1 finished

Starting task on MACH1

Number of finished products         199

Task on MACH2 finished, standing after MACH2

Inspection after MACH2 started

Starting task on MACH2

Inspection finished successfuly

Task on MACH1 finished

Starting task on MACH1

Number of finished products         200

Manufacture full cycle length          10.29

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

Starting task on MACH2

Starting task on MACH1

Starting task on MACH3

Task on MACH1 finished

Starting task on MACH1

Task on MACH2 finished, standing after MACH2

Inspection after MACH2 started

Inspection finished successfuly

Starting task on MACH2

Task on MACH1 finished

Starting task on MACH1

Number of finished products           1

Task on MACH3 finished, standing after MACH3

Task on MACH1 finished

Starting task on MACH1

Inspection after MACH3 started

Inspection finished successfuly

Starting task on MACH3

Task on MACH2 finished, standing after MACH2

Number of finished products           2

........................................

Task on MACH3 finished, standing after MACH3

Inspection after MACH3 started

Inspection finished successfuly

Task on MACH1 finished

Starting task on MACH3

Starting task on MACH1

Number of finished products         199

Task on MACH2 finished, standing after MACH2

Task on MACH1 finished

Inspection after MACH2 started

Starting task on MACH2

Inspection finished successfuly

Starting task on MACH1

Number of finished products         200

Manufacture full cycle length          9.60


 

А также другие работы, которые могут Вас заинтересовать

24415. Четыре условия возможности возникновения тупика 77 KB
  Политика безопасности. Процедуры управления безопасностью также важны как и политики безопасности. Если политики безопасности определяют что должно быть защищено то процедуры безопасности определяют как защитить информационные ресурсы компании. Нескольких важных процедур безопасности: 1.
24416. Факторы сложности восстановления систем после тупика 69 KB
  Эксплуатация инфраструктуры безопасности. Эксплуатация инфраструктуры безопасности. Если такое превышение имеет место значит данная строка – это одна из первоочередных целей разработки политики безопасности. Если интегральный риск превышает допустимое значение значит в системе набирается множество мелких огрешностей в системе безопасности которые в сумме не дадут предприятию эффективно работать.
24417. Описание формальной модели ОС для абстрактной микропроцессорной ЭВМ 155 KB
  Структуру ОС в t T можно представить с помощью графа Гt вершинами которого являются элементы Р={P0 Pn} множество процессов и множество ресурсов R={r0 rq} а ребра устанавливают связь между вершинами. ОС является динамически изменяемая система то некоторые элементы в моменты времени t1 t2 принадлежащие Т если t1≠t2 представляют структуру ОС в виде графа Гt1 и графа Гt2. Проследим изменения графа Гt отображая структуру ОС в любой момент времени t T. Определим множество Е как совокупность правил фиксирующих изменение структуры...
24419. Понятие ОС ЮНИКС. Основные преимущества, понятие процесса в ОС ЮНИКС, отличие от предыдущих ОС 1.63 MB
  Система UNIX проектировалась как инструмент предназначенный для создания и отладки новых средств ПО. Эти идеи позволили применить UNIX не только на компьютерах с разной архитектурой но и предали этой ОС такую модульность и гибкость которая явилась основным фактором для расширения и развития самой системы. Основным преимуществом UNIX перед другими системами явилось следующее: Единый язык взаимодействия пользователя с системой вне зависимости от применяемой ЭВМ. При разработке UNIX авторы стремились совместить два несовместимых...
24420. Переадресация ввода/вывода и конвейер, зачем и почему 360.5 KB
  Процессор i486 обеспечивает механизм тестирования кеша используемого для команд и данных. Хотя отказ аппаратного обеспечения кеширования крайне маловероятен пользователи могут включить тестирование исправности кеша в число тестов выполняемых автоматически при включении питания. Примечание: Механизм тестирования кеша уникален для процессора i486 и может не поддерживаться в точности следующими версиями процессоров данной линии. При выполнении тестирования кеша само кеширование должно быть отключено.
24421. Файловая структура ОС ЮНИКС. Основное отличие и преимущество 458 KB
  Структура буфера TLB. Регистры и операции проверки буфера TLB. Структура буфера TLB . Ассоциативный буфера трансляции TLB кеш используемый для трансляции линейных адресов в физические.
24422. Координатор МАКЕ и система управления исходным кодом SCCS 110.5 KB
  Описание взаимозависимостей содержит команды которые должны быть выполнены если обнаружится что некоторый модуль устарел перестал соответствовать действительности. Такие команды обеспечивают реализацию всех необходимых для модернизации модуля действий. В одних системах интерпретатор прост но совокупность команд не образует язык программирования а в других имеются отличные языки программирования на уровне системных команд но выполнение отдельной команды осложнено. Контрольная точка задается для конкретной формы доступа к памяти...
24423. Общая характеристика основных компонентов ОС ПЭВМ 93 KB
  Сетевой уровень занимает в модели OSI промежуточное положение: к его услугам обращаются протоколы прикладного уровня сеансового уровня и уровня представления. Для выполнения своих функций сетевой уровень вызывает функции канального уровня который в свою очередь обращается к средствам физического уровня. Физический уровень выполняет передачу битов по физическим каналам таким как коаксиальный кабель витая пара или оптоволоконный кабель. Канальный уровень обеспечивает передачу кадра данных между любыми узлами в сетях с типовой топологией...