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

1. ОПРЕДЕЛЕНИЯ

Ниже дано описание терминов, встречающихся в настоящем документе.

Адресное пространство

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

Блок

наименьшая единица памяти (32 слова), с которой может работать диспетчер памяти (ДП).

Виртуальный адрес

16-разрядный адрес, сформированный процессором. Термин "виртуальный" применяется потому, что адрес подлежит преобразованию (расширению) с помощью содержимого регистра адреса страницы (РАС) ДП.

Область

непрерывный сегмент физической памяти.

Динамическая область

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

Статическая область

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

Нижняя область памяти

физическая область памяти, имеющая адрес в диапазоне 0-157776 (восьмеричное).

Отображение

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

Пространство виртуальных адресов программы (PVAS)

область адресации, выбираемая программой и имеющая размер 32К слов.

Окно

часть PVAS, начальный адрес которой кратен 4К слов. Размер окна может изменяться от 32 слов до 28К слов.

Расширенная память

физическая память, имеющая адреса выше 177776 (восьмеричное).

Режим

диспетчер памяти может работать в одном из двух режимов (внутреннем или режиме пользователя). Для каждого режима ДП имеет отдельный набор регистров - РАС/РПС - из восьми пар РАС/РПС каждый. Режим определяется разрядами (15,14) слова состояния процессора (ССП).

РАС (регистр адреса страницы)

регистр диспетчера памяти, содержащий базовый адрес или константу распределения. ДП имеет 16 РАС: 8 для внутреннего режима и 8 - для режима пользователя.

РПС (регистр признака страницы)

регистр ДП, содержащий информацию о странице (длину страницы, направление расширения и ключ доступа). ДП имеет 16 РПС (8 - для внутреннего режима и 8 - для режима пользователя).

Страница

одна из 8 секций виртуального адресного пространства в 32К слов, начальный адрес каждой страницы кратен 4К слов. Размер страницы изменяется от 0 до 4096 (десятичное) слов. Номера страниц - от 0 до 7.

Физический адрес

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

Пространство логических адресов программы (PLAS)

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

БООБ (блок определения области)

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

БООК (блок определения окна)

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

УБОБ (управляющий блок области)

блок размером 3 слова в смешанной области задания. Используется монитором при отображении.

OCA (очередной свободный адрес) задания

виртуальный старший адрес задания, округлённый в сторону увеличения до 4К.

ВСА (виртуальный старший адрес)

наибольший виртуальный адрес, используемый оверлеями расширенной памяти, округлённый до 32 (десятичное), минус 2 (две младшие цифры восьмеричного адреса всегда 76).

ХМ .SETTOP

ХМ-особенность программного запроса SETTOP; предоставляет заданиям пользователя возможность получения дополнительной памяти.

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

Монитор расширенной памяти предоставляет пользователю возможность использовать память размером свыше 32К слов (см. раздел 4). Он представляет собой расширение монитора FB. Программы, разработанные в системе мониторов SJ и FB, будут выполняться и в системе под управлением монитора ХМ, однако, программы, которые должны использовать монитор ХМ, не будут выполняться в системе под управлением мониторов SJ и FB.

Для использования монитора расширенной памяти в операционной системе ФОДОС-2 необходимо иметь следующие аппаратные и программные компоненты:

  1. монитор ХМ и драйверы для ХМ;
  2. память ёмкостью не менее 32К слов;
  3. диспетчер памяти;
  4. блок расширенной арифметики.

3. ХАРАКТЕРИСТИКИ ПРОГРАММЫ

При обработке программ пользователя монитор осуществляет один из двух типов отображений: виртуальный или привилегированный. В соответствии с типом отображения программы пользователя делятся на виртуальные или привилегированные. Тип отображения определяется разрядом 10 в слове состояния задания (ССЗ). Он должен задаваться во время загрузки программы.

Виртуальный тип предоставляет пользователю большую (по сравнению с привилегированным) область адресного пространства (32К) для отображения в расширенную память.

Этот тип отображения выбирается установкой разряда 10 в ССЗ.

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

Диспетчер памяти имеет два рабочих режима: внутренний и режим пользователя. Режим определяется разрядами 15, 14 в слове состояния процессора (ССП) и устанавливается монитором: 00 - внутренний, 11-пользователя.

RMON и привилегированные программы выполняются во внутреннем режиме. KMON и виртуальные программы выполняются в режиме пользователя.

3.1. Особенности использования расширенной памяти

В табл. 1 приводится перечень особенностей использования программных запросов при работе с монитором расширенной памяти.

Таблица 1

Запрос

Особенности использования

.CDFN

Указанная область памяти для каналов должна находиться в нижних 28К физической памяти

.QSET

Указанная область памяти для элементов очереди должна располагаться в нижних 28К физической памяти. Для каждого элемента очереди должно отводиться 10 (десятичное) слои

.CNTXSW

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

.SETTOP

Применим только для области виртуальных адресов

4. АДРЕСАЦИЯ В СИСТЕМЕ РАСШИРЕННОЙ ПАМЯТИ

16-разрядное слово, используемое в операционной системе ФОДОС-2, не позволяет адресовать более 32К слов памяти. Однако, преобразование адресов с помощью диспетчера памяти позволяет адресовать до 124К слов памяти (плюс 4К слов на страницу ввода-вывода) на 18-разрядных процессорах с общей шиной и до 2044К слов памяти (плюс 4К слов на страницу ввода-вывода) на 22-разрядных процессорах с каналом Q-BUS. На рис. 1 показано адресное пространство для 18-разрядного и 22-разрядного слова.

Адресное пространство для 18-разрядного и 22-разрядного слова

17

15

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

Наибольшее число, представимое в 18-разрядной сетке:

восьмеричное - 777777, десятичное - 262143

21

17

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

Наибольшее число, представимое в 22-разрядной сетке:

восьмеричное - 17777777, десятичное - 4194303

Рис. 1.

4.1. Регистры адреса страницы и регистры признака страницы

Монитор системы ФОДОС-2 взаимодействует с диспетчером памяти через посредство регистров активной страницы, которые расположены в странице ввода-вывода. Каждый из них состоит из двух 16-разрядных слов, как показано на рис. 2: регистра адреса страницы (РАС) и регистра признака страницы (РПС).

Регистр активной страницы

15

0

15

0

Регистр адреса страницы

Регистр признака страницы

Рис. 2

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

РАС и РПС имеют номера от 0 до 7 - по одному РАС/РПС на каждую виртуальную адресную страницу в виртуальном адресном пространстве 32К слов.

4.1.1. Регистр адреса страницы

Восемь РАС соответствуют восьми виртуальным адресным страницам. РАС содержит адрес физической памяти в блоках размером 32 (десятичное) слова - поле адреса страницы - для конкретной виртуальной адресной страницы. Содержимое РАС показано на рис. 3. Разряды 0-11 используются для 18-разрядной адресации; разряды 0-15 - для 22-разрядной адресации.

Регистр адреса страницы

15

12

11

0

Поле адреса страницы

<-------- 18-разрядная адресация -------->

<--------------- 22-разрядная адресация ---------------->

Рис. 3.

4.1.2. Регистр признака страницы

РПС содержит информацию о расширении страницы, длине страницы и контроле доступа к конкретной странице. Как и РАС, РПС соответствуют виртуальным адресным страницам. Содержимое РПС показано на рис. 4.

Регистр признака страницы

15

14

8

7

6

5 4

3

2

1

0

*

Поле длины страницы

*

Запись

***

НРШ

Поле доступа

*

Рис. 4

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

Величина

Значение

00

Страница не является резидентной. Прерывается любая попытка доступа к странице.

01

Резидентна. Только чтение. Прерывается любая попытка записи. (ФОДОС-2 это значение не использует) .

10

Страница недоступна - все попытки доступа к этой странице прерываются. (ФОДОС-2 это значение не использует).

11

Резидентна. Чтение/запись. Разрешён любой доступ.

Поле НРШ - поле направления расширения страницы - указывает, в каком направлении - к старшим адресам (код 0) или к младшим адресам (код 1) может расширяться страница. ФОДОС-2 всегда использует только код 0, код 1 не используется.

Поле ЗАПИСЬ указывает, производилась ли запись в страницу с тех пор, как она загружена в память. ФОДОС-2 это поле не использует.

Поле длины страницы указывает длину страницы в блоках размером 32 (десятичное) слова.

4.2. Преобразование 16-разрядного адреса в 18- или 22-разрядный адрес

