Язык спецификации виртуального оборудования эмуляторов ЭВМ

УДК 519.682

ЯЗЫК СПЕЦИФИКАЦИИ ВИРТУАЛЬНОГО ОБОРУДОВАНИЯ ЭМУЛЯТОРОВ ЭВМ

© А.С. Бурлаков1

Иркутский государственный университет, 664003, Россия, г. Иркутск, б. Гагарина, 20.

Предложен новый подход к настройке среды эмуляторов, основанный на применении языка спецификации архитектуры процессора и оборудования ЭВМ. Рассмотрены вопросы разбора и интерпретации текста спецификации, а также возможная структура эмулятора. Использование данного программного средства в совокупности со спецификацией позволит выполнять эмуляцию большого числа архитектур ЭВМ. Ил. 7. Библиогр. 15 назв.

Ключевые слова: языки программирования; синтаксический анализ; интерпретаторы; эмуляторы ЭВМ.

SPECIFICATION LANGUAGE OF COMPUTER EMULATOR VIRTUAL HARDWARE A.S. Burlakov

Irkutsk State University,

20 Gagarin Blvd., Irkutsk, 664003, Russia.

The paper proposes a new approach to setting up emulator environment based on the use of the specification language of CPU architecture and computer hardware. It describes the problems of descriptive text parsing and interpretation and considers possible structures of emulators. Application of the given software together with the specification will allow to emulate a great number of computer architectures. 7 figures. 15 sources.

Key words: programming languages; parsing; interpreters; computer emulators.

Введение

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

На данный момент существуют эмуляторы разнообразного компьютерного оборудования и архитектур, например, VMware Workstation, Oracle VM VirtualBox, QEMU, Bochs, DosBox и другие, которые, однако, предлагают пользователю только ограниченный набор оборудования, настраиваемого в определенных пределах [1-5].

Целью работы является создание языка спецификации компьютерного оборудования, который может быть применен в эмуляторах для описания архитектуры ЭВМ. Таким образом, используя данный язык, эмулятор сможет воспроизводить большее число компьютерных архитектур, чем это предлагается стандартными эмуляторами. Ориентированность языка ограничивает сферу его использования, но в то же время делает более удобным его применение в сфере эмуляторов относительно использования классических языков программирования [6-8].

Структура программы

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

языком. Схематически вся система представлена на рис. 1.

В состав эмулятора входят: пользовательский интерфейс, скелет, виртуальная машина и синтаксический анализатор. Текст спецификации располагается в отдельном файле. Эмулятор работает следующим образом: после запуска приложения пользователь выбирает оборудование, которое необходимо создать, происходит разбор текста спецификации запрашиваемого оборудования во внутреннее представление, загружается образ памяти и начинается выполнение эмуляции, результат выполнения которой виден пользователю на эмулируемом экране. Пользовательский интерфейс Верхним уровнем иерархии эмулятора является двухоконный пользовательский интерфейс. Первое окно является консольным, создается средствами операционной системы Windows и предназначено для конфигурирования и управления эмулятором. Второе окно является графическим, создается средствами библиотеки SDL и представляет собой экран виртуального графического устройства, например, VGA монитора. Обработка сообщений окна, например, нажатие клавиши или щелчок мыши, реализуется за счет использования соответствующей библиотеки (Win API либо SDL) [9].

Скелет эмулятора. Виртуальная машина Скелет эмулятора - это абстрактная реализация архитектуры фон-Неймана. Другими словами - это ЭВМ, которая состоит из стандартных устройств: процессора, памяти и устройств ввода-вывода, алгоритмы работы которых определены лишь до некоторой

1Бурлаков Алексей Сергеевич, старший преподаватель кафедры информационных технологий, тел.: 89025788853, e-mail: alex_burlakov@bk.ru

Burlakov Aleksei, Senior Lecturer of the Information Technology Department, tel.: 89025788853, e-mail: alex_burlakov@bk.ru

Рис. 1. Схема программы

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

Рассмотрим пример. Абстрактное устройство клавиатуры способно получать сообщения библиотеки SDL о нажатии клавиши и ее код. То, каким образом интерпретировать данное событие, определено в файле спецификации (рис. 2).

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

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

