Документ кропотливо восстановлен из фотокопии, которую любезно предоставил ММ. Который превозмог себя и по-быстрому отфотографировал документ из собственной коллекции.

УТВЕРЖДЁН

00008-01.32.02-1-ЛУ

 

 

 

 

 

ПЕРСОНАЛЬНАЯ ЭВМ "ЭЛЕКТРОНИКА МС0513"
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

ОПЕРАЦИОННАЯ СИСТЕМА ОС БК11

УПРАВЛЯЮЩАЯ СИСТЕМА

РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА

00008-01.32.02-1

 

Документ совпадает с книгой "Руководство системного программиста. Книга 3. Управляющая система." Из комплекта документации РАФОС-II, но только в части, касающейся SJ-монитора и без расширенной памяти

 

 

 

 

 

 

1988


СОДЕРЖАНИЕ


1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ

В разделе содержится информация о компонентах системы ОС БК-11 которые могут быть резидентны в памяти, о размещении этих компонентов в физическом памяти и о динамическом изменении их положения.

Описываемые компоненты можно разделить на две группы: статические, которые имеют фиксированное положение памяти, и динамические, расположение которых в памяти может изменяться.

1.1. СТАТИЧЕСКИЕ КОМПОНЕНТЫ

Статические компоненты занимают постоянное (фиксированное) положение в памяти. К ним относятся:

1.1.1. ВЕКТОРА ПРЕРЫВАНИЙ ПО ИНСТРУКЦИЯМ ПРОЦЕССОРА

Ячейки некоторых областей памяти зарезервированы для системного использования (рис. 1). Монитор не загружает эти ячейки во время инициализации программ (например, команды RUN, GET не модифицируют эти слова) за исключением случаев, указанных особо.

Примечание. Под ячейкой в данном разделе понимается слово оперативной памяти ЭВМ БК-0011.

Рисунок 1

Рис. 1

Ниже приводится описание этих ячеек:

0, 2

Используются для рестарта (повторного запуска) монитора; при передаче управления по адресу 0 выполняется системная макрокоманда .EXIT и управление передаётся монитору; изменение этих ячеек во время работы монитора приведёт к разрушению системы;

4, 6

Вектор прерываний по временным задержкам и при обращении пословной инструкции по нечётному адресу (например, передача управления на нечётный адрес или обращение к несуществующей ячейке оперативной памяти) (прим. ред. - это копипаста с оригинального документа, архитектура БК свободно позволяет словное обращение по нечётным адресам); монитор записывает в ячейку 4 адрес подпрограммы обработки внутренних прерываний;

10, 12

Вектор прерываний при использовании зарезервированной инструкции; в ячейку 10 монитор записывает адрес подпрограммы обработки внутренних прерываний;

14, 16*

Вектор прерываний по инструкции BPT и после выполнения инструкции при установленном T-бите; прерывание используется при отладке прикладной программы средствами ОС БК-11 (ODT и др.);

20, 22*

Вектор прерываний по инструкции IOT;

24, 26*

Вектор прерываний по падению напряжения в сети питания;

30, 32

Вектор прерываний по инструкции EMT; используется системой для обработки программных запросов;

34, 36*

Вектор прерываний по инструкции TRAP; эти ячейки загружаются при выполнении команд монитора R, RUN и GET.

Примечания:

  1. Нельзя использовать инструкции TRAP в подпрограммах, написанных на ассемблере, если они компонуется с программами на языках высокого уровня, поскольку в языках высокого уровня для сообщений о внутренних ошибках используются инструкции TRAP (например, в языке Фортран СМ).
  2. Звёздочкой (*) отмечены векторы, которые могут быть использованы в программе пользователя.

1.1.2. СИСТЕМНАЯ ОБЛАСТЬ СВЯЗИ (SYSCOM)

Байты 40-57 называются системной областью связи. Они содержат информацию о системе и о программе, выполнявшейся в данный момент (см. рис. 1). Эта информация необходима как монитору, так и программисту (чтобы использовать эти сведения в программе, можно применять системные макрокоманды, определяющие символьные обозначения этих байтов). Содержимое этих ячеек определяется при загрузке монитора (в части, касающейся системы) и при загрузке программы. Информация о программе берётся из соответствующих ячеек нулевого блока файла загрузочного модуля программы (т.е. определяется на этапе её компоновки) и может быть изменена самой программой во время её выполнения. При перечислении рядом с адресами байтов приведены их символьные имена, указанные в скобках:

40, 41

(USERPC)

Стартовый адрес программы; это слово устанавливается либо компоновщиком, либо самой программой;

42, 43

(USERSP)

Начальное значение указателя стека; это слово устанавливается программой пользователя с помощью директивы .ASECT; по умолчанию берётся 1000 или верхний адрес области .ASECT; указатель стека также может быть установлен ключами компоновщика;

44, 45

(JSW)

Слово состояния программы; часть его битов используется только монитором, остальные могут быть изменены программой пользователя;

46, 47

(UFLOAT)

Адрес загрузки USR; в это слово, обычно равное 0, программой пользователя может быть установлен любой адрес в области программы; если слово равно 0, USR загружается по адресу, содержащемуся в ячейке 266 относительно начала RMON;

50, 51

(USERTOP)

Верхний адрес программы; в этом слове содержится старший адрес памяти, который предоставляется системой программе пользователя; первоначально устанавливается компоновщиком; может быть изменён системной макрокомандой .SETTOP;

52

(ERRBYT)

Байт ошибки EMT; при появлении ошибки в процессе выполнения системной макрокоманды код ошибки передаётся в данный байт, а в PS устанавливается бит "C"; каждая системная макрокоманда имеет свой набор кодов ошибок;

53

(USERRB)

Статус завершения программы; при появлении ошибки во время выполнения программы информация о типе ошибки устанавливается в данном байте; используется для отслеживания работы командного файла;

54, 55

(SYSPTR)

Нижний адрес резидентного монитора; ОС БК-11 всегда загружает резидентную часть монитора в верхние адреса памяти (ниже 48 Кбайт); данное слово указывает на первую ячейку памяти резидентного монитора RMON; значение этого слова изменять запрещено;

56

(TTFILL)

Знак, требующий заполнители; некоторые высокоскоростные терминалы требуют знаки-заполнители после вывода определённых символов; байт 56 содержит код (в КОИ-7) символа, требующего после себя вывода знаков-заполнителей. В ОС БК-11 не используется и равен 0;

57

(TTNFIL)

Счётчик заполнителей; количество знаков-заполнителей определяется в зависимости от аппаратуры; если байты 56 и 57 равны нулю, то заполнители не требуются. В ОС БК-11 не используется и равен 0.

Примечание. Ячейка 52 должна использоваться всегда как байт, а не слово, т.к. байт 53 применяется для указания статуса завершения программы.

1.1.2.1. СТАТУС ЗАВЕРШЕНИЯ ПРОГРАММЫ (USERRB)

При загрузке интерактивный монитор (KMON) проверяет статус завершения пользовательской программы. Если при выполнении пользовательской программы имелись серьёзные ошибки, информация о которых содержится в байте USERRB, то KMON может прервать (прекратить) дальнейшее выполнение текущего командного файла. Таким образом, производится контроль за выполнением команд в командном файле. Это особенно важно, если корректное выполнение последующих команд зависит от успешного завершения предшествующих.

Имеются следующие статусы завершения программы:

SUCCESS

успешное завершение; этот статус завершения означает, что программа была выполнена без ошибок;

WARNING

завершение с предупреждением; этот статус означает, что при выполнении программы было выдано предупреждающее сообщение, но программа выполнилась полностью;

ERROR

ошибка; этот статус означает, что программа не выполнилась из-за наличия ошибки; этот статус используется в системных программах ОС БК-11, если они создают выходные файлы, несмотря на содержащиеся в них ошибки; например, компилятор может использовать этот статус для указания того, что объектный файл создан, но программа пользователя содержит ошибки; при этих условиях результат работы объектного файла при выполнении модуля, содержащего ошибки, будет непредсказуем;

SEVERE ERROR

серьёзная ошибка; этот статус означает, что программой не были созданы выходные данные; в этом случае некоторая команда или операция, которая использует эти данные, не может быть выполнена корректно; этот статус может быть установлен, если отсутствуют ресурсы, необходимые программе для полного её завершения; например, отсутствие достаточной области памяти для ассемблирования или компиляции прикладной программы;

FATAL ERROR

неустранимая ошибка; этот статус означает, что не только прервано выполнение программы, но возможно испорчен монитор.

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

При отладке командных файлов можно задать команду монитора "SET ERROR NONE". Это позволит продолжить выполнение командных файлов при наличии любого типа ошибок, кроме неустранимой. В табл. 1 представлены коды типов ошибок, которые могут быть установлены в байте 53.

Таблица 1

Номер бита

Значение маски (восьмеричное)

Тип ошибки

Сообщение в ОС БК-11

0

1

SUCCESS

?РRОG-I-ТЕХТ или
сообщение отсутствует

1

2

WARNING

?РRОG-W-TEXT

2

4

ERROR

?РRОG-E-TEXT

3

10

SEVERE

?РRОG-F-TEXT

4

20

FATAL

?РRОG-U-TEXT

Примечание. Биты 5-7 зарезервированы для применения в следующих версиях ОС БК-11 и их не рекомендуется использовать в прикладных программах. Программы не должны обнулять байт 53, можно только устанавливать необходимый бит с помощью инструкции BISB.

Пример.

USERRB = 53
SUCCS¤ = 1
WARN¤  = 2
ERROR¤ = 4
SEVER¤ = 10
UFATL¤ = 20
        .
        .
        .
ERROR:  BISB  #ERROR¤,USERRB ; УСТАНОВИТЬ СТАТУС ОШИБКИ
                             ; "ERROR"
        CLR   R0
        .EXIT

Определение символьных обозначений рекомендуется выполнять с помощью системной макрокоманды .USRDF.

Если при работе программы было установлено несколько битов, то система ОС БК-11 определяет статус по биту с наибольшим порядковым номером.

Примечание. Следует помнить, что байт 53 имеет смысл только для KMON и программ, т.к. он предназначен для использования в системных программах и языковых процессорах (PIP, DIR, DUP, MACRO и т.д.), которые выполняются как задания.

1.1.2.2. СЛОВО СОСТОЯНИЯ ПРОГРАММЫ (JSW)

Байты 44 и 45 содержат слово состояния программы (JSW). Ниже даётся описание битов JSW. Биты, отмеченные "*", устанавливаются монитором или программой во время выполнения программы. Биты, отмеченные "+", устанавливаются перед загрузкой программы, а биты, отмеченные "*+", могут быть установлены как до, так и при выполнении программы.

15

(USWAP¤)

бит свопинга USR; устанавливается, если USR резидентна;

14*+

(TTLC¤)

бит ввода кириллицы; если он установлен, ввод кириллицы разрешён; редактор текстов EDIT, например, устанавливает этот бит при выполнении команды "EL";

13*+

(RSTRT¤)

бит рестарта; устанавливается, если программа может быть повторно запущена по команде REENTER с терминала;

12*+

(TTSPC¤)

бит спецрежима системного терминала; если он установлен, то программа находится в специальном режиме ввода с системного терминала (используется системными макрокомандами .TTYIN и .TTINR);

11+

(CHNIF¤)

бит командного файла; если он установлен, то по окончании выполнения программы выполняется командный файл (используется системной макрокомандой .EXIT);

10+

(VIRT¤)

бит виртуальной программы, в ОС БК-11 не используется и равен 0;

9

(OVLY¤)

бит оверлейной программы; устанавливается компоновщиком при наличии оверлейных структур;

