RTC: различия между версиями

Материал из Базы знаний сообщества разработчиков Эльбрус
Перейти к навигации Перейти к поиску
(Корректура и мелкие дополнения)
(→‎Гостевое окружение: Примеры сочетаний e2k+x86)
Строка 104: Строка 104:
  
 
Поскольку транслятор приложений занимается не только транслированием машинного кода из системы команд x86 в систему команд e2k, но также транслированием системных вызовов (<code>syscall</code>), а точнее параметров этих вызовов, из формата x86 Linux в формат e2k Linux, то необходимым условием успешной работы транслятора является совместимость системных вызовов гостевой системы, на которую рассчитана запускаемая x86-программа, и хозяйской системы, в которой работает транслятор. Это требование, впрочем, не является специфическим для двоичной трансляции, и справедливо также при запуске x86-программы на x86-компьютере под управлением другой Linux-системы, нежели изначально использовалась для компиляции программы.
 
Поскольку транслятор приложений занимается не только транслированием машинного кода из системы команд x86 в систему команд e2k, но также транслированием системных вызовов (<code>syscall</code>), а точнее параметров этих вызовов, из формата x86 Linux в формат e2k Linux, то необходимым условием успешной работы транслятора является совместимость системных вызовов гостевой системы, на которую рассчитана запускаемая x86-программа, и хозяйской системы, в которой работает транслятор. Это требование, впрочем, не является специфическим для двоичной трансляции, и справедливо также при запуске x86-программы на x86-компьютере под управлением другой Linux-системы, нежели изначально использовалась для компиляции программы.
 +
 +
{| class="wikitable"
 +
|+ Примеры хорошо совместимых комбинаций
 +
|-
 +
! scope="col" | Хозяйская система
 +
! scope="col" | Гостевое окружение
 +
|-
 +
| Альт 10.4 Рабочая станция для архитектуры Эльбрус v5
 +
| Альт 10.4 Рабочая станция для архитектуры x86-64
 +
|-
 +
| AstraLinux Special Edition Ленинград 8.1.5
 +
| AstraLinux Special Edition Смоленск 1.8.2
 +
|-
 +
| Эльбрус Линукс 9.2.6 для процессора Эльбрус-8СВ
 +
| Эльбрус Линукс 9.2.6 для архитектуры x86-64
 +
|}
 +
 +
Это не значит, что невозможно использовать другие комбинации — например, Эльбрус Линукс для процессора Эльбрус в качестве хозяйской системы + Debian GNU/Linux для архитектуры x86-64 в качестве гостевого окружения. Просто шансы на хорошую совместимость тем выше, чем сильнее хозяйская система и гостевое окружение похожи друг на друга — используют максимально похожую конфигурацию ядра Linux, одну и ту же систему управления службами, один и тот же набор работающих служб, одну и ту же графическую среду и параметры работы с графическими эффектами; этому способствует и максимальная близость номеров версий ОС, тогда как родственные ОС разных мажорных версий могут быть хуже совместимы друг с другом.

Версия 09:01, 24 сентября 2025

Двоичный транслятор уровня приложений или просто транслятор приложений, он же двоичный компилятор (bincomp — binary compiler), он же компилятор в реальном времени (RTC — real-time compiler), он же рекомпилятор — программное обеспечение для платформы Эльбрус, позволяющее запускать прикладные программы для Linux в машинных кодах x86 или x86-64 под управлением нативной операционной системы семейства Linux. При запуске таким образом программы Wine — эмулятора Windows API для Linux (x86 / x86-64) — можно запускать программы для Windows из-под нативной ОС Linux.

Двоичная трансляция проходит в режиме реального времени, «на лету», с адаптивной многопроходной оптимизацией, что в сочетании с аппаратными средствами поддержки трансляции, заложенными в архитектуру Эльбрус и обеспечивающими низкие накладные расходы, даёт высокую скорость работы гостевых приложений. При этом системные вызовы ядра Linux обрабатываются ядром хозяйской (нативной) системы, что также снижает накладные расходы по сравнению с запуском целой системы x86 Linux через транслятор уровня системы (Lintel).

Подробнее на сайте МЦСТ: RTC


Системные требования

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

Начиная с версии 5.0, транслятор полагается на особые механизмы ядра Linux для архитектуры Эльбрус, специально добавленные в ядро для расширения функциональных возможностей транслятора и для возможности запуска x86-программ, использующих функции отладки и трассировки работы программного кода. Эти механизмы впервые появились в ядре Linux 5.10. Если в хозяйской ОС используется более старая версия ядра, то применять RTC версии 5.0 или более новой не получится.


Установка

Во всех операционных системах рекомендуется использовать штатную версию пакета rtc. При отсутствии такого пакета в штатной поставке ОС, или при необходимости установить более свежую версию, ещё не доступную штатно для имеющегося дистрибутива ОС, можно воспользоваться универсальным пакетом, предоставляемым на сайте МЦСТ, однако в таком случае следует иметь в виду, что уровень совместимости и степень интеграции с конкретной ОС могут быть не такими высокими, как у штатного пакета в составе ОС.


Штатный пакет

В операционных системах на базе пакетного менеджера apt (Альт, Астра, Эльбрус, Эльбрус-Д) установка и удаление пакета производятся следующим образом:

apt-get install rtc
apt-get remove rtc

В операционных системах на базе пакетного менеджера dnf (Ред ОС, РОСА) установка и удаление пакета производятся аналогично:

dnf install rtc
dnf remove rtc

В зависимости от конкретной ОС и версии пакета RTC, имя пакета может быть другим — например, rtc5, rtc6 и т. д.


Универсальный пакет

