Лекция: While(не конец моделирования) do

Begin

Просмотреть список SE = {li}, где li = (ei, ti), 0£ i £ n и выбрать элемент с минимальным временем ti.

Systemtime := min(ti);

Передать управление событию ei из элемента li = (ei, ti);

Обработать это событие. Если событие ei запланировало новое событие ej (т.е. было выполнено преобразование Sch), то соответствующий элемент lj следует поместить в список событий SE, т.е. выполнить операцию SE:=SE + lj

End

 

 

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

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

Если число элементов в списке SE велико, поиск события с минимальным временем (и включение в список нового элемента) может занять много времени. Для оптимизации этого процесса исследователи предлагают усовершенствованные алгоритмы:

— Поиск с начала и конца списка.

— Использование различных списков для различных типов событий.

— Использование дополнительного указателя на середину списка. Сначала происходит сравнение с нужным элементом, а потом поиск происходит в нужной половине списка.

— Использование множества запланированных событий в виде бинарного дерева.

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

 

 


еще рефераты
Еще работы по информатике