8+

(CHAIN¤)

этот бит может быть использован двумя способами:

  1. если в загрузочном модуле этот разряд не установлен, то он устанавливается монитором при загрузке программы макрокомандой .CHAIN и в байты с 500 по 777 не производится запись информации из соответствующих ячеек нулевого блока загрузочного модуля. Эти ячейки можно использовать для передачи информации загружаемой программе (обычный вариант);
  2. если этот бит был установлен пользователем в JSW программы перед её загрузкой макрокомандой .CHAIN, то в этом случае в байты с 500 по 777 будет производиться запись (т.е. загрузка будет выполняться аналогично загрузке по команде монитора R или RUN);

7*+

(HLTER¤)

бит останова по ошибке ввода/вывода; если пользователь хочет прервать выполнение программы при возникновении ошибки ввода/вывода, он должен установить этот бит;

6*+

(TCBIT¤)

бит запрета ожидания ввода/вывода для системного терминала, в ОС БК-11 не используется и равен 0;

5, 4

 

зарезервированы для дальнейшего использования;

3*+

 

бит незавершённой системной макрокоманды .GTLIN; используется макрокомандой .GTLIN для получения строки с терминала, если она отсутствует в командном файле; этот бит используется в таких системных программах как LINK, DUP, SRCCOM, и LIBR; он устанавливается, если в командном файле имеется строка "^C"; например, при выполнении командного файла весь ввод после "^C" будет производиться с терминала:

RUN LINK
TEST,TEST=MOD1,LIB/I
^С

2,1,0

 

зарезервированы для системного использования; пользователю запрещено их употреблять.

1.1.3. ВЕКТОРЫ ПРЕРЫВАНИЙ ОТ ВНЕШНИХ УСТРОЙСТВ

Ячейки памяти с 60 по 477 (восьмеричное) используются для векторов прерываний от внешних устройств (см. рис. 1). Часть векторов зарезервирована для включения в систему новых нестандартных устройств. Ниже приведён перечень векторов:

60, 62

Вектор прерывания от клавиатуры системного терминала (верхний регистр);

64, 66

Используется для внутренних целей;

100, 102

Вектор прерывания от системного таймера;

110-256

Не используются;

260, 262

Вектор прерывания от кассетной ленты;

264, 266

Вектор прерывания от гибкого диска;

270, 272

Вектор прерываний пользователя (IRQ3);

274, 276

Вектор прерывания от клавиатуры системного терминала (нижний регистр);

300-356

Не используются;

360, 362

Вектор прерывания контроллера локальной сети или ИРПС;

1.1.4. СТРАНИЦА ВВОДА/ВЫВОДА

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

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

Расположение адресов в странице ввода/вывода см. рис. 1.

1.1.5. ДРАЙВЕР СИСТЕМНОГО УСТРОЙСТВА

Драйвером системного устройства является драйвер устройства, с которого был загружен монитор.

Драйвер системного устройства не входит в состав монитора, на БК-0011 он находится в ПЗУ по адресу 160000, резидентный монитор RMON загружается ниже драйвера системного устройства (ниже 48 Кбайт).

На рис. 2 показано размещение резидентного в памяти драйвера системного устройства.

Рисунок 2

Рис. 2

1.1.6. РЕЗИДЕНТНЫЙ МОНИТОР (RMON)

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

RMON содержит подпрограммы обработки программных запросов. Он также содержит смешанную область задания, подпрограммы обработки ошибок, подпрограммы обработки прерываний по таймеру, подпрограммы обслуживания системного терминала, свопинга USR и т.д.

На рис. 3 показано расположение RMON в памяти.

Рисунок 3

Рис. 3

RMON содержит следующие компоненты (перечисление производится в порядке убывания адресов):

Карта загрузки монитора является частью дистрибутивного набора модулей системы и хранится в отдельном файле. Файл имеет имя соответствующего монитора с расширением .MAP (B11SJ.MAP), но не в ОС БК-11. Там его нет.

1.1.7. ЗАДАНИЕ ПОЛЬЗОВАТЕЛЯ.

Системные программы ОС БК-11, такие как PIP, DUP и др., загружаются при работе SJ-монитора как пользовательские задания.

На рис. 4 показана структура задания пользователя, его размещение в памяти.

Обычно загрузка задания в память производится с ячейки 1000 до верхнего адреса задания.

Существуют три возможности загрузки задания: командой монитора RUN или R и системной макрокомандой .CHAIN.

Рисунок 4

Рис. 4

1.1.7.1. КОМАНДА RUN.

Одним из вариантов загрузки задания в раздел пользователя является использование команды RUN, выполняющей действия двух команд монитора: GET и START.

Если файл с расширением .SAV располагается не на системном устройстве, то по команде RUN (или GET) сначала загружается драйвер устройства, на котором находится задание, а затем выполняется загрузка самого задания (для ОС БК-11 это не актуально, поскольку драйвер для всех дисковых устройств один и он находится в ПЗУ).

Свободное пространство для загруженного задания пользователя состоит из области задания и области, занятой KMON и USR (если для USR не установлен запрет на свопинг "NOSWAP").

Если задание требует пространства большего, чем эти три области, то выдаётся сообщение об ошибке и управление передаётся KMON.

По команде RUN считывается нулевой блок файла, содержащий информацию о программе (в том числе и о её размере) и записывается в ячейках памяти с 0 по 477. При выполнении этой операции KMON просматривает карту защиты младших ячеек памяти, расположенную в RMON, и не загружает те ячейки, которые защищены в связи с использованием их RMON и/или другим заданием.

Затем по RUN загружаются все ячейки памяти с 500 по 777 из файла. Эта область по умолчанию является стеком задания.

Для загрузки с 1000 ячейки команда RUN проверяет блок управления загрузкой (CCB), который размещается, начиная с ячейки 360 загружаемого файла. CCB - карта размещения программы в памяти, созданная компоновщиком, в которой каждый бит соответствует одному блоку в файле. По команде RUN блоки из файла загружаются в память только в том случае, если установлены соответствующие биты в CCB.

При создании файла типа .SAV компоновщик устанавливает бит CCB для каждого блока загрузочного файла, который фактически содержит инструкции или данные. Например, если файл компонуется с базового адреса 2000 и ячейки с 1000 по 1776. В этом файле не будут содержать данные, то компоновщик не установит соответствующий бит в CCB.

Блоки, загружаемые по команде RUN, располагаются в памяти (под KMON) в области, которая зарезервирована для задания пользователя.

Если блок накладывается на любую из двух компонент (KMON или USR), то он копируется в файл SWAP.SYS, расположенный на диске. Этот процесс выполняется до тех пор, пока весь файл не загрузится в память или в память и файл SWAP.SYS. SWAP.SYS имеет достаточно большой размер для сохранения части программы. Которая будет обмениваться с KMON и USR.

После выполнения команды RUN (или START) управление передаётся RMON. Если при загрузке программы использовался файл SWAP.SYS, то RMON считывает его содержимое в память на место KMON и, возможно, USR. Затем RMON запускает программу на выполнение (передаёт ей управление).

На рис. 5 показаны этапы, выполняемые командой RUN при загрузке задания в память.

Рисунок 5

Рис. 5

После завершения программы RMON загружает KMON и USR в память из файла монитора. Если часть задания пользователя перекрывается KMON, то она сохраняется в файле SWAP.SYS.

После этого можно использовать команды монитора EXAMINE и DEPOSIT для считывания и изменения части задания с диска (из файла SWAP.SYS). Затем по команде RESTART может производиться перезапуск программы.

1.1.7.2. КОМАНДА R

Команда R подобна команде RUN. Однако одно из отличий состоит в том, что загружаемая программа должна быть расположена на системном устройстве (SY:). Это вызвано тем, что по команде R не производится загрузка драйвера другого устройства для считывания файла.

Команда R загружает ячейки памяти с 0 по 777 так же, как и команда RUN.

Отличие в процедуре выполнения начинается с загрузки ячеек 1000 и далее. Команда R игнорирует блок CCB, расположенный в загружаемом файле, и установленные в нём данные для RMON.

RMON загружает программу прямо из файла (он не загружает оверлей). Даже, если файл перекрывает KMON и USR, RMON не использует файл SWAP.SYS. На рис. 6 показана структура загрузки программы по команде R.

Рисунок 6

Рис. 6

Так же, как и по команде RUN, задания, загруженные по команде R, используют файл SWAP.SYS. Если это необходимо при завершении программы. Таким образом, команды EXAMINE и DEPOSIT выполняются корректно.

Примечание. Если задание использует макрокоманду .SETTOP для уменьшения верхнего предела программы перед её завершением, то это позволит монитору не проводить операцию свопинга в файл SWAP.SYS.

1.1.7.3. СИСТЕМНАЯ МАКРОКОМАНДА .CHAIN

Существует возможность загрузки задания из другого задания. Первая программа должна содержать макрокоманду .CHAIN для вызова другого задания. Второе задание может использовать информацию, помещённую первым заданием в ячейки памяти с 500 по 777.

При загрузке программы макрокомандой .CHAIN в отличие от загрузки по команде монитора выполняется защита ячеек памяти с 500 по 777, т.е. при загрузке программы не будет производиться запись из загружаемого файла в данные ячейки памяти, если пользователем не был установлен бит "CHAIN¤" в JSW до загрузки программы.

Примечание. При загрузке макрокомандой .CHAIN программы, написанной на Фортране, последняя не получает информацию о каналах от предыдущего задания, если оно тоже является программой на Фортране. Это объясняется тем, что OTS Фортрана после загрузки закрывает каналы и инициализирует таблицы и буфера ввода/вывода.

1.2. ДИНАМИЧЕСКИЕ КОМПОНЕНТЫ

Динамические компоненты не всегда загружаются в фиксированную область памяти. Эти компоненты могут перемещаться в памяти в зависимости от состояния системы.

К динамическим компонентам относятся:

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

1.2.1. ДРАЙВЕРЫ УСТРОЙСТВ И СВОБОДНЫЕ ОБЛАСТИ

Драйверы управляют и обслуживают периферийные устройства и производят обмен данными между памятью и устройствами.

ОС БК-11 использует динамическое распределение памяти при загрузке драйверов и системных программ, средств работы с командными файлами и интерпретатора командной строки (CSI).

Динамический раздел памяти расположен между KMON/USR и RMON. Если отсутствует необходимое количество памяти в этом разделе (первоначально, после загрузки системы этот раздел отсутствует), KMON и USR смещаются в нижние адреса памяти на недостающее количество слов, т.е. память берётся из раздела пользователя.

Если область памяти, полученная таким способом, освобождается, то информация о ней поступает в список свободной памяти (однонаправленный список), указатель на который расположен в RMON. Несколько смежных областей свободной памяти объединяются при этом в один большой блок.

При появлении свободной области, которая прилегает к KMON/USR, зона памяти соответствующего размера будет возвращена в раздел пользователя перемещением вверх KMON/USR, а информация об этой области будет удалена из списка свободной памяти.

На рис. 7 показано расположение в памяти при работе SJ-монитора прикладной программы, загруженной по команде монитора GET, и двух драйверов устройств, загруженных командами LOAD.

Рисунок 7

Рис. 7

Если драйверы были загружены по команде LOAD, то они будут располагаться выше USR и KMON. USR и KMON перемещаются вниз в памяти для обеспечения драйверов достаточным пространством, тем самым оставляя меньшее пространство для пользовательской программы.

Если драйверы расположены в памяти, то они не перемещаются вверх или вниз, как это делается с KMON и USR.