Пакет находится по ссылке в описании RTC на сайте МЦСТ — во вкладке «Поддержка»: https://storage.mcst.ru/index.php/s/ekZcC2IxjkNEOoB — перейдя по ссылке и войдя в директорию с нужной версией транслятора, например «RTC_5.1», следует скачать deb-файл с пометкой «anyos» в имени, например rtc5_5.1-anyos0u9_all.deb.

В операционных системах на базе пакетов deb и пакетного менеджера apt (Астра, Эльбрус, Эльбрус-Д) установка производятся как обычно, но не по имени пакета, а с указанием пути к deb-файлу, в том числе даже если он находится в текущей директории; а вот удаление — как обычно, по имени пакета:

apt-get install ./rtc5_5.1-anyos0u9_all.deb
apt-get remove rtc5

В операционных системах на базе пакетов rpm (Альт, Ред ОС, РОСА) необходимо сначала установить низкоуровневый пакетный менеджер dpkg и инициализировать его пакетную базу, после чего работать с deb-пакетами через него:

#  Ред ОС, РОСА  || Альт
dnf install dpkg || apt-get install dpkg
touch /var/lib/dpkg/status

dpkg --install ./rtc5_5.1-anyos0u9_all.deb
dpkg --remove rtc5

В последнем случае следует иметь в виду на будущее, что пакетные базы штатного менеджера rpm (apt, dnf) и нештатного менеджера dpkg в таких системах не пересекаются, и необходимо самостоятельно следить за предотвращением конфликтов между пакетами: например, если уже установлен штатный пакет версии 5.0, а вы хотите установить универсальный пакет версии 5.1; или если вы установили универсальный пакет версии 5.1 вместо штатного пакета версии 4.4 или в дополнение к нему, а в будущем разработчик ОС выпустит обновление штатного пакета версии 5.0, 5.1 или 6.0, и она будет автоматически выбрана для установки.

Универсальный пакет помечен как архитектурно-независимый («all»), потому что содержит в себе исполняемые файлы для всех моделей процессоров Эльбрус. Выбор исполняемых файлов по умолчанию производится при настройке пакета в момент его установки, и может быть повторён при переносе установленного пакета (накопителя с установленной ОС) на компьютер с другой моделью процессора:

dpkg --reconfigure rtc5

Также реконфигурацию пакета необходимо проводить при переносе на другую ОС с другой системой управления службами (systemd или sysvinit).


Фирменные пакеты МЦСТ

Рядом с универсальным пакетом выложены для скачивания deb-пакеты из состава Эльбрус Линукс. Их отличие от универсального пакета в том, что они:

  • содержат исполняемые файлы только для одной модели процессора Эльбрус;
  • поддерживают только систему управления службами sysvinit (в systemd-системах возможна ограниченная поддержка в режиме обратной совместимости);
  • поддерживают только систему управления альтернативами update-alternatives (не совместимо с ОС Альт, где своя система alternatives-update);

Они предназначены в первую очередь для предоставления новых версий RTC для старых выпусков ОС Эльбрус Линукс, а также для обновления RTC в текущем выпуске ОС Эльбрус Линукс без подключения к онлайн-репозиторию обновлений. Использование этих пакетов в других ОС не рекомендуется.


Документация

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

  • /opt/mcst/rtc/doc
  • /opt/mcst/rtc5.0/doc
  • /opt/mcst/rtc5/doc
  • /usr/share/rtc5/doc


Гостевое окружение

Транслятор приложений позволяет запускать два вида программ:

  1. скомпонованных статически — не зависящих от внешних библиотечных модулей;
  2. скомпонованных динамически — подгружающих внешние библиотечные модули (.so) на этапе запуска или во время работы.

Программы запускаются транслятором в гостевом окружении — изолированном от хозяйской системы пространстве имён и со своим деревом файловой системы (как при использовании chroot, только ещё с трансляцией машинных кодов). Динамически скомпонованные программы требуют наличия всех нужных им для работы библиотек, поэтому их запуск обычно осуществляется внутри файловой системы ОС, взятой с x86-компьютера, — для лучшей совместимости рекомендуется использовать ОС одной и той же разновидности и версии, например «Альт 10.4 Рабочая станция для архитектуры Эльбрус» в качестве хозяйской системы и «Альт 10.4 Рабочая станция для архитектуры x86-64» в качестве гостевого окружения. Статически скомпонованные программы могут работать напрямую из файловой системы нативной ОС; дополнять их полноценным x86-окружением можно, например, при необходимости запуска внешних программ.

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

Примеры хорошо совместимых комбинаций
Хозяйская система Гостевое окружение
Альт 10.4 Рабочая станция для архитектуры Эльбрус v5 Альт 10.4 Рабочая станция для архитектуры x86-64
AstraLinux Special Edition Ленинград 8.1.5 AstraLinux Special Edition Смоленск 1.8.2
Эльбрус Линукс 9.2.6 для процессора Эльбрус-8СВ Эльбрус Линукс 9.2.6 для архитектуры x86-64

Это не значит, что невозможно использовать другие комбинации — например, Эльбрус Линукс для процессора Эльбрус в качестве хозяйской системы + Debian GNU/Linux для архитектуры x86-64 в качестве гостевого окружения. Просто шансы на хорошую совместимость тем выше, чем сильнее хозяйская система и гостевое окружение похожи друг на друга — используют максимально похожую конфигурацию ядра Linux, одну и ту же систему управления службами, один и тот же набор работающих служб, одну и ту же графическую среду и параметры работы с графическими эффектами; этому способствует и максимальная близость номеров версий ОС, тогда как родственные ОС разных мажорных версий могут быть хуже совместимы друг с другом.