Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дал У.И.Симула 67.doc
Скачиваний:
8
Добавлен:
01.03.2025
Размер:
216.58 Кб
Скачать

1 12.1. Последовательности псевдослучайных чисел

Все.процедуры случайной выборки в языке СИМУЛА-67 используют один и тот же прием получения «главной вы­ борки» из равномерного распределения на интервале (0,1). :■ Процедура главной выборки заменяет значение указанной целой переменной, скажем £/, новым значением в соответ­ ствии с некоторым алгоритмом, определяемым в данной реа­ лизации языка. Например, для двоичных машин удобен сле­ дующий алгоритм: ■ ■

и

ш = остаток (

где Ui есть i-e значение переменной U. Можно показать, что если f/o — положительное нечетное число, то такими же бу­дут и все Ui и последовательность £/0/ U\y U% ..., периоди­ческая с периодом 2п~2. (Младшие два бита значений U остаются неизменными, тогда ка-к прочие пробегают все воз­можные комбинации.) • . .

Вещественные числа щ = Ui X 2~п принадлежат интер­валу (0,1). Последовательность щ, и2, ... называется после­довательностью псевдослучайных чисел и щ (/=='1, 2, ,..)

является i-й результатом главной выборки из последователь­ности U. Последовательность однозначно определяется на­чальным значением i/o» соответствующей целой переменной. Тем не менее она является «хорошим приближением» к на­стоящей последовательности случайных чисел.

14.1.4. Класс head - " .. j

.

14.1\.4.2. Семантика

Объект класса head или подкласса класса head служит для представления набора. Объекты класса head не- могут ■становиться членами наборов. Таким образом, каждый набор имеет единственную «голову»'(head).

Процедуру first можно использовать для того, чтобы по­ручить ссылку на первый член набора, а процедуру last — на последний.

|-, Логическая процедура empty доставляет значение true, если набор не имеет членов.

г Целая процедура cardinal может быть использована для подсчета количества членов в наборе.

Процедурой clear можно воспользоваться для удаления всех членов из набора.

Ссылки SUC и PRED первоначально указывают на саму «голову», которая, таким образом, представляет пустой на­бор. '

? 14.2. КЛАСС SIMULATION

Системный класс SIMULATION можно рассматривать как «пакет применений», предназначенный для решения задач моделирования. Он имеет в качестве префикса класс SIMSET и, таким образом, имеет непосредственный доступ к сред­ствам для манипуляций с наборами.

Определение класса SIMULATION, данное ниже, является лишь одним из многих возможных способов организации зтрго класса. При реализации языка можно выбрать любую другую схему, эквивалентную этой с точки зрения программы пользователя. %

. В последующих разделах понятия, определенные в классе SIMULATION, будут разъяснены в связи с префикс-блоком,

префиксальная часть которого является экземпляром тела ■ класса SIMULATION или некоторого его подкласса. Блок с префиксом действует как главная программа некоторой квазипараллельной системы, которая может представлять модель системы «с дискретными событиями».

14.2.1. Общая структура

14.2.1.2. Семантика-

Класс SIMULATION служит для того, чтобы делать до­ступными средства, предназначенные для моделирования — класс process и связанные с этим процедуры — путем исполь­зования класса SIMULATION в качестве префикса к блоку или к классу. ■ -

Переменная SQS ссылается на некоторый набор, кото­рый называется «управляющим списком» (УС) и служит для представления «оси системного времени». Члены упра­вляющего списка суть «уведомления о событиях», располо­женные в нем по возрастанию значений атрибута EVTIME. «Уведомление о событии» или, короче, «уведомление» ссылает­ся своим атрибутом PROC на некоторый объект класса pro­cess. Оно представляет «событие», запланированное на си­стемное время EVTIME, которое будет очередной «активной фазой» этого объекта. На данный объект класса процесс '(короче: на данный процесс) в любой данный момент может ссылаться не более одного уведомления.

Уведомление, находящееся в начале управляющего списка, относится к процессу, активному (работающему) в данный момент. На этот объект можно ссылаться посредством про­цедуры current (текущий). Значение переменной EVTIME этого .уведомления интерпретируется как текущий момент си­стемного времени; процедура time доставляет, это значение.

14.2.2. Класс process

14.2.2.2. Семантика ,; -

Объект класса, имеющего process своим префиксом, будем называть объектом класса процесс или просто процессом. , Процесс имеет свойства класса link; кроме того, он имеет возможность быть представленным в управляющем списке; далее, некоторые управляющие операторы могут манипули­ровать над процессом, изменяя его «состояние». Процесс мо-. жет быть в одном из-четырех состояний: активном, приоста-, новленном, пассивном или завершенном-.

При своем порождении процесс немедленно становится самостоятельным, ЛУ процесса устанавливается перед пер­ вым оператором его правила действий, задаваемого пользо­ вателем. Процесс остается самостоятельным все время своего существования. ■■

Процедура idle имеет^ значение true, если процесс в дан­ ный' момент не представлен в управляющем списке, такой процесс называется бездействующим (idle). Бездействую­ щий процесс или пассивен, или завершен в зависимости от значения процедуры terminated (т. е. завершен). Бездей­ ствующий процесс пассивен, если его ЛУ находится на неко­ тором префиксальном уровне, определенном пользователем. . Когда ЛУ проходит через заключительный end части тела, определяемой пользователем, оно переходит к «заключитель­ ным операциям» на префиксальном уровне класса process, и значение процедуры terminated становится true — процесс «завершен». (Хотя состояние процесса «завершен» в только что определенном смысле не является строго эквивалентным соответствующему основному понятию, определенному в-. разд. 9, в некоторых вариантах реализации «завершенный» процесс можно трактовать как завершенный в строгом; смысле

Процесс, представленный в данный момент в управляю­щем списке, называется «приостановленным», если он не представлен уведомлением в начале управляющего списка. " В последнем, случае процесс активен. Системное время, на /которое запланирована активная фаза приостановленного процесса, указывается атрибутом EVT1ME в уведомлении, ссылающемся на данный процесс. Это значение времени можно получить при помощи процедуры evtime. Процедура ; nextev доставляет ссылку на процесс (если таковой имеется), .^представленный в управляющем списке следующим по по-'•;рядку уведомлением,

: 14.2.3. Операторы активации

> я