На рис. 8 представлено размещение в памяти компонентов системы после выполнения команда монитора UNLOAD и удаления драйвера H1 из памяти. Свободная область, появившаяся после удаления первого драйвера, не будет возвращена разделу пользователя, на это место может быть загружен драйвер, который имеет такой же или меньший размер.

Рисунок 8

Рис. 8

На рис. 9 показано размещение компонент системы после удаления драйвера H2. Свободная область появляется непосредственно над USR (пространство, прежде занятое двумя драйверами). В этом случае USR и KMON перемещаются вверх, и увеличивается область для пользовательского задания.

Рисунок 9

Рис. 9

1.2.2. ПРОГРАММА ОБСЛУЖИВАНИЯ ПОЛЬЗОВАТЕЛЯ (USR)

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

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

В SJ-мониторе USR может быть сделана резидентной с помощью команды монитора "SET USR NOSWAP", по умолчанию - не резидентна.

USR содержит две базовые части: буфер и коды программы.

Буфер имеет размер, равный двум блокам. Он используется для загрузки сегмента каталога устройства или блоков файлов.

В секции буфера USR содержится подпрограмма корректировки указателей в USR и KMON. Подпрограмма вызывается в момент передачи управления USR после того, как USR будет загружена в память. Подпрограмма корректирует в USR указатели на резидентный монитор и некоторые ячейки в USR. Если USR была вызвана из KMON, она также корректирует указатели на RMON в интерактивном мониторе.

USR включает следующие сегменты:

Последняя подпрограмма в буфере обрабатывает макрокоманду .QSET.

Остальная часть области буфера свободна. После области буфера расположены постоянные подпрограммы USR, которые имеют смещение 2000 относительно начала USR. Подпрограммы обеспечивают обработку следующих системных макрокоманд:

.DELETE, .RENAME;

.LOOKUP, .ENTER, .CLOSE;

.FETCH, .DSTATUS;

CSI расположена в конце USR и обрабатывает макрокоманды .GTLIN, .CSIGEN и .CSISPC.

1.2.2.1. ОБРАБОТКА ЗАПРОСОВ

Если в память загружена новая копия USR, то область буфера содержит подпрограммы, описанные в предыдущем разделе.

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

Обычно выполнение системной макрокоманды требует чтения сегмента каталога устройства. Если нужный сегмент находится в буфере USR, то новая его копия не будет считываться. Если этот сегмент отсутствует в буфере или он считан не полностью, то производится считывание новой копии этого сегмента. После этого USR передаёт два слова информации в область фиксированных смещений в RMON. В ячейке BLKEY (имеет относительное смещение 256) содержится номер сегмента каталога, находящегося в буфере USR. В старшем байте ячейки CHKEY (относительное смещение 260) содержится логический номер устройства, а в младшем байте - его индекс по системным таблицам устройств.

В следующих ситуациях USR вызывается для чтения каталога:

Следующие системные макрокоманды вызывают выполнение последнего условия:

Примечание. Если в выполняемой макрокоманде .LOOKUP указано то же самое устройство и файл, как в предшествующей макрокоманде .LOOKUP, USR не будет выполнять чтение в буфер новой копии этого сегмента каталога. По этой причине перед выполнением такой макрокоманды нельзя удалить том (диск) с указанного устройства и установить на него другой том, т.к. USR не загрузит сегмент каталога нового тома в память. Однако в такой ситуации можно заставить USR считать сегмент каталога с нового тома, если обнулить ячейку BLKEY в RMON. После этого можно выполнять макрокоманду .LOOKUP с тем же самым аргументом, что и в предшествующей макрокоманде .LOOKUP. Нулевое значение в ячейке BLKEY заставляет USR считать новую копию сегмента каталога (т.е. сегмент каталога нового тома).

1.2.2.2. ОСОБЕННОСТИ СВОПИНГА USR

Поскольку USR не всегда бывает резидентна в памяти, можно выбрать один из двух вариантов работы с ней при создании прикладной программы. Можно сделать USR резидентной в памяти (самый простой метод) или загружать USR в память только, если это необходимо для работы пользовательской программы. Последний метод позволяет пользовательской программе использовать дополнительно 4 Кбайт памяти, т.к. разрешён свопинг USR.

Примечание. Решение проблем, связанных со свопингом USR, должна брать на себя программа, а не оператор, который её запускает.

1.2.2.3. РАЗМЕЩЕНИЕ РЕЗИДЕНТНОЙ USR В SJ-МОНИТОРЕ

В SJ-мониторе USR обычно размещается ниже RMON и загруженных драйверов устройств.

Если программа пользователя не перекрывает область USR, то можно сделать USR резидентной по команде "SET USR NOSWAP" перед запуском программы.

В некоторых случаях, если памяти достаточно для размещения программы, и она не перекрывает USR, то свопинг USR не будет выполняться.

Положение USR в памяти может изменяться (например, при загрузке драйверов).

Если при трансляции корневого сегмента программы, написанного на Фортране, использовалась команда FORTRAN/NOSWAP (или ключ компилятора /U), то при работе программы USR будет постоянно резидентной в памяти. Эту возможность нельзя использовать, если программа пользователя, написанная на Фортране, требует дополнительно 4 Кбайта памяти.

Задание USR резидентной означает, что программа пользователя будет иметь в своём распоряжении на 4 Кбайт памяти меньше. Однако, операторы, содержащие требования открытия/закрытия файлов, и загрузка программ будут выполняться быстрее, поскольку требуется меньше обращений к диску. Кроме того, упрощается разработка программ пользователя. Для сохранения USR резидентной программа на макроассемблере не должна использовать макрокоманду .SETTOP для получения памяти, предназначенной для USR.

Примечание. Даже, если установлен запрет на свопинг USR, имеются системные макрокоманды, для обслуживания которых необходима новая копия USR в памяти. В SJ-мониторе - это макрокоманды .CDFN, .SRESET, .HRESET, .EXIT и .QSET.

Если разрешён свопинг USR и если задание пользователя использует макрокоманду .SETTOP для получения области памяти, предназначенной USR, то USR будет загружаться в памяти по адресу, указанному в ячейке 46 (UFLOAT).

Если из некоторых соображений пользователь задаёт ненулевое значение ячейки 46 перед выполнением одной из макрокоманд, требующей загрузку новой копии USR в память, то USR в этом случае будет загружена в указанную пользователем область.

Если содержимое ячейки 46 равно нулю, как это будет, когда USR задаётся резидентной, то она загружается на своё обычное место (ниже RMON).

Если выполняется программа, которая сохраняет USR резидентной, то монитор игнорирует содержимое ячейки 46.

1.2.2.4. ОСОБЕННОСТИ СВОПИНГА USR ДЛЯ ПРОГРАММ НА МАКРОАССЕМБЛЕРЕ В SJ-МОНИТОРЕ

В SJ-мониторе свопинг USR разрешается только для предоставления программе пользователя дополнительно 4 Кбайт памяти. Для разрешения свопинга USR нет необходимости задавать команду "SET USR SWAP", т.к. свопинг разрешён по умолчанию.

Программа на макроассемблере получает доступ к дополнительным 4 Кбайт памяти, если она имеет большой размер или запрашивает макрокомандой .SETTOP дополнительную память, перекрывающую USR.

Если программа использует макрокоманду, которая требует наличия в памяти USR, то та часть программы, которая перекрывает область загрузки USR, переписывается на диск в файл SWAP.SYS. После этого новая копия USR записывается в память из файла монитора.

Ячейка памяти 46 должна содержать нулевой адрес, если необходимо загрузить USR по обычному адресу (адрес по умолчанию). Если нужно загрузить USR в другое место, то необходимо установить адрес загрузки в ячейку 46 при инициализации программы.

После завершения системной макрокоманды, вызвавшей свопинг, часть программы переписывается из файла SWAP.SYS в память, обмениваясь с USR. Этот алгоритм повторяется для каждой системной макрокоманды, которая требует USR, даже если программа пользователя содержит две или более таких макрокоманд подряд.

Для более эффективного использования USR программа пользователя может использовать макрокоманду .LOCK перед обработкой последовательности макрокоманд, требующих USR. В этом случае производится свопинг части программы пользователя, которая перекрывает USR, и управление передаётся программе. После этого USR копируется в память по адресу, указанному в ячейке 46. Теперь можно выполнить нужное количество системных макрокоманд, избежав затрат времени на свопинг USR.

Если после выполнения системных макрокоманд программе пользователя необходимо использовать дополнительно 4 Кбайт, нужно выполнить макрокоманду .UNLOCK для "освобождения" USR.

Если разрешён свопинг USR, то является существенным, какие части программы расположены в области свопинга, т.к. нельзя располагать в области свопинга данные и коды программы, которые необходимы в то время, когда USR будет резидентна.

Список кодов и данных, которые не должны обмениваться с USR:

Можно управлять свопингом USR, используя макрокоманду .SETTOP для получения области, занимаемой USR. После выполнения макрокоманды .SETTOP программа должна использовать значение, возвращаемое в R0 (или содержимое 50 ячейки системной области связи), как действительный верхний адрес, доступный программе.

Например, программа может выполнить макрокоманду .SETTOP для получения памяти, используемой USR, если для USR установлено "SET USR NOSWAP", однако, значение, возвращаемое программе как старший доступный адрес, будет меньше базового адреса загрузки USR.

1.2.2.5. ОСОБЕННОСТИ СВОПИНГА ДЛЯ ЗАДАНИЯ ПОЛЬЗОВАТЕЛЯ

Самым простым способом для задания пользователя является свопинг USR в область памяти, устанавливаемую по умолчанию в верхние 4 Кбайт программы. Если это неприемлемо для некоторых ситуаций, то задание пользователя может выбирать другие 4 Кбайт области программы.

При этом необходимо также скорректировать адрес загрузки USR (ячейка 46 системной области связи).

1.2.3. ИНТЕРАКТИВНЫЙ МОНИТОР (KMON)

KMON является компонентой ОС БК-11, которая обеспечивает средства связи оператора (за системным терминалом) с системой.

Команды монитора, обрабатываемые KMON, позволяют назначать логические имена физическим устройствам, загружать драйверы устройств и программы, выполнять командные файлы и проверять и/или модифицировать ячейки памяти.

KMON загружается в память, когда задание пользователя завершено (выполнено). Если KMON находится в памяти, то USR также располагается в памяти непосредственно над ним.

KMON состоит из корневого сегмента и нескольких перекрытий, которые обрабатывают команды монитора. KMON так же, как и задание, загружается и выполняется в пользовательском режиме.

Если KMON обрабатывает команду, заданную с терминала, он преобразует текст команды во внутренний командный файл, например:

COPY/DEV BY0: BY1:

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

R DUP
BY1:A=BY0:/I
^С

KMON запоминает этот внутренний командный файл в буфере расширения команды, расположенном выше USR. Если KMON и USR перемещаются вверх или вниз в памяти, буфер расширения команды перемещается вместе с ними.

1.3. РАЗМЕРЫ КОМПОНЕНТОВ

В табл. 2 даны размеры основных компонентов SJ монитора ОС БК-11.

Таблица 2
Монитор KMON
(в восьмеричных
байтах)
USR (Кбайт) RMON
(в десятичных
словах)

B11SJ

17000

4

1996

 

1.3.1. РАЗМЕР USR

В SJ-мониторе размер USR всегда равен 4 Кбайт.

Программа пользователя может определить размер USR проверкой значения ячейки, имеющей в RMON фиксированное смещение 374 (USRAREA), которая содержит размер USR в байтах.

1.3.2. РАЗМЕР KMON

Размер KMON такой же, как размер программной секции ОС БК-11. Необходимо посмотреть карту загрузки, которая была создана при генерации рабочей системы и для получения этого значения.