Информация, необходимая диспетчеру памяти для преобразования 16-разрядного виртуального адреса в 18- или 22-разрядный физический адрес, содержится в виртуальном адресе и соответствующем ему наборе РАС/РПС. Назначение полей виртуального адреса показано на рис. 5.

Виртуальный адрес

15

12

0

Поле активной страницы

Поле смещения

Рис. 5.

Разряды 13-15 виртуального адреса составляют поле активной страницы. Это поле определяет, каким РАС/РПС воспользуется диспетчер памяти для создания физического адреса.

Разряды 0-12 составляют поле смещения - оно содержит адрес относительно начала страницы.

Остальная информация, необходимая для создания физического адреса, содержится в поле адреса страницы соответствующего РАС. Преобразование 16-разрядного виртуального адреса в 18- или 22-разрядный физический адрес показано на рис. 6. В этом примере РАС6 содержит число 5460 (восьмеричное), и виртуальный адрес 157746 преобразуется в физический адрес 565746. Разряды 12-15 РАС участвуют в 22-разрядной адресации.

Как видно из рис. 6, разряды 13-15 виртуального адреса указывают, который из РАС - в данном случае РАС6 - следует использовать. Диспетчер памяти складывает величину в разрядах 6-12 виртуального адреса с содержимым РАС6. Результат этого сложения диспетчер памяти помещает в разряды 6-17 или 6-21 физического адреса. Преобразование адреса завершается тем, что диспетчер памяти копирует разряды 0-5 виртуального адреса в разряды 0-5 физического адреса.

Преобразование адреса диспетчером памяти

Рис. 6.

ПРИМЕЧАНИЕ. Преобразование адресов происходит при установленном нулевом разряде (разряд включения ДП) регистра состояния SR0 диспетчера памяти (адрес регистра 777572). Другой регистр состояния ДП, SR2 (адрес регистра 777576, доступ - только чтение) содержит 16-разрядный виртуальный адрес, который в данный момент ДП преобразует в физический. ФОДОС-2 этот регистр не использует, однако, пользователь может сам проверить его - например, в случае сбоя ДП. Оба регистра расположены в странице ввода-вывода.

5. ОБЩЕЕ ОПИСАНИЕ РАБОТЫ РАСШИРЕННОЙ ПАМЯТИ ФОДОС-2

Доступ к расширенной памяти в ФОДОС-2 обеспечивается программными запросами, которые обрабатывает монитор ХМ.

С помощью запросов расширенной памяти монитор ХМ выполняет следующие операции:

Перечисленные выше операции должны выполняться перед выборкой любой ячейки в расширенной памяти (свыше 28К).

ПРИМЕЧАНИЕ. Две первые операции могут выполняться в любом порядке, но обязательно перед третьей операцией.

Ниже следует краткое описание каждой операции.

5.1. Создание виртуальных адресных окон

Диспетчер памяти (ДП) делит виртуальную память (PVAS) на 8 страниц по 4К слов. Страницы нумеруются от 0 до 7 (см. рис. 7) соответственно 8 регистрам РАС/РПС.

Соответствие РАС страницам PVAS

Рис. 7.

Монитор ХМ делит виртуальное адресное пространство на окна. Окно представляет собой сегмент адресного пространства, начальный адрес которого должен быть кратен 4К. Размер окна может быть от 32 слов до 28К слов.

Окна подобны оверлейным сегментам. Всего может быть определено до 8 окон. Одновременное отображение всех окон не является обязательным.

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

Запросы отображения должны обращаться к БООК, который содержит спецификации окна, параметры отображения и информацию о состоянии окна.

Идентификацию окна осуществляет монитор, который заносит индекс (число от 1 до 7) в соответствующий БООК во время выполнения запроса .CRAW.

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

Каждая виртуальная программа имеет одно статическое окно, в котором находится корневой сегмент программы; он отображается в соответствующую статическую область физической памяти, когда выполняется команда RUN или FRUN.

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

Пример:

Программе пользователя требуются две рабочие области (см. рис. 8) - одна на 6К слов, другая на 8К слов. В этом случае пространство виртуальных адресов делится на 3 окна:

Следует отметить, что определённые таким образом окна совмещают регистры РАС: окно 1 использует РАС2 и РАС3, тогда как окно 2 использует РАС4 и РАС5. При этом размер окна 1 равен 6К слов, и в области виртуального адреса имеется разрыв между 14К и 16К.

Эта область неопределённого виртуального адреса получена в результате аппаратного ограничения ДП, согласно которому окна должны начинаться с адреса, кратного 4К слов. В данном случае разрывности можно избежать, если поменять местами окна 1 и 2.

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

Определение окон для отображения

Рис. 8

5.2. Распределение и перераспределение областей

Другая операция, которую следует выполнить перед тем, как пользователь получит доступ к расширенной памяти, заключается в создании динамических областей. Монитор ХМ позволяет создавать до трех динамических областей (с помощью запроса .CRRG).

Эти области расположены в расширенной памяти и не включают основную (статическую) область программы, расположенную в нижних 28К памяти. Размер динамической области может быть от 32-х слов до 96К слов, но он всегда кратен 32: 32, 64, 96,..., 96К. Это ограничение позволяет указать размер области (в блоках по 32 слова) в 16-разрядном слове.

Когда область создана, монитор присваивает ей идентификатор, который заносит в первое слово БООБ. Любой последующий запрос программы, обращённый к этой области, должен использовать идентификатор области.

Аннулирование динамической области осуществляется также через программный запрос (.ELRG). Когда динамическая область аннулируется, занимаемая ею область памяти возвращается в список свободной памяти и может быть вновь использована. Кроме того, для всех отображённых на область окон в момент её аннулирования действие отображения автоматически прекращается (отображение отменяется).

5.3. Отображение окон на области

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

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

Понятие расширенной памяти может быть кратно изложено следующим образом:

  1. программа пользователя оперирует с адресами из виртуального адресного пространства, ограниченного 16-разрядным словом адресации;
  2. диспетчер памяти расширяет виртуальный адрес до 18-разрядного физического адреса, что позволяет адресовать до 128К слов физической памяти;
  3. с помощью программных запросов виртуальное адресное окно может быть отображено на последовательные сегменты физической памяти посредством изменения величин смещения.

Отобразить окно на область можно двумя способами:

  1. используя запрос .CRAW;
  2. используя запрос .MAP.

В первом случае отображение окна происходит сразу же после создания этого окна и реализуется тем же запросом .CRAW, который создаёт окно. Для этого необходимо, чтобы в БООК был предварительно занесён идентификатор созданной области и в слове состояния БООК был установлен разряд WS.MAP, вызывающий автоматическое выполнение запроса .MAP после создания окна по запросу .CRAW.

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

В БООК может быть указано смещение относительно начала области, с которым пойдёт отображение. Если окно выходит за пределы области, то монитор отображает только часть окна.

Отменить отображение окна можно по запросу .UNMAP.

5.4. Ввод-вывод в отображении расширенной памяти

Монитор ХМ обслуживает ввод-вывод в пределах виртуального адресного пространства программы независимо от физического расположения буферов данных. Однако, ко времени выполнения запросов .READ или .WRITE буферы должны уже быть отображены в физическую память. Кроме того, буферы должны быть физически смежными и полностью находиться в пределах адресного окна. Такое ограничение необходимо потому, что адреса буферов вывода определены как виртуальные адреса программы.

Монитор преобразует виртуальный адрес в физический, когда выполняется программный запрос. Этот процесс позволяет программе пользователя освобождать буферы, используемые в .READ/.WRITE и .READC/.WRITC после выполнения этих запросов и повторно отображать их при входе в соответствующую подпрограмму завершения.

ПРИМЕЧАНИЕ. Подпрограммы завершения должны оставаться отображёнными до тех пор, пока не завершится передача данных.

6. РАСПРЕДЕЛЕНИЕ ПАМЯТИ

6.1. Распределение памяти при загрузке монитора ХМ

Расположение компонент монитора ХМ показано на рис. 9 (следует отметить, что оно сходно с расположением компонент монитора FB). Когда монитор ХМ только вызван, драйвер системного устройства и резидентный монитор используют нижние 28К слов памяти, так что расширенная память - выше 28К и ниже 124К - не используется. Другие загруженные драйверы устройств располагаются ниже RMON, ещё ниже - основное и системные задания, если они есть, и USR.

