/Materials Пт, 22.11.2024, 11:58

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


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

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

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

> Партнеры

> Поиск

> Статистика

Главная » 2013 » Июнь » 6 » Платформа для быстрого машинно-независимого исполнения программного кода
Платформа для быстрого машинно-независимого исполнения программного кода
Артем Пимкин
10 класс

Целью проекта является разработка простой и удобной в использовании платформы для машинно-независимого исполнения программного кода с возможностью JIT-компиляции в машинный код процессора Intel x86_64. Платформа выполнена в соответствии с модульно-конвейерным подходом.

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

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

После этого работа с внутренним представлением считанного исходного текста передается к одному из модулей исполнения. В платформе присутствуют два взаимозаменяемых модуля исполнения. Первым является виртуальная стековая машина, напрямую выполняющая переданный ей исходный текст. Этот вариант удобен своей кроссплатформенностью. Если же скорость исполнения  исходного текста не соответствует предъявляемым требованием, а кроссплатфоменность не является основной целью, то модуль виртуальной стековой машины можно заменить модулем JIT-компиляции в машинный код процессора intel x86_64.

Этот вариант является более быстрым, но не является кроссплатформенным, он зависит как от машины, так и от OC. Целевым процессором является семейство Intel x86_64, а целевой ОС является Linux. Этап JIT-компиляции подразделяется на два шага. Во время первого шага происходит трансляция внутреннего представления загруженного исходного текста в язык ассемблера. После этого работа с исходным текстом на языке ассемблера передается модулю, реализующему JIT-компиляцию языка ассемблера в машинный код процессора intel x86_64. Внутри этого модуля реализована генерация результирующих байт машинного кода для некоторого количества вариантов операндов у обрабатываемой инструкции (r/m64 & reg64, imm32, disp32 и т.д), что в совокупности с созданной базой машинных кодов инструкций дает JIT-компилятор языка ассемблера. После трансляции исходного текста на языке ассемблера в машинный код создается область памяти с правами для выполнения, в которую записывается весь сгенерированный машинный код. Таким образом, на выходе, после JIT-компилятора мы получаем функцию, которую впоследствии уже можно будет вызывать.

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

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

ЛИТЕРАТУРА

1. Intel 64 and IA 32 Software Developers manual
2. Материалы с сайта stackoverflow.com
3. С. В. Зубков. Assembler для DOS, Windows и UNIX

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

Репозиторий проекта
Материалы доклада

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

Orphus


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

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


> Загрузить

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

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



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

Хостинг от uCoz

MasterHost Orphus