Можно ли выполнять привычные приложения на мобильных устройствах? В современных условиях появились основания утверждать: «Не только можно, но и нужно». Более того, перенос приложений на мобильные устройства становится необходимостью, потому что многие компании стремятся изменить организацию труда своих сотрудников, отвязать их от стоящих на столах компьютеров, сделать самих работников более мобильными.
Разумеется, в первую очередь потребуется переводить на мобильные устройства приложения, работающие на платформе Intel x86, которые за двадцать пять лет своего существования перешли в разряд legacy, как в свое время приложения для мэйнфреймов. Сейчас уже говорят о старте новой гонки — от ПК к мобильным устройствам. Технологии, задействованные в этой гонке, следует отнести к разряду экстремальных.
Стоит напомнить, еще несколько лет назад термин «встроенные системы» (embedded systems) был в полной мере инженерно-техническим и почти однозначно ассоциировался с технологическим производственным оборудованием, со сложными объектами автоматизации, с автомобилями или самолетами. А сейчас встроенные системы становятся одним из важнейших компонентов потребительского рынка. Все изменилось и даже при большом желании невозможно с достаточной полнотой перечислить хотя бы все возможные сферы применения процессоров, мир явно вступает в эру «пост-ПК». Новый компьютерный мир отличается даже количественно: рынок устройств, снабженных вычислительными компонентами, измеряется уже не миллионами, а миллиардами.
Однако происходит и качественный переход. Грядущий рынок мобильных устройств станет совсем иным, совсем непохожим на нынешний. Встроенные системы принципиальным образом отличаются от персональных компьютеров меньшим единообразием, их типология шире, они гораздо разнообразнее и заметно различаются по функциональности. Согласитесь, ПК, как бы не ухитрялись разработчики, скажем, мобильных компьютеров, останется самим собой. Как следствие, возможность для монополизации рынка отдельными технологиями оказывается гораздо меньше. Уже сейчас не вызывает сомнения, что в будущем эффект доминирования одной платформы станет невозможным: повторение двадцатилетнего господства Wintel маловероятно. И, наконец, границы между различными сегментами рынка будут размыты, уйдут в прошлое такие непреодолимые барьеры, как, скажем, между Wintel и SPARC/Solaris.
В мире массовых встроенных систем технологическая кастовость, которую мы иногда и не замечаем, станет попросту невозможной. В нем принципиально новое звучание приобретут слова «совместимость», «преемственность» и т.п. Но вполне естественен вопрос: как обеспечить требуемую однородность технологического пространства, если оно по сути своей дискретно, а перед разработчиком предстает набор альтернативных процессоров (MIPS, PowerPC, ARM, x86, SPARC, SH, PA-RISC…), и операционных систем (VxWorks, pSOS, QNX, LynxOS, Linux, WinCE, EPOC, PalmOS, PowerTV, Itron…).
Идеально эта проблема решается техническими средствами, обеспечивающими плавную миграцию программного обеспечения с одной платформы на другую. Наиболее яркий пример такого решения — язык и виртуальная машина Java (JVM). Работая во встроенных системах, виртуальная машина, во-первых, интерпретирует байт-код, созданный статическим компилятором, во-вторых, «отвязывает» приложение от ОС, резервируя память и управляя вводом/выводом, и, наконец, в-третьих, обеспечивает интерфейс с встроенными ОС наподобие VxWorks, Linux, QNX, LynxOS и т.д. Таким образом, полностью решается проблема переноса, но есть одно существенное ограничение: чтобы приложение было скомпилировано в байт-код, оно должно быть написано на Java. Но несмотря на рост популярности Java, по-прежнему остается масса приложений на других языках, в основном на C/C++.
Для работы с ними помимо тривиального механизма перекомпиляции исходных текстов, написанных на языках высокого уровня, используются методы прозрачной трансляции, применяемые для переноса программного обеспечения с одной компьютерной платформы на другую без использования исходных текстов. Об их реализации при миграции с PA-RISC на IA-64 можно прочитать в [1] и [2]. Аналогичная система, обеспечивающая мобильность программного кода, предназначенного для встроенных систем, предложена англо-американской компанией Transitive Technologies. Разработанная в ней система динамической трансляции Dynamite в своей первой версии, названной Dynamite X/M, позволяет выполнять приложения, унаследованные от платформ x86, на процессорах MIPS с системой команд MIPS32 и MIPS64.
Трансляция и перекомпиляция
Итак, известно несколько подходов к решению проблемы переноса приложений с платформы на платформу, в том числе, три основных: перекомпиляция, статическая трансляция и динамическая трансляция (пока чаще всего используется перекомпиляция). Трансляция кода в код, независимо от того, статическая она или динамическая, принципиально отличается от перекомпиляции тем, что не требует для преобразования наличия исходных текстов приложений, написанных на языках высокого уровня, и тем самым исключает самые очевидные сложности:
- исходные коды могут принадлежать разным производителям, а это может породить необходимость в получении дополнительных лицензий;
- часть приложений может быть написана на ассемблере или на языках, уже не поддерживаемых;
- исходный текст может быть недоступен.
Но даже если эти препятствия удается успешно преодолеть, возможны и другие сложности, связанные с перекомпиляцией. Допустим, приложение написано и на платформно-независимом языке С, но не всегда имеются в наличии необходимые компиляторы для новых архитектур процессоров, а доступные могут обладать специфическими особенностями, связанными с определенной архитектурой, затрудняющими перенос приложения на новую платформу и приводящими к неоптимальности выходных кодов.
Нельзя забывать и о стоимости. Перекомпиляция приводит к значительным материальным издержкам, чтобы ее осуществить, необходимо приобрести специализированные программные средства, предназначенные для нового оборудования, и использовать труд квалифицированных специалистов, способных выполнить все процедуры от постановки задачи до отладки.
Трансляция — машинный перевод входного кода в выходной — снимает все перечисленные проблемы, достаточно установить интерфейс между системной средой и средствами трансляции. Еще одно преимущество систем трансляции заключается в том, что к переведенному приложению могут добавляться порции, сделанные специально для новой среды; такие компоненты могут сосуществовать как единое целое.
Динамическая и статическая трансляции
Идея статической трансляции тоже прозрачна и не нуждается в особых комментариях — традиционно считалось, что она обеспечивает лучшие показатели по времени и стабильности перевода, чем динамическая. Однако современные динамические трансляторы позволяют делать то, что недостижимо в статике. К непреодолимым недостаткам статического подхода следует отнести невозможность полностью идентифицировать все свойства входного кода, например, переход по вычисляемому адресу, который становится известен только в процессе выполнения (run-time). Следовательно, возникает необходимость в следующем после собственно перевода шаге — этапе оптимизации.
Важным достоинством динамического транслятора является то, что он инкорпорируется в приложение, становясь его частью и занимая при этом относительно немного места. Он имеет управляющий цикл, ответственный за идентификацию блока и переводит этот блок перед его исполнением, в отличие от интерпретации поддерживая кэш, чтобы однажды переведенный блок вторично не переводился. Кроме того, выполняются наиболее часто используемые фрагменты программы — в полном соответствии с известным правилом «20:80», которое можно трактовать и так: «80% времени отнимает выполнение 20% приложений».
Dynamite X/M
Хотя Transitive Technologies и начинающая компания, ее научный базис сложился из фундаментальных исследований в области «оптимизации кодов в процессе исполнения» (run-time code optimization), которые в течение многих лет велись в Манчестерском университете (Великобритания). Это обстоятельство позволяет предполагать наличие предлагаемых ею технологий серьезных академических корней и, следовательно, большого потенциала. В том, что это действительно так, убеждает опубликованная производственная программа Transitive, ставящая своей целью обеспечить бинарную прозрачность (Binary Transparency) приложений, т.е. возможности безболезненного переноса и выполнении приложения для широкого спектра процессоров.
«Мотором» этой программы служит технология программного морфинга Transitive Dynamite CPU. Ее ядро, платформа Dynamite построена по модульному принципу, благодаря которому имеется возможность формировать различные сочетания входного и выходного кодов, т.е. обеспечивать бинарную прозрачность между практически любыми системами команд (Instruction Set Architecture — ISA).
В качестве первого шага в октябре Transitive Technologies выпустила транслятор Dynamite X/M (X/M означает x86 to MIPS), открывающий серию продуктов, построенных по технологии программного морфинга и работающий пока только под управлением Linux.
В 2002 году Transitive предполагает представить целый спектр продуктов для других пар ISA. Кроме того, модульная архитектура исключает зависимость от определенного типа ОС; поэтому в следующем году появятся версии Dynamite X/M, работающие не только в Linux, но и на платформах Windows CE и VxWorks.
Литература
[1] К. Зенг и Кэрол Томпсон. «Из PA-RISC в IA-64, прозрачное выполнение, никакой перекомпиляции, «Открытые системы» 2000, № 4
[2] Майкл Жвинд и др. «Динамическая и прозрачная двоичная трансляция», «Открытые системы» 2000, № 4
MIPS: история и современность
Корни процессорной архитектуры MIPS, как и многих других новаций, следует искать в Стэнфордском университете (шт. Калифорния). Именно здесь еще в начале 80-х под руководством нынешнего главы этого университета Джона Хеннесси начались поисковые работы по созданию процессоров на, как тогда говорили, «сверхбольших интегральных схемах» (VLSI). В итоге довольно быстро был создан первый процессор, имевший 32 регистра по 32 разряда и менее сотни команд. Так родился первый RISC процессор, ставший крестным отцом для известных архитектур Alpha, SPARC, PowerPC и других. Параллельно аналогичные проекты, связанные с RISC-процессорами, велись в корпорации IBM (проект IBM 801) и университете Беркли (Berkeley RISC 1 и 2).
MIPS, первое семейство RISC-процессоров, оказалось на редкость долгоживущим, не в пример своим наследникам. Уже решено, что уйдут со сцены и HP-PA, и Alpha, тот самый Alpha, который был создан, чтобы объединить архитектуры VAXU Decstation, которая базировалась на процессорах MIPS, — две альтернативные ветви в продукции корпорации Digital Equipment. Особенность MIPS (возможно, в этом и состоит секрет долгожительства) заключается в том, что физически процессоры с этим именем не существуют: компания только ведет разработку архитектуры и лицензирует ее результаты крупным производителям. Для того чтобы реализовать эту бизнес-модель, в 1984 году была создана компания MIPS Computer Systems, купленная в 1992 году Silicon Graphics и выпущенная ею на свободу под именем MIPS Technologies в 1998 году. Модель оказалась очень успешной. Еще в 1996 году архитектура MIPS стала самой популярной среди RISC-архитектур, а по лицензии было произведено почти 20 млн. процессоров. Годом позже архитектура MIPS обошла самый тиражируемый до того процессор Motorola 68000. Сегодня среди лицензиатов такие гиганты как NEC, Toshiba, Philips Semiconductors, Sony Computer, LSI Logic и множество компаний меньшего масштаба. Всего на основе архитектуры MIPS разными компаниями создано свыше 100 процессоров, начиная от миниатюрных процессорных ядер для смарт-карт и заканчивая полноценными процессорами, работающими на тактовых частотах до 1 ГГц. В денежном выражении объем продукции, выпущенной на основе MIPS, превышает 1 млрд. долл.
MIPS находила себя прежде всего в «некомпьютерной сфере». Сегодня процессоры этой архитектуры можно встретить в огромном числе изделий бытовой электроники самого разнообразного назначения. Одно из основных преимуществ, благодаря которым архитектуре MIPS удалось этого добиться, — малое энергопотребление. Так, в выпущенном в этом году компанией NEC 64-разрядном процессоре уровень потребления энергии составляет 1545 MIPS/ватт (в данном случае сокращение MIPS обозначает миллионы инструкций в секунду).
Если говорить о вычислительных задачах, то хорошо известно использование процессоров MIPS в компьютерах Silicon Graphics и Tandem. Сегодня выпускаемые NEC 64-разрядные процессоры VR4121 (8-килобайтный кэш данных и 16-килобайтный кэш команд) чаще используются в портативных компьютерах Casio Cassiopeia E-115 и Palmax PD-131, а процессоры VR4122 (16 Кбайт кэш данных и 32 Кбайт кэш команд) в более мощных моделях Cassiopeia. Тактовая частота этих процессоров составляет от 70 до 150 МГц.
На базе архитектуры MIPS целый ряд компаний создает свои готовые «системы на кристалле» (system-on-a-chip — SOC), в том числе, и те, которые иногда называют Internet Edge Device и предназначают для создания мобильных беспроводных устройств и PDA. Например, процессор Au1000 от компании Alchemy Semiconductor, потребляя 0,5 Вт, может работать под управлением операционных систем Windows CE, Linux или VxWorks. Две новые версии MIPS-процессоров 5K/5KF Family и 20 Kc Core позволяют строить еще более мощные устройства.
Конкуренцию MIPS на этом фронте составляют процессоры двух семейств. Первые — SuperH3 (SH3), которые используются в карманных компьютерах HP Jornada (32 разряда, унифицированный кэш 16 Кбайт, тактовая частота 133 МГц). Вторые — ARM, спроектированные одноименной компанией и лицензируемые для производства другими компаниями, например, Intel StrongARM SA-1110 (8-килобайтный кэш данных и 16-килобайтный кэш команд, тактовая частота 206 МГц), которые используются, в частности, в Compaq iPaq H3100 и H3600.