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

Дальнейшее заполнение зависит от варианта использования системы (одно- или двухпрограммном). В однопрограммном режиме (рис. 6.2,а) ниже RMON располагается программа USR, которая может быть временно удалена из памяти, если программа пользователя претендует на это место (например, не хватает места для драйвера и т.д.). Когда программа завершается, над программой USR (возможно, перекрывая место, занимаемое ранее программой пользователя) размещается интерпретатор директив со своим стеком.

Управление ресурсами

В двухпрограммном режиме (рис. 6.2,б) ниже RMON располагаются драйверы, необходимые оперативной программе, а затем сама программа со своим стеком. Таким образом, драйверы для оперативной программы должны быть резидентными, чтобы не создавать задержек, связанных с загрузкой, во время выполнения. Ниже оперативной программы размещается программа USR и при завершении фоновой программы интерпретатор директив KMON.

Система допускает два способа расширения адресного пространства: использование оверлейных структур и диспетчера памяти, реализующего динамическую переадресацию. Оверлейная структура не поддерживается ядром ОС; оверлейный супервизор прикомпоновывается к программе на этапе связывания модулей программы и загружается затем вместе с ней, представляя единое целое. Диспетчер памяти применяется в двухпрограммном режиме работы, как оперативной, так и фоновой программе предоставляется возможность расширять свое логическое адресное пространство в область выше резидентной части ядра (56К). При этом ядро включает специальные средства работы с диспетчером, и такой режим имеет отдельное обозначение (ХМ). В этом режиме программа USR является резидентной, так как программа пользователя может расширяться в другую область физической памяти.

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

Диспетчирование основных задач в системе осуществляется по простому алгоритму: если оперативная программа готова к работе, процессор передается ей. Но кроме основных программ, оперативной и фоновой, в системе существует ряд дополнительных программ асинхронных процессов: ввода-вывода, осуществляемые драйверами, и обработки внешних прерываний, написанные пользователями. Система предоставляет также возможность пользователю включать программу завершения, которой будет передано управление по истечении интервала времени, заданного пользователем, или по завершении операции ввода-вывода, задаваемом специальными запросами «чтение-запись с завершением» (.READC/.WRITEC). Диспетчирование этих дополнительных процессов связано с решением таких вопросов:

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

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