Резидентный монитор работает во внутреннем режиме процессора и может иметь доступ к нижним 28К слов памяти и к странице ввода-вывода. USR также работает во внутреннем режиме и всегда резидентна в системе расширенной памяти. KMON работает в режиме пользователя, однако, поскольку это привилегированное фоновое задание, оно использует то же отображение, что и резидентный монитор. Физические ячейки 0-500 содержат векторы.

Распределение памяти в системе XM

Рис. 9

6.2. Отображение виртуальных заданий

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

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

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

6.2.1. Выбор типа отображения

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

.ASECT
. = 44
.WORD 2000
.PSECT

При желании выбор виртуального отображения можно осуществить с помощью программы SIPP, изменив ячейку 44 в загрузочном модуле задания (тип файла .SAV, .REL или .SYS) до того, как начнёт работать программа.

ПРИМЕЧАНИЕ. Не следует изменять значение 10-го разряда ССЗ во время работы программы. Это может нарушить правильную обработку запросов ввода-вывода; последствия этого шага предсказать трудно.

6.2.2. Виртуальные фоновые задания

Для вызова виртуального фонового задания используется команда R, причём тип файла должен быть .SAV. Виртуальное фоновое задание загружается в память с адреса 500. Старший адрес этого задания равен его размеру в восьмеричной системе плюс 500.

Статическая область виртуального фонового задания начинается с физического адреса 500 и простирается до самого низкого адреса, используемого USR. Тем самым запрещается доступ виртуального фонового задания к физической области от 0 до 500, следовательно, векторы защищены от виртуальных заданий. Отображение виртуального фонового задания показано на рис. 10.

Виртуальное фоновое задание

Рис. 10

На рис. 11 показано, как виртуальное фоновое задание может отобразить окно в статическую область и использовать память, находящуюся ниже USR.

6.3. Виртуальные основные или системные задания

Для выполнения виртуального основного задания используется команда монитора FRUN, а виртуального системного задания - команда SRUN. В процессе редактирования связей эти задания следует связать в файл типа .SAV, как фоновые задания, а не типа .REL или .SYS, как основные или системные задания. Использовать команды FRUN или SRUN для выполнения файла .SAV типа - виртуального задания - можно потому, что виртуальным основным заданиям не требуется информация о перемещении. Таким образом, файлы типа .SAV занимают на диске меньше места, чем файлы типа .REL или .SYS, и в память они загружаются быстрее.

Виртуальное фоновое задание с отображением в статическую область

Рис. 11.

При загрузке основное задание располагается в памяти ниже последнего драйвера или ранее загруженного системного задания. При необходимости USR сдвигается вниз, освобождая место для основного задания. При редактировании связей основное задание по умолчанию получает базовый адрес 1000 (если только это не файл типа .SAV: его виртуальные адреса 0-500 представляют собой его виртуальную векторную область и область связи с системой). Как и в случае виртуального фонового задания, статическое окно начинается с виртуального адреса ноль и простирается до старшего адреса основной программы, округлённого до кратного 32 слов.

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

Виртуальное основное или системное задание

Рис. 12

6.4. Привилегированные задания

Отображением по умолчанию в мониторе расширенной памяти является привилегированное отображение. Признаком привилегированного отображения является очищенный разряд 10 ССЗ. Для привилегированного задания среда монитора ХМ весьма сходна с мониторами SJ или FB. Оно может иметь доступ к нижним 28К слов памяти и к странице ввода-вывода. Все обслуживающие программы ФОДОС-2 в среде монитора расширенной памяти работают как привилегированные задания.

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

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

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

Когда привилегированное задание создаёт окно и выполняет программные запросы отображения, привилегированное отображение по умолчанию для этого виртуального адресного пространства временно отменяется. Монитор отображает окно в новую область памяти, используя содержимое внутренних управляющих блоков окна (УБОК). Когда привилегированное задание отменяет отображение окна, монитор повторно отображает это виртуальное адресное пространство в соответствии с содержимым РАС/РПС внутреннего режима. Этим привилегированное задание отличается от виртуального, которое в случае отмены отображения не может использовать входящие в окно виртуальные адреса до тех пор, пока окно не будет повторно отображено.

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

6.4.1. Привилегированные фоновые задания

Для выполнения привилегированного фонового задания следует подать команду монитора R или RUN. Отображение для привилегированного фонового задания показано на рис. 13.

Привилегированное фоновое задание

Рис. 13

6.4.2. Привилегированные основные или системные задания

Для выполнения привилегированного основного задания следует подать команду монитора FRUN, а привилегированного системного задания - команду SRUN. Отображение для привилегированного основного или системного задания показано на рис. 14.

Привилегированное основное или системное задание

Рис. 14

6.5. Различия между виртуальными и привилегированными заданиями

В табл. 2 приведены различия между виртуальными и привилегированными заданиями.

Таблица 2

Характеристика

Виртуальное задание

Привилегированное задание

Значение 10 разряда ССЗ

1

0

Первоначально доступное адресное пространство

Только виртуальные адреса в пределах программы

32К слов

(нижние 28К слов плюс страница ввода-вывода)

Потенциально доступное адресное пространство

32К слов. Создаёт окна, описывающие адреса между старшим адресом программы и границей 32К слов

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

Преимущества

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

Совместимо с мониторами SJ и FB

Процедура вызова

Фоновое: команда R (.SAV)

Основное: FRUN или SRUN (.REL, .SYS, .SAV - рекомендуется .SAV)

Фоновое: команда R или RUN (.SAV)

Основное: FRUN или SRUN (.REL, .SYS)

Статическое окно

От нулевого виртуального адреса программы до её старшего адреса

Нет.

Все динамические

Статическая область

Фоновое: от физической ячейки 500 до адреса USR

Основное: от физической ячейки 0 до физического старшего адреса задания

Нет

Все динамические

Возможное количество окон

7 плюс статическое окно

7 (1 окно зарезервировано)

Возможное количество областей

3 плюс статическая область

3 (1 область зарезервирована)

6.6. Переключение монитора между заданиями

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

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

Когда монитор переключает текущее задание, то он сохраняет в стеке задания и смешанной области задания следующую информацию:

Монитор, однако, не сохраняет содержимого регистров РАС/РПС текущего задания. Поэтому программам пользователя не следует непосредственно манипулировать с регистрами диспетчера памяти, поскольку во время переключения монитора их содержимое теряется. Монитор также игнорирует программный запрос .CNTXSW в виртуальном задании. Всё задание целиком сохраняется при переключении, а доступ к векторной области виртуальному заданию запрещён в любом случае.

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

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

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

7. ОБРАЩЕНИЕ К ПРОГРАММЕ. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ

7.1. Получение доступа к расширенной памяти

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

.CRAW - создаёт адресное окно;

.ELAW - аннулирует адресное окно;

.CRRG - создаёт область;

.ELRG - аннулирует область;

.MAP - отображает адресное окно в область;

.UNMAP - отменяет отображение адресного окна;

.GMCX - устанавливает состояние отображения.

Сначала необходимо выполнить следующие операции:

  1. создать блоки определения области, используя запрос .RDBBK, или определить параметры и установить БООБ с помощью запроса .RDBDF;
  2. создать необходимые области для размещения программы, используя запрос .CRRG для каждой области. Область аннулируется по запросу .ELRG;
  3. создать блоки определения окна, используя запрос .WDBBK, для каждого окна или определить параметры и установить БООК с помощью запроса .WDBDF;
  4. создать необходимые окна для размещения программы, используя запрос .CRAW для каждого создаваемого окна. Окно аннулируется по запросу .ELAW;
  5. отобразить окна в области, используя запросы .MAP или .CRAW. Отображение окна отменяется запросом .UNMAP или повторным применением запроса .MAP.

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

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

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

Имеются следующие типы структур данных:

  1. блок определения окна (БООК);
  2. блок определения области (БООБ);
  3. управляющий блок окна (УБОК);
  4. управляющий блок области (УБОБ);
  5. список свободной памяти.

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

Структура данных (БООК и БООБ) должна быть определена пользователем в соответствии с описанными ниже правилами.

7.2. Блок определения окна

Блок определения окна (см. рис. 15) используется для определения окна и хранения информации о нем. БООК может быть создан по запросу .WDBBK во время трансляции. Размер блока равен 7-ми словам. Три первых слова используются для определения параметров окна.

Первое слово содержит следующую информацию:

W.NID (младший байт) - содержит код идентификации окна (записывается монитором); используется запросами для отыскания требуемого окна;

