/Materials Пн, 24.07.2017, 19:35

Сайт методики довузовского обучения программированию
и проектной деятельности в информатике


Главная страница, Контакты, RSS
 
> Меню сайта

> Разделы новостей
Семинар [37]
Семинар по системному и прикладному программированию
Etc [14]
Разное
Конференция [16]
Открытая конференция исследовательских и проектных работ

> Архив новостей

> Партнеры

> Поиск

> Статистика

Главная » 2014 » Февраль » 25 » Виртуализация процессора архитектуры ARM посредством бинарной трансляции
Виртуализация процессора архитектуры ARM посредством бинарной трансляции
Иван Шаповалов
11 класс

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

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

Здесь и далее термин «гость» (англ. «guest») используется в значении «система, исполняющаяся внутри виртуальной машины» и противопоставляется «хосту» (англ. «host») - системе, исполняющей процесс виртуальной машины.

Целью данной работы была разработка эффективного эмулятора центрального процессора архитектуры (как набора команд, ISA) ARMv7, способного работать в пространстве пользователя на хост-системе той же архитектуры. Под такой работой понимается отсутствие необходимости в исполнении привилегированного кода в ОС хоста, что часто бывает затруднено ввиду невозможности получения привилегий администратора.

Стандартным подходом к виртуализации аппаратных платформ является метод «trap-and-emulate». Этот подход применим только в том случае, если архитектуры гостевой и физической системы совпадают. При его использовании гостевой машинный код исполняется на физическом процессоре без каких-либо модификаций, но в непривилегированной среде (отдельным процессом под управлением ОС хоста). Однако, это требует, чтобы VMM исполнялся в режиме ядра, что сопряжено с большими накладными расходами на переключение контекстов, значительно снижая производительность ВМ.

Для решения описанных проблем применяется бинарная трансляция гостевого кода. Бинарная трансляция - метод эмуляции, при котором гостевой машинный код модифицируется непосредственно перед исполнением на процессоре хоста. При этом

становится возможным обнаруживать и обрабатывать проблемные инструкции еще до их исполнения, не прибегая к медленному аппаратному перехвату. Обращения к гостевой памяти, включая команды ветвления, можно таким же образом подвергнуть преобразованию адресов, что полностью исключит необходимость иметь части VMM в пространстве ядра. Остальные инструкции не требуют качественных изменений (т. е. эмуляции) и могут быть выполнены «как есть».

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

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

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

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

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

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

Работа была выполнена на языке C++, в среде KDevelop 4, в операционной системе Linux. Объем кода составляет около 10000 строк.

Список литературы

[1] Gerald J. Popek, Robert P. Goldberg. Formal requirements for virtualizable third generation architectures, Communications of the ACM Volume 17 Issue 7 1974 (http://www.logos.ic.i.u-tokyo.ac.jp/~tau/lecture/os/gen/papers/p412-popek.pdf).
[2] Fabrice Bellard. QEMU, a Fast and Portable Dynamic Translator, Proceedings of the USENIX Annual Technical Conference 2005. (https://www.usenix.org/legacy/event/usenix05/tech/freenix/full_papers/bellard/bellard.pdf).
[3] Keith Adams, Ole Agesen, VMware. A comparison of software and hardware techniques for x86 virtualization, Proceedings of the ASPLOS Conference 2006 (http://www.vmware.com/pdf/asplos235_adams.pdf).
[4] Procedure Call Standard for the ARM Architecture, 2012. (http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e/IHI0042E_aapcs.pdf).
[5] ARM Architecture Reference Manual, 2012.
[6] Материалы сайтов gotw.ca/gotw и stackoverflow.com.


Научные руководители:
А.Б. Корякин (Parallels), И.Р. Дединский (МФТИ).

Категория: Конференция | Просмотров: 2591 | Добавил: ded32
> Инструменты

Orphus


> О рекламе на сайте

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


> Загрузить

> Основные материалы

> Примеры проектов



Copyright (c) И.Р. Дединский, 2006-2017
Никакая часть материалов данного сайта или его подразделов не может быть прямо или косвенно процитирована или упомянута без действующей активной ссылки на данный сайт
...

Хостинг от uCoz

MasterHost Orphus