Двоичная трансляция

Поделись знанием:
Перейти к: навигация, поиск

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

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

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

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

Более совершенные динамические трансляторы применяют динамическую рекомпиляцию: транслируемый код инструментируется на предмет выяснения «температуры кода», то есть какие фрагменты выполняются довольно часто, и к ним применяется агрессивная оптимизация. Такой подход напоминает JIT-компилятор, и в сущности, такие компиляторы (как например, технология HotSpot от корпорации Sun) можно рассматривать как динамические трансляторы из виртуального набора инструкций (байт-код) в реальный.

  • Apple Computer реализовала эмулятор с динамической трансляцией кода M68K в своей линейке компьютеров Macintosh с процессорами PowerPC, что позволило достичь весьма высокого уровня надежности, производительности и совместимости (см. Mac 68K emulator). Это позволило Apple вывести машины на рынок с только частично родной операционной системой, а конечные пользователи могли попробовать новую, более быструю архитектуру, не рискуя своими вложениями в обновление ПО. «Частично» потому что эмулятор был настолько успешным, что многие части операционной системы продолжили эмулироваться. Окончательный переход к родной для PowerPC операционной системе произошёл лишь с выпуском Mac OS X (10.0) в 2001 году, но внутри этой новой ОС среда исполнения «Classic» все ещё поддерживала эмуляцию возможностей PowerPC Mac.
  • Позже Apple реализовала уровень трансляции Rosetta (включен в выпуски Mac OS 10.4) для Intel-ориентированных Mac, который использовался для упрощения перехода от PPC к x86, что может служить примером динамической трансляции. Разработанный для Apple корпорацией Transitive программный пакет Rosetta является реализацией решения QuickTransit самой же Transitive, который может использоваться для динамической трансляции между платформами на основе архитектур SPARC, PowerPC, MIPS, Itanium и x86.
  • DEC достигла подобного успеха со своими инструментами трансляции, помогающим пользователям перейти с CISC-архитектуры VAX к RISC-архитектуре Alpha.
  • DEC создала двоичный транслятор FX!32 для преобразования приложений архитектуры x86 в приложения для Alpha.
  • IA-32 EL (Execution Layer) фирмы Intel, использование x86-приложений на процессорах семейства Itanium
  • В марте 2006 года Intel объявила о своих планах по поддержке двоичного транслятора Transitive в будущих моделях процессоров серий Itanium и Xeon.
  • В январе 2000 года Transmeta Corporation анонсировала проект обновленного процессора, получившего название Transmeta Crusoe. Как следует из [www.transmeta.com/crusoe/faq.html FAQ] на их веб-сайте, 'Умный микропроцессор содержит аппаратное VLIW-ядро в качестве движка и программный уровень, называемый Code Morphing. Программа Code Morphing выступает в качестве оболочки … преобразования или трансляции x86-инструкций в родные инструкции для Crusoe. Более того, ПО Code Morphing содержит динамический компилятор и оптимизатор кода … Результатом является увеличенная производительность при сравнимом энергопотреблении. … [Это] позволяет Transmeta совершенствовать аппаратную часть VLIW и ПО Code Morphing по отдельности без затрагивания большой базы программных приложений. Подробнее здесь: [www.arstechnica.com/cpu/1q00/crusoe/crusoe-1.html arstechnica], [www.geek.com/procspec/features/transmeta/crusoe.htm geek.com].
  • HP ARIES (Automatic Re-translation and Integrated Environment Simulation) — система динамической двоичной трансляции, объяединяющая быструю интерпретацию кода с двухфазовой динамической трансляцией для прозрачного и точного выполнения приложений HP 9000 HP-UX на HP-UX 11i для серверов HP Integrity. Быстрый интерператор ARIES эмулирует полный набор непривилегированных PA-RISC-инструкций без вмешательства пользователя. В ходе интерпретации, происходит отслеживается схема выполнения приложения и транслируется только частоиспользуемый код в родной код Itanium в ходе выполнения. ARIES реализует двухфазную динамическую трансляцию — технику, при которой транслируемый код во время первой фазы собирает информацию о профиле запуска, которая затем используется во второй фазе трансляции для последующей оптимизации транслируемого кода. ARIES хранит динамически оттранслированный код в буфере памяти, называемом кэшем кода или кэшем фрагментов. Дальнейшие ссылки на оттранслированные базовые блоки обрабатываются напрямую в кэше кода и не требуют дополнительной интерпертации или трансляции. Целевые блоки транслируемого кода помечаются для обеспечения выполнения в кэше кода в большинстве случаев. При завершении эмуляции ARIES отбрасывает весь оттранслированный код без модификации оригинального приложения. Движок эмуляции ARIES также реализует эмуляцию окружения (Environment Emulation), которая эмулирует системные вызовы приложений HP 9000 HP-UX, передачу сигналов, управление исключениями, управление потоками, эмуляцию HP GNU Debugger для отладки, и создание core-файлов для приложения.
  • Среди программных динамических трансляторов можно отметить qemu. Он поддерживает трансляцию для большого количества платформ, причем в любых комбинациях эмулируемой и эмулирующей архитектур.
  • В китайских микропроцессорах серии Loongson, используется система двоичной трансляции qemu с модификациями от производителя процессоров ICT. В процессор MIPS-подобной архитектуры добавлено около 200 инструкций для упрощения эмуляции x86.