N.NAPR (старший байт) - содержит номер регистра активной страницы, определяющего базовый виртуальный адрес окна (задаётся пользователем). W.NAPR может принимать значения от 0 до 7; окна должны начинаться с адреса, кратного 4К (см. табл. 3).

ПРИМЕЧАНИЕ. Значение 0 в W.NAPR задавать не следует, т.к. 0-е окно является статическим и не может быть переназначено.

Таблица 3

Начальный виртуальный
адрес окна (восьмеричный)

Значение параметра W.NAPR

0

0

20000

1

40000

2

60000

3

100000

4

120000

5

140000

6

160000

7

W.NBAS - начальный виртуальный адрес окна; заполняется монитором.

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

Оставшиеся 4 слова БООК используются при отображении окна в область расширенной памяти.

 

Блок определения окна

 

Символьное обозначение

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

W.NID

W.NAPR

Номер регистра активной страницы

Идентификатор окна

0

W.NBAS

Виртуальный адрес начала окна
(в байтах)

2

W.NSIZ

Размер окна
(в блоках по 32 слова)

4

W.NRID

Идентификатор области,
связанной с окном

6

W.NOFF

Смещение в области
(в блоках по 32 слова)

10

W.NLEN

Алина отображаемого окна
(в блоках по 32 слова)

12

W.NSTS

Слово состояния окна

14

Рис. 15

W.NRID

-

идентификатор области, в которую будет отображаться окно.

W.NOFF

-

смещение от начала области (в блоках по 32 слова), с которым пойдёт отображение окна.

W.NLEN

-

размер отображаемого окна (в блоках по 32 слова), которое будет отображаться в область; если W.NLEN=0, то отображается всё окно или та его часть, которая может разместиться в данной области; при этом после отображения в ячейке W.NLEN будет содержаться фактическая длина отображённого окна (или его части).

W.NSTS

-

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

 

W.NSTS

WS.CRW

WS.UNM

WS.ELW

WS.MAP

 

15

14

13

12 ... 9

8

7 ... 0

 

WS.MAP

-

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

WS.CRW

-

устанавливается монитором, если адресное окно создано.

WS.UNM

-

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

WS.ELW

-

устанавливается монитором при аннулировании одного или нескольких окон.

7.3. Управляющий блок окна

Управляющий блок окна (УБОК) - это область из семи слов, расположенная в смешанной области задания. Содержимое УБОК контролируется монитором. Виртуальное задание отводит один УБОК статическому окну. Для привилегированных заданий один УБОК резервируется монитором, и программа его использовать не может. Таким образом, все задания могут иметь до семи динамических окон, состояние которых монитор обслуживает через посредство УБОК, структура которых показана на рис. 16 и в табл. 4.

Управляющий блок окна

W.BRCB

W.BLVR

W.BHVR

W.BSIZ

W.BOFF

W.BNFD

W.BFPB

W.BLPD

Рис. 16

Таблица 4
УПРАВЛЯЮЩИЙ БЛОК ОКНА

Смещение в байтах

Символ

Кто вносит изменения

Содержание

0

W.BRCB

Подпрограмма .MAP монитора; очищается по запросу .UNMAP

Указатель УБОБ области, в которую это окно отображается. Если значение нулевое, то окно не отображается

2

W.BLVR

Подпрограмма .CRAW монитора

Нижний предел виртуального адреса окна

4

W.BHVR

Подпрограмма .MAP монитора

Верхний предел виртуального адреса окна

6

W.BSIZ

Подпрограмма .CRAW монитора; очищается по запросу .ELAW

Размер окна в блоках по 32 слова. Если значение нулевое, то этот УБОК свободен

10

W.BOFF

Подпрограмма .MAP монитора

Смещение (в блоках по 32 слова) в области, с которым пойдёт отображение

12

W.BFPD

Подпрограмма .CRAW монитора

Младший байт адреса первого РПС, действующего на это окно

13

W.BNPD

Подпрограмма .MAP монитора

Номер РПС, действующего на это окно

14

W.BLPD

Подпрограмма .MAP монитора

Содержимое последнего РПС, действующего на это окно

7.4. Блок определения области

Блок определения области (см. рис. 17) используется для определения области и хранения информации о ней. Размер блока - 3 слова.

Блок определения области может быть создан по запросу .RDBBK во время трансляции.

 

Блок определения области

 

Символьное обозначение

 

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

R.GID

Идентификатор области

0

R.GSIZ

Размер области

2

R.GSTS

Слово состояния области

4

Рис. 17

R.GID

-

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

R.GSIZ

-

размер динамической области в блоках по 32 слова; задаётся пользователем.

R.GSTS

-

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

 

R.GSTS

RS.CRR

RS.UNM

RS.NAL

 

15

14

13

12 ... 0

 

RS.CRR

-

устанавливается, если область создана успешно.

RS.UNM

-

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

RS.NAL

-

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

7.5. Управляющий блок области

Управляющий блок области (УБОБ) - это область из трех слов в смешанной области задания. Содержимое УБОБ контролируется монитором. Виртуальное задание отводит один УБОБ статической области. Для привилегированных заданий один УБОБ резервируется монитором, и программа его использовать не может. Таким образом, все задания могут иметь до трех динамических областей, состояние которых монитор обслуживает через посредство УБОБ, их структура показана на рис. 18 и в табл. 5.

7.6. Создание БООК

Для создания БООК используются два запроса: .WDBDF и .WDBBK.

Управляющий блок области

R.RADD

R.BSIZ

R.BNWD

R.BSTA

Рис. 18

Таблица 5
УПРАВЛЯЮЩИЙ БЛОК ОБЛАСТИ

Смещение в байтах

Символ

Кто вносит изменения

Содержание

0

R.BADD

Подпрограмма .CRRG монитора

Начальный адрес области в блоках по 32 слова

2

R.BSIZ

Подпрограмма .CRRG монитора

Размер области в блоках по 32 слова. Если это слово нулевое, то этот УБОБ свободен

4

R.BSTA

Монитор во время выполнения; очищается подпрограммой .CRRG

Этот байт всегда нулевой, если только область не была создана по ХМ .SETTOP. Тогда монитор устанавливает разряд 1, называемый R.STOP

5

R.BNWD

Подпрограмма .CRRG монитора очищает этот байт; .MAP увеличивает его, .UNMAP - уменьшает

Количество окон, отображённых в данный момент в эту область

По запросу .WDBBK создаётся БООК. При этом смещения для БООК и разряды слова состояния определяются автоматически, т.к. по запросу .WDBBK автоматически вызывается запрос .WDBDF. Поэтому пользователю не нужно определять .WDBDF, когда используется запрос .WDBBK. Формат макрокоманды:

.WDBBK W.NAPR,W.NSIZ[,W.NRID,W.NOFF,W.NLEN, W.NSTS]

где аргументы определяют значения для БООК.

ПРИМЕЧАНИЕ. В квадратные скобки заключены аргументы, не являющиеся обязательными.

Когда требуется определить только смещения для БООК, используется запрос .WDBDF, имеющий формат: .WDBDF

По запросу .WDBDF определяются следующие параметры:

  1. смещения в БООК -
    W.NID = 0
    W.NAPR = 1
    W.NBAS = 2
    W.NSIZ = 4
    W.NRID = 6
    W.NOFF = 10
    W.NLEN = 12
    W.NSTS = 14
  2. размер БООК в байтах -
    W.NLGH = 16
  3. разряды слова состояния (W.NSTS) БООК -
    WS.CRW = 100000
    WS.UNM = 40000
    WS.ELW = 20000
    WS.MAP = 400

Пример:

Необходимо создать БООК, который определяет окно, имеющее длину 76 (десятичное) блоков и начальный виртуальный адрес 20К. Окно должно отображаться в область, начиная с 50-го блока от начала области, причём полностью (если позволяет размер оставшейся части области), либо столько, сколько уместится.

Этим требованиям удовлетворяет БООК, созданный по запросу:

     .WDBBK 5,76.,0,50.

Макрорасширение имеет вид:

        .BYTE 5
        .WORD
        .WORD 76.
        .WORD 0
        .WORD 50.
        .WORD
        .WORD

7.7. Создание БООБ

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

По запросу .RDBBF определяются разряды слова состояния и смещения для БООБ.

По запросу .RDBBK создаётся БООБ. При этом смещения для БООБ и разряды слова состояния определяются автоматически, т.к. .RDBBK автоматически вызывает запрос .RDBDF, аналогично тому, как это делает .WDBBK. Поэтому пользователю не нужен запрос .RDBDF, когда используется .RDBBK.