1.3.3. РАЗМЕР RMON

Для определения размера RMON используется команда монитора "SHOW CONFIGURATION". По этой команде печатается базовый адрес RMON.

Необходимо вычесть базовый адрес RMON из значения 160000 для определения размера RMON.

1.3.4. РАЗМЕР ДРАЙВЕРОВ УСТРОЙСТВ

Размер драйвера устройства (в байтах) заносится компоновщиком в ячейку 52 нулевого блока файла этого драйвера. Можно также определить это значение, используя системную макрокоманду .DSTATUS.

2. ХАРАКТЕРИСТИКИ И ОБРАЩЕНИЕ К RMON

Основное назначение резидентного монитора (RMON) - обеспечить обслуживание загруженных программ и KMON, включая обработку прерываний, выполнение программных запросов и управление вводом/выводом независимо от внешних устройств, а также работу с терминалом.

2.1. ОБСЛУЖИВАНИЕ ТЕРМИНАЛА

В системе ОС БК-11 функции обслуживания терминала включены в RMON. Из-за способа реализации работы с терминалом для взаимодействия оператора и системы не требуется специального драйвера. Однако в состав системы дополнительно включён драйвер TT, который используется для выполнения макрокоманд .READ и .WRITE при работе с системным терминалом.

Для удобства и эффективности программирования функции обслуживания терминала в RMON отличаются от способа работы системы с другими внешними устройствами посредством драйверов.

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

Прерывания от клавиатуры терминала всегда разрешены. Это означает, что в любой момент можно "привлечь внимание системы", набрав один из управляющих символов <СУ/C>, <СУ/B>, <СУ/F> и т.д. При этом допустимо использовать возможности предввода, т.е. вводить следующие команды, не дожидаясь завершения предыдущих.

Кольцевые буферы являются основным компонентом при обслуживании терминала. При работе SJ-монитора в RMON размещается один кольцевой буфер ввода и один кольцевой буфер вывода.

Кольцевой буфер используется для временного хранения текста при обмене информацией между программой и терминалом.

По умолчанию размер кольцевого буфера ввода равен 134 (десятичное) байтам, а размер кольцевого буфера вывода - 80.

2.1.1. КОЛЬЦЕВОЙ БУФЕР ВЫВОДА

Кольцевой буфер вывода состоит из буфера, трёх указателей и счётчика байтов.

Два из трёх указателей служат для запоминания и поиска символов. Указатель PUT указывает на ячейку, в которой должен быть помещён следующий символ, и используется системными макрокомандами для заполнения буфера (.TTYOUT, .TTOUTR, и .PRINT).

Указатель GET указывает на следующий символ, который будет выводиться, и используется программой обработки прерываний при выводе на терминал.

Третий указатель HIGH указывает на первую ячейку памяти после буфера.

Кроме того, монитор содержит счётчик байтов - число символов, расположенных в буфере.

Кольцевой буфер вывода заполняется символами, которые передаются системными макрокомандами .TTYOUT, .TTOUTR и .PRINT. В нём также запоминаются символы, которые отображаются при вводе с клавиатуры на экран терминала (эхопечать).

Для записи символа в кольцевой буфер вывода монитор сначала сравнивает размер буфера со счётчиком байтов, хранящихся в буфере для определения наличия свободной области.

Если буфер полон, то символ не будет записан. Это условие является достаточным для приостановки задания, если задание выполняет вывод. Если вывод является результатом эхопечати, то вывод игнорируется.

Если имеется свободная область, монитор осуществляет контроль, определяя, когда указатель PUT станет равным указателю HIGH. Эта проверка гарантирует, что указатель PUT всегда указывает на ячейку, которая находится внутри буфера.

Если значения указателей PUT и HIGH равны, монитор вычитает длину буфера из текущего значения указателя PUT для получения нового значения указателя PUT. Выполняя это, монитор имитирует движение по кольцу, изменяя верхний адрес буфера на нижний. Затем монитор пересылает байт в буфер и увеличивает на 1 указатель PUT и счётчик байтов.

Подпрограмма обработки прерываний по выводу на экран терминала передаёт символы из кольцевого буфера.

Если счётчик символов становится равным 0, то подпрограмма завершает работу. Подпрограмма осуществляет контроль, проверяя равенство значений указателей GET и HIGH, при выполнении этого условия производится переназначение верхнего адреса буфера на нижний. Подпрограмма циклического перемещения от конца к началу вычитает длину буфера из значения текущего указателя GET для определения его нового значения. Эта проверка гарантирует, что указатель GET всегда указывает на ячейку, которая находится внутри буфера.

Затем подпрограмма обработки прерываний по выводу извлекает символ, на который указывает GET и подготавливает его для передачи на терминал. Она увеличивает на 1 значение указателя GET и уменьшает на 1 счётчик байтов.

2.1.2. КОЛЬЦЕВОЙ БУФЕР ВВОДА

Кольцевой буфер ввода подобен кольцевому буферу вывода за исключением того, что, кроме указателей GET. PUT и HIGH, он имеет указатель LOW, который указывает на первый байт буфера.

Этот указателя используется для перемещения указателей в обратном направлении при выполнении операции <СУ/U> или <ЗБ>. Он указывает на достижение нижней границы буфера, т.е. на необходимость перехода указателей на старшую ячейку буфера.

Монитор также имеет счётчик количества строк, который содержится в кольцевом буфере ввода.

Строка - некоторая последовательность символов, заканчивающаяся одним из управляющих символов <ПС>, <СУ/Z> или <СУ/C>. При нажатии клавиши <ВК> в кольцевой буфер пересылаются два символа (<ВК> и <ПС>)

В обычном режиме монитор не передаёт программе вводимые символы до тех пор, пока не будет введена вся строка, поэтому оператор может использовать клавишу <ЗБ> для удаления символа или <СУ/U> для удаления всей строки при вводе с терминала.

Поскольку монитор осуществляет построчное редактирование (в пределах одной строки), то прикладная программа может не обрабатывать символы <ЗБ> и <СУ/U>.

В специальном режиме монитор передаёт символы по мере их ввода с терминала. В этом случае программа сама должна обрабатывать символы, такие как <ЗБ> и <СУ/U>.

Если пользователь вводит символы с терминала, подпрограмма обработки прерываний с клавиатуры запоминает их в кольцевом буфере ввода.

Если в буфере есть свободная область, подпрограмма увеличивает на 1 счётчик байтов и указатель PUT, корректирует PUT, если это необходимо, и запоминает байт в кольцевом буфере. Она также увеличивает на 1 счётчик строк, если вводится управляющий символ, означающий конец строки.

Монитор передаёт символы из кольцевого буфера ввода в программу при выполнении системных макрокоманд .TTYIN, .TTINR, .GTLIN, .CSIGEN и .CSISPC.

Сначала он увеличивает на 1 указатель GET, и корректирует указатель, если это необходимо. Затем пересылает байт из буфера и уменьшает на 1 счётчик байтов; он корректирует также счётчик строк, если передаваемый символ (или комбинация символов) является признаком конца строки.

2.1.3. ПАРАМЕТРЫ ВВОДА/ВЫВОДА НА ТЕРМИНАЛ

Различные параметры ввода/вывода на терминал не зависят друг от друга. Для изменения каждого из них используются различные методы.

ОС БК-11 допускает ввод с терминала двух видов: построчный или посимвольный.

При построчном режиме символы, передаваемые с терминала, записываются в буфер ввода до тех пор, пока пользователь не введёт <ВК>, <ПС>, <СУ/C> или <СУ/Z> (признак конца строки). Только после этого программа получит строку данных. Фактором, ограничивающим длину вводимой строки, является размер кольцевого буфера ввода. Установка правой границы поля терминала ("SET TT: WIDTH=N") не влияет на максимальную допустимую длину вводимой строки. В ОС БК-11 размер буфера равен 134 байтам (по умолчанию), но он может быть изменён при генерации системы. Попытка ввести строку большей длины приводит к потере символов, выходящих за указанную границу. Система сообщает о таких "потерянных" символах с помощью звукового сигнала терминала, т.е. выводом управляющего символа <СУ/G>.

Интерпретатор командной строки (CSI) может обработать только 81 символ в строке. Большинство системных программ, включая DUP и FORTRAN, используют CSI для получения строки с терминала.

При посимвольном вводе программа получает каждый символ непосредственно после ввода его с терминала. При таком режиме можно ввести любое количество символов без ограничителя строки, например, редактор EDIT использует посимвольный ввод и может обрабатывать строки любой длины.

Длина строки при выводе на терминал не связана с длиной кольцевого буфера вывода. Её размер определяется положением правой границы экрана терминала. Регулировка правой границы производится по команде "SET TT: WIDTH=N" и "SET TT CRLF".

2.1.4. ФУНКЦИИ УПРАВЛЕНИЯ

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

2.1.4.1. УПРАВЛЯЮЩИЙ СИМВОЛ <СУ/C>

Если с терминала передаётся один управляющий символ <СУ/C>, то подпрограмма обработки прерываний пересылает его в кольцевой буфер ввода точно так же, как любой другой символ. Монитор обрабатывает его как ограничитель строки и передаёт в выполняющуюся программу.

Если вводится подряд два <СУ/C>, вместо передачи их непосредственно в программу монитор снимает программу с выполнения. Для предотвращения этого можно перехватывать <СУ/C>, используя макрокоманду .SCCA.

2.1.4.2. УПРАВЛЯЮЩИЙ СИМВОЛ <СУ/O>

Если подпрограмма обслуживания прерываний от терминала обнаруживает управляющий символ <СУ/O>, она не пересылает его в кольцевой буфер ввода, даже, если терминал находится в специальном режиме, в этом случае монитор устанавливает флаг смешанной области.

При первом появлении <СУ/O> монитор производит его эхопечать, затем очищает кольцевой буфер, устанавливая указатели GET и PUT, эквивалентными друг другу. Вывод из программы продолжается, но на экран не выдаётся ни одного сообщения (аналогично выводу сообщения на псевдоустройство NL: вместо терминала).

Следующее <СУ/O> или программный запрос .RCTRLO возобновляет вывод информации на экран терминала.

Сообщения, передаваемые из программы между двумя <СУ/O>, не отобразятся на экране.

2.1.4.3. УПРАВЛЯЮЩИЕ СИМВОЛЫ <СУ/S> И <СУ/Q>

ОС БК-11 позволяет управлять вводом/выводом на терминал с помощью управляющих символов <СУ/S> и <СУ/Q>.

<СУ/S> приостанавливает вывод передаваемых данных на терминал. <СУ/Q> отменяет запрет и возобновляет передачу данных на экран терминала. Потери символов при этом не происходит.

Например, использование команды монитора TYPE для просмотра содержимого файла может привести к выводу информации со скоростью, превышающей возможности её анализа оператором. Поэтому использование <СУ/S> позволяет приостановить вывод информации, а ввод <СУ/Q> приводит к продолжению вывода информации на экран терминала. В этом случае управление выводом осуществляется оператором.

Другая ситуация возникает, если ЭВМ передаёт знаки на терминал быстрее, чем тот может их отобразить. В этом случае сам терминал может приостанавливать передачу знаков (с помощью посылки <СУ/S>), отобразить знаки из, внутреннего буфера и послать <СУ/Q> для продолжения вывода. Данная процедура выполняется незаметно для оператора.

В резидентном мониторе имеется флаг XEDOFF, который содержит признак последнего принятого управляющего символа (<СУ/S> или <СУ/Q>). Когда флаг установлен, монитор запрещает прерывание терминала по выводу.