См. также

Напишите отзыв о статье "Двоичная трансляция"

Ссылки

  1. www.sgi.com/pdfs/3690.pdf

Дополнительные источники

  • www.transitive.com
  • bellard.org/qemu/
  • www.itee.uq.edu.au/~csmweb/decompilation/bintrans.html (somewhat dated)
  • www.gtoal.com/sbt/ Static Binary Translation HOWTO
  • www.itee.uq.edu.au/~cristina/uqbt.html University of Queensland Binary Translator
  • www.experimentalstuff.com/Technologies/Walkabout/ Walkabout — Binary Translation research by Sun and University collaborators
  • csdl.computer.org/comp/mags/mi/1998/02/m2056abs.htm - FX!32, an x86 to Alpha binary translator developed by DEC
  • www.hp.com/go/aries
  • [www.ixbt.com/cpu/binary-trans.shtml Технология двоичной трансляции. Сущность, сферы применения и особенности реализации] — статья на сайте iXBT.com
  • Максименков Д. А. [www.mcst.ru/files/527111/4a0cd8/503d1a/000000/maximenkov.pdf Система генерации тестов со случайным набором команд в кодах x86] (рус.) // "Информационные технологии" : doc. — 2008. — № 6.

Отрывок, характеризующий Двоичная трансляция