Формат макрокоманды:

.RDBBK RGSIZ

где RGSIZ - размер динамической области (соответствует R.GSIZ для БООБ) в блоках по 32 слова.

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

Запрос .RDBDF определяет следующие параметры:

  1. смещения БООБ
    R.GID = 0
    R.GSIZ = 2
    R.GSTS = 4
  2. размер БООБ в байтах:
    R.GLGH =6
  3. разряды слова состояния (R.GSTS) БООБ:
    RS.CRR = 100000
    RS.UNM = 40000
    RS.NAL = 20000

Пример:

С помощью запроса .RDBBK создать БООБ, определяющий динамическую область размером 102 (десятичное) блока.

Указанным требованиям удовлетворяет запрос

.RDBBK #102.

Макрорасширение имеет вид:

.WORD 0
.WORD 102.
.WORD 0

7.8. Элемент очереди ввода-вывода

В отличие от мониторов SJ и FB, где элемент очереди ввода-вывода состоит из семи слов, в мониторе ХМ элемент очереди ввода-вывода состоит из десяти слов. Подробное описание этой структуры см. в [2].

7.9. Список свободной памяти

Монитор использует список свободной памяти для распределения областей в расширенной памяти. Список представляет собой таблицу из 10 (десятичное) пар слов, расположенную в P-секции XMSUBS; адрес вершины таблицы ¤XMSIZ. Старшее слово в каждой паре указывает размер свободной области в расширенной памяти в блоках по 32 слова. Младшее слово пары содержит адрес этой области, делённый на 100 (восьмеричное). Таблица заканчивается величиной -1.

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

8. ЗАПРОСЫ РАСШИРЕННОЙ ПАМЯТИ

8.1. Создание области (.CRRG)

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

Формат макрокоманды:

.CRRG AREA[,RGADR]

где

AREA

- адрес блока аргументов ЕMT, имеющего вид:

AREA:   .BYTE   0,36
        .WORD   RGADR
 

RGADR

- адрес блока определения области (этот аргумент необязателен, если пользователь сам заполнил 2-е слово блока аргументов).

Подпрограмма .CRRG монитора проверяет сначала R.GSIZ в БООБ. Если размер области задан неверно (нулевой или размер более 96К слов), то в байт 52 заносится код ошибки 10.

Далее подпрограмма ищет свободный УБОК. Если его нет, то в байт 52 заносится код ошибки 6.

Максимально возможную память для области пользователь может запросить, указав 96К в качестве размера области. Подпрограмма .CRRG монитора просматривает Список свободной памяти монитора в поисках нужных областей. Если память требуемого размера монитор предоставить не может, то в байт 52 заносится код ошибки 7, а в R0 размер наибольшей доступной области. Пользователю следует снова подать запрос .CRRG, указав новое содержимое R0 в качестве размера области. Если и в этом случае выдаётся ошибка, значит, какое-то задание в системе уже перехватило часть памяти. Запрос .CRRG, в котором в качестве размера области указаны новые значения, взятые из R0, следует подавать до тех пор, пока не будет получена область, - это и есть нормальное завершение запроса. Подпрограмма .CRRG тогда заносит в БООБ (R.GID) идентификатор области и устанавливает RS.CRR в слове состояния области. Кроме этого, она очищает R.BSTA и R.BNWD и заносит соответствующие значения в R.BADD и R.BSIZ, находящиеся в УБОБ. Полученная таким образом память удаляется из списка свободной памяти монитора и резервируется для задания пользователя.

8.2. Аннулировать область (.ELRG)

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

Формат макрокоманды:

.ELRG AREA[,RGADR]

где

AREA

- адрес блока аргументов ЕMT, имеющего вид:

AREA:   .BYTE   1,36
        .WORD   RGADR
 

RGADR

- адрес блока определения области (этот аргумент необязателен, если пользователь сам заполнил 2-е слово блока аргументов).

Подпрограмма .ELRG монитора сначала проверяет на допустимость указанный пользователем идентификатор области. Для виртуальных заданий нулевой идентификатор обозначает статическую область, аннулировать которую пользователь не может. Для привилегированных заданий областей с нулевым идентификатором не существует. В этих случаях, а также в случае недопустимого идентификатора области в УБОБ, в байт 52 заносится код ошибки 2.

Далее подпрограмма очищает RS.CRR и RS.UNM в слове состояния области. Если в эту область были отображены какие-либо окна, подпрограмма отменяет отображение и устанавливает RS.UNM. Память, занимаемая областью, вносится в список свободной памяти монитора. Завершая обработку запроса, подпрограмма .ELRG очищает УБОБ.

8.3. Создание адресного окна (.CRAW)

Этот запрос создаёт виртуальное адресное окно и, если установлен разряд WS.MAP в слове W.NSTS БООК, отображает его в область физической памяти (идентификатор области должен быть предварительно занесён в W.NRID БООК).

Формат макрокоманды:

.CRAW AREA[,WADR]

где

AREA

- адрес блока аргументов ЕMT, имеющего вид:

AREA:   .BYTE   2,36
        .WORD   WADR
 

WADR

- адрес блока определения окна (этот аргумент необязателен, если пользователь сам заполнил 2-е слово блока аргументов указателем адреса).

Подпрограмма .CRAW монитора сначала проверяет на допустимость W.NAPR в БООК, и если номер регистра активной страницы указан неверно, то в байт 52 заносится код ошибки 0. Затем подпрограмма устанавливает базовый адрес окна в БООК (W.NBAS) и проверяет на допустимость указанный пользователем в БООК (W.NSIZ) размер окна. Окно не должно превосходить 32К слов. Если размер окна указан неверно, в байт 52 заносится код ошибки 0. Подпрограмма очищает WS.ELW, WS.UNM и WS.CRW в слове состояния окна.

Далее подпрограмма проверяет, не происходит ли наложения нового окна на старые. Если задание виртуальное и новое окно перекрывает статическое окно, то в байт 52 заносится код ошибки 0. Во всех остальных случаях, когда новое окно перекрывает старое, подпрограмма аннулирует старое окно, а его отображение, если оно было, отменяет. Если при создании нового окна пришлось аннулировать старое, подпрограмма устанавливает WS.ELW в слове состояния окна, а если при этом пришлось отменить отображение, устанавливает и WS.UNM.

В байт 52 заносится код ошибки 1, если подпрограмма не находит свободного УБОК.

Нормальная обработка запроса завершается модификацией структур данных. Соответствующие значения заносятся в УБОК (W.BSIZ, W.BLVR и W.BFPD), идентификатор окна заносится в БООК (W.NID), и в слове состояния окна устанавливается WS.CRW.

8.4. Аннулировать окно (.ELAW)

Этот запрос аннулирует ранее созданное виртуальное адресное окно.

Формат макрокоманды:

.ELAW AREA[,WADR]

где

AREA

- адрес блока аргументов ЕMT, имеющего вид:

AREA:   .BYTE   3,36
        .WORD   WADR
 

WADR

- адрес идентификатора окна, которое надо аннулировать.

Аналогично .ELRG, подпрограмма .ELAW сначала находит соответствующий УБОК и проверяет на допустимость W.NID в БООК. В случае нулевого или недопустимого идентификатора окна в байт 52 заносится код ошибки 3. После этого подпрограмма очищает WS.CRW и WS.UNM в слове состояния окна.

Если окно было отображено, подпрограмма отменяет отображение и устанавливает WS.UNM. Подпрограмма аннулирует окно, очищая W.BSIZ в УБОК. Завершая обработку запроса, подпрограмма устанавливает WS.ELW в слове состояния окна.

8.5. Отображение окна (.MAP)

Этот запрос отображает ранее созданное виртуальное адресное окно в динамическую область расширенной памяти.

Формат макрокоманды:

.MAP AREA[,WADR]

где

AREA

- адрес блока аргументов ЕMT, имеющего вид:

AREA:   .BYTE   4,36
        .WORD   WADR
 

WADR

- адрес блока определения окна, которое надо отобразить; в него должен быть заранее занесён идентификатор области, в которую будет выполняться отображение (этот аргумент необязателен, если пользователь сам заполнил 2-е слово блока аргументов).