2.1.5. СЛОВО СОСТОЯНИЯ ПАРАМЕТРОВ ТЕРМИНАЛА

Слово TTCNFG в RMON является словом состояния, которое указывает, какие параметры терминала были установлены. Это слово может быть изменено командой монитора SET.

Биты ячейки TTCNFG указывают состояние следующих параметров (описано для случая, когда биты установлены в 1):

Бит 15 - была выполнена команда "SET TT: SCOPE".

Остальные биты зарезервированы для дальнейшего использования.

Для получения слова состояния параметров терминала и установленной ширины строки терминала используются следующие инструкции (регистр может быть выбран любой, кроме R6 и R7):

        MOV    @#30,R1
        MOV    -(R1),STATUS
        MOVB   -6(R1),WIDTH

Для определения значения текущего положения курсора или позиции курсора (0 означает, что курсор или каретка расположены в самом начале строки) дополнительно используется следующая инструкция:

        MOVB   -1(R1),POSIT

2.2. ОБСЛУЖИВАНИЕ ТАЙМЕРА

Наличие таймера (системных часов) в аппаратуре процессора не является обязательным для нормального функционирования ОС БК-11. Если же таймер входит в состав комплекса, то ОС БК-11 обеспечивает целый набор дополнительных возможностей, включая слежение за текущим временем дня. Необходимость в таких средствах указывается при генерации

2.2.1. СИСТЕМА С SJ-МОНИТОРОМ БЕЗ ОБСЛУЖИВАНИЯ ТАЙМЕРА

В системах с SJ-монитором без средств обслуживания таймера обеспечиваются минимальные средства для работы с часами. Монитор отслеживает только текущее время дня и не выполняет запуск подпрограмм завершения по таймеру и перевод программ в состояние ожидания на заданный интервал времени.

В процессе загрузки монитора происходит определение наличия таймера в составе аппаратуры комплекса. Если таймер присутствует, то в слове конфигурации системы (фиксированное смещение 300) RMON устанавливается соответствующий бит. Если таймер имеет программно доступный регистр слова состояния на общей шине, то загрузчик разрешает прерывания от таймера. Если регистр отсутствует, то программы не могут управлять работой таймера, управление осуществляется оператором с помощью переключателя на пульте процессора.

Резидентный монитор хранит текущее время в счётчике, состоящем из двух слов. Старшие разряды хранятся в ячейке с меткой ¤TIME, а младшие разряды - в ячейке ¤TIME+2.

Текущее время дня хранится в виде числа тиков, установку начального значения счётчика времени можно выполнить с помощью команды монитора TIME, в противном случае в нём будет содержаться число тиков с момента загрузки системы. ОС БК-11 может использовать как обычный сетевой таймер, так и программируемый, использование последнего в качестве системного таймера должно быть указано при генерации системы.

Частота прерываний от часов (50 тиков в секунду) соответствует промышленной частоте сети 50 Гц.

При каждом прерывании от часов счётчик времени, состоящий из двух слов, увеличивается на 1.

В системе с SJ-монитором без средств обслуживания таймера можно использовать команду монитора TIME для установки времени дня или получения текущего времени, выполняющаяся программа может использовать системную макрокоманду .GTIM для получения текущего времени и .SDTTM - для его установки.

2.2.2. СИСТЕМЫ С ОБСЛУЖИВАНИЕМ ТАЙМЕРА

Для SJ-монитора необходимость таких средств указывается при генерации.

Обслуживание таймера выполняется с помощью трёх системных макрокоманд .MRKT, .CMKT и .TWAIT (последняя - только в системах с FB/XM-мониторами). При генерации системы можно включить поддержку тайм-аута устройств, в этом случае в драйверах можно использовать макрокоманды .TIMIO и .CTIMIO.

Поскольку при обслуживании таймера требуется наличие очереди для Ф-обработки, то включение этого вида услуг в SJ-монитор предпочтительнее, чем имитация Ф-процесса. Обычно в SJ-мониторе отсутствует очередь обработки на Ф-уровне, а выполняется имитация системной макрокоманды .FORK и управление передаётся непосредственно на следующую инструкцию. При создании очереди для Ф-обработки макрокоманды .FORK выполняются последовательно и не прерывают друг друга.

Для выполнения запросов к таймеру ОС БК-11 использует очередь к таймеру, содержащую список элементов, упорядоченных по величине интервала времени.

Системные макрокоманды .MRKT, .TWAIT и .TIMIO используют очередь к таймеру. Они вызывают выполнение подпрограммы завершения по истечении определённого интервала времени. Монитор использует очередь к таймеру для реализации макрокоманды .TWAIT, которая применяется для задания останова программы на указанный интервал времени.

Монитор реализует макрокоманду .TWAIT как .SPND и .RSUM. По .TWAIT он приостанавливает выполнение остальной программы и помещает в очередь к таймеру элемент, включающий в качестве подпрограммы завершения адрес подпрограммы, реализующей .RSUM. Задание ожидает до тех пор, пока не истечёт указанный интервал времени. Монитор возвращает управление заданию после выполнения подпрограммы завершения (макрокоманда .RSUM).

Элемент очереди к таймеру имеет следующий формат (даются относительные смещения, символьные имена и назначение каждого слова):

0

(C.HOT)

старшие разряды интервала времени;

2

(C.LOT)

младшие разряды интервала времени;

4

(C.LINK)

указатель на следующий элемент очереди (если данный элемент является последним, то ячейка равна 0);

6

(C.JNUM)

номер задания (линии) пользователя, в ОС БК-11 равен 0;

10

(C.SEQ)

порядковый номер для идентификации;

12

(C.SYS)

"-1", если элемент используется для обработки тайм-аута драйвера; "-3", если обслуживается макрокоманда .TWAIT (только для XM/TS-монитора);

14

(C.COMP)

адрес подпрограммы завершения;

с 16 по 22

 

зарезервированы для новых редакций системы.

Для подсчёта времени во всех системах с обслуживанием таймера, ОС БК-11 использует два слова псевдочасов PSCLOK (младшие разряды счётчика таймера) и PSCLKH (старшие разряды счётчика таймера).

В этих ячейках RMON запоминает время в тиках, которое отсчитывается с момента загрузки системы. При каждом прерывании от часов счётчик увеличивается на 1.

Два других слова ¤TIME и ¤TIME+2 содержат константы, которые при сложении с содержимым соответствующих ячеек псевдочасов дают текущее время дня.

Монитор использует псевдочасы при выполнении запросов к таймеру. Когда новый элемент помещается в очередь к таймеру, монитор прибавляет содержимое младшего слова псевдочасов к двухсловному значению времени в элементе очереди. Когда в псевдочасах происходит перенос в старшее слово (примерно каждые 22 минуты) монитор вычитает 1 из старшего слова времени каждого элемента очереди. Интервал времени, заданный элементом очереди, истекает, когда значение старшего слова времени в элементе равно нулю, а содержимое младшего слова меньше или равно значению в младшем слове псевдочасов.

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

Каждый раз при прерываниях от системных часов монитор увеличивает на 1 текущее значение псевдочасов. Затем он проверяет первый элемент очереди к таймеру. Если старшее слово в элементе очереди к таймеру равно 0, а содержимое младшего слова меньше, чем значение в младшем слове псевдочасов, то элемент очереди освобождается. Монитор удаляет его из очереди к таймеру и выполняет подпрограмму завершения для соответствующего задания.

Монитор прекращает текущий просмотр очереди (по описанному алгоритму), если найден элемент с истёкшим интервалом времени или если очередь пуста.

Имеется несколько вариантов для использования элементов системного таймера:

Во всех других случаях элемент очереди возвращается в список доступных элементов очереди, и подпрограмма завершения вызывается в пользовательском режиме.

2.3. ОРГАНИЗАЦИЯ ОЧЕРЕДЕЙ ВВОДА/ВЫВОДА

ОС БК-11 выполняет операции ввода/вывода, организуя очереди.

Задание может иметь несколько запросов на операции ввода/вывода, незавершённых в данное время. То есть оно может запросить операцию ввода/вывода и затем продолжить выполнение. ОС БК-11 выполняет операции ввода/вывода, используя элементы очереди, драйверы устройств и подпрограммы обслуживания в RMON.

Если драйвер находится в памяти и задание открыло канал, то любая из системных макрокоманд .READ или .WRITE для соответствующего внешнего устройства будет обработана монитором и преобразована в вызов драйвера.

2.3.1. ОЧЕРЕДЬ ВВОДА/ВЫВОДА

Очередь запросов ввода/вывода состоит из связанного списка элементов очереди для каждого загруженного в память драйвера устройства и очереди доступных (свободных) элементов для каждого задания.

Размер элемента очереди ввода/вывода равен 7 словам.

При запуске задания в смешанной области выделяется место для одного элемента очереди.

Один элемент очереди является достаточным, если используются операции ввода/вывода с ожиданием.

Элемент очереди ввода/вывода имеет следующий формат (даны относительные смещения, их символьные имена и назначение каждого слова в элементе очереди):

0

(Q.LINK)

Указатель на следующий элемент очереди; если это последний элемент, то ячейка равна 0;

2

(Q.CSW)

Указатель на слово состояния канала ввода/вывода;

4

(Q.BLKN)

Физический номер блока, с которого начинается операция ввода вывода;

6

(Q.FUNC)

биты 0-7 - код специальной функции;

Информация о коде специальной функции,
номере устройства и номере задания:

7

(Q.UNIT)

биты 8-10 - номер устройства;

(Q.JNUM)

биты 11-15 - номер задания (линии);

10

(Q.BUFF)

Адрес буфера пользователя;

12

(Q.WCNT)

Счётчик слов; может иметь следующие значения (истинное значение счётчика слов равно абсолютному значению этого слова):

  • < 0 - операция .WRITE;
  • = 0 - операция позиционирования (SEEK);
  • > 0 - операция .READ;

14

(Q.COMP)

Адрес подпрограммы завершения; может иметь следующие значения:

  • 0 - режим ввода/вывода с ожиданием (.READW, .WRITW);
  • 1 - только установить запрос в очередь и возврат в программу (.READ, .WRITE);
  • Любое чётное (кроме 0) - адрес подпрограммы завершения;

16, 20, 22

 

Зарезервированы.

Если программа пользователя использует асинхронный ввод/вывод, то необходимо выполнить системную макрокоманду .QSET для резервирования дополнительных элементов очереди.

В тех случаях, когда программа запрашивает операцию ввода/вывода и нет свободного элемента очереди, ОС БК-11 будет ожидать свободный элемент, прежде чем сможет установить новый запрос в очередь. Это замедляет выполнение программы.

Число элементов очереди будет достаточным, если размещено N новых элементов, где N - максимальное число элементов, которые могут быть запрошены заданием в каждый момент.

При этом создаётся N+1 элементов очереди, поскольку один "первоначальный" элемент очереди добавится к списку размещения элементов.

Свободные (доступные) элементы очереди связаны в список. Указатель на начало этого списка (AVAIL) содержит адрес первого свободного элемента очереди. Если содержимое ячейки AVAIL равно 0, это означает, что свободных элементов в списке нет.

На рис. 10 показана очередь свободных элементов ввода/вывода.

Рисунок 10

Рис. 10

Ячейка AVAIL указывает на первый элемент. Первое слово каждого элемента указывает на следующий элемент очереди. Первое слово в последнем элементе списка равно 0.

Если программа выдаёт запрос на операцию ввода/вывода, монитор помещает этот запрос в свободный элемент очереди, удаляя этот элемент из списка свободных. Затем монитор помещает этот элемент в очередь ввода/вывода к соответствующему драйверу устройства.

