Блог → Основные функции монитора виртуальных машин

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

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

По завершении кванта времени, выделенного только что работавшей ВМ (или если её работа прервана по какой-то другой причине), монитор виртуальных машин запоминает в управляющих блоках этой ВМ всю информацию, необходимую для возобновления её работы, затем определяет ВМ, которой будет передано управление, восстанавливает из управляющих блоков последней ССП, регистры и другую информацию, и передаёт управленве по адресу, указанному в ССП данной машины. Отметим, что в реальном ССП после передачи управления ВМ установлена состояние "задача", поэтому как только при выполнении программы, работающей на ВМ, встретится привилегированная команда, требующая состояния "супервайзор", то возникает прерывание.

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

Но вернёмся к случаяю, когда привилегированная команда моделируется МВМ. Что именно, и каким образом при этом моделируется? Допустим, к примеру, что виртуальная машина выдала команду SIO для чтения информации с третьего цилиндра мини-диска, начинающегося с пятого цилиндра реального дискового тома. Естественно, операционная система ВМ построила ранее канальную программу для чтения с третьего цилиндра, так как с её точки зрения мини-диск является реальным томом. В таком случае МВМ, получив управление в результате прерывания, возникающего при выполнении на ВМ указанной команды SIO, проверяет, что в действительности нужно делать, и при необходимости изменяет канальную программу, построенную операционной системой ВМ. В приведенном выше примере МВМ изменит канальную программу таким образом, чтобы чтение осуществлялось с восьмого цилиндра реального дискового тома, а лишь затем инициирует выполнение этой программы, выдав "нормальную" команду SIO (последняя никем не перехватывается, так как выполняется в реальном состоянии "супервайзора").

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

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