[30.11.11] Семинар №7 (Семинары)
Описание файла
Файл "[30.11.11] Семинар №7" внутри архива находится в следующих папках: Семинары, 777 - [30.11.11] Семинар №7. Документ из архива "Семинары", который расположен в категории "". Всё это находится в предмете "параллельные процессы" из 7 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "параллельные процессы" в общих файлах.
Онлайн просмотр документа "[30.11.11] Семинар №7"
Текст из документа "[30.11.11] Семинар №7"
Семинар №7 [30.11.11]
Продолжаются попытки написать рубежный контроль
Задача 81. Система состоит из одного процессора и одного диска. На систему поступает поток задач с интервалом (a1,a2). Цикл решения задачи – последовательная обработка процессором и диском. Для каждой задачи число циклов решения в системе индивидуально и распределено равномерно от 3 до 8. К каждому устройству своя очередь. Время решения в процессоре в интервале – (b1,b2), время занятия диска – (c1,c2). В системе может одновременно находиться не более 4 задач. Остальные ожидают во внешней очереди к системе. Когда задача освобождает устройство в пределах своего цикла, его занимает другая задача. Когда очередная задача выполнит все свои циклы, она покидает систему, и её может занять другая задача из внешней очереди. На диске происходят сбои в интервале (d1,d2). Сбой – это отказ с мгновенным восстановлением, но с разрушением текущих данных, то есть, если сбой пришёлся на задачу, занимавшую диск, то необходима повторная обработка задачи диском. Процессор иногда переходит в режим тестирования с интервалом F на время B.
БЛОК ЗАДАЧИ
описание
N – скаляр; // число циклов решения
Тновздч – скаляр; // время появления новой задачи
всё описание
алгоритм
НАЧ: N := ЦЕЛОЕ(RAND * 5 + 3);
создать W типа вектор(1 - скаляр);
W(1) := N;
создать S типа ссылка;
S := ссылка на W;
Тновздч := ВРЕМЯ + (RAND * (a2-a1) + a1);
ждать ВРЕМЯ = Тновздч;
активизировать инициатор из S в блок СИСТЕМА на метку СТАРТ;
направить ИНИЦИАТОР на метку НАЧ;
всё алгоритм
всё БЛОК.
БЛОК СИСТЕМА
описание
ПРОЦ, ДИСК – скаляры; // начальные значения “свободен”
МАКС – скаляр; // считает, сколько пакетов уже в системе, начальное = 1
Тпроц, Тдиск, Ттест, Тсбой – скаляры;
ЦКЛ – вектор(1,2,3,4 - скаляры); // число выполненных циклов для каждой задачи
всё описание
алгоритм
СТАРТ: Тстоп := ВРЕМЯ + F; // время остановки на тестирование
Тсбой := ВРЕМЯ + (RAND * (d2-d1) + d1); // время возникновения сбоя диска
ждать МАКС < 5; // для соответствия индексам вектора ЦКЛ
ждать ПРОЦ = “свободен”;
МАКС := МАКС + 1;
ЕЩЁ: ЦКЛ(МАКС) := ЦКЛ(МАКС) + 1;
если ВРЕМЯ = Тстоп то ждать B; // идёт тестирование
ПРОЦ := “занят”;
Тпроц := ВРЕМЯ + (RAND * (b2-b1) + b1);
ждать ВРЕМЯ = Тпроц;
ПРОЦ := “свободен”;
ждать ДИСК = “свободен”;
ДИСК := “занят”;
ПОВТ: Тдиск := ВРЕМЯ + (RAND * (c2-c1) + c1);
ждать ВРЕМЯ = Тдиск;
если ВРЕМЯ = Тсбой то направить ИНИЦИАТОР на метку ПОВТ;
ДИСК := “свободен”;
если ЦКЛ(МАКС) < (ИНИЦИАТОР->вектор(1)) то направить ИНИЦИАТОР на метку ЕЩЁ;
ЦКЛ(МАКС) := 0;
МАКС := МАКС - 1;
уничтожить ИНИЦИАТОР;
всё алгоритм
всё БЛОК.
-------------------
а желательно было сделать ещё один блок – который генерил бы ошибки и влиял на СИСТЕМУ через параметр. Как сейчас тоже можно, но тут ошибки, время сбрасывается каждым инициатором, надо ввести нулевой запуск и больше на него не попадать