Это осуществляется использованием двух слов в заголовке драйвера XXLQE и XXCQE (где XX обозначает физическое имя устройства).

Четвёртое слово драйвера является указателем на последний элемент очереди и имеет имя XXLQE. Пятое слово драйвера имеет имя XXCQE и указывает на текущий элемент очереди.

На рис. 11 показано перераспределение указателей при появлении очередного запроса на операцию ввода/вывода.

Рисунок 11

Рис. 11

Монитор извлекает первый элемент из списка свободных элементов и устанавливает его в очередь к драйверу устройства.

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

Когда операция ввода/вывода завершена, монитор возвращает элемент очереди в список свободных и инициирует выполнение операции ввода/вывода для следующего элемента очереди.

На рис. 13 показано перераспределение очереди, если возвращается один элемент (Q1) в список свободных элементов.

Рисунок 12

Рис. 12

Рисунок 13

Рис. 13

Если операция ввода/вывода, обслуживаемая вторым элементом очереди, завершена, монитор возвращает этот элемент в список свободных элементов (рис. 14).

Рисунок 14

Рис. 14

При работе SJ-монитора новый элемент всегда помещается в конец очереди к устройству. Это выполняется быстро с помощью корректировки ячейки XXLQE.

2.3.1.1. ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ

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

Если программа использует системную макрокоманду типа .WRITC и .READC и операция ввода/вывода завершена, монитор не преобразует элемент очереди ввода/вывода в элемент очереди подпрограмм завершения. Вместо этого он возвращает элемент в список свободных элементов очереди. Затем пересылает слово состояния канала в R0 и номер канала в R1 и начинает выполнение подпрограммы завершения.

Поэтому при завершении другой операции ввода/вывода может быть прервана текущая подпрограмма завершения и начнётся выполнение новой подпрограммы завершения.

2.3.2. ОБРАБОТКА ЗАПРОСА ВВОДА/ВЫВОДА

RMON управляет процедурой ввода/вывода, используя элемент очереди ввода/вывода, как связующее звено между драйвером устройства и программой, которая запрашивает операцию ввода/вывода.

2.3.2.1. ВЫПОЛНЕНИЕ СИСТЕМНОЙ МАКРОКОМАНДЫ

Перед выполнением операции ввода/вывода программа должна открыть новый или уже существующий файл на устройстве. Эта процедура включает открытие канала. Блок из 5 слов отводится под информацию о канале и включает расположение и длину файла. Номер канала является идентификатором 5-словного блока, поэтому можно ссылаться на блок, указывая этот номер. Монитор использует информацию о канале при выполнении операции ввода/вывода.

Программа инициирует операцию ввода/вывода, используя запрос на чтение или запись по соответствующему каналу. Например, можно использовать макрокоманды .READ, .READC, .READW, .WRITE, .WRITC, .WRITW и .SPFUN. Программы, написанные на других языках, используют подобные запросы для чтения и записи данных.

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

Если отсутствует свободный элемент очереди при работе с SJ-монитором, то монитор переходит в состояние ожидания свободного элемента для установки запроса в очередь. Это ожидание закончится, как только произойдёт прерывание от устройства и драйвер этого устройства выполнит макрокоманду .DRFIN (которая указывает, что операция ввода/вывода завершена), и программа управления очередью возвратит элемент очереди в список свободных элементов.

2.3.2.2. ОБСЛУЖИВАНИЕ ЗАПРОСА

В SJ-мониторе новый элемент всегда устанавливается в конец очереди.

Для предотвращения наложений при прерывании от устройств (при обработке которых могут удаляться любые элементы из той же самой очереди) SJ-монитор обслуживает очередь на 7 приоритете.

Если очередь пуста, то монитор делает новый элемент как текущим, так и последним элементом в очереди. Он увеличивает счётчик элементов в очереди для этого канала на 1 (байт-счётчик имеет относительное смещение 10 в блоке описания канала) и восстанавливает приоритет до предыдущего уровня. Затем он передаёт управление секции инициации указанного драйвера для запуска операции ввода/вывода. Драйвер инициирует передачу и возвращает управление монитору по инструкции "RTS PC".

Если очередь не пуста и драйвер занят выполнением запроса, монитор установит новый элемент в конец очереди. Он увеличивает на 1 счётчик элементов очереди этого канала и понижает приоритет до предыдущего уровня.

Если имеет место запрос на операцию ввода/вывода с ожиданием (макрокоманды .WRITW или .READW), то система зацикливается (опрашивает заголовок очереди) до тех пор, пока не завершится передача, указанная в этом элементе очереди (т.е. очередь не опустеет).

Если этот запрос не является запросом с ожиданием, то управление возвращается программе, которая выполняется одновременно с операцией ввода/вывода.

2.3.2.3. ВЫПОЛНЕНИЕ ОПЕРАЦИИ ВВОДА/ВЫВОДА

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

Если операция завершена успешно, то драйвер использует макрокоманду .DRFIN для возврата в монитор и удаления текущего, обслуженного элемента из очереди ввода/вывода.

2.3.2.4. ЗАВЕРШЕНИЕ ЗАПРОСА ВВОДА/ВЫВОДА

Если происходит прерывание от устройства (операция ввода/вывода завершена) то драйвер выполняет макрокоманду .DRFIN и передаёт управление монитору для завершения процедуры ввода/вывода. После этого монитор должен извлечь текущий элемент очереди из очереди ввода/вывода к драйверу и переслать его в список свободных элементов или установить в очередь подпрограмм завершения.

Во всех системах с SJ-монитором монитор сначала уменьшает счётчик элементов очереди этого канала.

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

Монитор повышает приоритет до 7 на время, в течении которого он возвращает элемент в список свободных элементов очереди.

Если элемент содержит адрес подпрограмм завершения, монитор возвращает элемент очереди ввода/вывода в список свободных элементов. Затем он пересылает слово состояния канала CSW в R0, номер канала в R1 и начинает выполнение подпрограммы завершения.

Если элемент не содержит адреса подпрограммы завершения, монитор возвращает элемент очереди ввода/вывода в список свободных элементов. Управление передаётся процессу или программе, которая была прервана.

3. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ

В этом разделе описаны некоторые структуры данных в RMON.

3.1. ФИКСИРОВАННЫЕ СМЕЩЕНИЯ

Некоторые ячейки, содержащие информацию о системе, всегда имеют фиксированные позиции от начала RMON. Эти ячейки называются ячейками с фиксированными смещениями. Они содержат или информацию, или указатели на неё. Область этих ячеек в RMON размещена в начале программной секции (PSECT) SMDATA.

Для доступа к ячейкам с фиксированными смещениями из выполняющейся программы используется системная макрокоманда .GVAL, например:

 
.GVAL #AREA,#OFFSET

где

AREA

область из двух слов для аргументов EMT;

 

OFFSET

фиксированное смещение, равное одному из перечисленных ниже.

Программа пользователя никогда не должна изменять значения фиксированных смещений.

Фиксированные смещения в RMON содержат следующую информацию (даны фиксированные смещения, их символьное обозначение, длина в байтах и назначение; значения даны в восьмеричном виде).

0

(¤RMON)

(4)

Общая точка входа в прерывания; содержит инструкцию JMP ¤INTEN; используется системной макрокомандой .INTEN;

4

(¤CSW)

(240)

Область информации о каналах задания пользователя; 16 (десятичное) каналов; для каждого канала отводится 5 слов;

244

(¤SYSCH)

(2)

Внутренний канал, используемый для системных функций; KMON использует этот канал;

246

 

(2)

 

250

 

(2)

Зарезервировано;

252

(I.SERR)

(2)

Указатель грубых или устранимых ошибок;

254

(I.SPLS)

(2)

256

(BLKEY)

(2)

Номер сегмента каталога, находящегося в данный момент в памяти; значение, равное 0, означает, что сегмент каталога отсутствует в памяти;

260

(CHKEY)

(2)

Индекс и номер устройства, каталог которого находится в памяти; младший байт содержит индекс устройства в таблицах монитора; старший байт - номер устройства;

262

(¤DATE)

(2)

Содержит текущую дату;

264

(DFLG)

(2)

Флаг, указывающий на выполнение операций с каталогом; если он не равен нулю, то выполнение <СУ/C> с терминала приостанавливается до тех пор, пока не закончится операция с каталогом;

266

(USRLC)

(2)

Адрес обычной загрузки USR; этот адрес используется при загрузке USR в память заданием пользователя, если ячейка 46 системной области связи равна 0;

270

(QCOMP)

(2)

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

272

(SPUSR)

(2)

Слово ошибки внешнего устройства; используется драйверами устройств, не имеющих файловую структуру ОС БК-11. Такие устройства, как кассетные магнитные ленты, используют это слово для сообщения монитору о появившихся ошибках;

274

(SYUNIT)

(2)

Старший байт содержит номер устройства, с которого была загружена система;

276

(SYSVER)

(1)

Номер редакции монитора; эту ячейку можно использовать для определения номера редакции, если имеется несколько редакций системы; дополнительный номер версии монитора (для ОС БК-11 в 1.0 значение этой ячейки равно 1);

277

(SYSUPD)

(1)

Номер коррекции монитора (для ОС БК-11 в 1.0 = 0);

300

(CONFIG)

(2)

Слово конфигурации системы; его биты используются для хранения информации о наборе аппаратных средств и о программном обеспечении системы; ячейка 370 содержит дополнительную информацию о системе;

302

(SCROLL)

(2)

Не используется;

304

(TTKS)

(2)

Адрес регистра состояния клавиатуры системного терминала;

306

(TTKB)

(2)

Адрес буферного регистра клавиатуры системного терминала;

310

(TTPS)

(2)

Адрес регистра состояния экрана системного терминала, в ОС БК-11 не используется;

312

(TTPB)

(2)

Адрес буферного регистра экрана системного терминала, в ОС БК-11 не используется;

314

(MAXBLK)

(2)

Максимальная длина файла, создаваемого по макрокоманде .ENTER, в которой аргумент LEN равен 0; по умолчанию это значение равно 177777, т.е. ограничение на длину файла отсутствует; значение этой ячейки может быть изменено во время работы программы (не рекомендуется) или при помощи программы SIPP; следует помнить, что эта ячейка не входит в область контекстного переключения;

316

(E16LST)

(2)

Смещение от начала RMON до таблицы диспетчера EMT (EMT с 340 по 357); используется при работе программы BATCH

320

(CNTXT)

(2)

Указатель на смешанную область задания, выполняющегося в данный момент (только для FB/XM-мониторов), в ОС БК-11 не используется;

322

(JOBNUM)

(2)

Номер выполняющегося задания (только для FB/XM-мониторов), в ОС БК-11 не используется;

320

(¤TIME)

(2)

Время дня;

322

(¤TIME+2)

(2)

324

(SYNCH)

(2)

Адрес подпрограммы обработки системной макрокоманды .SYNCH, в ОС БК-11 не используется;

326

(LOWMAP)

(24)

Начало карты защиты адресов памяти (с 0 по 476);

352

(USRLOC)

(2)

Указатель текущей точки входа в USR; он равен 0, если USR не загружена в памяти; если USR только что была загружена в память, то он указывает на начало буфера USRBUF; во всех остальных случаях в этой ячейке содержится адрес начала области постоянных подпрограмм USR;

354

(GTVECT)

(2)

Не используется;

356

(ERRCNT)

(2)

Младший байт является счётчиком ошибок; используется при работе системных программ; старший байт не используется;

360

(¤MTPS)

(2)

Адрес подпрограммы обработки системной макрокоманды .MTPS;

362

(¤MFPS)

(2)