Подпрограмма монитора .MAP сначала находит УБОК, соответствующий указанному в запросе окну. Для этого проверяется W.NID. и если значение его нулевое или недопустимое, в байт 52 заносится код ошибки 3. После этого подпрограмма находит УБОБ области, в которую отображается окно, и если идентификатор области имеет недопустимое значение, в байт 52 заносится код ошибки 2.

Подпрограмма далее проверяет находящееся в БООК (W.NOFF) смещение в области, начиная с которого будет отображаться окно. Если смещение выходит за пределы области, в байт 52 заносится код ошибки 4.

Подпрограмма проверяет находящуюся в БООК (W.NLEN) длину отображаемого окна. Если значение W.NLEN нулевое, то для отображения окна подпрограмма отводит всю остальную часть области - от смещения и до конца области. Если эта память больше, чем окно, подпрограмма определяет необходимый для отображения размер и заносит его в W.NLEN. Таким образом, если до запроса .MAP пользователь указал нулевое значение W.NLEN, то после выполнения запроса W.NLEN содержит фактическую длину отображённого окна.

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

Подпрограмма затем увеличивает находящийся в УБОБ счётчик отображённых в эту область окон (R.BNWD).

Если окно уже было куда-либо отображено, подпрограмма отменяет старое отображение и устанавливает WS.UNM в слове состояния окна; в противном случае WS.UNM подпрограмма очищает.

После этого подпрограмма загружает пользовательский набор РАС/РПС соответствующими значениями для отображения данного окна в данную область.

Завершая обработку запроса .MAP, подпрограмма обновляет следующие величины в УБОК: W.BRCB, W.BHVR, W.BOFF, W.BNPD и W.BLPD.

8.6. Отменить отображение (.UNMAP)

Запрос .UNMAP отменяет действие запроса .MAP для окна (т.е. отменяет отображение) и восстанавливает в этом окне обычную адресацию.

Формат макрокоманды:

.UNMAP AREA[,WADR]

где

AREA

- адрес блока аргументов ЕMT, имеющего вид:

AREA:   .BYTE   5,36
        .WORD   WADR
 

WADR

- адрес блока определения.

Подпрограмма .UNMAP монитора сначала находит соответствующий УБОБ и проверяет W.NID в БООК. Если его значение нулевое или недопустимое, в байт 52 заносится код ошибки 3. Если окно в данный момент не отображено, в байт 52 заносится код ошибки 5.

Для того чтобы отменить отображение окна, подпрограмма модифицирует соответствующие структуры данных: очищает W.BRCB в УБОК и уменьшает R.BNWD в УБОБ.

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

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

Завершая обработку запроса, подпрограмма устанавливает WS.UNM в слове состояния окна.

8.7. Запись состояния окна отображения (.GMCX)

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

Состояние окна записывается в формате БООК и может быть использовано в последующих операциях отображения. .GMCX позволяет модифицировать окна посредством изменения отдельных полей БООК. Это форма .SAVESTATUS для адресных окон.

Для созданного, но не отображённого окна запрос .GMCX модифицирует следующие поля БООК:

1) W.NARP - номер регистра РАС/РПС окна (определяет начальный виртуальный адрес окна);

2) W.NBAS - виртуальный базовый адрес окна;

3) W.NSIZ - размер окна в блоках по 32 слова.

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

4) W.NRID - идентификатор области;

5) W.NOFF - значение смещения в область;

6) W.NLEN - фактическая длина отображённого окна;

7) W.NSTS - состояние разряда WS.MAP; устанавливается в слове состояния окна.

Формат макрокоманды:

.GMCX AREA[,WADR]

где

AREA

- адрес блока аргументов ЕMT, имеющего вид:

AREA:   .BYTE   6,36
        .WORD   WADR
 

WADR

- адрес области памяти, куда будет записано состояние отображения окна.

Подпрограмма .GMCX монитора сначала находит соответствующий УБОК. Если пользователь указал окно с нулевым идентификатором, то будет получено состояние статического окна для виртуального задания. Для привилегированного задания окон с нулевым идентификатором не существует, и тогда в байт 52 заносится код ошибки 3.

Подпрограмма устанавливает W.NAPR в БООК равным трем старшим разрядам W.BLVR из УБОК.

Далее подпрограмма заносит соответствующие значения в находящиеся в БООК W.NBAS, W.NSIZ и W.NRID.

Если окно в данный момент не отображено, подпрограмма очищает находящиеся в БООК W.NOFF, W.NLEN и W.NSTS. Если окно отображено, подпрограмма помещает в W.NOFF смещение в области, в W.NLEN длину отображённого окна и устанавливает WS.MAP в слове состояния окна.

9. СООБЩЕНИЯ

Во время выполнения запросов расширенной памяти монитор ХМ выполняет проверку ошибок и управление состоянием. Все программные запросы расширенной памяти генерируют коды ошибок. Если ошибки обнаружены, то устанавливается разряд С, и код ошибки записывается в байт ошибки (байт 52).

В дополнение к кодам ошибок предусмотрено два слова состояния (одно в блоке определения окна, другое в блоке определения области) для регистрации состояния запрашиваемых операций.

После завершения запрашиваемых операций монитор ХМ устанавливает соответствующие разряды в слове состояния области или в слове состояния окна (в зависимости от типа запроса), чтобы указать, какие действия были произведены.

В табл. 6 и 7 приведены коды, выдаваемые запросами, и разряды слова состояния окна и области.

Таблица 6
КОДЫ ОШИБОК ЗАПРОСОВ РАСШИРЕННОЙ ПАМЯТИ

Код Ошибки

Запросы

.СRАW

.СRRG

.ЕLАW

.ЕLRG

.GМСX

.MАР

.UNМAР

Причина

0

+

           

Слишком большое окно, или W.NAPR>7, или новое окно перекрывает статическое окно (для виртуальных заданий)

1

+

           

Нет свободных УБОК - попытка создать более 7 окон для задания. Отменить отображение одного из старых окон и создать новое, или перераспределить окна в виртуальном адресном пространстве

2

     

+

 

+

 

Указан недопустимый идентификатор области

3

   

+

 

+

+

+

Указан недопустимый идентификатор окна

4

             

Недопустимая комбинация "Смещение в области / размер отображаемого окна"

5

           

+

Указанное окно не было отображено

6

 

+

         

Нет свободных УБОБ - попытка создать более 3 областей для задания. Аннулировать старую область и затем создать новую, или перераспределить области в физической памяти. Следует также учесть, что память, получаемая по ХМ .SETTOP, и оверлеи расширенной памяти требуют отдельной области

7

 

+

         

Область требуемого размера не может быть создана. Размер наибольшей доступной области заносится в R0 (область при этом не создаётся!)

10

 

+

         

Недопустимый размер области - нулевой или размер более 96К слов

Таблица 7
СЛОВО СОСТОЯНИЯ РАСШИРЕННОЙ ПАМЯТИ

Слово состояния

Имя разряда

Номер разряда

Ввод-вывод

Маска

Комментарий

Слово состояния области (R.GSTS)

RS.CRR

15

Вывод

100000

Устанавливается, если область создана успешно

RS.UNM

14

Вывод

40000

Устанавливается, если отображение одного или нескольких окон отменено в результате аннулирования области

RS.NAL

13

Вывод

20000

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

Слово состояния окна (W.NSTS)

WS.CRW

15

Вывод

100000

Устанавливается, если адресное окно создано успешно

WS.UNM

14

Вывод

40000

Устанавливается, если отображение одного или нескольких окон отменено по запросу .CRAW или .MAP

WS.ELW

13

Вывод

20000

Устанавливается, если одно или несколько окон по запросу .CRAW были аннулированы

WS.MAP

8

Ввод

400

Установить, если окно отображается по запросу .CRAW

10. НЕКОТОРЫЕ ПРИЛОЖЕНИЯ РАСШИРЕННОЙ ПАМЯТИ

10.1. Оверлеи в расширенной памяти

Нижние 28К слов памяти заполняются очень быстро: здесь располагаются RMON, USR, драйверы устройств, а также основное, системное (их может быть несколько) и фоновое задания. Чтобы избежать перегруженности памяти и использовать её оптимально, следует сделать корневые сегменты основных, фоновых и системных заданий по возможности наименьшими. Вместо сегментирования программ и использования дисков оверлеи можно помещать в расширенную память. Если программы пользователя не требуют доступа к монитору или странице ввода-вывода, их следует сделать виртуальными заданиями.