В балагане все были готовы, одеты, подпоясаны, обуты и ждали только приказания выходить. Больной солдат Соколов, бледный, худой, с синими кругами вокруг глаз, один, не обутый и не одетый, сидел на своем месте и выкатившимися от худобы глазами вопросительно смотрел на не обращавших на него внимания товарищей и негромко и равномерно стонал. Видимо, не столько страдания – он был болен кровавым поносом, – сколько страх и горе оставаться одному заставляли его стонать.
Пьер, обутый в башмаки, сшитые для него Каратаевым из цибика, который принес француз для подшивки себе подошв, подпоясанный веревкою, подошел к больному и присел перед ним на корточки.
– Что ж, Соколов, они ведь не совсем уходят! У них тут гошпиталь. Может, тебе еще лучше нашего будет, – сказал Пьер.
– О господи! О смерть моя! О господи! – громче застонал солдат.
– Да я сейчас еще спрошу их, – сказал Пьер и, поднявшись, пошел к двери балагана. В то время как Пьер подходил к двери, снаружи подходил с двумя солдатами тот капрал, который вчера угощал Пьера трубкой. И капрал и солдаты были в походной форме, в ранцах и киверах с застегнутыми чешуями, изменявшими их знакомые лица.
Капрал шел к двери с тем, чтобы, по приказанию начальства, затворить ее. Перед выпуском надо было пересчитать пленных.
– Caporal, que fera t on du malade?.. [Капрал, что с больным делать?..] – начал Пьер; но в ту минуту, как он говорил это, он усумнился, тот ли это знакомый его капрал или другой, неизвестный человек: так непохож был на себя капрал в эту минуту. Кроме того, в ту минуту, как Пьер говорил это, с двух сторон вдруг послышался треск барабанов. Капрал нахмурился на слова Пьера и, проговорив бессмысленное ругательство, захлопнул дверь. В балагане стало полутемно; с двух сторон резко трещали барабаны, заглушая стоны больного.
«Вот оно!.. Опять оно!» – сказал себе Пьер, и невольный холод пробежал по его спине. В измененном лице капрала, в звуке его голоса, в возбуждающем и заглушающем треске барабанов Пьер узнал ту таинственную, безучастную силу, которая заставляла людей против своей воли умерщвлять себе подобных, ту силу, действие которой он видел во время казни. Бояться, стараться избегать этой силы, обращаться с просьбами или увещаниями к людям, которые служили орудиями ее, было бесполезно. Это знал теперь Пьер. Надо было ждать и терпеть. Пьер не подошел больше к больному и не оглянулся на него. Он, молча, нахмурившись, стоял у двери балагана.
Когда двери балагана отворились и пленные, как стадо баранов, давя друг друга, затеснились в выходе, Пьер пробился вперед их и подошел к тому самому капитану, который, по уверению капрала, готов был все сделать для Пьера. Капитан тоже был в походной форме, и из холодного лица его смотрело тоже «оно», которое Пьер узнал в словах капрала и в треске барабанов.
– Filez, filez, [Проходите, проходите.] – приговаривал капитан, строго хмурясь и глядя на толпившихся мимо него пленных. Пьер знал, что его попытка будет напрасна, но подошел к нему.
– Eh bien, qu'est ce qu'il y a? [Ну, что еще?] – холодно оглянувшись, как бы не узнав, сказал офицер. Пьер сказал про больного.
– Il pourra marcher, que diable! – сказал капитан. – Filez, filez, [Он пойдет, черт возьми! Проходите, проходите] – продолжал он приговаривать, не глядя на Пьера.
– Mais non, il est a l'agonie… [Да нет же, он умирает…] – начал было Пьер.
– Voulez vous bien?! [Пойди ты к…] – злобно нахмурившись, крикнул капитан.
Драм да да дам, дам, дам, трещали барабаны. И Пьер понял, что таинственная сила уже вполне овладела этими людьми и что теперь говорить еще что нибудь было бесполезно.
Пленных офицеров отделили от солдат и велели им идти впереди. Офицеров, в числе которых был Пьер, было человек тридцать, солдатов человек триста.
Пленные офицеры, выпущенные из других балаганов, были все чужие, были гораздо лучше одеты, чем Пьер, и смотрели на него, в его обуви, с недоверчивостью и отчужденностью. Недалеко от Пьера шел, видимо, пользующийся общим уважением своих товарищей пленных, толстый майор в казанском халате, подпоясанный полотенцем, с пухлым, желтым, сердитым лицом. Он одну руку с кисетом держал за пазухой, другою опирался на чубук. Майор, пыхтя и отдуваясь, ворчал и сердился на всех за то, что ему казалось, что его толкают и что все торопятся, когда торопиться некуда, все чему то удивляются, когда ни в чем ничего нет удивительного. Другой, маленький худой офицер, со всеми заговаривал, делая предположения о том, куда их ведут теперь и как далеко они успеют пройти нынешний день. Чиновник, в валеных сапогах и комиссариатской форме, забегал с разных сторон и высматривал сгоревшую Москву, громко сообщая свои наблюдения о том, что сгорело и какая была та или эта видневшаяся часть Москвы. Третий офицер, польского происхождения по акценту, спорил с комиссариатским чиновником, доказывая ему, что он ошибался в определении кварталов Москвы.
– О чем спорите? – сердито говорил майор. – Николы ли, Власа ли, все одно; видите, все сгорело, ну и конец… Что толкаетесь то, разве дороги мало, – обратился он сердито к шедшему сзади и вовсе не толкавшему его.
– Ай, ай, ай, что наделали! – слышались, однако, то с той, то с другой стороны голоса пленных, оглядывающих пожарища. – И Замоскворечье то, и Зубово, и в Кремле то, смотрите, половины нет… Да я вам говорил, что все Замоскворечье, вон так и есть.
– Ну, знаете, что сгорело, ну о чем же толковать! – говорил майор.
Проходя через Хамовники (один из немногих несгоревших кварталов Москвы) мимо церкви, вся толпа пленных вдруг пожалась к одной стороне, и послышались восклицания ужаса и омерзения.
– Ишь мерзавцы! То то нехристи! Да мертвый, мертвый и есть… Вымазали чем то.
Пьер тоже подвинулся к церкви, у которой было то, что вызывало восклицания, и смутно увидал что то, прислоненное к ограде церкви. Из слов товарищей, видевших лучше его, он узнал, что это что то был труп человека, поставленный стоймя у ограды и вымазанный в лице сажей…
– Marchez, sacre nom… Filez… trente mille diables… [Иди! иди! Черти! Дьяволы!] – послышались ругательства конвойных, и французские солдаты с новым озлоблением разогнали тесаками толпу пленных, смотревшую на мертвого человека.


