Пример алгоритма, реализующего процесс сканирования
Итак, существует ряд алгоритмов, выполняющих процессы сканирования. Более подробно этот вопрос изложен в [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) связаны с переходом к следующей строке сканирования или завершением процесса при проверке последней линейки.
Алгоритм завершается переходом в исходное состояние.