Корневой сегмент может быть минимальным по размеру. В него необходимо включить элементы очереди, каналы, подпрограммы обслуживания прерываний (если они есть - в виртуальных заданиях их нет) и команда JMP к первому оверлею. Для ускорения выполнения оверлеи могут постоянно быть резидентными в расширенной памяти. Чтобы поместить оверлеи в расширенную память, надо использовать переключатель /V редактора связей. Клавиатурный монитор во время работы создаёт область, используя информацию из оверлейного драйвера и таблиц. Оверлейный драйвер создаёт и отображает окна. Более подробно этот материал изложен в [1].

10.2. Буферы или массивы в расширенной памяти

Чтобы поместить большой буфер или массив в расширенную память, следует сначала создать достаточно большую область, вмещающую этот массив, после чего определить, какое виртуальное адресное пространство программа пользователя может отвести для доступа к массиву, и создать окно такого размера. Затем надо написать подпрограмму, переводящую обращения к массиву в команды повторного отображения окна в соответствующую часть области. Этот случай показан на рис. 19 (ХМ .SETTOP может создать буфер в расширенной памяти автоматически).

10.3. Многопользовательские программы

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

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

Виртуальное фоновое задание с массивом в расширенной памяти

Рис. 19

10.4. Рабочая область в расширенной памяти

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

В мониторе FB фоновое задание получает дополнительную память с помощью запроса .SETTOP, она располагается выше задания, но ниже USR. Для основного задания дополнительную память можно отвести по команде FRUN/BUFFER:N. Когда память зарезервирована по команде FRUN, программа может определить её размер и заказать её по запросу .SETTOP. В обоих случаях дополнительная память располагается в нижних 28К слов памяти.

В мониторе ХМ дополнительная память может быть получена в физической памяти выше или ниже границы 28К слов. Эта особенность позволяет работать таким заданиям, которые требуют слишком много памяти, чтобы обойтись без отображений. Возможность получения дополнительной памяти весьма выгодна для виртуальных заданий, поскольку они могут получать память вплоть до виртуального адреса 177776 (32К слов) с помощью ХМ .SETTOP. Вся память, полученная по запросу .SETTOP, расположена в расширенной памяти; виртуальные основные задания не требуют команды FRUN/BUFFER:N для получения дополнительной памяти.

10.5. Использование ХМ .SETTOP

Существует два способа использовать ХМ .SETTOP. Если в программе есть оверлеи в расширенной памяти, то переключатель /V редактора связей использует ХМ .SETTOP автоматически. Он также использует ХМ - особенность директивы .LIMIT (далее в тексте - ХМ .LIMIT), включает оверлейный драйвер расширенной памяти (VHANDL) в файл задания и устанавливает оверлейную структуру расширенной памяти. Для этого надо подать команду монитора LINK/PROMPT и на следующей строке указать /V.

Если в программе нет оверлеев, или они - только в нижней памяти (переключатель /O редактора связей), то использовать ХМ .SETTOP следует по команде монитора LINK с переключателем /ХМ, при этом используется как ХМ .SETTOP, так и ХМ .LIMIT. Однако оверлейный драйвер расширенной памяти в файл задания не включается, и оверлейная структура расширенной памяти для программы не устанавливается.

Для всех программ директива .LIMIT выдаёт в качестве наибольшего значения очередную ячейку памяти, доступную для задания. Дополнительная память, получаемая программой по запросу .SETTOP в расширенной памяти, всегда начинается с восьмеричного адреса, который выдаёт директива .LIMIT. Это справедливо для всех программ независимо от того, использует ли программа ХМ .SETTOP.

Работа запроса .SETTOP без использования его ХМ-особенности в расширенной памяти показана в п. 10.5.2. Работа ХМ .SETTOP и ХМ .LIMIT показана в п. 10.5.3.

10.5.1. Виртуальный старший адрес и очередной свободный адрес

Для понимания ХМ-особенности запроса .SETTOP важно видеть различие между старшим адресом программы, виртуальным старшим адресом и очередным свободным адресом. На рис. 20 показано виртуальное адресное пространство программы, имеющей оверлеи как в нижней (переключатель /O), так и в расширенной памяти (переключатель /V редактора связей).

Старший адрес программы, виртуальный старший адрес
и очередной свободный адрес

Рис. 20

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

Виртуальный старший адрес (ВСА) - это наибольший виртуальный адрес, используемый оверлеями расширенной памяти, округлённый до 32 (десятичное), минус 2 (в восьмеричном представлении две младшие цифры адреса всегда 76).

Именно это значение печатается в карте загрузки в виде NNNNNN, как показано на следующем примере:

VIRTUAL HIGH ADDRESS = NNNNNN = DDDDD. WORDS
NEXT FREE ADDRESS = MMMMMM

Редактор связей должен вычислить значение очередного свободного адреса. Для задания, которое использовало ХМ .SETTOP, он округляет ВСА до очередной границы 4К слов. Таким образом, очередной свободный адрес (OCA) - это адрес последнего слова виртуального адресного пространства, определяемого старшим РАС/РПС этого задания, плюс 2. Он всегда расположен на границе 4К слов (восьмеричный - всегда кратен 20000).

В качестве примера предлагается задание с оверлеями в расширенной памяти, ВСА которого равен 55076. Его очередной свободный адрес, вычисленный редактором связей, равен 60000 - это начало следующих 4К слов виртуального адресного пространства. Именно это значение выдаётся в карте загрузки в качестве очередного свободного адреса (NEXT FREE ADDRESS). Для приводимого примера эта строка в карте загрузки выглядит так:

VIRTUAL HIGH LIMIT = 055076 = DDDDD. WORDS
NEXT FREE ADDRESS = 060000

Конечно, если в программе нет оверлеев расширенной памяти, то у нее нет и ВСА, и старший адрес программы не округляется. В картах загрузки программ, не имеющих оверлеев или имеющих только оверлеи, полученные по /O, - старший адрес программы печатается в виде ММММММ, как показано на следующем примере (эта строка выдаётся во всех картах загрузки независимо от того, имеется ли расширенная память или нет).

TRANSFER ADDRESS = NNNNNN,
HIGH LIMIT=MMMMMM= DDDDD. WORDS

10.5.2. .SETTOP без ХМ-особенности

Если с помощью редактора связей ХМ-особенность .SETTOP не используется, то .SETTOP имеет в расширенной памяти весьма ограниченное применение.

Для привилегированного задания, не меняющего отображение по умолчанию, .SETTOP работает так же, как и в мониторах SJ или FB. Если привилегированное задание создаёт виртуальное адресное окно и отображает его в область расширенной памяти, то на старший адрес программы отображение не влияет. Величина, полученная по запросу .SETTOP и обозначающая наибольший доступный программе адрес, по-прежнему находится в нижних 28К слов памяти.

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

Если задание виртуальное, то во время загрузки старший адрес программы устанавливается равным старшему виртуальному адресу, который использует корневой сегмент и любые оверлеи в нижней памяти (/O). Если задание выполняет собственные операции отображения, то они не влияют на старший адрес программы в том плане, в каком рассматривается .SETTOP. Так что запрос .SETTOP без ХМ-особенности не имеет значения для этих виртуальных заданий, поскольку работает исключительно в нижних 28К слов памяти. Виртуальные задания используют режим пользователя и, следовательно, отображаются в соответствии с содержимым пользовательского набора РАС/РПС. Виртуальное задание не имеет доступа к не предназначенным для него областям памяти, поскольку отображается только в отведённое для него пространство. Поэтому обращение к запросу .SETTOP, если не подавалась команда монитора LINK/ХМ или /V в редакторе связей, не добавит дополнительной памяти. Получаемую величину виртуальное задание может использовать для собственного отображения имеющейся области и последующего её использования.

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

10.5.3. ХМ .SETTOP

ХМ .SETTOP может быть весьма полезен для привилегированных и виртуальных заданий (для привилегированных, однако, в меньшей степени).

Для виртуальных заданий .SETTOP не только получает виртуальное адресное пространство выше виртуального старшего адреса, начиная с OCA, - .SETTOP также автоматически отображает дополнительную память в физическую область памяти. В итоге задание в среде расширенной памяти может выдавать запрос .SETTOP и получать необходимое ему виртуальное адресное пространство, не заботясь о тонкостях управления расширенной памятью.

Для привилегированных заданий ХМ .SETTOP работает так же, как и .SETTOP без ХМ-особенности, если не считать того, что для привилегированных заданий ХМ .SETTOP в качестве очередного свободного адреса использует новое значение, которое выдаёт ХМ .LIMIT. Начало буфера, таким образом, всегда оказывается на границе 4К слов. Указывать для .SETTOP любой адрес, лежащий ниже этой границы 4К, не разрешается.