Основным компонентом виртуальной машины является виртуальная память, которая состоит из кучи и стека. Аналогично тому, как это делают компиляторы языков программирования вроде Delphi и C++, в стеке виртуальной памяти располагаются локальные переменные, объявленные в тексте спецификации оборудования, а в куче - глобальные переменные, которые являются экземплярами классов, описывающих это оборудование. Грубо говоря, привязка экземпляра устройства - это передача абстрактному устройству

class CKbdI8 080 : public CKbd {

void KeyDown(bits<32> code) {

attr = map(code);

state[attr.row] &= -attr.mask;

}

void Compile (CComp^er* pc) { } ;

Рис. 2. Фрагмент описания устройства типа клавиатура

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

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

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

Пример конфигурирования эмулятора IBM PC

В примере, приведенном на рис. 3, в первых четырех строках скрипта, виртуальная машина создает экземпляры классов CComputerI8080, CCpuI8080, CMemI8080 и CKbdI8080. Затем происходит привязка этих экземпляров к соответствующим абстрактным устройствам, за каждым из которых зарезервировано имя: PC, CPU, RAM, KBD и т.п. - для обозначения компьютера, центрального процессора, оперативной памяти и клавиатуры соответственно. Выполнение команды compile сопровождается вызовом виртуального метода Compile для каждого созданного объекта (см. 0). Команда Load вызывает одноименный метод для объекта, закрепленного за устройством RAM, передавая в него файлы образа памяти. Последняя команда запускает выполнение эмуляции.

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

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

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

Язык спецификации виртуального оборудования эмулятора ЭВМ

Язык спецификации оборудования ЭВМ удовлетворяет парадигме объектно-ориентированного программирования - он поддерживает инкапсуляцию, полиморфизм и единичное наследование. Основной структурной (не синтаксической) единицей языка является класс, реализующий логику работы соответствующего устройства. Взаимодействие программы и текста описания основано на событийном программировании. Пример приведен выше, в разделе, посвященном скелету эмулятора и виртуальной машине. За основу синтаксиса языка спецификации был взят язык программирования C++ ISO/IEC c некоторыми заимствованиями из языка C++/CLI и других языков программирования.

Кроме стандартных лексических конструкций, свойственных большинству императивных языков программирования, в языке спецификации реализован декларативный оператор для описания команд процессора, операторы для работы с частью переменной (оператор извлечения последовательности байт и бит), оператор для работы с несколькими переменными (оператор конкатенации) и др. [6, 11].

В силу того что язык спецификации является интерпретируемым, появляется возможность использования ссылок, указывающих не на конкретную область памяти (как в случае использования компилируемых языков вроде C++), а на динамические конструкции вроде l-value выражений [10].

Одним из возможных терминалов l-value выражения является переменная, которая может быть либо скалярной числовой переменной, либо свойством объекта (property), которое обладает методами записи и чтения. Другим из возможных терминалов l-value выражения может быть функция, возвращающая ссылочный тип данных. Проверка корректности l-value выражений происходит во время и после разбора текста описания. Нетерминалами l-value выражения являются операторы конкатенации, извлечения последовательности байт и бит.

create PC of CComputerI80 8 0

create CPU of CCpuI8080

create RAM of CMemI8080

create KBD of CKbdI8080

compile

load mon32.bin into RAM start

Рис. 3. Пример конфигурирования эмулятора IBM PC

lvalue_expr: nested_id // Переменная либо св-во

| nested id '(' expr list ')' // Метод

| lvalue_expr ' [' expr_num ' ] ' // Извлечение одного байта

// Извлечение последовательности байт | lvalue_expr '[' expr_num PERIOD expr_num 1]' | lvalueexpr '<' exprnum 1>' // Извлечение одного бита

// Извлечение последовательности бит | lvalueexpr '<' exprnum PERIOD exprnum '>' | lvalueexpr lvalue expr // Конкатенация

Рис. 4. Синтаксис l-value выражения

bits<32> Ä = Oxffffffff; bits<l> CF = 0;

CF:A<16..0> = Oxlcdcd; // CF = 1, A = Oxffffcdcd

Рис.5. Пример использования l-value выражения

Рис. 6. Пример использования ссылок

bits<3> Ns, Nd; // Номер регистра источника и приемника

bits<l> W; // ? dword: word

unsigned short opcode = m_memory.ReadByte(EIP);

case (opcode) {

maskb 1:0:0:0:1:0:1:W:1:l:Nd:Ns then MOV(R(Na,W),R(Nd,W)); break maskb 0:l:0:0:Nd:0 then INC(R(Nd)); break;

I_

Рис. 7. Использование оператора case на примере описания формата команд MOV и INC (см. рис. 5) процессора архитектуры IA-32 [12]

На рис. 4 в первых двух строках объявляются переменные A и CF длиной 32 и 1 бит соответственно. В третьей строке происходит операция присваивания, где первые 16 разрядов числа 0x1cdcd будут записаны в переменную A, а 17-ый разряд будет записан во флаг CF. Таким образом, после выполнения третьей строки переменные A и CF изменят свои значения на 0xffffcdcd и 1 соответственно.

Кроме отсутствия множественного наследования, макросов, шаблонных классов и функций, одним из ярких отличий языка спецификации от языка C++ является отсутствие оператора множественного ветвления switch. Вместо него в языке реализован декларативный оператор case, который по синтаксису и семантике более напоминает одноименный оператор языка Transact SQL. В отличие от оператора switch, case способен работать не только с константными значениями, но и c переменными, выражениями и битовыми масками. Последняя возможность является особенно удобной при описании команд процессора.

В декларативном смысле, оператор case - это n-местный предикат, где n - число вхождений переменных в конкатенацию, заключенную между ключевыми словами maskb и then. Предикат возвращает истину, если существует такое значение переменных, входящих в конкатенацию, при которых она совпадает с аргументом оператора case. В этом случае в аргументы (т.е. в переменные, входящие в конкатенацию) записываются соответствующие значения и далее выполняется последовательность инструкций, следующая за ключевым словом then. Последовательность инструкций при этом может носить императивный характер, и, если она заканчивается оператором break или return, то проверки следующего предиката не про-

исходит и все последующие конструкции maskb ... then внутри текущего оператора case игнорируются.

Разбор текста

Для разбора текста спецификации используется синтаксический анализатор, сгенерированный программой Bison, в совокупности с лексическим анализатором, полученным программой Flex. Поддерживается модульность на уровне файлов и проверка синтаксиса на этапе разбора текста. В силу того что в синтаксисе языка присутствуют выражения, которые невозможно однозначно свернуть, используя только один предиктивный символ, было решено отказаться от алгоритма LALR(1) в пользу GLR. Основная разница этих алгоритмов заключается в том, что алгоритм GLR, в отличие от алгоритма LALR(1) может выполнять откат более чем на один уровень при построении дерева разбора в случае несовпадения продукции [13-15].

Заключение

В статье рассмотрены вопросы, сопряженные с разработкой языка спецификации оборудования ЭВМ, применяемого в эмуляторе для описания архитектуры ЭВМ. Рассмотрена структура эмулятора, приведены некоторые синтаксические конструкции языка спецификации с описанием их семантики. Концепция, заложенная в разрабатываемое программное средство, позволит выполнять эмуляцию большого числа архитектур ЭВМ, базирующихся на архитектуре фон-Неймана. На данный момент проведены успешные испытания работоспособности описания архитектур I8080 и PDP11, происходит разработка описания реального режима процессора архитектуры IA-32.

Статья поступила 30.09.2014 г.

Библиографический список

1. Сравнение версий VMware Workstation, http://www.vmware.com/ru/products/workstation/compare.html

2. The VirtualBox architecture, https://www.virtualbox.org/wiki/ VirtualBox_architecture

3. QEMU/Devices - Wikibooks, open books for an open world, http://en.wikibooks.org/wiki/QEMU/Devices

4. The configuration file bochsrc, Bochs User Manual http://bochs.sourceforge.net/doc/docbook/user/bochsrc.html

5. Dosbox.conf - DOSBoxWiki, http://www.dosbox.com/wiki/ Dosbox.conf

6. Бруснецов Н.П. Микрокомпьютеры. М.: Наука, 1985. C. 37-41.

7. Ramsey N., Fernandez M. Specifying Representation of Machine Instructions, ACM Trans. Program. Lang. Syst. 1997. Vol 19, No 3. Р. 492-524.

8. Бурлаков А.С. Настройка среды эмулятора при помощи языка описания архитектуры ЭВМ // Тр. Всерос. молодежной науч.-практ. конф. (Иркутск, 3-5 апреля, 2014 г.). Иркутск: Изд-во ИрГТУ, 2014. С. 18-23.

9. Simple DirectMedia Layer - Homepage, http://www.libsdl. org/index.php

10. Ахо А., Сети Р., Ульман Д. Компиляторы: принципы, технологии и инструменты / пер. с англ. М.: Издательский дом "Вильямс", 2003. 768 c.

11. Бурлаков А.С. Описание семантики машинных команд // Мат. Всерос. молодежной науч.-практ. конф. с междунар. участ. (Иркутск, 21-23 марта, 2013 г.). Иркутск: Изд-во ИрГТУ, 2013. С. 137-141.

12. Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2, http://www.intel.com/content/dam/www/ pub-lic/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf

13. Donald E. Knuth. On the Translation of Languages from Left to Right, Information and control 1965, Vol 8. Р. 608-639.

14. Фридл Дж. Регулярные выражения. Библиотека программиста. СПб.: Питер, 2001. C. 200-218.

15. Bison-GNU parser generator, http://www.gnu.org/software/ bison/

УДК 519.178; 519.17:33

ОПТИМИЗАЦИЯ СИСТЕМЫ КОММУНИКАЦИЙ С УЧЕТОМ РЕГИОНАЛЬНЫХ ОСОБЕННОСТЕЙ: МАТЕМАТИЧЕСКАЯ МОДЕЛЬ И ЧИСЛЕННЫЙ МЕТОД

© А.Л. Казаков1, А.А. Лемперт2, Г.Л. Нгуен3

Институт динамики систем и теории управления СО РАН, 664033, Россия, г. Иркутск, ул. Лермонтова, 134. Иркутский государственный технический университет, 664074, Россия, г. Иркутск, ул. Лермонтова, 83.

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

Ключевые слова: математическое моделирование; минимальное остовное дерево; задача Штейнера; оптико-геометрический подход; транспортная логистика; экологические ограничения.

COMMUNICATION SYSTEM OPTIMIZATION CONSIDERING REGIONAL FEATURES: A MATHEMATICAL MODEL

AND A NUMERICAL METHOD

А.L. Kazakov, А.А. Lempert, H.L. Nguyen

Institute for System Dynamics and Control Theory SB RAS, 134 Lermontov St., Irkutsk, 664033, Russia. Irkutsk State Technical University, 83 Lermontov St., Irkutsk, 664074, Russia.

The article is devoted to the construction and study of a new mathematical model for an optimal communication network. The model has the form of an undirected graph in a two-dimensional metric space. As compared to traditional models, the use of the special metric allows a more complete consideration of geographical, ecological, economic, and other terrain features. Model examples are solved and the problem of minimum cost routing with regard to environmental constraints is considered as well. 5 figures. 1 table. 15 sources.

Key words: mathematical modeling; minimum spanning tree; Steiner problem; optical and geometrical approach; transport logistics; environmental constraints.

Введение

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

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

1 Казаков Александр Леонидович, доктор физико-математических наук, зав. лабораторией математических методов анализов свойств динамических систем, тел.: (3952) 453033, е-mail: kazakov@icc.ru

Kazakov Alexander, Doctor of Physical and Mathematical Sciences, Head of the Laboratory of Mathematical Methods of Dynamic System Property Analysis, tel.: (3952) 453033, e-mail: kazakov@icc.ru

2Лемперт Анна Ананьевна, кандидат физико-математических наук, зав. лабораторией системного анализа и вычислительных методов, тел.: (3952) 453030, е-mail: lempert@icc.ru

Lempert Anna, Candidate of Physical and Mathematical Sciences, Head of the Laboratory of System Analysis and Computing Methods, tel.: (3952) 453030, e-mail: lempert@icc.ru

3Нгуен Гуй Лием, аспирант, тел.: 79246278364, e-mail: nguyenhuyliem225@gmail.com Nguyen Huy Liem, Postgraduate, tel.: 79246278364, e-mail: nguyenhuy-liem225@gmail.com