.:Публикации:. [www.karlson.ru]


Вперед: Основные команды языка Вверх: Приложение Б. Псевдокод системы Назад: Ассемблер псевдокода   Содержание

Структура виртуальной машины и ее работа

В машине есть:
  1. стек. В нем хранятся строки, которые могут быть использованы как аргументы вызовов, как числа, как HTML-фрагменты. Содержимое стека нетипизировано.
  2. текущая последовательность команд и счетчик команд.
  3. локальные переменные (слоты).
  4. глобальные переменные (в начале цикла работы машины инициализируются CGI-переменными).
  5. стек вызовов. В нем хранятся ссылки на текущие последовательности команд, счетчики команд и вспомогательные переменные, описывающие состояние виртуальной машины.
Машина запускается сразу после получения HTTP-запроса. Создаются стеки, глобальные переменные инициализируются из CGI-переменных. По URL определив библиотеку и модуль, ответственный за него и значения слотов, которые должны быть выставлены, система формирует массив локальных переменных. Каждая библиотека имеет статическую и динамическую часть. Динамическая часть представляет собой класс, который является наследником (возможно, непрямым) класса WebOS::Publishing::Library; модули -- это методы этого класса. Ясно, что при обработке запроса должен быть создан объект этого класса. Именно в нем (как свойства объекта) хранятся переменные, являющиеся общими для всех модулей (т.е. формирующие данные виртуальной машины) - все системные структуры (стек операндов, стек вызовов и т.д.). Кроме того, на каждый вызываемый модуль создается объект класса WebOS::Publishing::Module, в котором содержится информация о данном модуле (его имя, ссылка на цепочку команд, счетчик команд, обратная ссылка на WebOS::Publishing::Library; и т.д.). Стек вызовов просто представляет собой массив ссылок на объекты класса
WebOS::Publishing::Module. На вершине стека стоит ссылка на того, кто вызвал текущий модуль. Если стек вызовов пуст, модуль является главным и его результат есть HTML-страница.

...домик на крыше...,поиск,гостевая книга,cv. Be free, use Linux!