Фоновая дисковая операционная система. Часть 5.

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

  • при закрытой маске прерываний, т. е. при 7-м уровне приоритета процессора или соответствующем приоритету устройства;
  • при открытой маске, т. е. нулевом приоритете процессора (FORK-уровень).

Если имеют место вложенные прерывания, эти части накапливаются в очереди FORK и выполняются в порядке «первый пришел — первый обслужен» (FIFO). Никакой другой процесс (фоновый, оперативный или процесс завершения) не получит управления, пока очередь FORK не пуста. Для разделения этих частей используется макрокоманда .FORK.

Приоритеты программы в ФОДОС

Для того чтобы асинхронные процессы могли использовать программные запросы, организована очередь программ завершения, которая обслуживается в порядке FIFO. Программы завершения, определенные в фоновой программе, имеют более высокий по сравнению с ней приоритет, но ниже, чем оперативная программа и программы завершения. Чтобы перевести программу обработки прерываний на уровень программы завершения и дать таким образом ей возможность использовать программные запросы, применяется команда SYNCH. Синхронизация основной программы с программой завершения производится с помощью двоичного «семафора» (запросы .SPND и .RSUM). Синхронизация фоновой и оперативной Программ осуществляется с помощью аппарата приема-передачи сообщений (запросы .SDAT и .RCVD).

Управление устройствами осуществляется с помощью драйверов устройств и механизма очередей к ним. Драйверы, необходимые фоновой программе, динамически загружаются в процессе выполнения командой .FETCH, а драйверы оперативной программы — заранее. Все драйверы обеспечивают асинхронный ввод-вывод, управляемый прерываниями, являются повторно используемыми (но не рентабельными) модулями, к которым и выстраиваются очереди. Очереди обслуживаются в порядке FIFO. Таким образом, при выдаче запроса ввода-вывода (READ/WRITE) он обслуживается немедленно или устанавливается в очередь.

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

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

В системе заложено ограничение количества однотипных внешних устройств: одна перфоленточная станция; одна мозаичная печать; до четырех дисководов по два диска в каждом и т. д. Увеличение количества устройств является непростой процедурой, так как связано с заменой (или добавлением) драйверов, настроенных на другие адреса.
Управление информацией включает файловую систему и методы доступа. В рассматриваемой системе файлы «привязаны» к устройствам, на которых они размещены, и имя устройства входит в полное имя файла:

XXX: АААААА. ВВВ

где XXX — имя устройства, например DXn — для гибких дисков (n=0 ... 7), RKn — для мини-дисков, MTn — для магнитных лент.

Для устройств нефайловой структуры имя файла включает только это поле, например PC — перфолента, LP — устройство печати, ТТ — видеотерминал; АААААА — собственно имя файла (до 6 букв длиной); ВВВ — тип файла, отражающий его содержание (до 3 букв). Так, LST — файл листинга; FOR — исходная программа на языке Фортран; OBJ — объектный модуль.

Введение типов, с одной стороны, существенно расширяет возможности обрабатывающих программ в части назначения имен по умолчанию, а с другой — уменьшает количество имен, придумываемых пользователем для промежуточных результатов. Например, программа NASTYA может иметь исходный текст на языке Макроассемблер, объектный модуль и листинг трансляции, загрузочный модуль и карту загрузки и, наконец, загрузочный модуль в перемещаемом формате. Наличие типа позволяет всем шести файлам иметь одно и то же имя NASTYA и различные типы: MAC, OBJ, LST, SAV, MAP, REL. При этом обрабатывающим программам можно не указывать тип входного файла (они по умолчанию ищут свой тип), а выходные файлы именуют самостоятельно по имени выходного файла и типу выходного продукта. Это значительно повышает логический уровень обращения с системой.