По переулкам Хамовников пленные шли одни с своим конвоем и повозками и фурами, принадлежавшими конвойным и ехавшими сзади; но, выйдя к провиантским магазинам, они попали в середину огромного, тесно двигавшегося артиллерийского обоза, перемешанного с частными повозками.
У самого моста все остановились, дожидаясь того, чтобы продвинулись ехавшие впереди. С моста пленным открылись сзади и впереди бесконечные ряды других двигавшихся обозов. Направо, там, где загибалась Калужская дорога мимо Нескучного, пропадая вдали, тянулись бесконечные ряды войск и обозов. Это были вышедшие прежде всех войска корпуса Богарне; назади, по набережной и через Каменный мост, тянулись войска и обозы Нея.
Войска Даву, к которым принадлежали пленные, шли через Крымский брод и уже отчасти вступали в Калужскую улицу. Но обозы так растянулись, что последние обозы Богарне еще не вышли из Москвы в Калужскую улицу, а голова войск Нея уже выходила из Большой Ордынки.
Пройдя Крымский брод, пленные двигались по нескольку шагов и останавливались, и опять двигались, и со всех сторон экипажи и люди все больше и больше стеснялись. Пройдя более часа те несколько сот шагов, которые отделяют мост от Калужской улицы, и дойдя до площади, где сходятся Замоскворецкие улицы с Калужскою, пленные, сжатые в кучу, остановились и несколько часов простояли на этом перекрестке. Со всех сторон слышался неумолкаемый, как шум моря, грохот колес, и топот ног, и неумолкаемые сердитые крики и ругательства. Пьер стоял прижатый к стене обгорелого дома, слушая этот звук, сливавшийся в его воображении с звуками барабана.
Несколько пленных офицеров, чтобы лучше видеть, влезли на стену обгорелого дома, подле которого стоял Пьер.
– Народу то! Эка народу!.. И на пушках то навалили! Смотри: меха… – говорили они. – Вишь, стервецы, награбили… Вон у того то сзади, на телеге… Ведь это – с иконы, ей богу!.. Это немцы, должно быть. И наш мужик, ей богу!.. Ах, подлецы!.. Вишь, навьючился то, насилу идет! Вот те на, дрожки – и те захватили!.. Вишь, уселся на сундуках то. Батюшки!.. Подрались!..