[04.10.11] Семинар №3 (Семинары)
Описание файла
Файл "[04.10.11] Семинар №3" внутри архива находится в следующих папках: Семинары, 333 - [04.10.11] Семинар №3. Документ из архива "Семинары", который расположен в категории "". Всё это находится в предмете "параллельные процессы" из 7 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "параллельные процессы" в общих файлах.
Онлайн просмотр документа "[04.10.11] Семинар №3"
Текст из документа "[04.10.11] Семинар №3"
Семинар №3 [04.10.11]
Задача 1. Светофор на перекрёстке, разное время проезда автомобилей, автомобили двух типов: грузовые (10-20) и легковые(2-12).
Блок-контроллер ПОТОК:
БЛОК
описание
Та – скаляр;
НАЧ – метка; // начальное положение ИНИЦИАТОРА на этой метке
всё описание;
алгоритм
НАЧ: создать В типа вектор(1-2 – скаляры);
создать АВ типа ссылка;
В(1) := ЦЕЛОЕ(RAND + 0.5) + 1; // чтобы было целое и не было нуля
В(2) := ВРЕМЯ;
АВ := ссылка на В;
активизировать инициатор из АВ в блок ПЕРЕКРЁСТОК на метку ВХОД;
Tа := ВРЕМЯ + (RAND * 8 + 1);
ждать ВРЕМЯ = Та;
направить ИНИЦИАТОР из НАЧ;
всё алгоритм;
всё БЛОК.
Блок-процессор ПЕРЕКРЁСТОК:
БЛОК
описание
ПРОЕЗД – скаляр;
СВЕТ – скаляр в блоке СВЕТОФОР;
Тпр, N, СВ – скаляр;
ВХОД, МП – метка;
всё описание;
алгоритм
ВХОД: ждать СВЕТ = ‘зел’;
ждать ПРОЕЗД = ‘своб’;
ПРОЕЗД := ‘занят’;
Tпр := ВРЕМЯ + (RAND * 10 + 2);
если ИНИЦИАТОР->вектор(1) = 1 то направить ИНИЦИАТОР на метку МП;
Тпр := ВРЕМЯ + (RAND * 10 + 10);
МП: ждать ВРЕМЯ = Тпр;
ПРОЕЗД := ‘своб’;
N := N + 1; // считаем автомобили
СВ := СВ + (ВРЕМЯ – ИНИЦИАТОР->вектор(2)); // загруженность перекрёстка
уничтожить ИНИЦИАТОР;
всё алгоритм;
всё БЛОК.
Блок-агрегат СВЕТОФОР:
БЛОК
описание
Тс, СВЕТ – скаляр;
ЦИКЛ – метка;
всё описание;
алгоритм
ЦИКЛ: СВЕТ := ‘зел’;
// Тс - сколько гореть светофору, случайная константа 30, например
Тс := ВРЕМЯ + 30;
ждать ВРЕМЯ = Тс;
СВЕТ := ‘жёлт’;
Тс := ВРЕМЯ + 10;
ждать ВРЕМЯ = Тс;
СВЕТ := ‘красн’;
Тс := ВРЕМЯ + 30;
ждать ВРЕМЯ = Тс;
направить ИНИЦИАТОР на ЦИКЛ;
всё алгоритм;
всё БЛОК.
Задача 2. Компьютеры в Вычислительном Центре, N = 60 штук. Они ломаются.
Блок-контроллер ГЕНЕРАТОР:
БЛОК
описание
N – скаляр; // начальное значение 0
всё описание;
алгоритм
НАЧ: создать W типа скаляр;
W := N + 1;
создать S типа ссылка;
S := ссылка на W;
активизировать инициатор из S в блок ЦЕНТР на метку СТАРТ;
N := N + 1;
если N ≤ 60 то направить ИНИЦИАТОР на НАЧ;
уничтожить ИНИЦИАТОР;
всё алгоритм;
всё БЛОК.
Блок-процессор ЦЕНТР:
Возьмём вот такие штуки:
a – момент начала работы компьютера;
b – момент, когда он сломался;
c – момент начала ремонта;
d – момент окончания ремонта.
БЛОК
описание
МАСТЕР – скаляр;
РЕЖИМ – скаляр в блоке РЕМОНТ;
всё описание;
алгоритм
СТАРТ: (ИНИЦИАТОР->скаляр) := ВРЕМЯ + (RAND * (b - a) + b);
ждать ВРЕМЯ = ИНИЦИАТОР->скаляр;
ждать (МАСТЕР = ‘свободен’) /\ (Режим = ‘раб’);
МАСТЕР := ‘занят’;
Трем := ВРЕМЯ + (RAND * (d – с) + с);
ждать ВРЕМЯ = Трем;
МАСТЕР := ‘свободен’;
направить ИНИЦИАТОР на СТАРТ;
всё алгоритм;
всё БЛОК.
Блок-агрегат РЕМОНТ:
БЛОК
описание
всё описание;
алгоритм
НАЧ: РЕЖИМ := ‘не работает’;
ждать |ВРЕМЯ|24 = 9;
РЕЖИМ := ‘работает’;
ждать |ВРЕМЯ|24 = 18;
если МАСТЕР = ‘занят’ то направить ИНИЦИАТОР на НАЧ;
Трем := Трем + 15;
направить ИНИЦИАТОР на НАЧ;
всё алгоритм;
всё БЛОК.