Адрес подпрограммы обработки системной макрокоманды .MFPS;

364

(SYINDX)

(2)

Указатель на системное устройство в таблице устройств монитора;

366

(STATWD)

(2)

Слово состояния командного файла и команд монитора;

370

(CONFG2)

(2)

Дополнительное слово конфигурации системы; его биты используются для указания имеющегося дополнительного оборудования центрального процессора;

372

(SYSGEN)

(2)

Слово параметров генерации системы; его биты указывают возможные варианты процедуры генерации и не должны изменяться пользователем;

374

(USRARE)

(2)

Размер USR в байтах; программы могут использовать эту информации для определения размера области, необходимой для свопинга USR;

376

(ERRLEV)

(1)

Код ошибки; если при выполнении командного файла произойдёт ошибка с кодом, превышавшим или равным установленному в этом байте, то его выполнение прекращается; можно изменить этот код по команде SET ERROR; по умолчанию установлено ERROR;

377

(IFMXNS)

(1)

Допустимый уровень вложенности командных файлов (по умолчанию 3); можно изменить это значение, используя системную программу SIPP; необходимо обращаться к этой ячейке как к байту, а не как к слову;

400

(EMTRTN)

(2)

Внутреннее смещение, используемое при пакетной обработке, в ОС БК-11 не используется;

402

(FORK)

(2)

Эта ячейка содержит смещение от начала RMON до подпрограммы обработки системной макрокоманды .FORK; для автоматической установки указателя на подпрограмму Ф-обработки в драйверах устройств используется системная макрокоманда .DREND;

404

(PNPTR)

(2)

Ячейка содержит смещение от начала RMON до таблицы физических имён устройств ¤PNAME;

406

(MONAME)

(4)

В двух словах содержится имя файла монитора (в коде RAD50), загруженного в память;

412

(SUFFIX)

(2)

Ячейка содержит символ в коде RAD50 (выровненный вправо), используемый текущим монитором в именах драйверов устройств.

В мониторе используется карта защиты младших ячеек памяти (ячейки с 0 по 476). Эта карта защиты требуется для предотвращения конфликтной ситуации при использовании векторов.

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

Карта защиты младших ячеек памяти - это таблица из 20 (десятичное) байтов, которая имеет относительное смещение 326 от начала RMON. В табл. 3 перечислены смещения и соответствующие ячейки, которые защищаются данным байтом (все значения даны восьмеричные).

Таблица 3

Смещение (байт)

Ячейка (байты)

326

0-17

327

20-37

330

40-57

331

60-77

332

100-117

333

120-137

334

140-157

335

160-177

336

200-217

337

220-237

340

240-257

341

260-277

342

300-317

343

320-337

344

340-357

345

360-377

346

400-417

347

420-437

350

440-457

351

460-477

Каждый байт в табл. 3 содержит информацию о состоянии восьми слов в памяти. Байты считываются слева направо, то есть, если защищены ячейки с 0 по 3, то первый байт в таблице содержит 11000000.

Примечание. Необходимо помнить, что защищаются только слова, и нельзя защитить один байт. Поэтому защита слова 4 распространяется на 4-й и 5-й байты.

Если пользователю необходимо защитить вектора в SJ-мониторе, то это можно выполнить двумя способами:

Например, для защиты ячеек с 330 по 336 в программу пользователя необходимо включить следующие инструкции:

        MOV     @#54,R0
        BISB    #^B1111,343(R0)

Корректировка карты защиты с помощью пользовательской программы сохраняется до первой перезагрузки системы, т.к. изменения производятся непосредственно в памяти.

Корректировка карты защиты с помощью системной программы SIPP обеспечивает постоянную защиту. Она сохраняется и при перезагрузке системы. Поэтому рекомендуется для постоянной защиты векторов в SJ-мониторе использовать системную программу SIPP.

Монитор использует карту защиты младших ячеек памяти для следующих ячеек (защита выполняется автоматически):

0-16

24-32

50-66

100-102 (если используется сетевой таймер);

104-106 (если используется программируемый таймер);

114-116

244-246

А также:

Примечание. Векторы устройств, драйверы которых загружаются в память по команде LOAD, будут автоматически защищены. Векторы устройств, драйверы которых загружаются в память с помощью макрокоманды .FETCH, не будут защищены.

3.1.2. СЛОВО КОНФИГУРАЦИИ СИСТЕМЫ (CONFIG)

Слово конфигурации системы CONFIG (имеет относительное смещение 300) содержит информацию о подключённой аппаратуре и о программном обеспечении.

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

0

(FBMON¤)

Если равен 0 при FJOB¤ (бит 7) = 0, то это RM/SJ-монитор;

если равен 0 при FJOB¤ (бит 7) = 1, то это TS-монитор;

если равен 1 при MMU¤ (бит 12) = 0, то это FB-монитор;

если равен 1 при MMU¤ (бит 12) = 1, то это XM-монитор;

1

 

Не используется;

2

(HWDSP¤)

Имеется аппаратура графического дисплея СМ-7300 (ЭПГ-СМ) (в ОС БК-11 не используется)

3

(BATCH¤)

Выполняется пакетная обработка в фоновом режиме (в ОС БК-11 не используется)

4

 

Не используется;

5

(CLK50¤)

Если равен 1, то используется таймер с частотой прерываний 50 Гц;

Если равен 0, то используется таймер с частотой прерываний 60 Гц;

6

(HWFPU¤)

Присутствует процессор с плавающей запятой (для СМ-1420) (в ОС БК-11 не используется)

7

(FJOB¤)

Загружена оперативная программа или системное задание (в ОС БК-11 не используется)

8

(GTLNK¤)

Используется графический дисплей (после команды "GT ON") (в ОС БК-11 не используется)

9

(USR¤)

USR резидентна в оперативной памяти (использовалась команда "SET USR NOSWAP" );

10

Загружена системная программа QUEUE (в ОС БК-11 не используется)

11

(LSI¤)

В качестве центрального процессора используется микропроцессор типа "Электроника-60" (нет адресуемого слова состояния процессора) (в ОС БК-11 не используется)

12

(MMU¤)

Работает XM-монитор

13

(LKCS¤)

Таймер имеет регистр состояния;

14

(KW¤P)

В качестве системного используется программируемый таймер (в ОС БК-11 не используется);

15

(CLOCK¤)

В состав системы входит таймер.

3.1.3. ДОПОЛНИТЕЛЬНОЕ СЛОВО КОНФИГУРАЦИИ СИСТЕМЫ (CONFG2)

Дополнительное слово конфигурации системы (относительное смещение 370) указывает на имеющиеся дополнительные аппаратные средства в комплексе.

Все описания даны для установленного бита (приводятся номера битов, их символьные имена и назначение):

0

(CACHE¤)

В состав комплекса входит кэш-память (для СМ-1420).

1

(MPTY¤)

Используется оперативная память с контролем по чётности.

2

(SWREG¤)

Процессор имеет регистр переключателя (для чтения).

3

(LIGHT¤)

Процессор имеет регистр индикаторов (для записи).

8

(EIS¤)

Процессор имеет расширенный набор инструкций (EIS).

9

(VT6¤0)

Тип графического дисплея.

14

(TYP70¤)

Процессор допускает 22-разрядную адресацию.

15

(TYP60¤)

Процессор имеет перепрограммируемый микропрограммный блок.

Остальные биты зарезервированы для использования в следующих версиях системы.

3.1.4. СЛОВО ПАРАМЕТРОВ ГЕНЕРАЦИИ СИСТЕМЫ (SYSGEN)

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

Все описания даны для установленного бита (приведены номера битов, их символьные значения, имена и назначения):

0

(ERLG¤)

Сбор статистики о работе оперативной памяти (с паритетом) и внешних устройств. (В ОС БК-11 не используется).

1

(MMGT¤)

Использование аппаратуры диспетчера памяти. (В ОС БК-11 не используется).

2

(TIMIT¤)

Использование запросов для работы с таймером в драйверах.

3

(TSG¤T)

Использование шестого регистра адреса страниц диспетчера памяти в TS-мониторе (XM-монитор использует первый регистр). (В ОС БК-11 не используется).

9

(MPTY¤)

Использование памяти с паритетом.

10

(TIMER¤)

Работа с таймером в SJ-мониторе.

13

(MTTY¤)

Работа с дополнительными терминалами. (В ОС БК-11 не используется).

14

 

Работа с системными заданиями. (В ОС БК-11 не используется).

Примечание. Значения первых четырёх битов должны соответствовать параметрам, которые устанавливаются при ассемблировании пользовательских драйверов. Попытка использовать драйверы, несовместимые с монитором, приводит к появлению сообщения об ошибке:

?KMON-F-CONFLICTING SYSGEN OPTIONS

3.2. СМЕШАННАЯ ОБЛАСТЬ

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

При загрузке задания монитор отводит место для смешанной области и размещает в ней информацию.

Смешанная область для задания пользователя размечается в начале программной секции (PSECT RMON) в резидентном мониторе.

Значение глобального символа FMPUR, который содержится в карте загрузки монитора, равно размеру смешанной области.

В ОС БК-11 всегда загружено задание пользователя: если оно отсутствует, то заданием пользователя является KMON.

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

0

(I.STATE)

(2)

биты состояния задания;

2

(I.QHDR)

(2)

указатель на начало списка свободных элементов очереди;

4

(I.CMPE)

(2)

указатель на последний элемент в очереди подпрограмм завершения (в ОС БК-11 не используется);

6

(I.CMPL)

(2)

указатель на первый элемент очереди подпрограмм завершения (в ОС БК-11 не используется);

10

(I.CHWT)

(2)

указатель на информацию о канале; если задание ожидает завершения ввода/вывода на канале, то здесь запоминается адрес области хранения информации об этом канале;

12

(I.PCHW)

(2)

ячейка для хранения I.CHWT во время выполнения подпрограммы завершения;

14

(I.PERR)

(2)

байты ошибок 52 и 53 сохраняются в этой ячейке на время выполнения подпрограммы завершения;

16

(I.TTLC)

(2)

счётчик строк кольцевого буфера ввода с клавиатуры;

20

(I.PTTI)

(2)

предыдущий символ, введённый с клавиатуры;

16

(I.CNSL)

(2)

указатель на блок управления терминалом (TCB) для терминала, являющегося системным для этого задания (только в многотерминальных системах) (в ОС БК-11 не используется);

22

(I.TID)

(2)

указатель на область идентификатора задания (в ОС БК-11 не используется);

24

(I.JNUM)

(2)

номер задания, которому принадлежит эта смешанная область (в ОС БК-11 не используется);

26

(I.CNUM)

(2)

число определённых каналов ввода/вывода; по умолчанию равно 16 (десятичное); системная макрокоманда .CDFN может быть использована для определения большего числа каналов;

30

(I.CSW)

(2)

указатель на область хранения информации в канале задания;

32

(I.IOCT)

(2)

счётчик всех операций ввода/вывода, незавершённых для данного задания;

34

(I.SCTR)

(2)

счётчик приостановленного задания. Задание приостановлено, если значение счётчика отрицательно (в ОС БК-11 не используется);

36

(I.BLOK)

(2)

биты блокировки задания (в ОС БК-11 не используется);

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

I.JID

(10)

Строка идентификатора задания, выводимая на терминал. Если в монитор включены средства системных заданий, то длина I.JID равна 14 (в ОС БК-11 не используется).

I.INAM

(6)

Логическое имя задания в коде КОИ-7 (только для системных заданий) (в ОС БК-11 не используется).

I.NAME

(10)

Спецификация файла (в коде RAD50), из которого загружено задание.

I.SPLS

