Пример алгоритма, реализующего процесс сканирования

Итак, существует ряд алгоритмов, выполняющих процессы сканирования. Более подробно этот вопрос изложен в [9, 10, 40], где приведены описания алгоритмов, которые представле­ны в других разделах данной главы. Ниже даны обобщенные выводы из указанных источ­ников, соответствующие максимально строгим требованиям по обслуживанию вызовов.

Алгоритм сканирования приведен на рис. 4. На этом рисунке приняты обозначения:

R — предыдущие состояния точек опроса линейки;

R— последующие состояния точек опроса линейки;

R— состояния линейки в таблице блокировки для опроса линейки.

Остальные переменные R,R ,R,R вычисляются в процессе работы алгоритма и по­ясняются по ходу его рассмотрения.

Верхний индекс в алгоритме означает текущий номер обслуживаемой линейки, который изменяется в соответствии с оператором 20 этого алгоритма. Алгоритм начинается с перио­дического запуска таймера. В данном случае выбран период запуска 10 мс, что гарантирует чтение наиболее короткого сигнала (импульса дискового набора номера) от 2 до 3 раз. Мно­гократный опрос в дальнейшем позволяет отличить реальный сигнал от помехи.

В начале алгоритма выполняются операторы 1-7, обрабатывающие буфер заявок, по­ступивших от уже начавшихся процессов. Такой приоритет в обработке позволяет не ста­вить на обслуживание новые заявки, чтобы избежать перегрузки алгоритмов обработки. Данный участок алгоритма определяет наличие сигналов, которые ожидает остановленный после перехода процесс. Алгоритм при этом доставляет в процесс сигнал ВХОД.

Второй участок содержит операторы 8-12, выявляющие наличие изменений в состоя­нии внешней среды. Принцип его работы заключается в том, что сопоставляются предыду­щее состояние линеек R1 и последующее R2 и определяется, есть ли изменения по сравне­нию с предыдущим моментом времени.

Например, если в некоторый десятимиллисекундный цикл к:

R= 00101101, a

R= 10010101, то

R= R R= 10111000.

Разряды результата, равные единице, говорят о наличии изменения, при этом следует обратить внимание на то, что отмечены два типа перехода — из 1 в 0 и из 0 в 1.


Рис. 4 Алгоритм сканирования

 


При многих процессах важна не только информация о наличии изменения, необходимо также различать его тип. Например, переход из 0 в 1 обозначает «вызов», а обратный пере­ход — «отбой». При приеме номера фиксация цифры может происходить по переднему или заднему фронту. В связи с этим производятся следующие действия. Для определения пере­хода из 1 в 0 проводится операция поразрядного умножения R3 и R:

R3 = 10111000

R1 = 00101101

R4 = R3 & R1= 00101000.

Из этого результата должны быть исключены заблокированные точки. Формируется массив блокировок R0.. Одно слово из этого массива считывается. В нем 0 означает, что точка сканирования заблокирована, а 1 — что она находится в работе. Для исключения блокированных точек R4 логически умножается на R0. После чего получается массив R5, содержащий незаблокированные точки сканирования, которые изменили свои состояния из 1 в 0.

R4 = 00101000

R0= 11001111

R5 = R4&R0 = 0000 1000

Единичное значение разрядов указывает на переход из 1 в 0.

Далее определяются разряды, изменившие свое состояние из 0 в 1. Для этого выполня­ется операция сложения по модулю 2 над числами R4 и R3:

R4 = 0010 1000

R3= 1011 1000

R6=R4 R3= 1001 0000

Исключая блокированные точки получаем массив R7:

R6=1001 0000

R0= 1100 1111

R7 = R6 &R0= 1000 0000

Результат сканирования содержится в словах R5 (переход из 1 в 0) и R7 (переход из 0 в 1).

Следующие операторы (13-18) обеспечивают получение координат комплектов, в кото­рых произошли изменения.

После этого каждому слову массива предыдущих состояний присваивается значение те­кущего, чтобы подготовить последующие циклы (оператор 19).

Дальнейшие действия (операторы 20 и 21) связаны с переходом к следующей строке сканирования или завершением процесса при проверке последней линейки.

Алгоритм завершается переходом в исходное состояние.