
- •6.1.2.2. Присваивание ссылок на объект
- •7. Дистанционное обращение
- •7.1. Дистанционные идентификаторы
- •7.2. Присоединения
- •9.2. Квазипараллельное исполнение
- •Integer procedure pos;
- •Inspect sysout do inspect sys in do
- •11.4.2. Семантика
- •1 12.1. Последовательности псевдослучайных чисел
- •14.2.3.2. Семантика
- •14.2.4. Управляющие процедуры
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 на некоторый объект класса process. Оно представляет «событие», запланированное на системное время 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. Операторы активации
> я