ОПЕРАЦИОННАЯ СИСТЕМА RT11 МОНИТОР СИСТЕМЫ Руководство программиста 00010-01 33 01 АННОТАЦИЯ В документе описываются функции и характеристики мониторов системы ФОДОС и программные запросы как способ обращения к монитора с целью выполнения тех или иных действий, необходимых для выполнения программы. Перед использованием настоящего документа необходимо ознакомиться со следующими документами: -"Операционная система ФОДОС. Общее описание. 00010-01 31 01" -"Операционная система ФОДОС. Монитор системы. Руководство оператора. 00010-01 34 01" - 3 - СОДЕРЖАНИЕ. 1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ...................4 2. СТРУКТУРА ИНФОРМАЦИИ НА НОСИТЕЛЯХ.................5 2.1. Структура системного тома....................5 2.2. Структура тома магнитной ленты...............8 2.3. Организация ввода-вывода.....................9 3. ХАРАКТЕРИСТИКИ МОНИТОРА..........................11 3.1. Особые области памяти RT11..................12 3.2. Алгоритмы свопинга..........................16 3.3. Ячейки фиксированного смещения..............17 3.4. Подпрограммы завершения.....................21 4. ОБРАЩЕНИЕ К МОНИТОРУ, ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ..22 4.1. Программные запросы.........................22 5. СООБЩЕНИЯ........................................81 ПРИЛОЖЕНИЕ 1........................................94 ПРИЛОЖЕНИЕ 2........................................97 ДОПОЛНЕНИЯ..........................................99 - 4 - Ядром операционной системы RT11 является монитор. В зависимости от конструкции технических средств и потребностей пользователь может использовать один из пяти мониторов RT11: RM - исполняющий монитор реального времени, резидентный в памяти; SJ(CD) - однозадачный монитор реального времени; FB - фоново-операти- вный монитор реального времени, обслуживающий две (до 8) задачи на комплексах с памятью до 56K; XM - монитор управления памятью до 248 K для не более 8 задач реального времени; TS - многопользовательский монитор разделения времени для комплексов с памятью 96 - 248 K, обслу живающий до 30 задач. 1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ. Монитор RT11 предназначен для управления работой операционной системы и обеспечивает выполнение следующих функций: - обработка прерываний; - обработка ошибок; - связь с оператором; - обслуживание программных запросов; - управление файлами; - обеспечение одновременного выполнения двух задач пользователя (для монитора SJ - одной задачи); - обслуживание таймера. Условия применения монитора RT11 аналогичны условиям при- менения операционной системы в целом ( документ "Операционная система ФОДОС. Общее описание"). Примечание. Для работы монитора системы необходимо наличие на системном томе файла свопинга SWAP.SYS. Для мониторов: FB,XM - 26 блоков CD,DS - 2 блока при SET USR NOSWAP SJ - 24 блока - 5 - 2. СТРУКТУРА ИНФОРМАЦИИ НА НОСИТЕЛЯХ. 2.1. Структура системного тома. Системный том RT11 содержит все компоненты системы -загрузчик системы, монитор, драйверы устройств, системные и вспомагательные программы. Структура системного тома предусматривает запись перечис- ленных компонентов по блокам: Блок: Содержимое: 0 Начало загрузчика системы 1 Идентификация тома 2-5 Продолжение загрузчика системы 6-(Nx2) + 5 Каталог тома, N - число сегментов каталога (Nx2) + 6 - до конца Файлы Примечание: 1блок=256. слов=512. байт. 1сегмент каталога=2блока. На дисках DX, MX каталог=1сегмент. На дисках двойной плотности, винчестере - каталог больше. 2.1.1. Виды файлов. RT11 использует "соприкасающуюся" структуру файлов. Такая структура означает, что каждый файл на томе составляет группу смежных физических блоков (т.е. файл длиной в 9 блоков занимает 9 смежных блоков на томе). Различают следующие виды файлов: > постоянный файл-файл,который был открыт по .ENTER,а затем закрыт по .CLOSE;файлы,включенные в листинг каталога тома,являются постоянными > временный файл-файл, который был открыт по .ENTER, но не закрыт по .CLOSЕ; если выполнен запрос .CLOSE, временный файл становится постоянным, при этом, если на томе уже существует постоянный файл с тем же именем,то он стирается; если запрос.CLOSE не используется, то временный файл рассматривается как пустой файл; временный файл стирается,если создается новый временный файл с тем же именем; > пустой файл; т.е. область диска не используется.В листинге каталога он определен как N {неиспользуемый}, где N-длина свободной области в блоках. - 6 - 2.1.2. Структура каталога тома. Каталог тома любого устройства справочной структуры состоит из сегментов и начинается с 6-го блока тома. Длина каталога может изменяться от 1. до 31. сегмента ( устанавливается при инициализации тома). Каждый сегмент занимает два блока (512. слов) и состоит из заголовка сегмента и записей каталога. 2.1.2.1. Формат заголовка сегмента. Заголовок сегмента находится в начале сегмента и занимает первые пять слов: 1 Число сегментов справочника (1<= N <=31.) 2 Номер сегмента, логически связанного с данным. Если 0, в справочнике нет сегментов, логически связанных с данным. 3 Номер последнего открытого сегмента (возрастает при фор- мировании нового сегмента). Это слово используется только в первом сегменте 4 Число дополнительных байтов в записи справочника 5 Номер блока тома, с которого начинаются файлы, описанные в этом сегменте Примечание: в системе RT11 при непрерывной (без стирания) за- писи файлов на том и заполнении сегмента каталога, осуществляется перезапись примерно половины файлов в свободный ( если он есть) сегмент каталога. В результате между сегментами устанавливается логи- ческая связь, которая отражается во втором слове заголовка сегмента и используется монитором для поиска файлов на томе. Логически связан- ные сегменты не обязательно являются физически смежными на томе. - 7 - 2.1.2.2. Формат записи каталога. Запись каталога представляет собой основную его структурную единицу и содержит информацию о файле, хранящемся на данном томе. Структура записи: слово: 0 слово состояния 1 имя файла RADIX-50 2 имя файла RADIX-50 3 тип файла (расширение) RADIX-50 4 длина файла 5 номер задания/номер канала 6 дата (начало счисления=1 января 1972 г.) * * дополнительные слова * Нечетный байт слова состояния: RAD50: 1 временный файл / FP/ 2 свободная область / L2/ 4 постоянный файл / YX/ 10 конец сегмента /AKH/ 204 защищенный (PROTECTED) файл /UD2/ Четный байт слова состояния - резервный. Имя и тип файла-последовательность символов RADIX-50 ( кроме пробела, табуляции, знака $). Длина файла равна числу занимаемых им блоков. Попытки чтения/записи за пределами файла вызовут ошибку.Номер задания и номер канала устанавливаются только для временных файлов: При работе с монитором SJ четный байт содержит номер канала, на котором открыт данный файл.При выполнении запроса .CLOSE указанный номер канала позволяет однозначно определить искомый временный файл; При работе с монитором FB четный байт содержит номер канала, нечетный байт - номер задания, открывшего данный файл. При выполнении запроса .CLOSE однозначное определение искомого временного файла обес печивается номером задания, т.к. задания могут иметь временные файлы на своих каналах, имеющих одинаковые номера. - 8 - Дата создания файла заносится при выполнении запроса .ENTER: 15 14 10 9 5 4 0 +--+------+------+--------+ | |месяц |день |год-117 | +--+------+------+--------+ Формат даты: 15-й разряд не используется. Месяцы нумеруются от 1 до 12, дни - от 1 до 31. в RAD50 /ED2/ высвечивается как -BAD- Запись справочника имеет длину 7 слов. Однако,пользователь может разместить дополнительные слова в записи справочника при инициализации тома. RT11 не обслуживает дополнительные слова в записи справочника, поэтому пользователь должен предусмотреть доступ к ним. 2.1.2.3. Число файлов тома. Число файлов,которые можно записать на томе зависит от числа сегментов каталога тома и числа дополнительных слов в записи каталога. Общее число записей в каталоге определяется выражением: 31*[(512-5)/(7+N)] где N - число дополнительных слов в записи. Если N=0, общее число записей в каталоге ( файлов на томе ) 2232. . При размещении дополнительных слов в записи каталога число файлов, хранящихся на томе, уменьшается.1 сегмент содержит до 145.фай лов. 2.2. Структура тома магнитной ленты. RT11 использует магнитную ленту, структура которой предусмат- ривает идентификацию данных с помощью различных маркеров и меток. Каждый файл на магнитной ленте записывается по блокам длиной 256. слов и имеет следующий формат: - 9 - HDRn* --- данные ---* EOFn* где HDR -идентификатор метки начала файла; EOF -идентификатор метки конца файла; n -номер метки; * -ленточная марка. Том,содержащий один файл,имеет формат: VOL1 HDR1 * --- данные --- * EOF1 ** где VOL1 - идентификатор метки тома с номером 1. Том,содержащий два файла,имеет формат: VOL1NDR1* - - данные - - *EOF1*NDR2* - - данные - - *EOF2** Две ленточные марки, следующие за меткой конца файла, указывают логический конец ленты, обозначаемый LEOT. Лента, на которой не записаны файлы данных имеет следующий формат: VOL1** Каждая метка VOLn, HDRn или EOFn занимает полный блок длиной 256. слов, в котором используются первые 80 байтов. Идентификатор и номер метки записываются по байтам в кодах КОИ-7. Блок метки тома содержит идентификацию тома, блок метки начала файла HDRn - имя файла, порядковый номер файла на ленте, дату создания и код системы. Блок метки конца файла EOFn построен аналогично блоку HDRn. Кроме характеристик блока HDRn , указанных выше, блок EOFn содержит десятичное число блоков в данном файле в кодах КОИ-7. Магнитная лента,содержащая в начале тома начальный загрузчик, имеет следующий формат: VOL1 BOOT HDR1* - - данные - - *EOF1* ...* , где BOOT - блок длиной 256. слов, содержащий начальный загрузчик. 2.3. Организация ввода-вывода. Управление операциями ввода-вывода в системе RT11 осуществля- ется монитором с помощью драйверов устройств. Драйверы устройств являются резидентными на системном устрой- стве и загружаются в оперативную память по запросу из программы поль- зователя или по команде KMON. - 10 - Все запросы на ввод-вывод данных интерпретируются монитором и адресуются драйверу соответствующего устройства. Если запрос не может быть удовлетворен по каким-либо причинам, он автоматически ставится в очередь. 2.3.1. Элемент очереди ввода-вывода. Очередь ввода-вывода состоит из связанных элементов по 7 (SJ/ FB-мониторы) или 10 (XM/TS) слов каждый. Элемент очереди формируется монитором при поступлении запросов на ввод-вывод и используется драй- вером устройства для выполнения операции. Структура элемента очереди: +-----------------------------------------------+ | Адрес следующего элемента очереди | | Адрес слова состояния канала | | Номер начального блока файла | | на томе | |-------+-----------------------+---------------| | Номер | Номер привода | Код | |задания| устройства | функции | |-------+-----------------------+---------------| | Адрес буфера памяти | | Счетчик слов | | Функция завершения | +-----------------------------------------------+ 1-е слово элемента очереди - адрес следующего элемента очере- ди,если он есть (иначе - 0). 2-е слово - адрес слова состояния канала,на котором осуществ- ляется операция ввода-вывода. 3-е слово -номер начального блока файла на томе для устройств файловой структуры (иначе - 0). 4-е слово:разряды 0-7 - код функции,которую необходимо выпол- нить; разряды 8-10 - номер привода устройства, на котором выполняется операция;разряды 11-13 - номер задания:0 -фоновое, 2 - основное. 5-е слово - адрес буфера оперативной памяти для запрашиваемой операции. 6-е слово - счетчик слов; <0 для операции записи, >0 для чте- ния и 0 - для поиска файла на томе. - 11 - 7-е слово - адрес подпрограммы завершения: 0 - синхронный режим ввода-вывода, управление - задаче после завершения операции; 1 - модифицированный синхронный режим ввода-вывода,управление возвращается задаче после запуска операции; Четный адрес - адрес подпрограммы завершения для асинхронного режима ввода-вывода. (в угловых скобках-мнемоники и соотв. смещения, определяемые макроко- мандой .QELDF; смещения, содержащие в имени точку-относительно начала элемента очереди, содержащие "$" -относительно третьего слова). Для XM/TS мониторов Q.PAR=16; Q$PAR=12 содержит значение, записываемое в PAR1(XM-монитор) или PAR6(TS-монитор) для получения доступа через Q.BUFF к данным в буфере программы;PAR-один из регистров адреса стра- ницы диспетчера памяти; длина элемента очереди в байтах Q.ELNG=16 для SJ/FB мониторов, Q.ELNG=24-для XM/TS. В системе RT11 предусмотрена очередь ввода-вывода из одного элемента ( в режиме FB для каждого задания - свой элемент очереди ). Этого достаточно для работы в режиме синхронного выполнения операций ввода-вывода.Для работы в других режимах пользователь должен предусмотреть в своей программе создание дополнительных элементов по запросу .QSET . 3. ХАРАКТЕРИСТИКИ МОНИТОРА. Монитор системы RT11 имеет модульную структуру и включает сле дующие программные компоненты: - Резидентный монотор RMON; - Клавиатурный монотор KMON; - Программу обслуживания пользователя USR и Интерпретатор ко- мандной строки CSI; - Драйверы устройств. Работа RT11 под управлением монитора SJ обеспечивает выполне- ние одной программы пользователя, под управлением мониторов FB и XM обеспечивает одновременное выполнение двух независимых программ, и кроме того, в режиме XM обеспечивает доступ к памяти объемом до 124 К слов. - 12 - 3.1. Особые области памяти RT11. Область памяти для векторов прерывания и некоторые ячейки RMON являются особыми для функционирования операционной системы. Одни ячейки в этих областях могут использоваться программами пользователя, другие использовать запрещается. 3.1.1. Адреса векторов прерывания. Ячейки памяти от 0 до 476 используются операционной системой и программы пользователя не должны изменять содержимого этих ячеек. В противном случае система должна быть перезагружена,или программа дол- жна восстановить первоначальное содержимое этих ячеек. В таблице перечислены адреса векторов прерывания и типы прерываний: +---------------------------------------------------------------+ |Вектор | Тип прерывания | | 4,6 | Прерывание по ошибке обращения к каналу.В процессоре | | | BM3 обращение к слову по нечетному адресу | | 10,12 | Прерывание по резервной команде | | 30,32 | Прерывание по команде EMT | | 34,36 | Прерывание по команде TRAP | | 60,62 | Прерывание от клавиатуры терминала | | 64,66 | Прерывание от печати терминала | |100,102| Прерывание от таймера | |134,136| Прерывание от платы CDR | |200,202| Прерывание от принтера | |220,222| Прерывание от дисков на базе СМ-5400 | |224,226| Прерывание от магнитной ленты на базе ИЗОТ 5003 | |250,252| Прерывание от Диспетчепра памяти | |254,256| Прерывание от дисков DP (29 Мбайт) | |264,266| Прерывание от гибких дисков | | 70,72 | ФС | | 74,76 | ПЛ | +---------------------------------------------------------------+ Перезапуск монитора осуществляется с 0-го адреса. - 13 - 3.1.2. Область связей системы. Для хранения информации о выполняющейся программе,а также ин- формации,используемой только монитором,система использует байты 40-57 SET USR NOSWAP SET USR SWAP -------------- ----------------- KMON KMON -------------- ----------------- RMON RMON @#54-> -------------- @#54-> ----------------- драйверы драйверы -------------- ----------------- USR 266(@#54)-> -------------- .............. 1000 -------------- 1000-> ----------------- векторы, стек и т.п. 0 -------------- 0 ----------------- Системная область связи: Байт Назначение и использование 40,41 Пусковой адрес программы. При создании файлов в форматах .SAV и .REL, Редактор связей записывает в это слово пусковой адрес программы. 42,43 Первоначальный адрес стека. По умолчанию равен 1000 44,45 Слово состояния задания. Одни разряды устанавливаются монито- ром, другие могут устанавливаться или очищаться программой пользователя. 46,47 Адрес загрузки USR. Это слово может содержать любой действите льный адрес программы пользователя. Если 0, то USR загружает- ся по адресу,записанному в ячейке фиксированного смещения 266 RMON - 14 - 50,51 Адрес верхней границы памяти для программы.В этом слове мони- тор содержит наивысший адрес,который может использовать прог- рамма пользователя. Адрес верхней границы может модифицирова- ться с помощью запроса .SETTOP 52 Код ошибки EMT. Eсли при выполнении программного запроса про- исходит ошибка, то устанавливается С - разряд и код ошибки записывается в байт 52 53 Код ошибки программы пользователя USERRB. Используется при работе с косвенными файлами. Если в процессе выполнения прог- рамма пользователя обнаружит условия ошибки, она может сооб- щить об этом, используя байт 53. KMON проверяет этот байт по окончании работы программы. При возникновении ошибки, KMON может аннулировать использующийся косвенный файл. Это предот- вращает от получения неправильных результатов, которые могут возникнуть,если выполнение команд косвенного файла зависит от успешного завершения предыдущих команд. Программа может прек- ратить свою работу в одном из следующих состояний: - нормально ; - предупреждение ; - ошибка ; - фатальная ошибка . Состояние программы считается "нормально", если при ее выпол- нении не возникает ошибок. Состояние "предупреждение" указыва ет на то,что имело место предупреждающее сообщение и выполне- ние программы завершилось до конца. Состояние "ошибка" указы- вает на то, что произошла ошибка и выполнение программы не завершилось.Такое состояние используется,если программа созда ет выходной файл, содержащий ошибки. Состояние "фатальная ошибка" указывает на то, что программа не создала выходные данные и все команды или операции, зависящие от данных, будут выполнены неправильно.Такая ошибка может возникнуть в случае, если для завершения выполнения программы недостаточно памяти. - 15 - 54,55 Начальный адрес Резидентного монитора.Это слово не должно из- меняться пользователем. Разряд Назначение @#44 ------------------------------------------------------------- 15 Разряд свопинга USR (только в режиме SJ). Moнитор ус- танавливает этот разряд,если программа не требует сво пинга USR TT$LC 14* Разряд нижнего регистра. Когда разряд установлен, то запрещается автоматическое преобразование кодов сим- волов нижнего регистра в коды верхнего регистра 13* Разряд перезапуска. Если разряд установлен, программа может быть перезапущена по команде REENTER TT$SPC 12* Разряд специального режима работы с терминалом. Если этот разряд установлен,он указывает на то,что програм ма находится в специальном клавиатурном режиме 11* Разряд передачи строки KMON. Если разряд установлен и выполнение программы пользователя заканчивается по .EXIT , то KMON осуществляет выборку команды из ячеек 500 - 776 10* Разряд виртуального отображения ( только в режиме XM) 9 Оверлейный разряд. Устанавливается Редактором связей, если программа имеет оверлейную структуру 8 Разряд CHAIN.Этот разряд устанавливатся в том случае, если программа была загружена по запросу CHAIN 7* Разряд останова по ошибке (только в режиме SJ). Если установлен,то в случае ошибки в операции ввода-вывода произойдет останов системы 6* Разряд запрещения состояния ожидания терминала.Исполь зуется в режиме FB 5-3 Резервируются для системных целей. 2-0 Резервные для системы. Примечание: Разряды, отмеченные в таблице звездочкой, устанавливаются программой пользователя. - 16 - Разряд Значение @#53 ------------------------------------------------------------- 7-4 Резервные. Не должны использоваться программой поль- зователя. 3 Фатальная ошибка 2 Ошибка 1 Предупреждение 0 Нормально 3.2. Алгоритм свопинга. Программные запросы в зависимости от того, требуют они нали- чия USR в памяти или нет, делятся на 2 категории. Запрос,который тре- бует наличия USR в памяти, может также потребовать, чтобы часть про- граммы пользователя временно удалялась из памяти и запоминалась на диске. В этом случае USR загружается в освободившуюся область. В ре- жиме XM не требуется свопинг USR, т.к. USR является резидентной. При работе с RT11 необходимо помнить следующее: 1) если в фоновой программе запрос .SETTOP запрашивает вер- хний адрес программе выше начального адреса USR, то при обращении к USR требуется свопинг; 2) если пользователь меняет содержимое @#46, то RT11 исполь- зует содержимое этого слова в процессе свопинга для USR; если содер- жимое ячейки 46 нулевое, USR загружается с адреса установленного системой. Если свопинг не нужен, содержимое ячейки 46 игнорируется. Основное задание всегда должно иметь адрес в ячейке 46, независимо от того, осуществляется или нет свопинг USR. Указывая адрес в ячейке 46, нужно соблюдать осторожность: поскольку монитор SJ не проверяет допу- стимость адреса для свопинга USR, то при свопинге может произойти наложение областей памяти, используемых для свопинга USR и RMON. Это приводит к нарушению нормального функционирования системы. - 17 - 4. Не допускается определять адрес для свопинга USR в преде- лах следующих областей: стека программы, блока аргументов для вызова USR, буферов ввода-вывода, драйверов устройств или подпрограмм завер- шения,использующихся при вызове USR. 3.3. Ячейки фиксированного смещения Существует ряд ячеек, которые имееют фиксированное положение относительно начала Резидентного монитора. Информация в этих ячейках может быть использована программами пользователя: Смещение Содержимое --------------------------------------------------------------------- 266 Адрес загрузки USR ( если ячейка 46 содержит 0 ) 270 Адрес подпрограммы монитора управления очередью вво- да-вывода. Обращение к подпрограмме осуществляется из драйверов устройств по окончании операции ввода-выво- да 272 SPUSR:: 274 Номер привода системного устройства (устройства,с ко- торого последний раз была загружена система) 276 Номер версии монитора 300 Слово конфигурации системы. Разряды слова несут инфо- рмацию об аппаратной конфигурации системы и ее прог- раммных компонентах. 302 SCROLL:: 304 Адрес регистра состояния клавиатуры терминала 306 Адрес регистра буфера клавиатуры терминала 310 Адрес регистра состояния печати терминала 312 Адрес регистра буфера печати терминала - 18 - 314 Максимально допустимая длина файла (предоставляемая системой,если соответствующий аргумент запроса .ENTER равен нулю). Она может быть установлена программой пользователя или с помощью программы PATCH. Значение по умолчанию равно 177777 316 E16LST::.WORD LST16-$RMON 324 Адрес подпрограммы обработки запроса .SYNCH. Подпрог- раммы пользователя обработки прерываний могут исполь- зовать его для синхронизации с заданиями, которые они обслуживают 326-350 карта загрузки 352 USRLOC:: 354 GTVECT:: вектор графтерминала 356 счетчик ошибок 360 Адрес подпрограммы записи в слово состояния процессо- ра (PSW). Вызов этой подпрограммы осуществляется по запросу .MTPS 362 Адрес подпрограммв выборки из PSW. Этот адрес исполь- зуется запросом .MFPS 364 SYINDX:: 366 Слово состояния косвенного файла 370 Слово расширенной конфигурации.Это слово содержит ин- формацию о дополнительном оборудовании 372 Слово параметров генерации. Содержит информацию о до- полнительных возможностях системы 374 Размер USR в байтах - 19 - 377 Глубина вложения косвенных файлов (значение по умол- чанию равно 3). Значение может быть модифицировано для изменения глубины вложения косвенных файлов 376 Байт уровня ошибки 400 .WORD EMTDON-$RMON 402 .WORD $FORK-$RMON 404 .WORD $PNAME-$RMON 406,410,412 имя монитора в RAD50 414 416 417 420 размер ОЗУ 424 Ячейки 304-313 содержат адреса регистров терминала и не используются в мультитерминальном режиме. - 20 - Слово конфигурации системы: Разряд Значение --------------------------------------------------------------------- 0 0 - монитор SJ; 1 - монитор FB, если разряд 12 не ус- тановлен; если установлен - монитор XM 3 1 - фоновым заданием управляет BATCH 5 1 - таймер с частотой 50 Гц 6 1 - Процессор плавающей запятой ЭВМ "Электроника-79" 7 0 - основного задания в памяти нет 1 - основное задание в памяти 9 1 - USR является резидентной по SET USR NOSWAP 11 1 - процессор "Электроника 60" 12 1 - система работает под управлением монитора XM 13,14 используются системой 15 1 - имеется таймер Слово расширенной конфигурации: Разряд Значение --------------------------------------------------------------------- 0 1 - сверхбыстрая память (КЭШ - память) 1 1 - паритетность 8 1 - блок расширенной арифметики ЭВМ "Электроника-60М" 14 1 - процессор ЭВМ "Электроника 79" - 21 - Слово параметров генерации: Разряд Значение --------------------------------------------------------------------- 0 1 - регистрация ошибок 1 1 - обслуживание расширенной памяти 2 1 - обслуживание ожидания готовности устройств 9 1 - обслуживание паритетности 10 1 - обслуживание запросов .MRKT и .CMKT монитора SJ 13 1 - мультитерминальное обслуживание 3.4. Подпрограммы завершения. Подпрограммы завершения создаются пользователем и запускают- ся сразу же после окончания некоторых внешних операций. Управление подпрограмме завершения передается после операции ввода-вывода данных или через определенный интервал времени. На входе в подпрограмму за- вершения R0 содержит слово состояния канала для операции, а R1 -вось- меричный номер канала для операции. В режиме SJ подпрограммы заверше- ния являются асинхронными и могут прерывать друг друга. В режимах FB и XM подпрограммы завершения не прерывают друг друга, а организуются в очередь и ждут окончания выполнения соответствующего задания. При создании подпрограмм завершения необходимо соблюдать сле- дующие правила: 1) в подпрограммах завершения нельзя использовать запросы, требующие USR ; 2) подпрограммы завершения не должны находиться в области памяти, которая используется для USR ; 3) выход из подпрограммы завершения - по RTS PC ; 4) если подпрограмма завершения использует регистры кроме R0 и R1, она должна запомнить их содержимое после входа в подпрограмму и восстановить их перед выходом. - 22 - 4.ОБРАЩЕНИЕ К МОНИТОРУ.ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ. Обращение к монитору RT11 осуществляется по командам KMON, вводимых с системного терминала, и через программные запросы.В данном разделе описан формат и назначение всех программных запросов операци- онной системы. Обслуживание программных запросов, помеченных в доку- менте, как вариант SJ (FB,XM), не реализовано в данной версии RT11. 4.1. Программные запросы. Программные запросы представляют собой ассемблерные макроко- манды, которые обрабатываются монитором во время выполнения программы Основа программного запроса - команда EMT. Она используется для пере- дачи информации монитору на выполнение определенной операции.Все про- граммные запросы начинаются символом "." Существуют два формата программных запросов: 1. .PRGREQ area, arg1,...,argn 2. .PRGREQ arg1, arg2,...,argn В первом формате аргумент area является указателем блока ар- гументов arg1,...,argn. Программные запросы такого формата вызывают генерацию команды EMT 375. Если аргумент area в макрокоманде не ука- зан, в качества указателя блока аргументов используется регистр R0. Программные запросы второго формата вызывают генерацию ко- манды EMT 374 или одной из команд EMT 340-357. Все аргументы программных запросов служат в качестве источ- ника команды MOV. Например, .PRGREQ транслируется,как MOV CHAR,R0 EMT 374 Пример записи программного запроса: .GTLIN #LINE,#PROMPT . . . PROMPT: .ASCIZ /Введите строку>/<200> .EVEN LINE: .BLKB 81. .EVEN - 23 - При выполнении запроса содержимое регистров, кроме R0, не из- меняется и указатель стека, за исключением запросов CSI, не переуста- навливается. 4.1.1. Аргументы программных запросов. Аргументы программных запросов являются входными данными для монитора RT11. 4.1.1.1. Номер канала. Номер канала (chan) представляет собой логический идентифика- тор файла и используется монитором при выполнении операций. Номер канала может быть от 0 до 255. (0-377). Каждый открытый файл монитор логически связывает с определен- ным каналом.Для обращения к файлу достаточно указать номер его канала 4.1.1.2. Блок устройства. Блок устройства (dblk) представляет собой блок информации в кодах Radix-50, который содержит имя устройства, имя и тип файла.Дли- на блока - 4 слова. Пример: .RAD50 /MY0/ .RAD50 /FIL/ .RAD50 /E / .RAD50 /TYP/ Имя устройства,имя и тип файла должны быть левоопределенными в каждом поле операнда (т.е. непосредственно следовать за ограничите- лем операнда директивы .RAD50 ). Допускается запись блока устройства .RAD50 /DK FILE TYP/ При этом каждое поле операнда отделяется друг от друга пробелом. - 24 - Аргументы программных запросов: Обозначение Аргумент --------------------------------------------------------------------- addr Адрес; значение зависит от используемого запроса area Адрес блока аргументов EMT blk Номер блока относительно начала файла,с которого должна выполняться операция ввода-вывода buf Адрес буфера памяти cblk Адрес блока из пяти слов, в котором хранится информа- ция о состоянии канала chan Номер канала crtn Точка входа подпрограммы завершения dblk Адрес блока устройства num Число, зависит от используемого запроса wcnt Счетчик слов seqn Последовательный номер файла для операций с магнитной лентой 4.1.1.3. Блок аргументов EMT. Четный байт 1-го слова содержит номер канала,определенный в макрокоманде. Если номер канала не требуется, то четный байт содержит 0.Нечетный байт 1-го слова блока содержит функциональный код макроко- манды. Остальные слова блока содержат аргументы,определенные в макро- команде: ------------------------- area: Функциональный | Номер код | канала ------------------------- 1-й аргумент ------------------------- 2-й аргумент ------------------------- . . . ------------------------- n-ый аргумент ------------------------- - 25 - 4.1.2. Сообщения об ошибках. При обработке запросов, монитор может обнаружить ошибки. Программные запросы информируют об этом пользователя, используя бит C байт ошибок (@#52) и сообщения монитора. Бит C очищается после выпол- нения запроса и устанавливается при ошибке. Для обнаружения ошибки за запросом должна следовать команда BCS или BCC. Когда установлен бит C байт ошибок содержит код ошибки. В Приложении перечислены коды ошибок программных запросов и причины,вызывающие эти ошибки. 4.1.3. Типы программных запросов. Существуют три типа программных запросов: > запросы для операций с файлами; > запросы для организации ввода-вывода данных; > запросы общего назначения. Запросы использующиеся только в режиме FB помечены звездочкой только в XM помечены двумя звездочками - игнорируются в режиме SJ. В программе пользователя достаточно указать первые шесть символов имени программного запроса. Программный Код Функ- Назначение запрос EMT цион. код --------------------------------------------------------------------- .CHCOPY * 375 13 Открывает канал для ввода и логически связыва ет его с открытым каналом другого задания .CLOSE 374 6 Закрывает канал и освобождает его для исполь- зования в других операциях .DELETE 375 0 Стирает файл с тома указанного устройства .ENTER 375 2 Резервирует обдасть на томе указанного устрой ства для создания нового файла .LOOKUP 375 1 Открывает существующий файл для ввода и/или вывода на указанном канале - 26 - .PURGE 374 3 Освобождает канал .RENAME 375 4 Переименовывает файл. Недопустим в операциях с магнитной лентой .REOPEN 375 6 Обеспечивает восстановление параметров, кото- рые запоминались по запросу .SAVESTATUS и повторно открывает канал для ввода-вывода .SAVESTATUS 375 5 Запоминает параметры состояния открытого фай- ла в памяти и освобождает канал .READ 375 10 Передает данные по указанному каналу в буфер памяти и возвращает управление программе поль зователя, как только запрос на чтение данных будет поставлен в очередь ввода-вывода .READC 375 10 Передает данные по указанному каналу в буфер памяти и возвращает управление программе поль зователя, как только запрос на чтение данных будет поставлен в очередь ввода-вывода. После окончания чтения, управление передается подп- рограмме завершения .READW 375 10 Передает данные по указанному уканалу в буфер памяти и возвращает управление программе поль зователя после окончания операции .WRITE 375 11 Передает данные по указанному каналу на уст- ройство и возвращает управление программе пользователя, как только запрос на передачу данных будет поставлен в очередь вода-вывода .WRITC 375 11 Передает данные по указанному каналу на уст- ройство и возвращает управление программе пользователя, как только запрос на передачу данных будет поставлен в очередь ввода-вывода После окончания записи, управление передается подпрограмме завершения - 27 - .WRITW 375 11 Передает данные по указанному каналу на уст- ройство и возвращает управление программе пользователя после окончания передачи данных .RCVD * Принимает сообщения или данные, передаваемые .RCVDC * 375 26 другой программой. Аналогичны запросам .RCVDW * .READ , .READC , .READW .SDAT * 375 25 Передает сообщения или данные другой програм- .SDATC * ме. Аналогичны запросам .SDATW * .WRITE , .WRITC , .WRITW .TTYIN 340 - Передает один символ из буфера терминала в R0 .TTINR .TTYOUT 341 - Передает один символ из R0 в буфер терминала .TTOUTR .PRINT 351 - Выдает на печать строку символов КОИ-7 .MTIN * 374 37 В мультитерминальном режиме аналогично .TTYIN .MTOUT * 374 37 В мультитерминальном режиме аналогично .TTYOU .MTPRNT * 374 37 В мультитерминальном режиме аналогично .PRINT .SPFUN * 375 32 Выполняет специальные функции для магнитных лент и гибких дисков .CDFN 375 15 Определяет дополнительные каналы для операций ввода-вывода .CHAIN 374 10 Передает управление другой фоновой программе .CRAW ** 374 36 Создает окно виртуального адреса .CRRG ** 374 36 Создает динамическую область физическ. памяти .CMKT 375 23 Аннулирует один или несколько запросов .MRKT - 28 - .CNTXSW * 375 33 Определяет ячейки памяти для операции переклю чения контекста .CSIGEN 344 - Вызывает работу Интерпретатора командной стро ки в общем режиме .CSISPC 345 - Вызывает работу Интерпретатора командной стро ки в специальном режиме .CSTAT * 375 27 Позволяет получить информацию о состоянии канала .DATE 374 12 Пересылает текущую дату в регистр R0 .DEVICE * 375 14 Позволяет запретить прерывание от устройства в режиме FB после окончания выполнения прог- раммы .DSTATUS 342 - Позволяет получить информацию о состоянии устройства .ELAW ** 374 36 Аннулирует окно виртуального адреса .ELRG ** 374 36 Аннулирует динамическую область физической па мяти и делает ее свободной для использования другим заданием .EXIT 350 - Завершает выполнение программы пользователя и передает управление Клавиатурному монитору .FETCH 343 - Загружает драйвер устройства .GMCX ** 374 36 Пересылает программе информацию о состоянии окна .GTIM 375 21 Определяет текущее время дня .GTJB 375 20 Определяет параметры выполняемого задания .GTLIN 345 - Принимает входную строку с терминала или из косвенного файла - 29 - .GVAL 376 34 Пересылает в R0 содержимое указанной ячейки монитора .HERR 374 5 Отменяет действие запроса .SERR .HRESET 357 - Прекращает все операции ввода-вывода и выпол- няет функции запроса .SRESET .INTEN - - Сообщает монитору о том,что произошло преры- вание от устройства и устанавливает приоритет процессора на соответствующий уровень .LOCK 346 - Делает программу USR резидентной в памяти до тех пор, пока не будет выполнен .EXIT или .UNLOCK . Если необходимо,свопирует программу пользователя .MAP** 374 36 Отображает предварительно созданное окно вир- туального адреса .MFPS - - Выбирает содержимое PSW .MRKT 375 22 Планирует запуск подпрограммы завершения че- рез определенный интервал времени .MTATCH* 374 37 Устанавливает связь между заданием и опреде- ленным терминалом .MTDTCH* 374 37 Прерывает связь указанного терминала с зада- нием и освобождает его для использования дру- гим заданием .MTSET* 374 37 Устанавливает и модифицирует характеристики терминала в мультитерминальном режиме .MTGET* 374 37 Определяет состояние указанного терминала .MTPS - Устанавливает PSW - 30 - .MTRCTO* 374 37 Обеспечивает вывод на указанный терминал .MWAIT* 374 11 Переводит текущее задание в состояние ожи- дания до завершения передачи данных .PROTECT* 375 31 Закрепляет один из векторов (адреса от 0 до 476) за данным заданием .QSET 353 - Устанавливает размер очереди ввода -вывода для монитора .RCTRLO 355 - Обеспечивает вывод на терминал .RELEAS 343 - Удаляет драйвер устройства из памяти .RSUM* 374 2 Возобновляет выполнение задания, которое было прервано по запросу .SPND .SCCA 374 35 Позволяет блокировать выполнение команды СУ/С .SERR 374 4 Блокирует прерывание программы при обнаруже- нии монитором условий ошибок .SETTOP 354 - Определяет верхнюю границу памяти для выпол- няемого задания .SFPA 375 30 Устанавливает в программе пользователя адрес подпрограммы обработки прерывания от блока плавающей запятой (БПЗ) .SPND* 374 1 Приостанавливает выполнение задания .SRESET 352 - Восстанавливает каналы ввода -вывода и удаля- ет драйверы устройств из памяти .SYNCH - - Обеспечивает возможность выполнения програм- мных запросов в подпрограмме обработки преры- вания - 31 - .TLOCK 374 7 Определяет, используется ли USR в данный мо- мент другим заданием. Если USR не использует- ся, то выполняется .LOCK .TRPSET 375 3 Устанавливает обработку прерываний по 4-ому или 10-ому векторам в программе пользователя .TWAIT* 375 24 Приостанавливает выполнение задания на ука- занный интервал времени .UNLOCK 347 - Освобождает программу USR, если ранее не был выполнен запрос .LOCK и,если необходимо,вновь загружает программу пользователя .UNMAP** 374 36 Отменяет действие запроса .MAP .UNPROTECT 374 31 Отменяет действие запроса .PROTECT .WAIT 374 0 Ожидает завершения операции ввода-вывода на указанном канале Для выполнения некоторых программных запросов необходимо,что- бы программа монитора USR находилась в оперативной памяти. .CLOSE на устройствах нефайловой структуры (LP: ,TT: ,PC: , и т.д.) не тре- бует наличия USR в памяти. Программа USR не является реентерабельной; если USR использу- ется одним заданием (в режиме FB), другое задание,требующее USR,будет ждать его освобождения. - 32 - Программный Требование USR запрос -------------------------------------------- Режим SJ Режим FB Режим XM -------------------------------------------------------------------- .CDFN да* нет нет .CHAIN нет нет нет .CHCOPY - нет нет .CLOSE 1) да да да .CMKT - нет нет .CNTXSW - нет нет .CSIGEN да да да .CSISPC да да да .CSTAT - нет нет .DATE нет нет нет .DELETE да да да .DEVICE - нет нет .DSTATUS да да да .ENTER да да да .EXIT да да да .FETCH/.RELEAS да да да .SFPA нет нет нет .GTIM нет нет нет .GTJB - нет нет .GTLIN да* да да .GVAL нет нет нет .HERR/.SERR нет нет нет .HRESET да* нет нет .LOCK 2) да да да .LOOKUP да да да .MRKT - нет нет .MTGET - нет нет .MTIN - нет нет .MTOUT - нет нет .MTPRNT - нет нет .MTSET - нет нет .MWAIT - нет нет .PRINT нет нет нет - 33 - .PROTECT - нет нет .PURGE нет нет нет .QSET да* да* да* .RCTRLO нет нет нет .RCVD/.RCVDC/.RCVDW - нет нет .READ/.READC/.READW нет нет нет .RENAME да да да .REOPEN нет нет нет .RSUM/.SPND - нет нет .SAVESTATUS нет нет нет .SDAT/.SDATC/.SDATW - нет нет .SCCA нет нет нет .SETTOP нет нет нет .SPFUN нет нет нет .SRESET да* нет нет .TLOCK 3) да да да .TRPSET нет нет нет .TTIRN/.TTYIN нет нет нет .TTOUTR/.TTYOUT нет нет нет .TWAIT - нет нет .UNLOCK нет нет нет .UNPROTECT - нет нет .WAIT нет нет нет .WRITE/.WRITC/.WRITW нет нет нет 1) если канал был открыт по .ENTER 2) если USR находится в состоянии свопинга. 3) если USR не используется другим заданием. Запосы,помеченные в табл.14 звездочкой,всегда требуют загруз- ки новой копии USR перед их выполнением (даже, если USR в этот момент находится в памяти). Прочерк в графе табл.14 означает, что запрос не используется в данном режиме. - 34 - 4.1.4. Программные запросы для операций с файлами 4.1.4.1. .CHCOPY (режим FB) Запрос .CHCOPY открывает канал для ввода данных и логически связывает его с файлом другого задания открытым для ввода или вывода. Запрос может использоваться как основной так и фоновой программами. Запрос .CHCOPY допустим только для файлов, которые находятся на дис- ках; одноко система не обнаружит ошибки, если используется другое ус- тройство.Для того,чтобы закрыть канал, открытый по .CHCOPY необходимо использовать запросы .CLOSE или .PURGE. Формат макрокоманды .CHCORY area, chan, ochan где area - адрес блока из двух слов аргументов EMT; chan - номер канала,используемого заданием для чтения данных; ochan- номер канала другого задания. 4.1.4.2. .CLOSE Запрос .CLOSE завершает действие на указанном канале и осво- бождает его для использования в другой операции.Для выполнения запро- са драйвер соответствующего устройства должен находиться в памяти. Формат макрокоманды .CLOSE chan Для того, чтобы сделать файл постоянным на томе необходимо на соответствующем канале, открытом для вывода,выполнить запрос .CLOSE . Запрос .CLOSE на неоткрытом канале игнорируется. .CLOSE , выполняемый на канале, который был открыт по .ENTER вызывает корректировку справочника устройства для определения файла как постоянного на этом устройстве. Если файл открыт по .LOOKUP , то корректировка справочника не происходит. Если устройство, связанное с указанным каналом, уже содержит файл с тем же именем и типом, что и вновь созданный файл, то старая копия файла стирается, когда новый файл становится постоянным. Примечание. Монитор информирует программу пользователя об ошибке при выполнении запроса .CLOSE только в том случае, если до этого был выполнен запрос .SERR . - 35 - 4.1.4.3. .DELETE Запрос .DELETE стирает файл с указанного устройства. .DELETE недопустим для магнитных лент. Формат макрокоманды .DELETE area, chan, dblk где area - адрес блока из двух слов аргументов EMT; dblk - адрес блока устройства, в котором описан файл для операции стирания. Примечания: 1. Обращение к открытому каналу приводит к ошибке. 2. Стертый файл в листинге справочника устройства будет опи- сан как неиспользуемая область (UNUSED) того же размера. 3. Запрос .DELETE на устройствах нефайловой структуры игнори- руется. 4. При выполнении .DELETE необходимо, чтобы драйвер соответ- ствующего устройства находился в памяти. 5. После выполнения .DELETE , указанный канал освобождается для дальнейшего использования. 4.1.4.4. .ENTER Запрос .ENTER резервирует область на определенном устройст- ве и создает в справочнике этого устройства временную запись для ука- занного файла. По запросу .ENTER монитор идентифицирует номер канала, определенного в запросе,с указанным файлом. Заметим,что если програм- ма имеет оверлейную структуру, то 15-й канал используется оверлейным драйвером и не должен модифицироваться программой пользователя. Формат макрокоманды .ENTER area, chan, dblk, len, seqn где area - адрес блока из 4-х слов аргументов EMT; dblk - адрес блока устройства, в котором описан создаваемый файл; len - длина файла; seqn - последовательный номер файла для магнитной ленты; - 36 - Значение Действие монитора аргумента len --------------------------------------------------------------------- 0 Отводит для файла половину наибольшей свободной обла- сти или полностью вторую по величине свободную об- ласть на томе, в зависимости от того, какая из них больше М Отводит для файла М блоков -1 Отводит для файла наибольшую свободную область на томе Значение Действие монитора аргумента seqn --------------------------------------------------------------------- 0 Перематывает магнитную ленту и производит поиск мет- ки LEOT (логический конец ленты) n Устанавливает магнитную ленту в положение, соответ- ствующее файлу с последовательным номером n -1 Производит поиск LEOT -2 Перематывает магнитную ленту и производит поиск LEOT или файла с тем же именем, что и вновь создаваемый файл Файл, созданный по .ENTNR не является постоянным до тех пор, пока на соответствующем канале не будет выполнен запрос .CLOSE . Запросы .LOOKUP и .SAVESTATUS недействительны для файлов, которые не являются постоянными. Однако чтение такого файла возможно посредством обращения к номеру соответствующего блока. Если на соответствующем канале выполняется .CLOSE , то любой существующий на томе постоянный файл с тем же именем и типом стирается и новый файл становится посто- янным. Хотя область для файла резервируется при выполнении ENTER , фактическая длина файла определяется после выполнения .CLOSE . Каждое задание может иметь до 256. одновременно открытых фай- лов. Если требуется,все 256. файлов могут быть открыты для вывода по- средством .ENTER . Для выполнения .ENTER необходимо,чтобы драйвер со- ответствующего устройства был в памяти. После выполнения .ENTER реги- стр R0 будет содержать размер области тома, отведенной для создания нового файла. - 37 - 4.1.4.5. .LOOKUP Запрос .LOOKUP связывает указанный канал с устройством и/или существующим файлом для выполнения операций ввода-вывода.Используемый канал будет 'занят' до тех пор, пока не будет выполнен один из следу- ющих запросов: .CLOSE, .SAVESTATUS, .SRESET, .HRESET, .PURGE, .CSIGEN (если номер канала в диапазоне от 0 до 10 ). Заметим, что если программа имеет оверлейную структуру, то 15-ый канал используется оверлейным драйвером и не должен изменяться программой пользователя. Если первое слово имени файла в блоке устройства (dblk) со- держит нуль и устройство есть устройство файловой структуры, то абсо- лютный блок 0 этого устройства определяется как 'начало файла' (в этом случае говорят о нефайловом .LOOKUP) . Этот метод допускает ввод-вывод для любого физического блока на уст- ройстве. Если имя файла определено для устройства нефайловой структу- ры, то имя файла игтнорируется. Для выполнения .LOOKUP драйвер соответствующего устройства должен быть в памяти.После выполнения .LOOKUP , регистр R0 будет со- держать длину открытого файла в блоках. После выполнения .LOOKUP для устройств несправочной структуры, регистр R0 будет содержать ноль. Формат макрокоманды .LOOKUP area, chan, dblk, seqn где area - адрес блока из 3-х слов аргументов ЕМТ; seqn - последовательный номер файла для магнитной ленты; Значение Действие монитора аргумента seqn --------------------------------------------------------------------- -1 Производит поиск файла с текущего положения магнит- ной ленты 0 Перематывает магнитную ленту и производит поиск файла n (n>0) Устанавливает магнитную ленту в положение соответст- вующее файлу с последовательным номером n - 38 - 4.1.4.6. .PURGE Запрос .RURGE освобождает указанный канал для использования в другой операции без выполнения каких-либо функций запросов .HRESET , .SRESET, .SAVESTATUS или .CLOSE . Временный файл открытый на этом ка- нале по .ENTER ,аннулируется. Запрос .PURGE на свободном канале игно- рируется. Формат макрокоманды .PURGE chan 4.1.4.7. .RENAME Запрос RENAME изменяет имя файла (недопустим в операциях с магнитной лентой). Формат макрокоманды RENAME area, chan, dblk где area - адрес блока из двух слов аргументов ЕМТ; dblk - адрес блока,содержащего имя устройства и имя файла,которые требуется изменить, и новое имя устройства и имя файла в кодах Radix-50. Пример: .RENAME #AREA, #7, #DBLK BCS RNMERR . . . DBLK: .RAD50 /DX1 OLDFIL MAC/ .RAD50 /DX1 NEWFIL MAC/ Если файл с тем же именем,что и новое,уже существует на томе, то он стирается. Повторное определение имени устройства DX1 в новой спецификации файла необходимо для правильного выполнения операции и не должно опускаться. После выполнения .RENAME используемый канал ос- вобождается.Запрос .RENAME требует, чтобы драйвер соответствующего устройства был в памяти перед выполнением операции. - 39 - 4.1.4.8. .REOPEN Запрос .REOPEN повторно связывает указанный канал с файлом, для которого был выполнен запрос .SAVESTATUS.Совместное использование запросов .SAVESTATUS и .REOREN требуется для одновременного обращения к большому числу файлов. Файлы открываются по .LOOKUP и параметры их состояния запоминаются по .SAVESTATUS . Когда требуются данные из файла, .REOPEN обеспечивает программе возможность чтения этих данных. Не является обязательным выполнение .REOPEN на том же канале,на кото- ром были выполнены .LOOKUP и .SAVESTATUS . Формат макрокоманды .REOPEN area, chan, sblk где area - адрес блока из 2-х слов ЕМТ; sblk - адрес блока из 5-ти слов,где запоминается информация о состоянии канала. 4.1.4.9. .SAVESTATUS Запрос .SAVESTATUS запоминает пять слов информации о состоя- нии канала в указанной пользователем области памяти. Эти слова содер- жат полную информацию,которая требуется операционной системе для точ- ного определения файла. После выполнения .SAVESTATUS указанный канал освобождается. Если необходимо получить данные по этому каналу,то ис- пользуется запрос .REOPEN .Запрос .SAVESTATUS может использоваться в том случае,если файл был открыт по .LOOKUP .Если был использован .ENTER , то .SAVESTATUS игнорируется и генерируется ошибка. Запрос .SAVESTATUS недопустим в операциях с файлами, которые находятся на магнитной ленте. Запросы .SAVESTATUS и .REOPEN используются для работы с большим числом файлов при ограниченном числе каналов. Формат макрокоманды .SAVESTATUS area, chan, cblk где area - адрес блока из 2-х слов аргументов ЕМТ; cblk - адрес блока из 5-ти слов,в который будет записана информа- ция о состоянии канала; адрес должен быть указан в пределах программы пользователя. (Приложение 2) - 40 - 4.1.5. Программные запросы для организации ввода-вывода 4.1.5.1. .READ, .READC, .READW Система RT11 предусматривает три режима выполнения операций ввода-вывода: .READ/.WRITE .READS/.WRITC .READW/.WRITW При использовании запросов .READ и .READC должны быть опре- делены дополнительные элементы для очереди ввода-вывода (п.4.1.6.31.) Запрос .READ используется для передачи определенного количе- ства слов по указанному каналу в буфер памяти. Управление передается программе пользователя немедленно после начала выполнения запроса .READ . После завершения передачи данных никаких действий не происхо- дит. Формат макрокоманды .READ area, chan, buf, wcnt, blk где area - адрес блока из 5-ти слов аргументов ЕМТ; buf - адрес буфера для чтения данных; wcnt- количество слов для чтения; blk - номер блока для операции чтения; если был использован фай- ловый .LOOKUP , то blk - номер блока относительно начала файла; если был использован нефайловый .LOOKUP , то blk - абсолютный номер блока устройства; программа пользователя должна модифицировать blk перед его повторным использованием. Когда программе пользователя нужно выполнить чтение данных, может быть использован запрос .WAIT . Это гарантирует то, что данные будут прочитаны полностью. Если во время передачи данных произошла ошибка, запрос .WAIT сообщает о ней. Запрос .READC передает определенное количество слов по ука- занному каналу в память.Управление программе пользователя будет пере- дано сразу после начала выполнения .READC . Попытка чтения данных по- сле конца файла вызывает передачу управления вызывающей программе с установлением С-разряда и записью нуля в байт ошибок (52-байт). После выполнения .READC управление будет передано подпрограмме завершения, - 41 - адрес которой указан в запросе. Если в подпрограмме завершения выпол- няется команда RTS PC ,то управление возвращается программе пользова- теля. Формат макрокоманды .READC area, chan, buf, wcnt, crtn, blk где area - адрес блока из 5-ти слов аргументов ЕМТ; buf -адрес буфера для чтения данных; wcnt -количество слов для чтения; crtn -адрес подпрограммы завершения (адрес должен быть больше 500); blk -см. .READ При запуске подпрограммы завершения: 1) регистр R0 содержит слово состояния канала; если в R0 ус- тановлен разряд 0 , то произошла аппаратная ошибка во время передачи данных; 2) регистр R1 содержит номер канала для операции; эта инфор- мация необходима, когда одна и та же подпрограмма завершения исполь- зуется в нескольких операциях. Запрос .READW передает определенное количество слов по ука- занному каналу в память. Управление передается программе пользователя после выполнения запроса .READW или при обнаружении ошибки. Формат макрокоманды READW area, chan, buf, wcnt, blk где area -адрес блока из 5-ти слов аргументов ЕМТ; wcnt -количество слов для чтения (каждый запрос может передать максимально 32К слов); blk -см. запрос .READ Если после завершения запроса будет установлен С-разряд, то это указывает на то, что на канале произошла аппаратная ошибка. Если ошибки не было, то данные находятся в памяти, начиная с указанного адреса. В режиме FB одно из заданий может выполняться в то время как другое задание ожидает завершения операции. 4.1.5.2. .WRITE, .WRITC, .WRITW При использовании запросов .WRITE и .WRITC должны быть опреде- лены дополнительные элементы для очереди ввода-вывода (п.4.1.6.31.). - 42 - Запрос .WRITE передает указанное количество слов из памяти по указанному каналу. Управление программе пользователя передается сразу же после того, как запрос будет поставлен в очередь. Формат макрокоманды .WRITE area, chan, buf, wcnt,blk где area -адрес блока из 5-ти слов аргументоа ЕМТ; buf -адрес буфера памяти,который используется для вывода; wcnt -количество слов для записи; blk -номер блока для операции записи; если используется файло- вый .LOOKUP или .ENTER , то blk - номер блока относительно начала файла; если был использован нефайловый .LOOKUP или .ENTER , то blk - абсолютный номер блока устройства; программа пользователя должна мо- дифицировать blk перед его повторным использованием. Запрос .WRITC передает заданное количество слов из памяти по указанному каналу.Управление передается программе пользователя немед- ленно после начала выполнения .WRITC .После выполнения запроса управ- ление будет передано подпрограмме завершения.По команде RTS PC управ- ление возвращается программе пользователя. Формат макрокоманды .WRITC area, chan, buf, wcnt, crtn, blk где area -адрес блока из 5-ти слов аргументов ЕМТ; buf -адрес буфера памяти,который используется для вывода; wcnt -количество слов для записи; crtn -адрес подпрограммы завершения; blk -см. запос .WRITE . О содержимом регистров R0 и R1 (при запуске подпрограммы за- вершения) см.п.4.1.5.1. Запрос .WRITW передает заданное количество слов из памяти по указанному каналу. Управление передается программе пользователя после завершения .WRITW . Формат макрокоманды .WRITW area, chan, buf, wcnt, blk где area - адрес блока из 5-ти слов аргументов ЕМТ; buf -адрес буфера,который используется для вывода; wcnt -количество слов для записи; blk -см.запрос .WRITE . - 43 - 4.1.5.3. .RCVD, .RCVDC, .RCVDW (режим FB). Существуют три формы запроса получения данных,которые исполь- зуются вместе с запросами .SDAT . Запросы .RCVD аналогичны запросам .READ , но в отличие от них осуществляют прием данных из другой про- граммы, а не с устройства. При использовании запросов .RCVD и RCVDC должны быть определены дополнительные элементы для очереди ввода-вы- вода (п.4.1.6.31). Запрос .RCVD используется для получения данных или сообщений, посылаемых другой программой. Управление вызывающей программе переда- ется сразу же после начала выполнения запроса .RCVD .При необходимо- сти, с .RCVD используется запрос .MWAIT ,который задерживает выполне- ние программы до окончания операции. Формат макрокоманды: .RCVD area, buf, wcnt где area -адрес блока из 5-ти слов аргументов ЕМТ; buf -адрес буфера для сообщений (данных); wcnt -количество передаваемых слов. После выполнения монитором запроса .RCVD ,первое слово буфера (buf) будет содержать действительное количество переданных слов.Таким образом,область памяти для приема данных должна быть,по крайней мере, на одно слово больше размера передаваемого сообщения. Комбинация .SDAT/ .RCVD может быть использована для передачи как нескольких слов, так и целого буфера. Операция по запросу .RCVD заканчивается только после выполнения .SDAT из другой программы. Запрос .RCVDC осуществляет прием данных и запускает подпро- грамму завершения после получения сообщения (аналогично .READC) . Формат макрокоманды .RCVDC area, buf, wcnt, crtn где crtn -адрес подпрограммы завершения. Запрос .RCVDW осуществляет прием данных и ожидает окончания операции. Выполнение вызывающей программы задерживается до окончания передачи сообщения другой программой. Формат макрокоманды .RCVDW area, buf, wcnt Как и в .RCVD , первое слово буфера для .RCVDC и .RSVDW будет содержать действительное количество переданных слов. - 44 - 4.1.5.4. .SDAT, .SDATC, .SDATW (режим FB) Запросы .SDAT, .SDATC, .SDATW используются вместе с запросами .RCVD, .RCVDC, .RCVDW для передачи сообщений или данных между прог- раммами под управлением мониторов FB или XM . Запросы .SDAT, .SDATC, SDATW аналогично запросам .WRITE, .WRITC, .WRITW ,только осуществляют передачу данных не на устройство, а другой программе. При использовании запросов .SDAT и .SDATC должны быть определены дополнительные элементы для очереди ввода-вывода (п.4.1.6.31). Формат макрокоманды .SDAT area, buf, wcnt где area -адрес блока из 5-ти слов аргументов ЕМТ; buf -адрес буфера для сообщений (данных),которые будут переданы; wcnt -количество слов для передачи. Формат макрокоманды .SDATC area, buf, wcnt, crtn где area -адрес блока из 5-ти слов аргументов ЕМТ; buf -адрес буфера для сообщений (данных),которые будут переданы; wcnt -количество слов для передачи; crtn -адрес подпрограммы завершения. Формат макрокоманды .SDATW area, buf, wcnt где area -адрес блока из 5-ти слов аргументоа ЕМТ; buf -адрес буфера для сообщений (данных),которые будут переданы; wcnt -количество слов для передачи. 4.1.5.5. .TTYIN, .TTINR Запросы .TTYIN и .TTINR используются для передачи символов с терминала в программу пользователя. Макрорасширение для .TTYIN : ЕМТ 340 BCS .-2 Макрорасширение для .TTINR : EMT 340 - 45 - Запрос .TTYIN циклится в ожидании подачи символа или строки символов,в то время как пользователь может ожидать,или продолжать вы- полнение программы, используя .TTINR .Если по завершению выполнения .TTINR устанавливает С-разряд, то это значит, что в буфере терминала символ отсутствует (пользователь еще не напечатал его). В режиме FB .TTINR не устанавливает С-разряд, если не установлен 6-ой разряд в слове состояния задания (PSW). Существует два режима ввода с терминала.Режим ввода определя- ется содержимым 12-го разряда в PSW. Если содержимое 12-го разряда нуль,то говорят об общем режиме ввода-вывода.В этом режиме выполняют- ся следующие действия: 1) монитор обеспечивает 'эхо' всем символам,вводимым с терми- нала; 2) стирание символов и строк осуществляется с помощью команд ЗБ и СУ/U соответственно; 3) для передачи символов программе необходимо подать ВК , ПС или команды СУ/Z или СУ/C ;возврат каретки и перевод строки также передаются программе пользователя. Если 12-ый разряд в PSW равен единице, то устанавлмвается специальный режим ввода-вывода. В этом режиме выполняются следующие действия: 1) монитор не выдает 'эхо' символам,вводимым с терминала;кро- ме СУ/C и СУ/D ; 2) СУ/U и ЗБ не выполняют своих функций; 3) символы сразу же передаются программе пользователя. В специальном режиме программа пользователя должна сама вы- полнять печать вводимых символов, если это необходимо (исключение со- ставляют СУ/C и СУ/D ). 12-ый разряд в PSW должен устанавливаться программой пользо- вателя. Этот разряд очищается, если управление передается монитору. Действия СУ/F и СУ/B не зависят от содержимого 12-го разряда. Команды СУ/S и СУ/Q выполняются монитором,если только в режи- ме FB ранее не была выполнена команда SET TT NOPAGE . Если в режиме FB сделан запрос ввода,а символа нет в наличии, то выполнение программы блокируется до тех пор,пока в буфере ввода не появится символ.Это справедливо для TTYIN и TTINR и не зависит от ре- жима ввода. Для того,чтобы продолжить выполнение программы (и обеспе- чить установку С- разряда в случае отсутствия символа в буфере ввода) необходимо установить перед .TTINR 6-й разряд PSW. 6-й разряд очи- щается после окончания выполнения программы. - 46 - Запрос .TTYIN не обслуживает косвенные файлы. Для этой цели необходимо воспользоваться запросом .GTLIN . Формат макрокоманды .TTYIN char .TTINR где char -адрес ячейки, куда пересылается код вводимого символа; если char указан в запросе,то код пересылается в указанную ячейку и в R0 ; если char не указан,то в R0 . 4.1.5.6. .TTYOUT, .TTOUTR Запросы .TTYOUT, .TTOUTR используются для передачи символов из R0 в буфер терминала. Действия этих запросов аналогичны действиям запросов .TTYIN, .TTINR .Если буфер терминала полон,то запрос .TTYOUT ожидает появления в буфере свободного места для выводимого символа, тогда как .TTOUTR не ожидает свободного места и символ, находящийся в R0 , на терминал не выводится. Если после завершения .TTOUTR устанав- ливает С-разряд, то это говорит о том,что в буфере нет свободного ме- ста и символ не был выведен на терминал.В режиме FB запрос .TTOUTR не устанавливает С-разряд;выполение программы блокируется до появления в буфере свободного места. Для того,чтобы продолжить выполнение програм мы и обеспечить установку С-разряда, необходимо в ССЗ установить 6-ой разряд. Если в основном задании установлен 6-ой разряд в ССЗ,то запро сы .TTYIN и .TTYOUT будут вызывать блокировку фонового задания.Каждое задание в основном или фоновом режиме имеет свое собственное ССЗ ,и поэтому они могут использовать различные режимы работы терминала неза висимо друг от друга. Формат макрокоманды .TTYOUT char .TTOUTR где char -адрес ячейки, содержащей код символа, который будет пересы- латься в R0 с последующим выводом на терминал; если char не указан, на терминал выводится содержимое R0 . - 47 - 4.1.5.7. .PRINT Запрос .PRINT вызывает печать строки символов КОИ-7 на сис- темном терминале. В режиме FB каждому сообщению может предшествовать побужда- ющий знак B> или F> , в зависимости от того,какое задание его печата- ет ( B> -фоновое, F> -основное). Это происходит в случае переключения системного терминала на обслуживание другого задания. Строка текста, которая выводится на печать,может оканчиваться как нулевым (0) байтом, так и байтом 200.В первом случае,в отличии от второго, вывод автоматически заканчивается ВК и ПС . Управление возвращается программе пользователя после того,как все символы будут записаны в буфер вывода монитора. Основное задание печатает сообщение сразу же, независимо от состояния фонового задания. Таким образом, для печати срочных сообщений должен использо- ваться запрос .PRINT , а не .TTYIN или .TTYOUT . Если фоновое задание печатает побуждающий знак и звездочку, то системный терминал будет принадлежать ему и запросы .TTYOUT из основного задания выполняться не будут, пока для фонового не будет выполнено ВК . Формат макрокоманды .PRINT addr где addr -адрес строки,которую необходимо напечатать. 4.1.5.8. .MTIN (вариант FB и XM ) Запрос.MTIN является мультитерминальной формой запроса.TTYIN. Запрос .MTIN пересылает знак из буфера ввода монитора в буфер,указан- ный пользователем. Терминал должен быть логически связан с текущим заданием. Если запрос выполнен успешно, то модифицированный адрес бу- фера пользователя будет записан в R0. Если разряд TCBIT установлен в слове M.TSTS (п.4.1.6.26.), то запрос .MTIN устанавливает С- разряд и передает управление вызывающей программе, если ввод с терминала нево- зможен (нет строки,бит TTSPC очищен;пуст буфер ввода,бит TTSPC устано влен). - 48 - В противном случае , .MTIN будет ожидать операции ввода и,тем самым, выполнение задания будет приостановлено. Формат макрокоманды .MTIN area,addr, unit где area -адрес блока из 3-х слов аргументов ЕМТ; addr -адрес буфера пользователя; unit -логический номер терминала (ЛНТ). 4.1.5.9. .MTOUT (вариант FB и XM ) Запрос .MTOUT является мультитерминальной формой запроса .TTYOUT .Запрос .MTOUT пересылает символ из буфера пользователя в бу- фер вывода терминала.Терминал должен быть логически связан с заданием Модифицированный адрес буфера пользователя будет записан в R0 , если запрос выполнен успешно. Если в буфере ввода нет свободного места и разряд TCBIT установлен в слове M.TSTS (п.4.1.6.26.), то .MTOUT уста- навливает С-разряд и передает управление вызывающей программе. Если разряд TCBIT очищен, выполнение задания приостанавливается, пока не появится свободного места в буфере вывода. Формат макрокоманды .MTOUT area, addr, unit где area -адрес блока из 3-х слов аргументов ЕМТ; addr -адрес буфера пользователя; unit -логический номер терминала. 4.1.5.10. .MTPRNT (вариант FB и XM ) Запрос .MTPRNT является мультитерминальной формой запроса .PRINT .Он выводит строку символов на указанный терминал. Формат макрокоманды .MTPRNT area, addr, unit где area -адрес блока из 3-х слов аргументов ЕМТ; addr -адрес строки, которую надо напечатать (.ASCII /line/ <200> или .ASCIZ /line/ ); unit -логический номер терминала. - 49 - 4.1.5.11. .SPFUN Запрос .SPFUN используется главным образом драйвером магнит- ной ленты для выполнения специальных функций, таких как перемотка, пропуск назад и т.д. Запрос .SPFUN может также использоваться с гиб- кими дисками. Формат макрокоманды .SPFUN area, chan, func, buf, wcnt, blk[,crtn] где area -адрес блока из 6-ти слов аргументов ЕМТ; func -код функции,которая будет выполняться; buf -адрес буфера;этот аргумент должен быть равен нулю, если для операции буфер не требуется; crtn -адрес подпрограммы завершения; если crtn не указан, то его значение автоматически приравнивается нулю; если crtn равен нулю, то управление программе пользователя будет передано после завершения операции; если crnt равен 1,управление будет передано программе поль- зователя немедленно после начала операции; если crtn=N ,то N - адрес подпрограммы завершения ( N >500 ). Аргументы chan, blk, wcnt те же, что и в .READ/.WRITE .Они испо- льзуются только тогда,когда необходимо произвести запись на магнитную ленту с расширенным межзонным промежутком. Функция Код --------------------------------------------- MT DX --------------------------------------------------------------------- Перемотка 373 Запись метки EOF 377 Пропуск вперед 376 Пропуск назад 375 Запись 371 376 Чтение 370 377 Запись с расширенным межзонным промежутком 374 Автономная перемотка 372 Для использования запроса .SPFUN необходимо, чтобы драйвер соответствующего устройства находился в памяти и канал был связан с файлом по запросу .LOOKUP . - 50 - 4.1.6. Запросы общего назначения 4.1.6.1. .CDFN Запрос .CDFN используется для переопределения числа каналов ввода-вывода.Каждое задание независимо от того является ли оно основ- ным или фоновым,первоначально обеспечивается 16. каналами ввода-выво- да (от 0 до 15). Запрос .CDFN позволяет увеличить число каналов до 255. (от 0 до 254). Область памяти для новых каналов определяется в пределах программы пользователя. Под каждый канал ввода-вывода отво- дится пять слов.Рекомендуется ,чтобы запрос .CDFN выполнялся в начале программы перед операциями ввода-вывода.Если в программе используется более одного запроса .CDFN , то области каналов для них не должны пе- рекрывать друг друга, но могут иметь один и тот же начальный адрес. Два запроса .SRESET и .HRESET восстанавливают первоначальное число каналов (16.).Следовательно все запросы .CDFN должны выполнять- ся повторно после использования .SRESET или .HRESET. Заметим,что запрос .CDFN определяет новые каналы. Область па- мяти для ранее определенных каналов не используется. Так,запрос .CDFN для 20. каналов ввода-вывода(в то время как 16 первоначальных каналов уже определены) создает 20 новых каналов ввода-вывода. Область для 16 первоначальных каналов не используется, но содержимое старых каналов будет скопировано в новые. Для программы с оверлейной структурой 15-й канал используется оверлейным драйвером и не должен изменяться. Формат макрокоманды .CDFN area, addr, num где area -адрес блока из 3-х слов аргументов ЕМТ; addr -адрес области памяти для новых каналов; num -число создаваемых каналов. 4.1.6.2. .CHAIN Запрос .CHAIN позволяет одной фоновой программе инициировать выполнение другой фоновой программы без вмешательства оператора.Этот процесс может повторяться, и позволяет организовать последовательное выполнение большого числа программ. Ячейки 500-507 должны содержать имя устройства и имя файла (в Radix-50), который необходимо вызвать. Ячейки 510-777 используются для передачи информации между последовательно выполняемыми программа- ми. - 51 - Формат макрокоманды .CHAIN Примечания: 1. Содержимое областей оперативной памяти, за исключением об- ласти памяти, которую занимает Резидентный монитор, и ячеек 500-777, может изменяться после выполнения .CHAIN . 2. Каналы ввода - вывода остаются открытыми после выполнения запроса .CHAIN для использования новой программой. Однако,каналы вво- да-вывода, открытые по запросу .CDFN не могут использоваться.Програм- ма, оставляющая файлы открытыми при выполнении .CHAIN не должна испо- льзовать .CDFN . Нерезидентные драйверы устройств удаляются из памяти при выполнении .CHAIN ,поэтому они должны быть вновь загружены новой программой. 3. По 8-му биту ССЗ программа может определить, как она была загружена - по запросу .CHAIN или по каманде RUN .Разряд устанавлива- ется во время выполнения программы, если она была загружена с помощью .CHAIN .Если программа,занимающая ячейки от 500 до 777, предназначена для загрузки по запросу .CHAIN , то в ней должен быть установлен 8-й разряд ССЗ во время ее трансляции. В этом случае программа будет заг- ружена правильно. Если разряд не установлен,ячейки 500-777,содержимое которых остается от предыдущей программы, могут вызвать неправильную работу новой программы. 4. Для запроса .CHAIN характерны те же ошибки,что и для ко- манды RUN . 4.1.6.3. .CMKT (вариант SJ) Запрос .CMKT аннулирует один или несколько запросов .MRKT (п.4.1.6.22.). Формат макрокоманды .CMKT area, id, time где area -адрес блока из 3-х слов аргументов ЕМТ; id -число, используемое для идентификации с запросом .MRKT , который необходимо аннулировать; если несколько запросов .MRKT име- ют одинаковый id , то аннулируется тот из них,которому соответствует наименьший неистекший интервал времени; если id=0 , то аннулируются все запросы .MRKT; - 52 - time -адрес блока из 2-х слов, в которые монитор записывает вели- чину неиспользованного времени в аннулированном запросе; первое сло- во содержит нижнюю границу интервала времени,второе - верхнюю грани- цу; если адрес не указан, такой записи не происходит,если id=0, аргу- мент time игнорируется. Аннулированный запрос .MRKT освобождает соответствующий эле- мент очереди. 4.1.6.4. .CNTXSW (режим FB) Передавая управление от одного задания другому,монитор выпол- няет операцию переключения контекста.Она заключается в сохранении си- стемой необходимых параметров для однозначного определения и выполне- ния задания. Эти параметры включают все регистры общего назначения, ячейки 34-52, а также все регистры БПЗ, если запрос .SFPA выполнялся с отличным от нуля адресом подпрограммы обработки прерывания от БПЗ. Запрос .CNTXSW используется для определения ячеек памяти, ко- торые будут дополнительно включены в операцию переключения контекста. Иногда,для обоих заданий необходимо независимое использование определенной ячейки памяти,которая не включена в обычную операцию пе- реключения контекста.Например,если программа использует команду IOT , то она должна установить в векторе 20 адрес своей подпрограммы обра- ботки прерывания по этой команде. А если оба задания - основное и фо- новое используют команду IOT , то вектор 20 должен всегда содержать соответствующий с выполняемым заданием адрес. Это достигается путем включения ячеек 20 и 22 в список адресов запроса .CNTXSW . Если запрос .CNTXSW указан в программе несколько раз, то мо- нитор использует список адресов последнего из них. Список адресов .CNTXSW не может быть в области свопинга USR и его нельзя изменять в процессе работы программы. Монитор XM игнорирует запрос .CNTXSW по двум причинам.Во-пер- вых,виртуальные задания не разделяют ячейки памяти с другими задания- ми.Во-вторых,векторы IOT, TRAP, BPT и вектор 250 автоматически вклю- чаются монитором XM в операцию переключения контекста,и, следователь- но,могут быть использованы другим заданием без .CNTXSW . - 53 - Формат макрокоманды .CNTXSW area, addr где area -адрес блока из 2-х слов аргументов ЕМТ; addr -адрес списка адресов (должен быть ограничен нулем); адреса в списке должны быть четными и в пределах от 2 до 476 или в области задания пользователя,или в пределах от 160000 до 177776. 4.1.6.5. .CSIGEN Запрос .CSIGEN вызывает работу Интерпретатора комендной стро- ки (CSI) в общем режиме.В этом режиме CSI осуществляет синтаксический анализ командной строки и выполняет следующие функции: 1) загружает драйверы указанных устройств; 2) выполняет запросы.LOOKUP и/или .ENTER для указанных файлов 3) записывает в стек информацию о переключателях; 4) выполняет запрос .CLOSE на каналах 0-10 . Область,которая отводится для драйверов устройств,должна быть достаточной для одновременного размещения всех необходимых драйверов. Если этой области недостаточно,программа пользователя может быть раз- рушена. После выполнения запроса .CSIGEN регистр R0 будет указывать на первую свободную ячейку памяти после драйверов устройств. Когда управление возвращается программе пользователя после выполнения запроса.CSIGEN,все указанные файлы будут открыты для ввода и/или вывода.Три выходных файла будут открыты соответственно на 0,1 и 2-ом каналах; шесть входных - будут связаны с каналами 3-10 . Если имя файла не указано, соответствующий канал остается за- крытым. Например,в командной строке *,LP:=F1,F2 0 и 2 каналы остаются свободными,1-й канал связывается с LP:, 3 и 4-й каналы связываются соответственно с файлами F1 и F2 на DK:, каналы 5-10 остаются свободными. Программа пользователя может определить открыт или нет канал посредством запроса .WAIT на соответствующем канале, и получить сооб- щение об ошибке, если канал не открыт. - 54 - Переключатели и их аргументы записываются в стек(п.4.1.6.6.1.) Формат макрокоманды .CSIGEN devspc, deftyp, cstr [,linbuf] где devspc -адрес области памяти для драйверов устройств; deftyp -адрес блока из 4-х слов, который содержит типы файлов в кодах Radix-50. Содержимое этого блока используется монитором, если в командной строке не указаны типы файлов; cstr -адрес командной строки. Она не должна содержать <ВК>,<ПС>, но должна оканчиваться нулевым байтом. Если cstr не указан или 0 , то ввод осуществляется с терминала; под управлением монитора FB , если ввод осуществляется с системного терминала,будет автоматически выпол- нен запрос .UNLOCK для USR ; linbuf -адрес,с которого будет записана введенная командная стро- ка; эта область определяется пользователем и имеет длину 81. байт;ко- мандная строка в этой области ограничивается нулевым байтом. Примечания: 1. Блок,адрес которого указан в deftyp ,в 1-ом слове содержит тип файла для всех входных файлов, во 2, 3 и 4-ом словах- типы файлов соответственно для 0, 1 и 2-го выходных файлов.Если в блоке не указан тип файла для определенного канала, соответствующее слово должно со- держать нуль. Все типы файлов должны быть записаны в кодах Radix-50. 2. Запрос .CSIGEN автоматически воспринимает командную строку из косвенного файла, если указан ввод с терминала (cstr=0) и програм- ма, использующая .CSIGEN вызывается через косвенный файл. 3.Аргумент linbuf предоставляет пользователю возможность вос- становления первоначально введенной командной строки. 4. Если ошибка происходит при вводе командной строки с терми- нала,то CSI печатает сообщение об ошибке на терминале, если при вво- де из памяти - устанавливает С-разряд и код ошибки (52-ой байт). 4.1.6.6. .CSISPC Запрос .CSISPC вызывает работу CSI в специальном режиме. В этом режиме он осуществляет синтаксический анализ командной строки и передает спецификации файлов и переключатели,указанные в ней,програм- ме пользователя.В специальном режиме CSI не выполняет действий,анало- гичных функциям запросов .FETCH, .CLOSE, .ENTER, .LOOKUP . - 55 - Переключатели и их аргументы пересылаются в стек. Если программа,использующая .CSISPC ,вызывается через косвен- ный файл и cstr=0 , то .CSISPC автоматически выбирает входную строку из косвенного файла. Формат макрокоманды .CSISPC outspc, deftyp, cstr[,linbuf] где outspc -адрес блока из 39 слов для спецификации файлов командной строки; deftyp -адрес блока из 4-х слов, который содержит типы файлов в кодах Radix-50. Содержимое этого блока используется монитором, если в командной строке не указаны типы файлов; cstr -адрес командной строки. Она не должна содержать <ВК> <ПС>, но должна оканчиваться нулевым байтом. Если cstr не указан или 0 , то ввод осуществляется с терминала; linbuf -адрес,с которого будет записана введенная командная стро- ка; эта область определяется пользователем и имеет длину 81 байт; ко- мандная строка в этой области ограничивается нулевым байтом. Блок, адрес которого указан в outspc , содержит спецификацию для 9 файлов: по 5 слов для каждого из 3-х выходных файлов и по 4 слова для каждого из 6-ти входных файлов.Пять слов для выходного фай- ла имеют следующее содержимое: 1-ое слово - имя устройства; 2-е и 3-е слова - имя файла; 4-ое слово - тип файла; 5-е слово - длина выходно- го файла. Например *DX1:LIST.MAC[15]=PC: После выполнения .CSISPC первые 5 слов для блока, адрес кото- рого указан в outspc ,будут иметь следующие значения: 16337 Radix-50 для DX1 46173 Radix-50 для LIS 76400 Radix-50 для T 50553 Radix-50 для MAC 00017 Длина файла Первые 4 слова для спецификаций входных файлов (начиная с ад- реса outspc+36) будут выглядеть так: 62170 Radix-50 для PC 0 Имя файла не указано 0 0 Если при вводе с терминала произошла ошибка, USR не печатает на терминале сообщение об ошибке, а устанавливает С-разряд в PSW. - 56 - 4.1.6.6.1. Передача информации о переключателях программе пользователя. В общем и специальном режимах работы CSI переключатели и их аргументы пересылаются в стек. Переключатель представляет собой на- клонную черту (/),за которой следует имя переключателя (символ КОИ-7) За переключателем может следовать аргумент, перед которым ставится разделитель (:). Аргумент может быть восьмеричным или десятичным чис- лом (числом с точкой), или комбинацией буквенно-цифровых символов (от одного до трех),первый из которых -буква. В командной строке переклю- чатели могут быть связаны с файлами. Например: *DK:FOO/A,DX1:FILE.OBJ/A:100 В этом случае имеется два переключателя A, первый из которых связан с входным файлом FOO ,второй связан с входным файлом FILE:OBJ и имеет аргумент 100 . Формат содержимого стека после выполнения запроса .CSIGEN или .CSISPC: (указатель стека будет содержать адрес первого слова табл.) Слово Содержимое Значение --------------------------------------------------------------------- 1 N Число переключателей в командной строке 2 Имя переключа- Четный байт содержит имя переключателя. теля и номер Разряды 8-14 содержат номер (от 0 до 10) файла файла, с которым связан данный переключатель. Разряд 15 содержит 1, если переключатель име- ет аргумент 3 Аргумент пере- Если установлен 15-й разряд в слове 2,то сло- ключателя или во 3 содержит аргумент переключателя. В про- имя следующего тивном случае - имя следующего переключателя переключателя Например,после обработки CSI командной строки *FILE/B:20.,FIL2/E=DX1:INPUT/X:SY:20 стек будет содержать значения: - 57 - Содержимое Значение --------------------------------------------------------------------- 4 Число переключателей (переключатель X имеет два аргу- мента и рассматривается как два переключателя) 101530 Последний переключатель /X связан с 3-им файлом и имеет аргумент 20 Аргумент переключателя X 101530 Следующий переключатель /X связан с 3-им файлом и имеет аргумент 75250 Аргумент переключателя X-SY в кодах Radix-50 505 Следующий переключатель /Е связан с 1-м файлом и имеет аргумент 100102 Переключатель /B связан с 0-м файлом и имеет аргумент 24 Аргумент переключателя B Примечания: 1. Во многих случаях программе пользователя не требунтся об- работка переключателей посредством CSI . Однако, возможен непреднаме- ренный ввод переключателей пользователем. В этом случае,рекомендуется сохранить значение указателя стека перед вызовом CSI ,а затем восста- новить его.Заметим,что командная строка без переключателей перемещает указатель стека на одно слово. 2. В режиме FB , когда вызов CSI требует ввода с системного терминала, автоматически выполняется .UNLOCK для USR. Это необходимо помнить при использовании запроса .LOCK . 4.1.6.7. .CSTAT (режим FB) Запрос .CSTAT передает программе пользователя информацию о состоянии канала. Формат макрокоманды .CSTAT area, chan, addr где area -адрес блока из 2-х слов аргументов ЕМТ; chan -номер канала,информацию о котором требуется получить; addr -адрес блока из 6-ти слов для информации о состоянии канала: - 58 - Слово Назначение --------------------------------------------------------------------- 1 Слово состояния канала 2 Номер начального блока файла (0 ,если устройство с последова- тельным доступом к данным или,если канал был открыт по нефай- ловому .LOOKUP или .ENTER ) 3 Длина файла (равна нулю, если устройство с последовательным доступом к данным или, если канал был открыт по нефайловому .LOOKUP или .ENTER ) 4 Номер последнего записанного блока файла (пока файл открыт). Ноль для устройств нефайловой структуры 5 Номер привода устройства, с которым связан указанный канал 6 Физическое имя устройства в кодах Radix-50, с которым связан данный канал. 4.1.6.8. .DATE Запрос .DATE передает информацию о текущей дате из системной ячейки даты в регистр R0 .Ячейка даты имеет следующий формат: Разряд: 14 ... 10, 9 ... 5, 4 ... 0 ---------- ------- ------- месяц день год Значение года в разрядах с 0 по 4 является фактическим годом минус 72 . Формат макрокоманды .DATE Нулевой результат в R0 указывает на то, что пользователь дату не определил. 4.1.6.9. .DEVICE (режим FB) Запрос .DEVICE позволяет записать определенные значения по указанным адресам после выхода из программы (по .EXIT или СУ/С ). Эта функция в основном используется для записи в регистры устройств необходимых значений. В программе может быть несколько запросов .DEVICE и пользова- тель может связать все списки адресов в один список. - 59 - Формат макрокоманды .DEVICE area, addr[,L] где area -адрес блока из 2-х слов аргументов ЕМТ; addr -адрес списка адресов и значений; L -произвольный аргумент, который позволяет связать списки ад- ресов последовательных запросов .DEVICE . Если аргумент L отсутству- ет, то уже существующий список заменяется новым при обнаружении оче- редного запроса запроса .DEVICE . Список адресов и значений может иметь два формата - связанный и не связанный.Оба формата должны оканчиваться нулем.Связанный формат должен иметь в первом слове также ноль. Различные форматы списка ад- ресов и значений: Не связанный Связанный -------------- ---------------- addr адрес addr 0 -------------- ---------------- значение адрес -------------- ---------------- адрес значение -------------- ---------------- значение адрес -------------- ---------------- . значение . ---------------- . . -------------- . адрес . -------------- --------------- значение адрес -------------- --------------- 0 значение -------------- --------------- 0 --------------- - 60 - 4.1.6.10. .DSTATUS Запрос .DSTATUS используется для получения информации об определенном устройстве. Формат макрокоманды .DSTATUS dstblk, devnam где dstblk -адрес блока из 4-х слов состояния устройства; devnam -адрес имени устройства в кодах Radix-50 . Первым словом блока состояния является слово состояния уст- ройства. Значения разрядов слова состояния устройства: Разряд Содержимое Значение --------------------------------------------------------------------- 0-7 0 Касета магнитных дисков 1,2 Резервные 3 Построчно-печатающее устройство 4 Системный терминал или драйвер BATCH 5,6 Резервные 7 Перфоленточное устройство ввода и вывода 10 Резервные 11 Накопитель на магнитной ленте 12-20 Резервные 21 Пакет магнитных дисков DP (29 Мбайт) 22 Гибкий диск 24 Логическое устройство регистрации ошибок 25 Фиктивное устройство 26-33 Резервные 10 1 Драйвер устройства допускает использование запроса .SPFUN 0 Не допускается использование запроса .SPFUN 11 - Резервный 12 1 Устройство несправочной структуры 13 1 Устройство только для записи 14 1 Устройство только для чтения 15 1 Устройство с произвольным доступом к данным 0 Устройство с последовательным доступом к данным - 61 - Второе слово представляет собой длину драйвера устройства в байтах. Третье слово представляет собой адрес загрузки драйвера плюс 6.(FB,SJ) Если 0 -драйвера в памяти нет. Четвертое слово представляет собой емкость устройства (в бло- ках) для устройств с произвольным доступом к даннам или 0 для уст- ройств с последовательным доступом к данным. Имя устройства в devnam может быть логическим именем, присво- енным пользователем. 4.1.6.11. .EXIT Запрос .EXIT вызывает окончание выполнения программы пользо- вателя и передает управление KMON . Перед выходом из программы выполнение всех инициированных операций ввода-вывода и/или подпрограмм завершения будет закончено. Все невыполненные запросы .MRKT и .CMKT будут аннулированы. Если часть фоновой программы занимает область памяти KMON и USR, то она будет записана в блоки для временного хранения данных на системное устройство. После этого KMON и USR загружаются в память и управление передается Клавиатурному монитору. Если R0=0 во время вы- полнения .EXIT ,то выполняется операция аналогичная .HRESET ,запреща- ющая последовательное использование команд REENTER, START или CLOSE . Запрос .EXIT позволяет программе передать команды Клавиатур- ному монитору , используя ячейки 500-777,для их последующего выполне- ния. Для этого: 1) ячейка 510 должна содержать общее количество байтов в ко- манде, которая будет передана KMON; 2) команды записываются, начиная с ячейки 512; строка должна быть записана в символах КОИ-7 и не должна содержать <ВК> или <ПС> ; например: A: .=510 .WORD B-A .ASCIZ/SOPI A.MAC B.MAC/ .ASCIZ/DELETE A.MAC/ B= . - 62 - 3) программа пользователя должна установить 11 разряд в ССЗ перед выполнением .EXIT ; содержимое R0 должно быть нулевым. Когда запрос .EXIT используется для передачи команд необхо- димо учитывать следующее: 1) если это свойство используется программой, которая вызыва- ется с помощью косвенного файла, то все команды следующие в косвенном файле за командой, инициирующей пуск этой программы,выполняться не бу дут; 2) косвенный файл может быть вызван, используя это свойство только в том случае, если передаваемая KMON строка содержит единствен ную спецификацию файла; попытка передачи нескольких косвенных файлов или комбинаций косвенных файлов с другими командами KMON приводит к неправильным результатам; 3) .EXIT в подпрограмме завершения недопустим. Запрос .EXIT изменяет текущее положение указателя стека. Формат макрокоманды .EXIT 4.1.6.12. .FETCH, .RELEAS Запрос .FETCH загружает драйвер устройства из системного уст- ройства в оперативную память. Формат макрокоманды .FETCH addr, devnam где addr -адрес загрузки драйвера; devnam -адрес имени устройства в кодах Radix-50 . После выполнения .FETCH , R0 содержит адрес первой, располо- женной выше драйвера,ячейки оперативной памяти. Если драйвер уже за- гружен в память, R0 будет содержать адрес загрузки addr. Для выполнения запросов .CLOSE .READC .READ .LOOKUP .WRITE .WRITC .ENTER .READW .SPFUN .RENAME .WRITW .DELETE необходимо наличие в памяти драйверов соответствующих устройств. - 63 - Перед использованием запроса .FETCH в режимах FB или XM необходимо,чтобы все драйверы устройств были загружены в память (по команде LOAD) . Запрос .RELEAS удаляет драйвер указанного устройства из памя- ти. Запрос .RELEAS игнорируется, если драйвер: 1) является частью RMON (т.е. является драйвером системного устройства); 2) отсутствует в памяти; 3) был загружен по команде LOAD; Запрос .RELEAS в основной программе или в любой программе под управлением монитора XM всегда игнорируется,т.к. мониторы FB и XM мо- гут использовать только те драйверы, которые были загружены по коман- де LOAD. Формат макрокоманды .RELEAS devnam где devnam -адрес имени устройства в кодах Radix-50. 4.1.6.13. .FORK Запрос .FORK используется в драйверах для синхронизации рабо- ты системы. Запросу .FORK должен предшествовать запрос .INTEN . .FORK требует для своего выполнения блок памяти из 4-х слов. Содержимое ре- гистров R4 и R5 после выполнения запроса сохраняется. .FORK использу- ется в том случае,когда должен быть упорядочен доступ к системным ре- сурсам или должна быть выполнена не критическая по времени,но большая по размеру, часть программы. После обработки монитором запроса .FORK прерывание от устройства будет запрещено и драйвер будет работать на нулевом приоритете. Формат макрокоманды .FORK fkblk где fkblk -адрес блока из 4-х слов (должен быть в драйвере устройст- ва ). - 64 - 4.1.6.14. .GTIM Запрос .GTIM позволяет программе определить текущее время су- ток. Величина времени определяется в тиках (1 тик= 1/50 с ). Формат макрокоманды .GTIM area, addr где area -адрес блока из 2-х слов аргументов ЕМТ; addr -адрес блока из 2-х слов величины времени; первое слово со- держит большее время ,второе слово - меньшее время. Пользователь должен предусмотреть в своей программе операцию преобразования тиков в часы-минуты-секунды. В режиме FB величина вре- мени автоматически восстанавливается после 24:00:, в режиме SJ опера- ция восстановления отсутствует. 4.1.6.15. .GTJB Запрос .GTJB позволяет программе определить номер выполняемо- го задания, нижнюю границу памяти и другие параметры задания. Формат макрокоманды .GTJB area, addr где area -адрес блока из 2-х слов аргументов ЕМТ; addr -адрес блока из 8-ми слов для номеров задания: Слово Содержимое =-------------------------------------------------------------------- 1 Номер задания (2-основное, 0 -фоновое) 2 Верхняя граница памяти 3 Нижняя граница памяти 4 Начало области каналов ввода-вывода 5 Адрес смешанной области заданий для мониторов FB и XM 6-8 Резервные Примечание. Информацию необходимую для управления выполнением основного задания, монитор хранит в смешанной области, которая созда- ется во время загрузки основной программы в младших адресах основной области памяти. В режиме FB номер задания может иметь значение 0 или 2. Если задание фоновое,то слово 3 содержит 0 ,а слово 4 содержит адрес,с ко- торого начинается область каналов ввода-вывода. Обычно этот адрес на- ходится в пределах RMON. После выполнения .CDFN,область каналов ввода -вывода заменяется на область,адрес которой указывается пользователем. - 65 - 4.1.6.16. .GTLIN Запрос .GTLIN используется для получения от пользователя ко- мандной информации, отличной от командных строк CSI и позволяет про- грамме работать с косвенными файлами. Запрос .GTLIN требует наличия USR в памяти и принимает вход- ную строку с системного терминала,или из косвенного файла,в зависимо- сти от того, была ли вызвана программа с терминала или командой из косвенного файла. Запрос .GTLIN игнорирует аргумент pstr, если ввод осуществля- ется из косвенного файла, и если ранее была выполнена команда SET TT QUIET. Если ввод осуществляется с терминала или из косвенного файла,и ранее не была выполнена команда SET TT QUIET ,запрос .GTLIN будет ис- пользовать аргумент pstr для печати побуждающей строки перед выборкой входной строки. Формат макрокоманды .GTLIN sptr[,pstr] где sptr -адрес буфера для записи входной строки; длина строки не должна превышать 81 байт; строка будет ограничена нулевым байтом вместо <ВК> <ПС> ; pstr -адрес побуждающей строки,которая будет печататься на терми- нале; pstr имеет тот же формат, что и аргумент запроса .PRINT . Единственными запрпосами, которые могут осуществлять ввод из косвенного файла, являются запросы .CSIGEN, .CSISPC и GTLIN . 4.1.6.17. .GVAL Запрос .GVAL передает в R0 содержимое ячейки фиксированного смещения. Формат макрокоманды .GVAL area,offset где area -адрес блока из 2-х слов аргументов ЕМТ; offset -значение смещения относительно начала RMON . - 66 - 4.1.6.18. .HERR, .SERR Запросы .HERR, .SERR позволяют задать определенный режим ра- боты монитора при обнаружении условий ошибки.Во время выполнения про- граммы могут возникнуть определенные ошибки, вызывающие прерывание программы. Обычно эти ошибки вызывают выход из программы и печать мо- нитором сообщения об ошибке. В некоторых случаях невозможно прервать выполнение программы из-за возникших ошибок. Например, многопользова- тельская программа должна сохранять управление и прервать работу толь ко с тем пользователем, который сделал ошибку. В этом случае полезно использовать запрос .SERR , который запрещает монитору удаление из па мяти программы, в которой обнаружена ошибка. Вместо этого,при возник- новении ошибки после выполнения запроса .SERR устанавливается С-бит и код ошибки в 52-ом байте. В некоторых случаях запрос .SERR оставляет каналы открытыми,например,если использовались запросы .LOOKUP и.ENTER Запрос .HERR отменяет действие запроса .SERR . В этом случае печатается сообщение об ошибке и программа удаляется из памяти. Формат макрокоманд .HERR .SERR Код Причина ошибки --------------------------------------------------------------------- -1 Вызов USR из подпрограммы завершения -2 В памяти нет драйвера устройства -3 Ошибка ввода-вывода справочника устройства -4 Ошибка .FETCH . Ошибка при чтении драйвера,или попытка загру- зить его выше USR или RMON -5 Ошибка чтения оверлейного сегмента -6 В справочнике устройства нет свободного места для записи файла -7 Недопустимый адрес (только в режиме FB).Попытка выполнить операцию вне границ задания -10 Несуществующий номер канала -11 Недопустимая команда ЕМТ; определен недопустимый функциональ- ный код - 67 - 4.1.6.19. .HRESET Запрос .HRESET прекращает выполнение операций ввода-вывода для вызывающей программы и выполняет функции запроса .SRESET.В режиме SJ запрос .HRESET используется для прекращения всех операций ввода-вы вода, тогда как в режиме FB прекращается ввод-вывод для задания,в ко- тором используется .HRESET . Все другие операции ввода-вывода продол- жаются. Формат макрокоманды .HRESET 4.1.6.20. .INTEN Запрос .INTEN используется в подпрограмме обработки прерыва- ния программы пользователя и выполняет следующие функции: 1) сообщает монитору о том, что произошло прерывание; 2) устанавливает приоритет процессора на соответствующий уро- вень. Все внешние прерывания вызывают работу процессора по 7-му приоритету. Запрос .INTEN используется для понижения приоритета до уровня, на котором будет работать соответствующее устройство. Формат макрокоманды .INTEN prior[,pic] где prior -приоритет процессора, который пользователь устанавливает для своей программы обработки прерывания; обычно тот приоритет, по которому устройство запрашивает прерывание; pic - необязательный аргумент; должен быть указан, если подпрограмма обработки прерывания написана в позиционно-независимых кодах; любая подпрограмма обработки прерывания (драйвер устройства), должна быть написана в этих кодах. 4.1.6.21. .LOCK, .UNLOCK Запрос .LOCK блокирует USR в памяти для выполнения ряда опе- раций.Если существуют условия,вызывающие процесс свопинга,то програм- ма пользователя (та ее часть, которую USR перекрывает в памяти) запи- сывается в блоки диска для временного хранения данных и USR загружа- - 68 - ется в память.В противном случае используется USR,находящаяся в памя- ти и свопинга не происходит. Запрос .LOCK всегда загружает USR в па- мять, если там ее нет. USR будет блокирована в памяти до тех пор,пока не будет сделан запрос .UNLOCK .Заметим,что в режиме FB,вызов CSI мо- жет также выполнить действие аналогичное .UNLOCK . В режиме FB запрос .LOCK запрещает другим заданиям использо- вать USR .После запроса .LOCK должен быть выполнен запрос .UNLOCK для освобождения USR . Запросы .LOCK и UNLOCK дополняют друг друга и должны быть со- гласованы (т.е.,если выполнено три запроса .LOCK , то должно быть вы- полнено,по крайней мере,три .UNLOCK ,в противном случае USR не будет удалена из памяти).Если количество .UNLOCK больше чем .LOCK ,то ошиб ки не происходит. Формат макрокоманды .LOCK Примечания: 1. Важно,чтобы программа, использующая .LOCK, не находилась в области памяти,куда будет загружаться USR. Если это произойдет,то по- сле выполнения .LOCK управление будет передано не программе пользова- теля,а USR . 2. После выполнения .LOCK не рекомендуется использовать об- ласть памяти, которую занимает USR,даже если дальнейшее использование USR не требуется. Это может вызвать непредвиденные результаты при вы- полнении .UNLOCK . 3. Если основное задание выполняет .LOCK , в то время как фо- новое задание использует USR , то выполнение основного задания задер- живается. Запрос .UNLOCK удаляет USR из памяти, если она была загружена по запросу .LOCK . Если при выполнении .LOCK использовался свопинг,то .UNLOCK загружает программу пользователя обратно в память. Формат макрокоманды .UNLOCK Примечание. При выполнении двух заданий в режиме FB пары .LOCK/.UNLOCK должны использоваться только по необходимости,т.к. ког- да задание блокирует USR в памяти, другое задание не может использо- вать USR до тех пор, пока не будет выполнен .UNLOCK в первом задании. - 69 - 4.1.6.22. .MFPS, .MTPS Запросы .MFPS, .MTPS обеспечивают доступ к PSW. Запрос .MFPS используется для выборки PSW. Формат макрокоманды .MFPS addr где addr -адрес, по которому записывается содержимое PSW; если адрес не указан,содержимое PSW пересылается в стек; Запрос .MTPS используется для установки PSW. Формат макрокоманды .MTPS addr где addr -адрес слова, которое будет записано в PSW; если адрес не указан,то значение для PSW берется из стека. 4.1.6.23. .MRKT (вариант SJ) Запрос .MRKT планирует запуск подпрограммы завершения через определенный интервал времени. Запросы .MRKT используют элементы очереди из списка элементов очереди ввода-вывода. Элемент очереди используется до тех пор,пока не будет введена подпрограмма завершения или не будет выполнен запрос .CMKT . Формат макрокоманды .MRKT area, time, crtn, id где area -адрес блока из 4-х слов аргументов ЕМТ; time -адрес блока из 2-х слов,содержащего величину интервала вре- мени; crtn -точка входа подпрограммы завершения; id -число, используемое для идентификации запроса с программой завершения и запросами .CMKT ; это число не должно быть в пределах от 177400 до 177777; несколько запросов .MRKT могут иметь один и тот же id ; на входе в подпрограмму завершения R0 будет содержать число id . - 70 - 4.1.6.24. .MTATCH (вариант FB и XM) Запрос .MTATCH логически связывает задание с терминалом. Этот запрос должен быть выполнен перед тем,как задание начнет использовать терминал в мультитерминальном режиме. Формат макрокоманды .MTATCH area, addr, unit где area -адрес блока из 3-х слов аргументов ЕМТ; addr -адрес слова асинхронного состояния терминала или 0 ; unit -логический номер терминала. 4.1.6.25. .MTDTCH (вариант FB и XM ) Запрос .MTDTCH прерывает логическую связь указанного терми- нала с заданием и делает его доступным для других заданий. Попытка прервать связь с терминалом, логически связанным с другим заданием, приводит к ошибке. Формат макрокоманды .MTDTCH area, unit где area -адрес блока из 3-х слов аргументов ЕМТ; unit -логический номер терминала. 4.1.6.26. .MTSET (вариант FB и XM) Запрос .MTSET позволяет установить характеристики терминала. Он также определяет режим ввода-вывода для указанного терминала. Формат макрокоманды .MTSET area, addr, unit где area -адрес блока из 3-х слов аргументов ЕМТ; addr -адрес блока из 4-х слов состояния указанного терминала; unit -логический номер терминала. - 71 - Структура блока состояния терминала: ----------------------- M.TSTS ----------------------- M.TSTS2 ----------------------- M.TSTS3 ----------------------- M.TSTW M.TWID ----------------------- Обозначение Описание -------------------------------------------------- M.TSTS Слово конфигурации терминала M.TSTS2 Резервное M.TSTS3 Резервное M.TWID Длина строки M.TSTW Байт состояния терминала Значения разрядов слова конфигурации терминала: Разряд Содержание Значение --------------------------------------------------------------------- 0 1 Аппаратная табуляция 1 2 Выполнение возврата каретки и перевода стро- ки, если действительная длина строки больше установленной в M.TWID 2 4 Аппаратный перевод формата 3 10 Выполнение команд СУ/F и СУ/B 4,5 - Резервные 6 100 Запрещение режима ожидания для терминала (эк- вивалентен 6-ому разряду в ССЗ); разряд TCBIT 7-11 - Резервные 12 1000 Режим посимвольного ввода (эквивалентен раз- ряду специального режима в ССЗ); разряд TTSPC 13 - Резервный 14 40000 Запрещение преобразования кодов символов ниж- него регистра в коды символов верхнего регис- тра - 72 - Значения разрядов для M.TSTW : Разряд Содержимое Значение --------------------------------------------------------------------- 10 2000 Терминал используется основным и фоновым за- даниями 11 4000 Терминал не включен 14 40000 Дважды подана команда СУ/С 15 100000 Системный терминпл 4.1.6.27. .MTGET (вариант FB и XM) Запрос .MTGET позволяет получить информацию о состоянии ука- занного терминала. После выполнения запроса блок состояния будет со- держать информацию: Относительный Содержимое номер байта в блоке --------------------------------------------------------------------- 0 Слово конфигурации терминала.Значения разрядов те же, что и в .MTSET 2-4 Резервные 6 Длина строки 7 Текущее положение строки Формат макрокоманды .MTGET area, addr, unit где area -адрес блока из 3-х слов аргументов ЕМТ; addr -адрес блока состояния терминала из 4-х слов; unit -логический номер терминала, информацию о состоянии которого требуется получить. - 73 - 4.1.6.28. .MTRCTO (вариант FB и XM ) Запрос .MTRCTO является мультитерминальной формой запроса .RCTRLO .Он отменяет команду СУ/D и разрешает вывод на указанный тер- минал. Формат макрокоманды .MTRCTO area, unit где area -адрес блока из 3-х слов аргументов ЕМТ; unit -логический номер терминала. 4.1.6.29. .MWAIT (режим FB ) Запрос .MWAIT переводит программу в состояние ожидания до тех пор,пока все сообщения не будут переданы или получены. С помощью это- го запроса пользователь может удостовериться в правильности выполне- ния операции.Запрос .MWAIT используется в основном совместно с запро- сами .RCVD или .SDAT ,которые не предусматривают специальных действий после получения или передачи сообщений (данных). Формат макрокоманды .MWAIT 4.1.6.30. .PROTECT, .UNPROTECT (режим FB) Запрос .PROTECT используется для получения исключительного права пользования вектором прерывания в диапазоне 0-476 и устанавли- вает защиту вектора. Если запрос .PROTECT завершен успешно,то это указывает на то, что ячейки вектора не используются другим заданием или монитором и в этом случае текущее задание может записать адрес подпрограммы обрабо- тки прерывания и значения уровня приоритета в эти ячейки. Формат макрокоманды .PROTECT area, addr где area -адрес блока из 3-х слов аргументов ЕМТ; addr -адрес вектора,который будет использоваться данным заданием; addr должен быть кратен четырем и меньше 476. Запрос .UNPROTECT отменяет результат действия запроса.PROTECT - 74 - Формат макрокоманды .UNPROTECT area, addr где area -adres bloka iz 2-h slow argumentow EMT; addr -адрес вектора,который освобождается от защиты. 4.1.6.31. .QSET Все операции ввода-вывода в системе RT11 осуществляются через централизованную систему управления очередью запросов. Каждый запрос несинхронной передачи (например,.WRITE) требует для своего выполнения наличия элемента очереди.Если для очередного запроса ввода-вывода нет свободного элемента очереди, выполнение программы пользователя будет блокировано до тех пор,пока элемент очереди не освободится. В режиме FB одно из заданий может выполняться,пока другое ожидает элемент оче- реди. Запрос .QSET используется для того,чтобы увеличить число эле- ментов очереди ввода-вывода. Общее правило заключается в том, чтобы в каждой программе количество элементов очереди было на единицу больше, чем количество запросов ввода-вывода,которые будут выполняться однов- ременно на различных каналах. Запросы .MRKT, .TWAIT, .SDAT также используют элементы очере- ди и должны приниматься во внимание при определении количества элеме- нтов очереди для программы.Каждый раз,когда выполняется .QSET ,непре- рывная область памяти,которая отводится под элементы очереди, делится на сегменты, содержащие по 7 слов (по 10 слов для XM) и связывается с уже существующей очередью ввода-вывода для этого задания. Запрос .QSET может быть использован неоднократно в программе пользователя. При этом область памяти для новых элемнтов очереди, от- водимые различными .QSET ,необязательно должны быть соприкасающимися. Область памяти для дополнительных элементов очереди ввода-вы- вода должна быть определена внутри программы пользователя. Запросы .SRESET и .HRESET аннулируют результат действия .QSET . - 75 - Необходимо соблюдать осторожность при распределении памяти для элементов очереди.Очередь ввода-вывода изменяется монитором асин- хронно. Если область, отведенная пользователем для элементов очереди оказалась недостаточной, это приведет к нарушению выполнения програм- мы. Элементы для очереди ввода-вывода нельзя располагать в оверлейной области, а также в области памяти, предназначенной для свопинга USR . Следующие запросы требуют для своего выполнения элемент оче- реди: .TWAIT .READW .WRITE .SDAT .SDATW .MRKT .RCVD .WRITC .READC .SDATC .READ .RCVDC .WRITW .RCVDW Формат макрокоманды .QSET addr, qlend где addr -адрес начала области для новых элементов очереди ввода-вы- вода; qlend-число новых элементов очереди ввода-вывода. 4.1.6.32. .RCTRLO Запрос .RCTRLO обеспечивает готовность системного терминала к печати. Команда СУ/D запрещает вывод на терминал до тех пор, пока не будет повторно подана команда СУ/D или в программе не будет выполнен запрос .RCTRLO .Т.е. программа,в которой предусмотрене печать сообще- ний на терминале, должна предусматривать возможность подачи пользова- телем команды СУ/D. Формат макрокоманды .RCTRLO 4.1.6.33. .SPND, .RSUM (режим FB) Запрос .SPND временно приостанавливает выполнение программы пользователя и допускает работу только подпрограмм завершения (для операций ввода-вывода и запросов .MRKT). Формат макрокоманды .SPND Запрос .RSUM из подпрограммы завершения вновь передает управ- ление программе пользователя. - 76 - Формат макрокоманды .RSUM Примечания: 1. Монитор содержит так называемый счетчик приостановки для каждого задания. Этот счетчик уменьшается по .SPND и наращиватся по .RSUM . Задание будет фактически приостановленным, если счетчик будет содержать отрицательное значение.Поэтому,если .RSUM будет выполняться перед .SPND ,то последний запрос будет игнорироваться. 2. Программа должна использовать равное количество .SPND и .RSUM . 3. Запрос .SPND из подпрограммы завершения уменьшает счетчик приостановки, но не приостанавливает выполнение программы.Если в под- программе завершения выполняется .SPND , выполнение программы продол- жается до тех пор,пока она также не выполнит .SPND ,после чего выпол- нение программы будет приостановлено и для возобновления ее работы потребуется уже два запроса .RSUM . 4. .SPND и .RSUM подобно другим запросам,могут быть выполнены в подпрограммах обработки прерываний, которые написаны пользователем, если ранее были выполнены .INTEN и .SYNCH .Все замечания,относящиеся к .SPND и .RSUM из подпрограммы завершения, имеют силу и для каждого случая. 4.1.6.34. .SCCA Запрос .SCCA выполняет следующие функции: - блокирует выполнение команды СУ/C; -сообщает о том,что с терминала было подано две команды СУ/C. По запросу .SCCA команда СУ/C воспринимается программой как обычная управляющая команда без специальных функций. Формат макрокоманды .SCCA area, addr где area -адрес блока из 2-х слов аргументов ЕМТ; addr -адрес слова состояния терминала. Слово состояния терминала предназначено для фиксирования по- дачи двух команд СУ/C. Если в нем установлен 15-й разряд,то это зна- чит, что с терминала были последовательно поданы две команды СУ/C. Этот разряд должен очищаться программой пользователя. Если аргумент addr равен нулю в запросе .SCCA , монитор вос- станавливает системные функции команды СУ/C . - 77 - 4.1.6.35. .SETTOP Запрос .SETTOP позволяет программе пользователя установить новый адрес в качестве верхней границы программы. Монитор определяет, является ли этот адрес допустимым и нужен ли свопинг USR. Например, если запрос определяет адрес ниже начального адреса USR, то свопинг USR не требуется. Если .SETTOP из фонового задания определяет адрес выше начального адреса .USR и ранее не была выполнена команда SET USR NOSWAP, то необходим свопинг USR . После выполнения .SETTOP R0 и ячейка 50 будут содержать адрес памяти, предоставленный монитором программе пользователя в качестве верхнего адреса программы. Если программа запрашивает по .SETTOP не- допустимый адрес для данного задания,монитор не удовлетворит это тре- бование и установит для программы фактически допустимую верхнюю грани цу памяти. Формат макрокоманды .SETTOP addr где addr -запрашиваемый адрес верхней границы программы. 4.1.6.36. .SFPA Запрос .SFPA позволяет пользователю,работающему с Блоком пла- вающей запятой, установить адрес подпрограммы обработки прерывания от БПЗ. Если адрес подпрограммы обработки прерывания не определен и про- исходит прерывание от БПЗ,монитор печатает сообщение об ошибке и уда- ляет программу пользователя из памяти. Формат макрокоманды .SFPA area, addr где area -адрес блока из 2-х слов аргументов ЕМТ; addr -адрес подпрограммы обработки прерывания от БПЗ. По окончании работы подпрограммы обработки прерывания от БПЗ, необходимо повторить запрос .SFPA , т.к. монитор запрещает обработку прерываний после обслуживания одного из них. Это делается для того, чтобы исключить возможность зацикливания программы при многократном повторении прерывания от БПЗ. При использовании БПЗ, перед запуском подпрограммы обработки прерывания от БПЗ, монитор выполняет команду STST -(SP). Поэтому, перед командой RTI, подпрограмма пользователя должна увеличить указатель стека на два. - 78 - 4.1.6.37. .SRESET Запрос .SRESET выполняет следующие функции: 1) удаляет из памяти драйверы устройств,которые были загруже- ны по запросу .FETCH ; драйверы, которые были загружены по команде LOAD , остаются резидентными, как и драйвер системного устройства; 2) стирает открытые в настоящее время файлы (файлы, открытые по .ENTER , никогда не станут постоянными); 3) восстанавливает число каналов ввода-вывода (16.); каналы, определенные по .CDFN ,аннулируются; 4) восстанавливает очередь ввода-вывода (первоначально - один элемент); QSET должен выполняться повторно для определения дополни- тельных элементов очереди.; 5) очищает очередь подпрограмм завершения. Формат макрокоманды .SRESET 4.1.6.38. .SYNCH Запрос .SYNCH позволяет в подпрограмме обработки прерывания использовать программные запросы. Без .SYNCH запросы из подпрограммы обработки прерывания не будут обрабатываться монитором. Формат макрокоманды .SYNCH area[,pic] где area -адрес блока из 7-ми слов; этот блок необходим при использо- вании .SYNCH ; содержимое блока формируется пользователем. pic -необязательный аргумент, который дает макрокоманде .SYNCH возможность образования PIC -кодов для использования драйверами уст- ройств. - 79 - Слово Содержимое --------------------------------------------------------------------- 1 Используется только системой; его содержимое не должно изме- няться пользователем 2 Номер текущего задания (0 или 2);может быть получен с помощью запроса .GTJB 3,4 Не используются 5 Аргумент R0 ; при успешном выполнении .SYNCH регистр R0 будет содержать этот аргумент 6 -1 7 0 Примечание. Между выполнением запросов .INTEN и .SYNCH нельзя выполнять операции со стеком. 4.1.6.39. .TLOCK Запрос .TLOCK может использоваться программами,которые выпол- няются в режиме FB, для того чтобы сделать USR резидентной,если толь- ко USR не занята обслуживанием другого задания. Если USR используется другим заданием, то при выполнении .TLOCK будет установлен С-разряд, что указывает на то,что запрос не выполнен. Формат макрокоманды .TLOCK 4.1.6.40. .TRPSET Запрос .TRPSET позволяет установить адрес подпрограммы обра- ботки прерывания по 4-му и 10-му векторам. Значение С-разряда на вхо- де в подпрограмму указывает на то,какое прерывание произошло: очищен- ный С-разряд - прерывание по 4-му вектору; установленный С-разряд - по 10-му вектору.Выход из подпрограммы обработки прерывания пользова- теля осуществляется по команде RTI . Если при переполнении стека произошло прерывание по 4-му век- тору, то оно не обрабатывается по .TRPSET и на терминале печатается сообщение ?MON-F-STACK OVERFLOW старыми версиями монитора SJ или ?MON-F-TRAP TO 4 монитором FB и XM и новыми версиями SJ. - 80 - Формат макрокоманды .TRPSET area, addr где area -адрес блока из 2-х слов аргументов ЕМТ; addr -адрес подпрограммы обработки прерывания;если addr=0,то пре- дыдущий .TRPSET отменяется. 4.1.6.41. .TWAIT Запрос .TWAIT приостанавливает выполнение программы пользова- теля на указанный интервал времени. Запрос .TWAIT требует для своего выполнения элемент очереди. Формат макрокоманды .TWAIT area, time где area -адрес блока из 2-х слов аргументов ЕМТ; time -адрес блока из двух слов,которые содержат величину интерва- ла времени (первое слово - нижнюю границу интервала, второе слово - верхнюю границу интервала). 4.1.6.42. .WAIT Запрос .WAIT приостанавливает выполнение программы до тех пор, пока не закончится операция ввода-вывода на указанном канале. По этому запросу можно получить информацию о правильности выполнения операции: если канал не открыт или произошла аппаратная ошибка, уста- навливается С-разряд. В режиме FB запрос .WAIT , если операция ввода-вывода не за- вершена, вызывает задержку выполнения одного из заданий и выполнение другого, если оно существует. Формат макрокоманды .WAIT chan - 81 - 5.СООБЩЕНИЯ ?CSI-F-DEVICE FULL ПРИЧИНА. На устройстве недостаточно места для выходного файла.Сообще- ние печатается в том случае, если программа использует запрос .CSIGEN ДЕЙСТВИЕ. Увеличить размер свободной области на томе: стереть или пе- реписать на другой том ненужные файлы, сжать том по команде SQUEEZE, использовать переключатель /ALLOCATE или конструкцию [n] для выходного файла. ?CSI-F-FILE NOT FOUND ПРИЧИНА. Входной файл не найден. ДЕЙСТВИЕ. Проверить поданную команду. ?CSI-F-ILLEGAL COMMAND ПРИЧИНА. Поданная команда имеет синтаксическую ошибку или ее длина превышает 80 знаков. ДЕЙСТВИЕ. Проверить команду. ?CSI-F-ILLEGAL DEVICE ПРИЧИНА. В системе не установлено обслуживание указанного устройства. На системном томе нет соответствующего драйвера. ДЕЙСТВИЕ. Проверить команду. Скопировать требуемый драйвер на системный том. ?KMON-F-ADDRESS ПРИЧИНА. Недопустимый адрес в команде E и D. Адрес должен быть в пре- делах от 0 до начала RMON или до начала драйверов, если они были загружены по команде LOAD. ДЕЙСТВИЕ. Проверить базу перемещения,если ранее была подана команда B. ?KMON-F-ALREADY INSTALLED/ASSIGNED ПРИЧИНА. Устройство уже описано в системных таблицах. ДЕЙСТВИЕ. Удалить имя устройства из таблицы монитора или отменить ло- гическое имя устройства, чтобы записать в таблицу имя нового драйвера. - 82 - ?KMON-F-AMBIGUOUS COMMAND ПРИЧИНА. Поданная команда определяется неоднозначно (например, CO мо- жет означать COPY или COMPILE). ДЕЙСТВИЕ. Использовать допустимое сокращение команды. ?KMON-F-AMBIGUOUS OPTION ПРИЧИНА. Указанный переключатель определяется неоднозначно. ДЕЙСТВИЕ. Использовать допустимое сокращение. ?KMON-F-BAD FETCH ПРИЧИНА. Ошибка чтения драйвера с системного тома. ДЕЙСТВИЕ. Убедиться,что драйверы устройств описаны в системных табли- цах и не содержат плохих блоков ?KMON-F-COMMAND FILE I/O ERROR ПРИЧИНА. Ошибка чтения косвенного файла. ДЕЙСТВИЕ. Убедиться, что аппаратура функционирует нормально. ?KMON-F-COMMAND FILE NESTING TOO DEEP ПРИЧИНА. Обращения к косвенному файлу на четвертом уровне вложения. ДЕЙСТВИЕ. Ограничить вложение косвенных файлов тремя уровнями. ?KMON-F-COMMAND FILE NOT AT END OF LINE ПРИЧИНА. Косвенный файл должен быть последним (не считая комментария) в строке команды Клавиатурного монитора.Наличие недопустимого символа в имени косвенного файла. ДЕЙСТВИЕ. Исправить команду.Убедиться,что имя косвенного файла содер- жит допустимые символы. ?KMON-F-COMMAND FILE NOT FOUND ПРИЧИНА. На системном устройстве нет косвенного файла с указанным именем. ДЕЙСТВИЕ. Проверить, есть ли на системном устройстве указанный файл. ?KMON-F-COMMAND STPING TOO COMPLICATED ПРИЧИНА. Команда слишком сложна для анализа.(Команда содержит большое число переключателей). ДЕЙСТВИЕ. Упростить команду. - 83 - ?KMON-F-CONFLICTING OPTION ПРИЧИНА. В команде указаны несовместимые переключатели. ДЕЙСТВИЕ. Исправить команду. ?KMON-F-CONFLICTING SYSTEM OPTION ПРИЧИНА. Используются несовпадающие варианты генерации драйвера уст- ройства и RMON. ДЕЙСТВИЕ. Проверить соответствие вариантов генерации. ?KMON-F-DEVICE LOADED OR NOT REMOVABLE ПРИЧИНА. В команде REMOVE указан недопустимый драйвер устройства (ТТ, BA,драйвер системного устройства).Драйвер,указанный в команде REMOVE,является резидентным в памяти. ДЕЙСТВИЕ. Использовать команду UNLOAD перед REMOVE. ?KMON-F-ERROR IN FILE SPEC ПРИЧИНА. Ошибка в формате спецификации файла. Спецификация файла от- сутствует в команде. ДЕЙСТВИЕ. Подать правильную команду. ?KMON-F-FILE NOT FOUND ПРИЧИНА. Файл,указанный в команде R,RUN,GET или FRUN не найден. ДЕЙСТВИЕ. Проверить поданную команду. ?KMON-F-FOREGROUND ACTIVE ПРИЧИНА. Попытка выполнить команду FRUN или UNLOAD FG когда выполня- ется программа в основной области памяти. ДЕЙСТВИЕ. Ждать завершения работы основной программы, перед тем как выполнить команду FRUN или UNLOAD ?KMON-F-HANDLER FILE I/O ERROR ПРИЧИНА. Аппаратная ошибка чтения нулевого блока драйвера. ДЕЙСТВИЕ. Проверить правильность функционирования аппаратуры. ?KMON-F-ILLEGAL COMMAND ПРИЧИНА.Подана недопустимая команда KMON. ДЕЙСТВИЕ. Проверить команду. - 84 - ?KMON-F-ILLEGAL CONTINUATION ПРИЧИНА. Попытка продолжить строку косвенного файла на системный тер- минал. ДЕЙСТВИЕ. Исправить косвенный файл. ?KMON-F-ILLEGAL DATE ПРИЧИНА. Недопустимый аргумент в команде DATE. ДЕЙСТВИЕ. Проверить команду. ?KMON-F-ILLEGAL DEVICE ПРИЧИНА. Указано недопустимое или несуществующее устройство. Попытка выполнить операцию, недопустимую для указанного устройства. Попытка выполнить команду UNLOAD для драйвера устройства, с которым работает основное задание. Попытка установить в системе обслуживание TT: или BA: по команде INSTALL . ДЕЙСТВИЕ. Проверить поданную команду.Выполнить UNLOAD после завершения работы основного задания. Скопировать драйверы TT: и BA: на системный том и перезагрузить систему. ?KMON-F-ILLEGAL DEVICE FOR COMMAND FILE ПРИЧИНА. Косвенный файл вызван с устройства последовательного доступа к данным (PC: , MT:). ДЕЙСТВИЕ. Использовать для косвенного файла устройство с произвольным доступом к данным ( RK: ,DX: ) . ?KMON-F-ILLEGAL NO ON OPTION. ПРИЧИНА. Префикс NO не применим для указанного переключателя (напри- мер, COPY/NOBOOT ). ДЕЙСТВИЕ. Проверить поданную команду. ?KMON-F-ILLEGAL OPTION ПРИЧИНА. В команде указан недопустимый переключатель. ДЕЙСТВИЕ. Проверить поданную команду. ?KMON-F-ILLEGAL OPTION FOR PROGRAM ПРИЧИНА. Используемый переключатель относится к другой команде. ДЕЙСТВИЕ. Выбрать соответствующий переключатель. - 85 - ?KMON-F-ILLEGAL REL FILE FORMAT ПРИЧИНА.Формат указанного файла не является перемещаемым форматом отображения памяти. ДЕЙСТВИЕ. Использовать соответствующий формат файла. ?KMON-F-ILLEGAL TIME ПРИЧИНА. Недопустимый аргумент в команде TIME ДЕЙСТВИЕ. Проверить поданную команду. ?KMON-F-ILLEGAL UNIT NUMBER ПРИЧИНА. В команде SET TT:CONSOL=n указан недопустимый логический номер терминала (ЛНТ). ДЕЙСТВИЕ. Использовать допустимый для данной конфигурации терминал. ?KMON-F-ILLEGAL VALUE ON OPTION ПРИЧИНА. В переключателе указан недопустимый аргумент (например, DIRECTORY/COLUMN:n ,где n превышает допустимое число колонок) ДЕЙСТВИЕ. Использовать допустимый аргумент. ?KMON-F-LINE TOO LONG ПРИЧИНА. Команда или строка косвенного файла превышает допустимую длину (максимальная длина - 200. знаков). ДЕЙСТВИЕ. Использовать допустимую длину команды (строки). ?KMON-F-LOGICAL NAME NOT FOUND ПРИЧИНА. Логическое имя устройства, указанное в команде DEASSIGN, в системе не определено. ДЕЙСТВИЕ. Проверить поданную команду. Использовать команду SHOW для получения информации о логических именах устройств. ?KMON-F-MUST 'R BATCH', TYPE '/U' ПРИЧИНА. Попытка выполнить команду UNLOAD BA без предварительной разгрузки драйвера. ДЕЙСТВИЕ. Вызвать BATCH и использовать переключатель /U для разгрузки драйвера. BATCH автоматически выполнит команду UNLOAD BA. - 86 - ?KMON-F-NO CLOCK ПРИЧИНА. Нет таймера. ДЕЙСТВИЕ. Использовать команду TIME нельзя. ?KMON-F-NO DATE ПРИЧИНА.Дата не установлена. ДЕЙСТВИЕ.Ввести дату,используя команду DATE. ?KMON-F-NO FG ПРИЧИНА. Попытка выполнить команду SUSPEND, RESUME или UNLOAD FG, когда в памяти нет основного задания. ДЕЙСТВИЕ. Проверить поданную комнду. ?KMON-F-NO FILE ПРИЧИНА. В команде не указано имя файла. ДЕЙСТВИЕ. Проверить поданную команду. ?KMON-F-NO HANDLER FILE ON SY: ПРИЧИНА. Указанного драйвера нет на системном томе. ДЕЙСТВИЕ. Скопировать требуемый драйвер на системный том. ?KMON-F-NO ROOM ПРИЧИНА. Нет свободного места в таблицах монитора при попытке устано- вить в системе обслуживание нового устройства (по команде INSTALL) или при попытке присвоить устройству логическое имя (по команде ASSIGN ). ДЕЙСТВИЕ. Использовать команду REMOVE или DEASSIGN. ?KMON-F-NOT ENOUGH MEMORY ПРИЧИНА. Для выполнения загружаемой программы (по команде GET или RUN) недостаточно свободного места памяти. ДЕЙСТВИЕ. По команде UNLOAD удалить из памяти драйверы не использую- щихся устройств. Использовать команду SET USR SWAP для разре- шения свопинга программы USR. Если получено при запуске NED, скопируйте любой файл куда-нибудь,например на SL: и повторите запуск NED. - 87 - ?KMON-F-OVERLAY READ ERROR ПРИЧИНА. Аппаратная ошибка чтения оверлейного сегмента KMON.Системный файл монитора имеет плохой блок. Испорчен монитор в памяти. ДЕЙСТВИЕ. Проверить правильность функционирования аппаратуры. Вызвать другой файл монитора по команде BOOT.Попробовать перезагрузи- ться и проверить логику программы. ?KMON-F-PARAMETERS ПРИЧИНА. Аргументы команды SAVE указаны неправильно. ДЕЙСТВИЕ. Проверить поданную команду. ?KMON-F-REL FILE I/O ERROR ПРИЧИНА. Недопустимый формат файла для основного задания.Аппаратная ошибка чтения (записи) файла. ДЕЙСТВИЕ. Проверить поданную команду. Проверить правильность функцио- нирования аппаратуры. ?KMON-F-SAVE FILE I/O ERROR ?KMON-F-INPUT ERROR ?KMON-F-OUTPUT ERROR ПРИЧИНА. Ошибка при вводе файла формата отображения памяти (SAV) по команде R,RUN или GET , или при выводе файла по команде SAVE. Возможна аппаратная ошибка. ДЕЙСТВИЕ. Проверить,что указанный файл имеет формат отображения па- мяти.Убедиться в том, что при выполнении команды SAVE на томе достаточно свободного места для записи нового файла.Проверить правильность функционирования аппаратуры. ?KMON-F-SYSTEM I/O ERROR ПРИЧИНА. Аппаратная ошибка при выполнении операции свопинга. ДЕЙСТВИЕ. Проверить установку защиты записи. Проверить правильность функционирования аппаратуры. ?KMON-F-TOO MANY FILES ПРИЧИНА. В команде указано недопустимое число файлов. ДЕЙСТВИЕ. Проверить команду. - 88 - ?MON-F-BAD FETCH ПРИЧИНА. Ошибка чтения драйвера с системного устройства. Недопустимый адрес загрузки драйвера. ДЕЙСТВИЕ. Проверить,что адрес загрузки драйвера находится в пределах программы. ?MON-F-DIR I/O ERR (см. ?MON-F-DIRECTORY I/O ERROR) ?MON-F-DIR OVFLO (см. ?MON-F-DIRECTORY OVERFLOW) ?MON-F-DIRECTORY I/O ERROR ПРИЧИНА. Аппаратурная ошибка при выполнении операции ввода-вывода справочника устройства. ДЕЙСТВИЕ. Проверить диск на плохие блоки.Проверить правильность функ- ционирования аппаратуры. ?MON-F-DIRECTORY OVERFLOW ?MON-F-DIRECTORY FULL ПРИЧИНА. Переполнение справочника устройства (при выполнении запроса .ENTER) ДЕЙСТВИЕ. Использовать команду INITIALIZE/SEGMENTS для увеличения чи- сла сегментов справочника. Стереть или переписать на другой том ненужные файлы. Слить несколько соседних FILE.BAD в один командой CREATE и/или программой DESS ?MON-F-FP TRAP ПРИЧИНА. Произошло прерывание от БПЗ, но программой пользователя не установлен адрес подпрограммы обработки этого прерывания (по .SFPA ). ДЕЙСТВИЕ. Не требуется. Программа пользователя удаляется из памяти. ?MON-F-FPU TRAP (см.?MON-F-FP TRAP ) ?MON-F-ILL ADDR (см.?MON-F-ILLEGAL ADDRESS) ?MON-F-ILL CHAN (см.?MON-F-ILLEGAL CHANNEL) ?MON-F-ILL EMT (см.?MON-F-ILLEGAL EMT ) - 89 - ?MON-F-ILL SST (только для монитора XM) ПРИЧИНА. Неправильно установлен вектор прерывания для команды BPT, IOT или TRAP (нечетный или нулевой адрес). ДЕЙСТВИЕ. Установить правильно вектор прерывания.Проверить программу, ошибка в которой может вызвать непредусмотренное прерывание. ?MON-F-ILL USR (см.?MON-F-ILLEGAL CALL TO USR) ?MON-F-ILLEGAL ADDRESS ПРИЧИНА. Адрес, указанный в запросе, нечетный или вне границ задания. ДЕЙСТВИЕ. Исправить адрес. ?MON-F-ILLEGAL CALL TO USR ПРИЧИНА. Попытка вызвать USR из подпрограммы завершения. ДЕЙСТВИЕ. Исправить программу. ?MON-F-ILLEGAL CHANNEL ПРИЧИНА. Указан недопустимый номер канала. ДЕЙСТВИЕ. Использовать запрос .CDFN для определения дополнительных каналов ввода-вывода. ?MON-F-ILLEGAL EMT ПРИЧИНА. Недопустимая команда ЕМТ. ДЕЙСТВИЕ. Проверить функциональный код в команде ЕМТ. ?MON-F-MEM ERR ?MON-F-MEMORY NNNNNN ПРИЧИНА.Ошибка памяти по адресу NNNNNN ДЕЙСТВИЕ.Проверить оперативную память с помощью тест-программ. ?MON-F-MMU FAULT NNNNNN (только для монитора XM) ПРИЧИНА.Обращение к адресу, который находится вне границ отображенной программы. ДЕЙСТВИЕ.Проверить команду, предшествующую команде с адресом NNNNNN и исправить ее. - 90 - ?MON-F-NO DEV ?MON-F-NO DEVICE ПРИЧИНА.Попытка выполнить операцию чтения (записи) при отсутствии в памяти драйвера указанного устройства. ДЕЙСТВИЕ.Загрузить соответствующий драйвер по команде LOAD перед за- грузкой программы. ?MON-F-OVERLAY ERROR ПРИЧИНА.Ошибка чтения оверлейного сегмента программы пользователя. ДЕЙСТВИЕ.Убедиться, что устройство работает не в автономном режиме и что загружен соответствующий драйвер,если оверлейная програм- ма вызывается с устройства другого типа,чем системное устрой- ство. ?MON-F-ROWER FAIL HALT ПРИЧИНА.Нарушение питания. ДЕЙСТВИЕ.Перезагрузить систему. ?MON-F-STACK OVERFLOW ПРИЧИНА.Прерывание по 4 или 10 векторам.Переполнение стека (указатель стека ниже 400). ДЕЙСТВИЕ.См.сообщение ?MON-F-TRAP TO 4 ?MON-F-SWAP ERROR ПРИЧИНА.Аппаратная ошибка при записи программы пользователя на диск во время операции свопинга. ДЕЙСТВИЕ.Проверить готовность устройства к выполнению операции записи ?MON-F-SYSTEM HALT ПРИЧИНА.Ошибка при выполнении системной программы. ДЕЙСТВИЕ.Перезагрузить систему. ?MON-F-SYSTEM READ ERROR ПРИЧИНА.Ошибка чтения KMON или USR монитором FB или XM .Файл монитора содепжит плохой блок или системный том уже разгружен. ДЕЙСТВИЕ.См.SYSTEM READ FAILURE HALT - 91 - ?MON-F-SYSTEM READ FAILURE HALT ПРИЧИНА.Попытка прочитать в память KMON или USR, когда системный том разгружен или файл монитора,находящийся на системном устрой- стве,имеет плохие блоки. ДЕЙСТВИЕ.Использовать новую копию файла монитора. Поставить на место системный диск и запустить систему пультовой командой G ?MON-F-SYSTEM WRITE ERROR ПРИЧИНА.Попыка записи на системное устройство при установленной защите записи.Возможна аппаратная ошибка. ДЕЙСТВИЕ.Разрешить запись на диск. Проверить правильность функциони- рования аппаратуры. ?MON-F-TRAP TO 4 ?MON-F-TRAP TO 10 ПРИЧИНА.Обращение к несуществующей памяти или неспособность устрой- ства передать или принять информацию за отведенное ему вре- мя. Используется несуществующая команда. Произошло переполне- ние стека. Неправильная адресация. ДЕЙСТВИЕ.Определить границы программы пользователя по карте загрузки или по содержимому ячеек 40, 46, 50 и 54. Если ошибка произо- шла в пределах программы пользователя, проверить программу. Проверить, что программа пользователя не разрушила области стека, элементов очереди ввода-вывода или самого монитора. Проверить правильность выполнения свопинга USR .Проверить, нет ли обращения к несуществующему устройству. ?MON-F-UNLOADED DRIVER (только для мониторов FB ,XM) ПРИЧИНА.Попытка обращения к устройству, драйвер которого отсутствует в оперативной памяти. ДЕЙСТВИЕ.Драйверы устройств для основного задания монитора FB и зада- ний монитора XM должны быть резидентными в памяти. Использо- вать команду LOAD для загрузки драйверов устройств перед за- пуском программы. - 92 - ?MON-W-DIRECTORY UNSAFE NNNNNN (только для мониторов FB и XM). ПРИЧИНА.Ошибка в команде, предшествующей команде с адресом NNNNNN , при корректировке справочника устройства программой USR . ДЕЙСТВИЕ.Монитор пытается завершить операцию со справочником прежде чем удалить программу из памяти. Проверить справочник устрой- ства, т.к. возможна потеря информации. ?MSBOOT-F-FILE NOT FOUND ПРИЧИНА.Указанный файл отсутствует на магнитной ленте. ДЕЙСТВИЕ.Проверить поданную команду. ?MSBOOT-F-I/O ERROR ПРИЧИНА. Аппаратная ошибка при выполнении операции загрузки с магнитной ленты . ДЕЙСТВИЕ.Проверить правильность установки тома магнитной ленты. ?MSBOOT-F-ILLEGAL FILE NAME ПРИЧИНА. Указано недопустимое имя файла. ДЕЙСТВИЕ.Проверить поданную команду.Проверить формат файла. ?MSBOOT-F-LINE TOO LONG ПРИЧИНА.Командная строка в MSBOOT имеет длину более 80 знаков ДЕЙСТВИЕ.Проверить поданную командную строку. ?BOOT-F-I/O ERROR ПРИЧИНА.Ошибка ввода-вывода во время загрузки системы. ДЕЙСТВИЕ.Проверить наличие на системном диске соответствующего дан- ному загрузчику монитора. Проверить диск на плохие блоки Записать на диск системный загрузчик. ?BOOT-F-INSUFFICIENT MEMORY ПРИЧИНА.Объем оперативной памяти не позволяет разместить загружаемый монитор. ДЕЙСТВИЕ.Использовать другой монитор. - 93 - ?BOOT-F-INVALID OR MISSING TT.SYS ПРИЧИНА.На загружаемом томе нет драйвера TT: . Вариант генерации драйвера TT: не соответствует варианту генерации монитора. ДЕЙСТВИЕ.Записать на том файл TT.SYS. Проверить соответствие вариантов генерации драйвера TT: и монитора. ?BOOT-F-NO MEMORY MANAGEMENT HARDWARE ПРИЧИНА.Попытка загрузить монитор XM при отсутствии диспетчера памяти ДЕЙСТВИЕ.Использовать монитор SJ или FB,или систему,имеющую диспетчер памяти. ?BOOT-F-NO MONITOR FILE ON VOLUME ПРИЧИНА.На системном томе нет монитора с соответствующим данному за- грузчику именем. ДЕЙСТВИЕ.Проверить правильность выбора системного тома. ?BOOT-F-NO SWAP ON VOLUME ПРИЧИНА.На загруженном томе нет файла SWAP.SYS. ДЕЙСТВИЕ.Использовать другой системный том для копирования файла SWAP.SYS и перезагрузить систему. ?BOOT-F-SWAP FILE IS TOO SMALL ПРИЧИНА.Размер файла SWAP.SYS менее 24. блоков. ДЕЙСТВИЕ.Использовать другой системный том для увеличения размера файла до 24. блоков и перезагрузить систему.Использовать SET USR NOSWAP(SWAP.SYS=0blocks SJ, =2blocks CD) - 94 - ПРИЛОЖЕНИЕ 1 Коды ошибок программных запросов Запрос Код Причина ошибки -------------------------------------------------------------------- .CDFN 0 Попытка определить меньшее число каналов,чем есть в наличии .CHCOPY 0 Другое задание не существует или канал (ochan) не открыт 1 Канал (chan) занят .CMKT 0 Запрос с указанием id (id<>0) не существует .CNTXSW 0 В списке адресов указан не допустимый адрес .CSIGEN 0 Недопустимая команда 1 Указанного устройства нет в таблицах системы 3 Попытка открыть файл по .ENTER неудачна из-за пере- полнения справочника устройства 4 Входной файл не найден при выполнении .LOOKUP .CSISPC 0 Недопустимая команда 1 Недопустимое устройство .CSTAT 0 Канал не открыт .DELETE 0 Указанный канал занят 1 Файл не найден в справочнике устройства 2 Недопустимая операция .DSTATU 0 Устройство не найдено в таблицах системы .ENTER 0 Указанный канал занят 1 На устройстве не найдена область большая или равная М (len=M); или устройство или справочник устройства переполнены .FETCH 0 Недопустимое имя устройства или в системе отсутствует драйвер указанного устройства .RELEAS 0 Недопустимое имя устройства .GVAL 0 Указанное значение смещения находится вне области RMON .LOOKUP 0 Указанный канал занят 1 Указанного файла нет на устройстве .MRKT 0 Нет свободного элемента очереди - 95 - .MTATCH 2 Несуществующий ЛНТ 4 Терминал логически связан с другим заданием 5 Недействительный адрес слова асинхронного состояния терминала (в режиме XM) .MTDTCH 1 Недопустимый логический номер терминала ;терминал не связан с заданием 2 Несуществующий ЛНТ .MTGET 1 Недопустимый номер терминала;терминал не связан с заданием 2 Несуществующий ЛНТ 5 Недействительный адрес слова асинхронного состояния терминала .MTIN 0 Нет символов в буфере ввода 1 Недопустимый номер терминала; терминал не связан с заданием 5 Недействительный адрес слова асинхронного состояния терминала (в режиме XM) .MTOUT 0 Нет свободного места в буфере вывода 1 Недопустимый номер терминала,терминал не связан с за- данием 2 Несуществующий ЛНТ .MTPRNT 1 Недопустимый номер терминала; терминал не связан с заданием 2 Несуществующий ЛНТ 5 Недействительный адрес слова асинхронного состояния терминала .MTRCTO 1 Недопустимый номер терминала; терминал не связан с заданием 2 Несуществующий ЛНТ .MTSET 1 Недопустимый номер терминала; терминал не связан с заданием 2 Несуществующий ЛНТ 5 Недействительный адрес слова асинхронного состояния терминала (в режиме XM) .PROTE 0 Указанный вектор уже используется 1 Адрес вектора больше 476 или не кратен четырем .UNPRO 1 Адрес вектора больше 476 или не кратен четырем - 96 - .RCVD 0 Попытка обращения к несуществующему заданию .RCVDC .RSVDW .READ 0 Попытка чтения после конца файла .READC .READW 1 Аппаратная ошибка на канале 2 Указанный канал не открыт .RENAME 0 Указанный канал занят 1 Файл не найден 2 Недопустимая операция .REOPEN 0 Указанный канал занят .SAVEST 0 Указанный канал не открыт 1 Файл открыт по .ENTER или находится на магнитной лен- те,поэтому .SAVESTATUS для него недопустим .SDAT 0 Попытка обращения к несуществующему заданию .SDATC .SDATW .SPFUN 0 Попытка чтения или записи после конца файла 1 Аппаратная ошибка на канале 2 Канал не открыт .TLOCK 0 USR уже используется другим заданием .TTYIN 0 Нет символа в буфере ввода .TTINR .TTYOUT 0 Буфер вывода переполнен .TTOUTR .TWAIT 0 Нет свободного элемента очереди .WAIT 0 Указанный канал не открыт 1 Аппаратная ошибка на канале во время выполнения пре- дыдущей операции ввода-вывода .WRITE 0 Попытка записи после конца файла .WRITC .WRITW 1 Аппаратная ошибка на канале 2 Канал не открыт - 97 - Примечания: 1.Для запроса .SYNCH возврат по ошибке происходит в следую- щих случаях: -не закончена макрокоманда .SYNCH,использующая тот же блок аргументов ЕМТ; -указан недопустимый номер задания; -если произошло удаление или останов программы. При этом управление передается на следующую за .SYNCH ячейку. Если макрокоманда .SYNCH выполнена успешно,то возврат проис- ходит в следующую за возвратом по ошибке ячейку. 2.При выполнении запросов,не указанных в табл.30,ошибок не происходит. ПРИЛОЖЕНИЕ 2 Структура блока (cblk),содержащего информацию о состоянии канала: Слово Разряд Значение Описание --------------------------------------------------------------------- 1 0 1 Аппаратная ошибка на канале (слово 1-5 n n-индекс устройства в таблицах монитора состоя- (идентифицирует физическое устройство,которое ния ка- связано с используемым каналом) нала) 6 1 На канале выполняется запрос .RENAME 7 1 На канале выполнен .ENTER; справочник устрой- ства должен модифицироваться по запросу.CLOSE 8-12 Номер сегмента справочника (1-37),в котором находится запись о текущем файле 13 1 Обнаружена метка конца файла (EOF) 14 - Не используется 15 1 Канал занят 2 Номер начального блока файла на томе;значение слова равно нулю,если устройство последова- тельного доступа - 98 - 3 Длина файла в блоках 4 Не используется 5 Четный байт-число незавершенных операций вво- да-вывода на канале; нечетный байт-номер при- вода устройства,связанного с каналом (от 0 до 7)