Автоматизация

Вид материалаДокументы

Содержание


А на рис. 9.5) происходит обработка предыдущего спектра (участок С).
Call iqset(5)
Call ipoke ("44, "10000.or.ipeek ("44))
Itt= ittinr( )
Ia= iscomp('s', itt) if(ia.eq.0) call stop
Mcall setf $ s
Call @# $ qastc
Mcall mrkt $ s
Контрольные вопросы к главе 9
Подобный материал:
1   ...   17   18   19   20   21   22   23   24   25
§ 9.4. ПРОГРАММИРОВАНИЕ ИЗМЕРИТЕЛЬНЫХ СИСТЕМ


В предыдущих параграфах была рассмотрена техника программирования аппаратуры КАМАК на простых примерах одиночных модулей. При организации измерительно-вычилительных систем реального времени, включающих в себя аппаратные комплексы взаимодействующих модулей и программные комплексы взаимодействующих программ, возникают дополнительные проблемы синхронизации работы аппаратуры и программ, организации очередей программ, распределения при оритетов и уровней выполнения элементов программного обеспечения, динамичес­кого управления работой комплекса и т. д. Познакомимся с решением некоторых из этих проблем на примерах реальных измерительных систем.





Рис 9.4. Структурная схема установки для регистрации и анализа гамма-излучения


Рассмотрим установку для регистрации и анализа гамма-излучения движущихся объектов (рис. 9.4). Такая задача может возникнуть при конвейерной сортировке радиоактивной руды, при поиске залежей радиоактивных руд с самолета (в этом случае источник гамма-излучения неподвижен, но движется измерительная установка).

Исследуемое гамма-излучение регистрируется детектором Д, импульсы от которого через усилитель У поступает в амплитудно-цифровой преобразователь АЦП. Экспозиция, т. е. время накопления спектра при каждом измерении, задается таймером Т. АЦП и таймер представляют собой модули КАМАК. Крейт КАМАК через конт­роллер крейта КК связан с ЭВМ типа СМ-4 или Электроника-60, работающей под управлением операционной системы РАФОС. ЭВМ осуществляет управление модулями КАМАК, а также обработку и накопление поступающей информации. Для градуировки аппаратуры служит градуировочный источник И.

Рассмотрим временные характеристики измерительно-вычислительного процесса (рис. 9.5). Каждое прерывание от таймера КАМАК, задающего экспозицию изме­рений, приводит к завершению текущей экспозиции, новому запуску таймера на время tн и активизации программ обработки накопленного спектра. Таким образом, время накопления спектра tн практически совпадает с периодом измерений.

Одновременно с накоплением текущего спектра (участок А на рис. 9.5) происходит обработка предыдущего спектра (участок С). Предполагается, что время обработки всегда меньше периода измерений tн . Такое совмещение процессов измерения и обработки позволяет повысить динамические характеристики измерительного комплекса.

Независимо от процесса измерений идет процесс калибровки. Период калибров­ки Тк определяется системным таймером, т. е. таймером, встроенным в ЭВМ и управляемым операционной системой, а время набора спектра при калибровке tK — тем же таймером КАМАК, который определяет экспозицию при измерениях (участок В на рис. 9.5). По окончании экспозиции калибровки таймер переводится в режим измерений и одновременно с очередным измерением происходит обработка калибровочных спектров (участок D). Далее процесс измерений повторяется до нового прерывания от системного таймера, запускающего режим калибровки.

Суть обработки заключается в анализе накопленного спектра с целью нахождения в нем признаков "эффекта", например наличия гамма-линий определенной энергии и интенсивности. Пока эффекта нет, т. е. регистрируется фоновое излучение, накапливаемые спектры интереса не представляют. По мере накопления новых спектров старые уничтожаются. Если же эффект обнаружен, целесообразно такой спектр сохранить, имея в виду его дальнейший более детальный анализ. В этом случае может оказаться также полезным сохранение нескольких предыдущих и последующих спектров с целью анализа по более тонким алгоритмам. Последнее особенно целесообразно, если источник гамма-излучения имеет значительные размеры и неопределенные очертания.





Рис. 9.5. Временная диаграмма процессов измерения и обработки:

А — измерения; В — калибровка; С — обработка измерений; D — обработка калибровки


Совмещение процессов накопления и обработки, а также необходимость сохранения в соответствии с принятым алгоритмом нескольких спектров из предыдущих циклов измерений требуют создания в оперативной памяти системы буферов (рис. 9.6).

Импульсы от детектора поступают на амплитудно-цифровой преобразователь на 256 уровней. Образуемые коды накапливаются в буфере набора INPT опера­тивной памяти в виде спектра. Объем буфера INPT составляет 256 слов. По окончании экспозиции измерений содержимое буфера набора INPT переписывается в буфер обработки СОМ (256) объемом 256 слов, а буфер INPT очищается и используется для набора определенного спектра.

В процессе обработки происходит коррекция текущего спектра с учетом корректирующих коэффициентов, полученных в результате последней калибровки, и анализ его на наличие эффекта по заданному алгоритму. Если эффект не обнаружен, текущий спектр из буфера СОМ переписывается в буфер «предыдущего спектра» Р1 (256). Предварительно содержимое буфера Р1 переписывается во второй буфер предыдущего спектра Р2 (256). Таким образом, в оперативной памяти могут храниться три спектра — текущий и два предыдущих.

Если в процессе обработки обнаружен эффект, алгоритм усложняется. Все три спектра (СОМ, Р1 и Р2) записываются в библиотеку спектров на накопителе на гибких магнитных дисках (ГМД). Кроме того, независимо от результатов обработки последующих спектров, на ГМД записываются два последующих спектра. Если в накапливаемых спектрах продолжает обнаруживаться эффект, рассмотренный алгоритм действует до тех пор, пока эффект не исчезнет. Таким образом, на ГМД фиксируются все спектры с эффектом, а также два спектра до первого спектра с эф­фектом и -два спектра после последнего спектра с эффектом. Сохранение на ГМД спектров калибровки не предусмотрено.




Рис. 9.6. Структура буферов в опера­тивной памяти





Рис. 9.7. Структура программного комплекса:

а — главная программа MAIN; б—программа CALINI обработки прерываний от систем­ного таймера;

в — программа ADCINT обработки прерываний от АЦП; г — программа


Программный комплекс (рис. 9.7) включает в себя четыре программы: главную программу MAIN (рис. 9.7,а), в которой инициализируются аппаратно-программные средства установки, и три программы обработки прерываний по числу независимых источников прерываний: от системного таймера (CALINI, рис. 9.7,6), от АЦП (ADCINT, рис. 9.7,в) и от таймера КАМАК (TIMINT, рис. 9.7,г).




Рис. 9.8. Синхронизация программ оперативной обработки


Большая часть действий по обработке прерываний вынесена на уровень подпрограмм завершения. Как известно, в системе РАФОС существует два способа активизации подпрограмм завершения. Адрес подпрограммы завершения может быть указан в числе параметров многих программных запросов, таких, как запросы на ввод - вывод, обращения к системному таймеру и т. д. Другой способ используется в программах обработки прерываний от ВУ: включение в текст ПОП прог­раммного запроса .SYNCH переводит оставшуюся часть программы в ранг под-программ завершения. При этом подпрограммы завершения, активизированные программным запросом .SYNCH, устанавливаются монитором РАФОС в начало очереди подпрограмм завершения к данной задаче. Это обстоятельство используется в разработанном программном комплексе.

Программа ADCINT обработки прерываний от АЦП выполняется в режиме пользователя на максимальном уровне приоритета процессора. Это обеспечивает ей первоочередное право на выполнение по отношению ко всем остальным программам комплекса.

Программа CALINI работает на уровне подпрограмм завершения. Одной из последних строк программы CALINI является программный запрос ITIMER с указанием в качестве подпрограммы завершения программы CALINI. Таким образом, программа CALINI периодически с периодом Тк вызывает сама себя с помощью механизма внутренних прерываний, выполняясь все время на уровне подпрограмм завершения.

В программу TIMINT включены программные запросы .INTEN и .SYNCH. Это обеспечивает ей выполнение в режиме пользователя на уровне подпрограмм завершения, при этом как было отмечено выше, она всегда ставится монитором в начало очереди подпрограмм завершения, в данном случае перед программой CALINI.

Рассмотрим особенности временной синхронизации программ комплекса.

Внутреннее прерывание от системного таймера (т. е. активизация режима калибровки) может возникнуть в любой момент времени по отношению к пре­рываниям от таймера КАМАК. При этом возможны три ситуации.

1. Прерывание от системного таймера возникло после завершения программы обработки, но до истечения интервала tи (см. рис. 9.5), при этом обработка не обнаружила эффекта. В такой ситуации прерывание от системного таймера активизирует программу CALINI, которая блокирует набор спектров, очищает буфер набора и переводит установку в режим калибровки. Накопленный спектр пропадает, а измерения прекращаются на время, требуемое для калибровки.

2. Прерывание от системного таймера возникло во время работы программы обработки TIMINT (рис. 9.8, а). Поскольку программа TIMINT работает на уровне подпрограмм завершения, программа CALINI, активизируемая системным таймером, будет установлена в очередь за этой программой, в результате чего ее фактическое выполнение отложится до момента завершения программы обработки. Если про­грамма обработки не обнаружила эффект, то программа CALINI переводит установку в режим калибровки, как и в предыдущем случае.

3. Программа обработки обнаружила в спектре эффект. В этом случае калиб­ровка должна быть задержана, а измерения продолжены по крайней мере до тех пор, пока эффект не исчезнет, а с учетом принятого алгоритма до тех пор, пока не закончится измерение и запись на ГМД еще двух спектров. Задержка достигает путем «продления» программы TIMINT до очередного прерывания с помощью зацикливания (рис. 9.8, б). Выполнение программы CALINI, стоящей в очереди программой TIMINT, будет в этом случае отложено по крайней мере до очередного прерывания.

Для продления программы TIMINT предусмотрены два индикатора. Индикатору EFF присваивается значение 2 при обнаружении эффекта. После исчезновения эффекта в каждом очередном измерении значение EFF уменьшается на единицу. Запись спектров на ГМД производится до тех пор, пока EFF не станет равен нулю.




Рис. 9.9. Алгоритм продлевания программы TIMINT


Индикатор IND (рис. 9.9) служит для завершения «предыдущей», продленной программы TIMINT после того, как в результате прерывания от таймера эта прог­рамма активизируется повторно. Пока эффект отсутствует и запись спектров на ГМД не производится, EFF = О и программа TIMINT после анализа значения EFF завершается выходом из прерывания. Если же в процессе обработки происходит запись спектра на ГМД и EFF <> 0, то программа TIMINT после анализа значения EFF зацикливается в ожидании сброса индикатора IND (IND устанавливается, как только программа TIMINT переходит с уровня прерываний на уровень под­программ завершения). Очередное прерывание от таймера повторно активизирует программу TIMINT, при этом выполнение «предыдущей» программы TIMINT при­останавливается на одной из команд цикла проверки значения индикатора IND. «Новая» программа TIMINT начинает работать на максимальном уровне приоритета процессора, затем с помощью программного запроса .INTEN переходит на уровень прерываний в режим системы.




Рис. 9. 10. Структурная схема программы МАIN


Происходит сброс индикатора IND и вы­полнение программного запроса .SYNCH, переводящего программу на уровень подпрограмм завершения. "Новая" программа TIMINT ставится монитором в очередь подпрограмм завершения вслед за «предыдущей», временно блокированной прог­раммой TIMINT, которая тут же разблокируется и продолжает анализ индикатора IND. Поскольку «новая» программа сбросила индикатор, «предыдущая» завершается выходом из прерывания и управление передается «новой» программе TIMINT. Индикатор IND устанавливается, происходит обработка спектра и, если EFF еще не равен нулю, программа TIMINT снова зацикливается до очередного прерывания. Таким образом, пока EFF>0, процессор не может выйти из программы TIMINT, и программа CALINI, имеющая более низкий приоритет, все время откладывается. Установка в этом случае перейдет в режим калибровки, как только эффект исчезнет и все требуемые спектры будут записаны на ГМД.

Рассмотрим некоторые особенности программ, образующих программный комплекс.

Главная программа МАШ (рис. 9,10) написана на ФОРТРАНе. Программа с помощью операторов ФОРТРАНа TYPE и ACCEPT запрашивает ввод с терминала необходимых исходных данных (значения времени tи, tк, Tк и т. д.) и вызовом стандартной подпрограммы ASSIGN резервирует место для файла на ГМД. Далее вызывается пользовательская подпрограмма INITCM, инициализирующая аппаратуру КАМАК. Содержание этой подпрограммы стандартно: генерация сигнала Z, защита векторов прерывания АЦП и таймера программными запросами .PROTECT, загрузка векторов прерывания, размаскирование L-запросов. Подпрограмма INITCM написана на АССЕМБЛЕРе.

Следующий этап выполнения программы МАШ — создание дополнительных элементов очереди ввода - вывода для организации асинхронного вывода в процессе выполнения задачи, а также для поддержки очереди подпрограмм завершения. В программах, написанных на АССЕМБЛЕРе, для этого используется макрокоманда .QSET; соответствующий программный запрос в фортрановской программе реали­зуется путем вызова стандартной подпрограммы IQSET:


CALL IQSET(5)


Этой строкой создается пять дополнительных элементов очереди.

Далее вызывается пользовательская подпрограмма CALINI. Эта подпрограмма устанавливает режим калибровки, очищает буфер набора, запускает таймер КАМАК на время t = tк и разблокирует АЦП. Таким образом, работа установки после включения всегда начинается с калибровки. Перед выходом в основную программу подпрограмма CALINI инициирует системный таймер. В программах, написанных на АССЕМБЛЕРе, для этого используется программный запрос .MRKT. Обращение к системному таймеру из фотрановской программы осуществляется с помощью стандартной подпрограммы-функции 1TIMER:


I = ITIMER(.....CALINI).


В параметрах запроса устанавливается период калибровки Тк и адрес подпрограм­мы завершения CALINI. Таким образом, будучи однажды запущена из программы МАIN, подпрограмма CALINI далее будет автоматически активизироваться системой с периодом Tк, при этом подпрограмма CALINI первый раз после запуска комплекса выполняется в режиме пользователя, но затем программным запросом ITIMER переводится на уровень подпрограмм завершения.

Подпрограмма CALINI написана на ФОРТРАНе. Для взаимодействия с аппара­турой КАМАК из нее в свою очередь вызываются подпрограммы: блокировки таймера TIMBLK, блокировки АЦП ADCBLK, запуска таймера TIMRUN и разблокировки АЦП ADCRUN. Эти подпрограммы, работающие с регистрами КАМАК, написаны на АССЕМБЛЕРе.

После отработки подпрограммы CALINI происходит возврат в основную программу MAIN, где устанавливается спецрежим терминала для ввода с клавиатуры одиночных управляющих символов. Спецрежим терминала определяется установкой разряда 12 в слове состояния программы, расположенном по абсолютному адресу 44. В программе, написанной на АССЕМБЛЕРе, это можно сделать следующей строкой:


BIS #10000,@#44


Однако программа МАШ написана на ФОРТРАНе. Для обращения по абсолют­ному адресу в системе РАФОС предусмотрена стандартная подпрограмма IPOKE, действие которой эквивалентно команде MOV АССЕМБЛЕРа с абсолютным адресом в качестве операнда-приемника, а для того чтобы обеспечить избирательную установку разряда I2, не нарушив содержимого остальных разрядов, следует с помощью подпрограммы - функции IPEEK прочитать содержимое слова состояния программы и образовать логическую сумму числа 10000 и содержимого этого слова:


CALL IPOKE ("44, "10000.OR.IPEEK ("44))


Стандартная подпрограмма IPEEK действует аналогично команде MOV АССЕМБ­ЛЕРа с абсолютным адресом в качестве операнда-источника.

Далее программа MAIN блокируется программным запросом ITTINR в ожидании ввода с клавиатуры управляющих символов:


ITT= ITTINR( )


Для анализа кода нажатой клавиши можно воспользоваться стандартной подпрограммой ISCOMP. Например, переход на пользовательскую подпрограмму STOP, останавливающую набор спектра при нажатии клавиши S, реализуется следующим образом:


IA= ISCOMP('S', ITT) IF(IA.EQ.0) CALL STOP


Аналогичным образом организуются переходы на другие сервисные программы: возобновления набора спектра, вывода накопленного спектра на экран графического либо алфавитно-цифрового дисплея и т. д.

Подпрограмма ADCINT обработки прерываний от АЦП написана на АССЕМБ­ЛЕРе и имеет стандартную структуру: прием кода из выходного регистра АЦП, инкремент соответствующего канала в оперативной памяти, установка разряда разрешения прерывания в РУС. Особенность подпрограммы ADCINT состоит в том, что в ней отсутствует программный запрос .INTEN и, таким образом, вся подпрограмма выполняется на уровне задачи при максимальном значении приоритета процессора. Завершается подпрограмма командой RTI выхода из прерывания. При таком построении ПОП выполняется заметно быстрее за счет экономии времени, требуемого для перехода на системный уровень. Это особенно существенно в рассматриваемом случае, когда обработка прерываний от АЦП при высокой интенсивности регистрируемого излучения может потребовать значительных затрат процессорного времени. В результате программа обработки накопленного спектра, выполняемая параллельно с набором текущего спектра и, таким образом, все время прерываемая L-запросами от АЦП, может не уложиться в интервал времени tи, что приведет к нарушению работы комплекса. Недостатком выполнения ПОП на максимальном уровне приоритета процессора является полная блокировка прерываний, что в данном случае не существенно.





Рис. 9.11. Структурная схема подпро­граммы обработки спектра CALC


Наиболее сложна программа обработки прерываний от таймера КАМАК TIMINT, которая выполняет как управляющие, иак и вычислительные функции. Управляющая часть подпрограммы TIMINT написана на АССЕМБЛЕРе, а вы­числительная — на ФОРТРАНе. После входа в прерывание блокируются таймер и АЦП (подпрограммами TIMBLK и ADCBLK), происходит переход в режим системы, сбрасывается индикатор IND и программа переводится в ранг подпрограмм заверше­ния (см. рис. 9.9). После проталкивания в стек содержимого регистров процес­сора R2—R5 устанавливается индикатор IND и вызывается подпрограмма обработки спектра CALC (рис. 9.11).

Подпрограмма CALC осуществляет перезапись спектра из буфера набора в буфер обработки. Далее анализируется индикатор IM, единичное значение которого указывает на режим измерений, а нулевое — на режим калибровки. Рассмотрим сначала ход программы в режиме измерений. С помощью подпрограммы TIMRUN запускается таймер на время t =tн подпрограммой ADCRUN разблокируется АЦП и одновременно с набором нового спектра начинается обработка уже набранного: коррекция спектра с учетом корректирующих коэффициентов подпрограммой CORR и сглаживание спектра подпрограммой SMOOTH. Далее программа разветвляется в зависимости от того, был ли в предыдущих циклах измерений обнаружен эффект (EFF<>0) либо эффекта не было (EFF=0).

В первом случае эффект в данном измерении не ищется, накопленный спектр записывается на ГМД и с помощью подпрограммы SHIFT производится сдвиг текущего и предыдущего спектров, как это было описано выше. Индикатор EFF уменьшается на единицу (так как еще один спектр записан на ГМД) и осущест­вляется продление текущей программы до очередного прерывания (см. рис. 9.9). Перед выходом из прерывания восстанавливается содержимое R2—R5.

Во втором случае (EFF=0, эффекта не было) включается алгоритм поиска пиков и эффекта (подпрограммы POISK и KALEFF). Если эффект не найден, спектры сдвигаются подпрограммой SHIFT и происходит выход из прерывания. Если эффект найдет, три последних спектра записываются на ГМД, спектры сдвигаются и индикатору EFF присваивается значение, равное 2. После этого происходит выход из прерывания с предварительным продлением программы.

Рассмотрим теперь ход обработки в режиме калибровки (1М=0). В этом случае после анализа IM вызывается подпрограмма CALIBR, в которой прежде всего устанавливается режим измерений (1М=1), запускается таймер КАМАК на время t=tн (подпрограммой TIMRUN), разблокируется АЦП (подпрограммой ADCRUN) и вызывается подпрограмма COEF определения корректирующих коэф­фициентов. Подпрограмма калибровки COEF работает параллельно с набором нового спектра уже в режиме измерения.

Рассмотренный программный комплекс имеет характерные черты, типичные для задач реального времени:

1. Комплекс использует два языка программирования - АССЕМБЛЕР и ФОРТРАН. На АССЕМБЛЕРе написаны подпрограммы взаимодействия с аппарату­рой КАМАК, на ФОРТРАНе — подпрограммы обработки получаемых данных.

2. Программный комплекс насыщен подпрограммами (их в общей сложности около двух десятков), которые связывают в те или иные логические цепочки в зависимости от реально складывающейся ситуации. Уровень вложенности подпрограмм достигает четырех. Значительная часть подпрограмм имеет общие поля данных, для чего в подпрограммах на ФОРТРАНе используется оператор COMMON, а в подпрограммах на АССЕМБЛЕРе — директива .PSECT с атрибутами GBL, OVR.

3. Программный комплекс активно взаимодействует с ОС, используя такие её средства, как программные запросы к монитору, очереди программ обработки прерываний и подпрограмм завершения, уровни выполнения задач и т. д. Следует особо отметить, что система РАФОС содержит библиотеку фортрановских подпрог­рамм, с помощью которых можно реализовать практически все программные запро­сы (что делается на АССЕМБЛЕРе с помощью системных макрокоманд), а под­программы IPEEK и IPOKE позволяют к тому же обращаться по абсолютным адресам оперативной памяти и регистров ВУ. Таким образом, программа реально­го времени, работающая под управлением РАФОС, может быть целиком написана на ФОРТРАНе. Однако программы, написанные на АССЕМБЛЕРе, часто оказы­ваются проще и нагляднее фортрановских программ, занимают в памяти меньше места и выполняются быстрее.

4. Комплекс работает в интерактивном режиме. Оператор с помощью соответст­вующих команд может перестраивать процесс измерений, получать оперативную информацию о результатах измерений, вмешиваться в ход вычислительного процесса.

Рассмотрим теперь пример тзмерительно-вычислительного комплекса, работающего в многопользовательском режиме под управлением системы ОС РВ.

Описываемая система включает в себя четыре радиометрические установки, работающие на линии с ЭВМ СМ-4. Электронное оборудование системы выполнено в стандарте КАМАК и содержит регистр прерываний IR-303 и счетверенный двоичный счетчик QS-401 (рис. 9.12). Импульсы от детектора каждой установки поступают для накопления на соответствующий вход счетверенного счетчика. По истечении времени измерения, определяемого аппаратными средствами уста­новки, в ней возникает сигнал окончания временного интервала, поступающий на соответствующий номеру установки вход регистра прерываний и приводящий к прерыванию ЭВМ. В процессе обработки прерывания определяется номер установки, от которой поступил сигнал окончания измерений, накопленная в счетчике информация переносится в оперативную память ЭВМ и активизируется новый цикл измерений. Измерения на установках выполняются одновременно и не­зависимо, при этом режимы измерений, состав обработки и форма наблюдения результатов задаются каждым экспериментатором индивидуально со своего дисплея. Программный комплекс работает под управлением операционной системы ОС РВ.

Программное обеспечение системы (рис. 9.13) содержит две программы:

программу INTR, общую для всех пользователей, которая выполняется как резидентная в памяти привилегированная задача. Эта задача организует сбор и сортировку экспериментальных данных с помощью модулей КАМАК в режиме прерываний;

программу TASK, размножаемую в памяти по числу пользователей (задачи TASK1—TASK4), в функции которой входит диалог с экспериментатором, определениережима работы, взаимодействие с задачей INTR, получение из нее накопленнойинформации, обработка данных, наглядное представление результатов измерений и обработки.

Программа INTR написана на АССЕМБЛЕРе и состоит из трех элементов:

программы START, инициализирующей установки и синхронизирующей работу

системы.

программы INT, обрабатывающей прерывания от установок;

программы AST, передающей информацию в буфер программ обработки.





Рис. 9.12. Схема лабораторной установки



Рис. 9.13. Программное обеспечение системы


Программа 1NTR имеет буфер для набора и сортировки информации COMAI, разделенный на четыре зоны. Программные строки программы INTR вместе с буфером COMAI занимают около 2К слов, что укладывается в ограничение 4К слов накладываемое на ПОП. При компоновке задачи указывается ключ /PR:5, в результате чего виртуальное пространство адресов задачи начинается с адреса 120000. То же значение 120000 указано в качестве базового адреса отображения задачи в директиве CINT $. Таким образом, при переходе в процессе обработки прерывания в режим системы виртуальные адреса не изменяются. Это позволяет составить текст программы в позиционно-зависимом коде, что упрощает программирование.

При компоновке задачи INTR в ее виртуальное адресное пространство вклю­чается разделяемый район DAT, резидентный в памяти и загружаемый командой оператора INSTALL при запуске системы. Физически этот район находится в самом низу оперативной памяти. Район DAT одновременно входит и в виртуальное про­странство всех задач ТАSK.Однако в процессе обработки прерывания от установки программа обработки прерывания INT не может «дотянуться» до района DAT, так как в режиме прерываний отображаются не более 4К слов задачи (с адресами 120000— 137776), а виртуальный базовый адрес района DAT составляет 160000. Это и вызывает необходимость включения в состав программы INTR дополнительного буфера COMAI, используемого для накопления экспериментальных данных в режиме прерываний, когда общая для всех задач область DAT программе INT недоступна. После перехода с уровня прерываний на уровень АСП задача INTR отображается целиком и может перенести экспериментальные данные из буфера COMAI, в буфер DAT, сделав их доступными всем задачам комплекса. Так же, как и COMAI, буфер DAT разделен на четыре зоны, по числу установок. После того как набор информации от одной из установок закончен, набранные данные передаются из со­ответствующей зоны буфера COMAI в зону буфера DAT с тем же номером, затем переписываются на магнитный диск и обрабатываются задачей TASK.




Рис. 9.14. Структура программы TASK


Программа TASK (рис. 9.14) написана на ФОРТРАНе. Работа программы начинается с запроса номера установки i. По этому номеру определяются соответст­вующие зоны в буфере COMAI и районе DAT. После этого программа устанавливает режим работы: набор информации (вызывается программа RUN), обработка информация (подпрограмма COM), вывод данных на дисплей (подпрограмма DIR) или на АЦПУ (подпрограмма TYP). В зависимости от выбранного экспериментатором режима начинает работать одна из программ. Все они входят в тело программы TASK. Рассмотрим подробнее режим измерений, реализуемый подпрограммой RUN. В этом режиме активно используются средства реального времени, в частности синхронизация хода выполнения задач событиями реального времени.

Синхронизация работы задач осуществляется за счет использования флагов событий. Всего в системе используются 16 глобальных флагов с номерами 33 — 48, по четыре флага на каждую задачу TASK. Обозначим их Fki ,где i - номер задачи (i=1 - 4), a k — идентификатор вида флага (k=1 - 4). Рассмотрим взаимодействие программных элементов системы (для двух задач TASK1 и TASK2) в ходе измерений (рис. 9.15).

Экспериментатор запускает со своего дисплея с номером i задачу TASKi, и задает режим работы. Прежде всего задача TASKi должна установить флаг Fki , служащий сигналом для инициализации ;-й установки. Установку флага из фортрановской задачи можно выполнить с помощью обращения к подпрограмме:


CALL SETEF (нфл),


где нфл - номер флага. Однако аргументом подпрограммы SETEF должна быть обязательно константа, в то время как в нашем случае номер флага представляет собой переменную, вычисленную программным образом по номеру установки N, введен­ному с клавиатуры:


IFLl=N+32

IFL2=N+40

IFL3=N+36

IFL4=N+44





Рис. 9.15. Временная диаграмма работы системы


Поэтому для установки флага пришлось написать специальную подпрограмму SETFL1 на АССЕМБЛЕРе, в которой установка флага осуществляется с помощью S-формы директивы SETFS $ , позволяющей использовать в качестве аргумента переменную (в данном случае регистр общего назначения):

.MCALL SETF $ S

SETFLl: ADD #2,R5

MOV @(R5)+,R1

SETF $ S Rl

RTS PC


В программе TASK (точнее, в подпрограмме RUN) вызову подпрограммы SETFLl соответствует следующая строка:


CALL SETFLl (IFL1)


Читателю представляется возможность самостоятельно рассмотреть ход вызова и выполнения подпрограммы SETFLl, вспомнив материал, изложенный в § 5.5.

Установив флаг F1i, задача TASKi блокируется в ожидании одного из фла­гов F2i или F4i. Блокирование задачи в ожидании флага можно осуществить с по­мощью стандартной фортрановской подпрограммы WFLOR, однако с целью облегчения анализа номера установленного флага блокирование осуществляется путем вызова подпрограммы, написанной на АССЕМБЛЕРе и содержащей директивы WTLO $ и RDAF $ .

Инициализирует установку подпрограмма START, являющаяся частью резидент­ной задачи INTR. Эта задача, будучи активизирована, прежде всего сбрасывает все 16 флагов последовательным выполнением программного запроса CLEF $ , а за­тем ее блокирует запрос WTLO 3 в ожидании какого-либо одного из флагов fij. Полу­чив информацию об установке флага, задача INTR считывает состояние всех флагов директивой RDAF $ , определяет номер установленного флага (т.е. фактически номер задачи TASKi), инициализирует соответствующую установку и разрешает прерывания от данной установки, после чего начинаются собственно измерения. Программа START переходит снова на выполнение директивы WTLO $ , блоки­руясь в ожидании установки флагов. При запуске задачи TASK с другого терминала инициируется другая установка и на ней тоже начинаются измерения.

По окончанию измерений на i-й установке в ней возникает сигнал прерывания, который через регистр прерываний дает L-запрос на магистрали КАМАК. Программа обработки прерываний INT считывает командой A(14)F(1) регистр прерываний, определяет по его состоянию номер установки, от которой пришло прерывание, формирует адрес регистра в модуле счетверенного счетчика, из которого надо считать данные, считывает их по команде A(M)F(2) и сохраняет в соответствующей зоне буфера COMAI. Далее строками


CALL @# $ FORK2

GLR @R3

CALL @# $ QASTC

RTS PC


осуществляется переход на уровень отложенных прерываний и немедленно — на уровень асинхронных системных прерываний, т.е. фактически на уровень задачи, когда задача отображается через пользовательские РАС и имеет доступ ко всему своему виртуальному адресному пространству. Программа обработки асинхронных системных прерываний AST переписывает снятые со счетчика данные из i-й зоны бу­фера COMAI в i-ю зону района DAT и устанавливает флаг F2i.

Задача TASKi, ожидавшая установки флага р2„ разблокируется и приступает к обработке данных по алгоритму, указанному экспериментатором.

В системе предусмотрено регулярное, с периодом 1 с, высвечивание на терминал экспериментатора текущего числа зарегистрированных событий. Синхронизация этого процесса осуществляется с помощью флагов F3i и F4i. Задача TASKi, уста­новив флаг F1i , вызывает подпрограмму INI с передачей ей своего номера флага F3i:


CALL INI (IFL 3)


Подпрограмма INI издает директиву MRKT $ с указанием соответствующего флага события:


.MCALL MRKT $ S

INI:: ADD #2, R5

MOV @(R5)+,Rl

MRKT $ S Rl, #1, #2

RTS PC


Далее задача TASKi, как уже отмечалось, ждет установки одного из флагов F2i или F4i . Флаг F4i устанавливается при выполнении программного запроса MRKT $ после истечения заданного в нем интервала времени (1с.). Задача TASKi, получив от ОС информацию об установке флага, разблокируется, высвечивает на терминал текущее состояние счетчика числа набранных событий и возвращается на строку CALL INI (IFL3), снова инициируя программный запрос MRKT $ . По­лучив же информацию об установке флага F2i, задача TASKi, приступает к обра­ботке накопленной информации.

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


КОНТРОЛЬНЫЕ ВОПРОСЫ К ГЛАВЕ 9


1. Сколько машинных команд требуется для выполнения безадресной команды

КАМАК:

а) одна;

б) две;

в) три?

2. Сколько машинных команд требуется для выполнения адресной команды КАМАК при работе с 24-разрядными словами данных:

а) одна;