Для привилегированных и виртуальных программ редактор связей помещает в ячейки 0 и 2 файла задания два информационных слова. Ячейка 0 содержит VIR в кодах RADIX-50. Ячейка 2 содержит значение OCA-2, который может существенно отличаться от виртуального старшего адреса.

10.5.3.1. Директива .LIMIT

Для заданий, работающих под управлением мониторов SJ и FB, а также под управлением монитора ХМ, если не используется ХМ .SETTOP, директива .LIMIT выдаёт программе два значения, именно:

В программах расширенной памяти, использующих ХМ .SETTOP, директива .LIMIT выдаёт существенно отличное значение:

10.5.3.2. "Пустоты" в виртуальном адресном пространстве

Редактор связей всегда располагает оверлейную область расширенной памяти (/V) на границе 4К в виртуальном адресном пространстве программы пользователя. Это ограничение обусловлено аппаратными требованиями. Вследствие этого могут быть "пустоты" между старшим адресом программы и началом виртуальной оверлейной области. Попытка обращения программы пользователя к виртуальным адресам внутри такой "пустоты" вызовет сбой системы. Аналогично, любое дополнительное виртуальное адресное пространство, полученное программой с помощью ХМ .SETTOP, также начинается на границе 4К слов. Это означает, что существует "пустота" между виртуальным старшим адресом программы и началом дополнительной памяти. Программа не может обращаться к адресам внутри этой "пустоты".

10.5.4. XM .SETTOP и привилегированные задания

Когда привилегированное задание выдаёт запрос .SETTOP и очередной свободный адрес выше основания USR, то программа уже использует виртуальное адресное пространство выше начала монитора. Поскольку свободной памяти, которую можно было бы отобразить, начиная с OCA программы, нет, монитор не может получить дополнительную память для этой программы. Таким образом, привилегированное задание никогда не может получить память выше SYSLOW - основания USR. Запрос .SETTOP выдаёт значение OCA-2 в ячейку 50 программы и в R0. Это наибольший используемый адрес.

Если память в наличии имеется, монитор пытается получить её, определяя размер области по указанному пользователем в запросе .SETTOP аргументу. Память эта всегда располагается в пределах нижних 28К слов. Привилегированное задание никогда не может получить область виртуального адресного пространства ниже, чем OCA-2. Кроме того, OCA, полученный с помощью ХМ .SETTOP, всегда располагается на границе 4К слов, и задание не может указывать в запросе .SETTOP адрес, лежащий ниже. Следовательно, задание теряет пространство между своим последним адресом и очередной границей 4К слов.

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

Поскольку основные задания загружаются в память ниже последнего драйвера устройства и выше USR, то получить дополнительную память по запросу .SETTOP они не могут. Вследствие этого, привилегированным основным заданиям запрещается использовать оверлеи в расширенной памяти. Это также означает, что они не могут указать переключатель /V редактора связей (или команду LINK/FOREGROUND /PROMPT или LINK/FOREGROUND/ХМ), чтобы использовать ХМ .SETTOP и ХМ .LIMIT.

10.5.5. ХМ .SETTOP и виртуальные задания

Монитор проверяет, имеется ли в наличии какая-либо доступная расширенная память. Если OCA равен 200000, то программа уже использует виртуальное адресное пространство, которое контролирует РАС7. Запрос выдаёт значение 177776 в ячейку 50 и в R0.

Если .SETTOP может получить дополнительную память, начиная с очередного свободного адреса (на границе 4К), то монитор создаёт область необходимого размера в расширенной памяти. Если этой области недостаточно, монитор создаёт наибольшую возможную область (значение, которое выдаёт .SETTOP, надо проверить). Затем монитор создаёт окно и отображает его в новую область. Новое значение наибольшего доступного адреса он возвращает в ячейку 50 и в R0. Если нет в наличии доступной памяти, или УБОБ или УБОК, то в ячейку 50 и в R0 выдаётся первоначальное значение наибольшего доступного адреса.

Например, если программа выдаёт запрос .SETTOP с адресным аргументом, то монитор отображает виртуальное адресное пространство, начиная с очередной границы 4К слов выше ВСА программы до указанного адреса включительно. При этом отображается указанный адрес, но может быть отображено также до 31 (десятичное) слова дополнительно.

Если указанный в запросе .SETTOP адрес расположен ниже, чем наибольший используемый адрес, то .SETTOP выдаёт значение OCA-2 в ячейку 50 и R0. Статическое окно и виртуальные оверлейные области, созданные по переключателю /V редактора связей, нельзя аннулировать с помощью аргумента в запросе .SETTOP.

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

Если указанный в очередном .SETTOP аргумент меньше, чем указанный в карте связей первоначальный OCA-2, то монитор возвращает в ячейку 50 и R0 старый OCA-2 и аннулирует область и окно, если они есть (вместе со всей хранящейся там информацией). Конечно, позднее, можно опять подать запрос .SETTOP и создать новую область. Можно также изменить размер буфера, выполнив повторное отображение в ту же самую область.

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

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

Виртуальные фоновые и основные задания наиболее часто используют ХМ .SETTOP. Это позволяет им легко и быстро создавать обширные буферы в расширенной памяти, что способствует разгрузке нижней памяти.

Для основных заданий запрос SETTOP работает в целом так же, как и для фоновых заданий. Для виртуальных основных заданий, не использующих ХМ .SETTOP, единственно доступная дополнительная область может быть получена по команде FRUN/BUFFER:N. Для заданий, использующих ХМ .SETTOP, переключатель /BUFFER игнорируется (задание не может иметь буферов и в нижней, и в расширенной памяти).

10.5.6. Сводка результатов действия запроса .SETTOP

Действие .SETTOP для фоновых заданий

Рис. 21

На рис. 21 и 22 и в табл. 8 и 9 приводится сводка результатов действия запроса .SETTOP. Задание А на рис. 21 - это фоновое задание, OCA которого располагается ниже SYSLOW (основание USR). В скобках приведены области значений аргументов запроса .SETTOP.

Таблица 8
ДЕЙСТВИЕ SETTOP ДЛЯ ФОНОВЫХ ЗАДАНИЙ

Виртуальное задание

Привилегированное задание

Аргумент .SETTOP

.SETTOP без
ХМ-особенности

ХМ
.SETTOP

.SETTOP
без ХМ-особенности

XM
.SETTOP

Старший адрес задания А после запроса .SETTOP

(1)

(1)

OCA - 2

(1)

OCA - 2

(2)

(2)

OCA - 2

(2)

OCA - 2

(3)

(3)

Отображ. в (3)1)

(3)

(3)

(4)

SYSLOW - 2

Отображ. в (4)1)

SYSLOW - 2

SYSLOW - 2

#0

0

OCA - 2

0

OCA - 2

# - 2

SYSLOW - 2

Отображ. в 32К1)

SYSLOW - 2

SYSLOW - 2

Старший адрес задания B после запроса .SETTOP

(1)

(1)

OCA - 2

(1)

OCA - 2

(2)

(2)

OCA - 2

(2)

OCA - 2

(3)

SYSLOW - 2

OCA - 2

SYSLOW - 2

OCA - 2

(4)

SYSLOW - 2

Отображ. в (4) 1)

SYSLOW - 2

OCA - 2

#0

0

OCA - 2

0

OCA - 2

# - 2

SYSLOW - 2

Отображ. в 32К1)

SYSLOW - 2

OCA - 2

1) при наличии памяти; в противном случае для области .SETTOP выделяется наибольшая возможная память.

Таблица 9
СТАРШИЙ АДРЕС ОСНОВНОГО ЗАДАНИЯ ПОСЛЕ .SETTOP

Аргумент

Виртуальное задание

.SETTOP

.SETTOP без ХМ-особенности

ХМ
.SETTOP

(1)

(1)

OCA - 2

(2)

Выше OHIGH или BUFF

OCA - 2

#0

0

OCA - 2

# - 2

Выше OHIGH или BUFF

Отображение в 32K

Действие .SETTOP для основных заданий

Рис. 22

ПЕРЕЧЕНЬ ССЫЛОЧНЫХ ДОКУМЕНТОВ

  1. Операционная система ФОДОС-2 Редактор связей
    Руководство оператора
  2. Операционная система ФОДОС-2 Системная макробиблиотека