(2)

Указатель на несвязанный список, переданный системной макрокомандой .DEVICE.

I.TRAP

(2)

Адрес подпрограммы обработки прерываний по ячейкам 4 и 10, определённый системной макрокомандой .TRPSET.

I.FPP

(2)

Адрес подпрограммы обработки прерываний от процессора плавающей запятой (в ОС БК-11 не используется).

I.SPSV

(2)

Начало данных сохранения SP (только для XM-монитора) (в ОС БК-11 не используется).

I.SWAP

(4)

Указатель на дополнительную информацию о контекстном переключении, указанную в макрокоманде .CNTXSW (в ОС БК-11 не используется).

I.SP

(2)

Сохраняемый указатель стека.

I.BITM

(24)

Карта защиты младших ячеек памяти.

I.CLUN

(2)

Логический номер (LUN) терминала задания (только для многотерминальных систем) (в ОС БК-11 не используется).

I.TTLC

(2)

Счётчик строк, содержащихся в кольцевом буфере ввода с терминала (только для многотерминальных систем) (в ОС БК-11 не используется).

I.IRNG

(2)

Нижний адрес кольцевого буфера ввода.

I.IPUT

(2)

Указатель на текущую позицию в кольцевом буфере ввода с терминала при прерываниях.

I.CTR

(2)

Счётчик символов в кольцевом буфере ввода.

I.GET

(2)

Указатель на текущую позицию в кольцевом буфере ввода (для системной макрокоманды .TTYIN).

I.ITOP

(2)

Верхний адрес кольцевого буфера ввода.

------

TTYIN

Кольцевой буфер ввода для системной макрокоманды .TTYIN.

I.OPUT

(2)

Указатель PUT на текущую позицию в кольцевом буфере вывода (для системной макрокоманды .TTYOUT).

I.OCTR

(2)

Счётчик символов, содержащихся в кольцевом буфере вывода.

I.OGET

(2)

Указатель GET на текущую позицию в кольцевом буфере вывода при прерываниях.

I.OTOP

(2)

Верхний адрес кольцевого буфера вывода.

------

TTYOUT

Кольцевой буфер вывода.

I.QUE

QWDSIZ

Начальный элемент очереди, предоставляемый системой заданию (16 байтов).

I.MSG

(4)

Канал внутренних сообщений (в ОС БК-11 не используется).

I.SERR

(6)

Третье слово канала сообщений; используется как аппаратный или программный флаг ошибок (в ОС БК-11 не используется).

I.TERM

(2)

Слово состояния терминала (в ОС БК-11 не используется).

I.TRM2

(2)

Второе слова состояния терминала (в ОС БК-11 не используется).

I.SCCA

(2)

Адрес дополнительного слова состояния терминала, расположенного в программе пользователя и устанавливаемого по системной макрокоманде .SCCA (в ОС БК-11 не используется).

I.SCCI

(2)

Значение PA1 в ХМ-мониторе для системной макрокоманды .SCCA (в ОС БК-11 не используется).

I.DEVL

(2)

Указатель на связанный список, переданный макрокоманде .DEVICE (в ОС БК-11 не используется).

I.FPSA

(2)

Указатель на область сохранения регистров FPU (только для ХМ-монитора при наличии процессора плавающей запятой) (в ОС БК-11 не используется).

I.SCCM

(36)

Область сохранения системной области связи (только для ХМ-монитора при отсутствии многотерминальной поддержки) (в ОС БК-11 не используется).

I.SCCM

(40)

Область сохранения системной области связи (для ХМ-монитора при наличии многотерминальной поддержки) (в ОС БК-11 не используется).

I.RSAV

(20)

Область сохранения регистров (только для ХМ-монитора) (в ОС БК-11 не используется).

I.WPTR

(2)

Указатель на блоки управления окном в I.WNUM (только для ХМ-монитора) (в ОС БК-11 не используется).

I.RGW

RGWDSZ

Блоки управления областью (только для ХМ-монитора) (в ОС БК-11 не используется).

I.WNUM

(2)

Число блоков управления окнами (только для ХМ-монитора) (в ОС БК-11 не используется).

------

WNWDSZ

Блоки управления окнами (только для ХМ-монитора) (в ОС БК-11 не используется).

I.FSAV

(62)

Область сохранения регистров FPU (только для ХМ-монитора) (в ОС БК-11 не используется).

I.VHI

(2)

Виртуальный старший адрес задания, (только для ХМ-монитора); не равен 0, если при компоновке использован ключ /V (в ОС БК-11 не используется).

I.SCHP

(2)

Указатель на область хранения информации о системном канале; монитор использует, этот канал при выполнении некоторых системных макрокоманд, например, .DSTATUS (в ОС БК-11 не используется).

I.SYCH

(14)

Область системного канала задания для оперативного и системных заданий; для фонового задания канал расположен в области фиксированных смещений в RMON (в ОС БК-11 не используется).

Примечание. "------" означает, что размер определяется при генерации системы.

3.2.1. БИТЫ СОСТОЯНИЯ ЗАДАНИЯ

Слово I.STATE содержит информацию о состоянии задания. Неиспользуемые биты зарезервированы для последующих версий системы (приводятся номера битов, символьные имена и назначения):

0

(ABPND¤)

Был запрос на аварийное прекращение этого задания;

1

(BATCH¤)

Задание выполняется в пакетном режиме (BATCH) (в ОС БК-11 не используется);

2

(CSIRN¤)

Выполняется CSI для этого задания;

3

(USRRN¤)

USR обслуживает запрос этого задания;

4

 

Не используется;

5

(ABORT¤)

Аварийное прекращение выполнения задания;

6

 

Не используется;

7

(CPEND¤)

Задание имеет готовую к выполнению подпрограмму завершения;

8-11

 

Не используются;

12

(WINDW¤)

Виртуальное задание (в ОС БК-11 не используется);

13-14

 

Не используются;

15

(CMPLT¤)

Для этого задания выполняется подпрограмм завершения.

3.3. ТАБЛИЦЫ УСТРОЙСТВ

Таблицы в RMON содержат информацию об устройствах системы ОС БК-11. Эти таблицы расположены в модуле SYSTBL.MAC, который создаётся при генерации системы и ассемблируется отдельно от модуля RMON. SYSTBL компонуется с RMON и другими модулями для получения рабочей версии RMON. Ячейка ¤SLOT в SYSTBL определяется при генерации системы и содержит максимальное число устройств, которое может иметь система. Значение ¤SLOT больше или равно 3; максимальное значение равно 31 (десятичное).

3.3.1. ТАБЛИЦА ¤PNAME

Таблица постоянных имён ¤PNAME является центральной таблицей, вокруг которой создаются все другие, общее число входов фиксируется при генерации монитора. Информация о каждом устройстве, поддерживаемом системой, заносится в ¤PNAME при ассемблировании монитора. Каждая запись в таблице состоит из одного слова, содержащего двухсимвольное физическое имя устройства в коде RAD50. Например, запись о диске BY содержит ".RAD50 /BY/". Устройство TT должно быть первым в таблице. Системное устройство всегда должно быть вторым, позиция других устройств не является существенной. Записи, сделанные в этой таблице, и их относительные смещения (т.е. их расположение в таблице) определяют основной (главный) индекс устройства, используемый в различных местах в RMON. Другие таблицы организованы в том же самом порядке, что и ¤PNAME. Смещение имени устройства относительно начала ¤PNAME является индексом для получения информации об этом устройстве в других таблицах, загрузчик проверяет соответствие параметров генерации системы, имеющихся в драйвере и в текущем мониторе (используя четыре первых бита ячейки SYSGEN в RMON). Он обнуляет в таблице ¤PNAME записи о тех драйверах, параметры которых не соответствуют параметрам данной системы.

Команда монитора INSTALL не может включить драйвер в таблицу, если его параметры не соответствуют параметрам текущего монитора.

3.3.2. ТАБЛИЦА ¤STAT

Таблица статуса устройства ¤STAT содержит записи, которые заносятся при ассемблировании, для устройств, постоянно резидентных в ОС БК-11. Когда система загружена, записи о всех других устройствах заносятся, если драйвер включён в системные таблицы загрузчиком или командой монитора INSTALL. Каждое устройство в системе имеет запись о статусе в собственном слове в таблице ¤STAT. Слово статуса устройства идентифицирует каждое физическое устройство и содержит информации о нем, например, это устройство прямого или последовательного доступа.

Слово статуса устройства является частью информации, передаваемой в программу при выполнении макрокоманды .DSTATUS.

3.3.3. ТАБЛИЦА ¤DVREC

Таблица ¤DVREC содержит для каждого устройства номер блока, с которого данный драйвер расположен на системном устройстве.

В эту таблицу записи для устройств, поддерживаемых системой, заносятся при загрузке системы, а записи для новых устройств - при выполнении команды INSTALL.

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

Примечания:

  1. Если нулевой блок файла драйвера расположен на плохом блоке устройства, то система не сможет включить его в таблицу устройств или загрузить драйвер.
  2. Для постоянно резидентных драйверов устройств значение записи в таблице ¤DVREC равно 0, например, для драйвера системного устройства.

3.3.4. ТАБЛИЦА ¤ENTRY

Таблица точек входа драйверов ¤ENTRY содержит информацию в размещении драйвера в памяти.

Эта таблица корректируется при загрузке драйвера в память макрокомандой .FETCH или по команде монитора LOAD. Запись для каждого устройства содержит указатель на 4-е слово драйвера устройства в памяти. Запись обнуляется, если драйвер выгружается с помощью макрокоманды .RELEASE или по команде монитора UNLOAD.

3.3.5. ТАБЛИЦА ¤HSIZE

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

3.3.6. ТАБЛИЦА ¤DVSIZ

Каждая запись в таблице ¤DVSIZ содержит размер драйвера устройства в байтах. Это значение определяет размер памяти, необходимый для загрузки каждого драйвера.

3.3.7. ТАБЛИЦЫ ¤UNAM1 И ¤UNAM2

Таблицы ¤UNAM1 и ¤UNAM2 содержат логические имена устройств. Записи в таблицы производятся при выполнении команды монитора ASSIGN. Имя физического устройства запоминается в таблице ¤UNAM1, а соответствующее ему логическое имя запоминается в таблице ¤UNAM2.

При первоначальной загрузке системы автоматически производится назначение логических имён DK и SY устройству, с которого система была загружена.

Значение в ячейке ¤SLOT, которое устанавливается при генерации системы, содержит максимально возможное число назначаемых логических имён.

Можно использовать одну команду ASSIGN для каждого устройства, поддерживаемого системой.

Автоматически назначаемое при загрузке логическое имя SY не входит в общее число назначений, допустимых для пользователя.

Таблицы ¤UNAM1 и ¤UNAM2 не имеют соответствия с таблицей ¤PNAME.

3.3.8. ДОБАВЛЕНИЕ НОВЫХ ДРАЙВЕРОВ УСТРОЙСТВ

Свободные места в таблицах создаются удалением или переименованием одного или более файлов драйверов устройств, расположенных на системном устройстве, и перезапуском системы или удалением драйвера из таблицы устройств командой монитора REMOVE. Команда монитора INSTALL может заносить в таблицу различные драйверы устройств после того, как система была перезагружена. Однако команды REMOVE и INSTALL корректируют системные таблицы в памяти (ОЗУ), но не на системном устройстве.

При повторной загрузке системы нужно заново выполнить команды REMOVE и INSTALL или включить их в соответствующий стартовый командный файл STARTS.COM, STARTF.COM, STARTX.COM или STARNN.SYS загружаемого монитора.

Performed by © gid, 2012-2021.