б) две;

в) три?

3. Какой способ обращения к модулю КАМАК обеспечивает максимальную скорость передачи информации:

а) режим прерываний;

б) опрос разряда готовности РУС;

в) проверка LAM-требования в модуле?

4. Каким образом можно проверить наличие LAM-требования в конкретном модуле:

а) анализом разряда D РУС контроллера;

б) анализом разряда Q РУС после выполнения команды NAF(27);

в) анализом разряда X РУС после выполнения команды NAF(27)?

5. Какие преимущества дает использование модуля памяти совместно с АЦП:

а) большой объем регистрируемой информации;

б) большая скорость приема кодов из АЦП;

в) более экономное использование оперативной памяти ЭВМ?

6. Что надо сделать, чтобы выполнить какую-либо системную директиву из программы обработки прерываний в ОС РВ:

а) перейти на уровень асинхронных системных прерывании;

б) перейти на уровень отложенных прерываний;

в) перейти на уровень задачи?

7. Что надо сделать, чтобы выполнить какую-либо системную макрокоманду из программы обработки прерываний в РАФОС:

а) выполнить макрокоманду .INTEN;

б) перейти в режим системы;

в) перейти на уровень подпрограмм завершения?

8. Что обеспечивает возможность использования языка ФОРТРАН для создания программ реального времени в системе РАФОС:

а) соответствующие свойства транслятора;

б) наличие подпрограмм, реализующих программные запросы к монитору;

в) дополнительные операторы языка ФОРТРАН?