Русская Википедия:XIP

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

XIP (Шаблон:Lang-enвыполнение на месте) — технология, обеспечивающая возможность исполнения программного кода непосредственно с постоянного запоминающего устройства, на котором он находится, без предварительной загрузки в оперативную память. Широко применяется для первоначальной загрузки компьютеров, во встраиваемых системах в связи необходимостью экономить ресурсы оперативной памяти, в ряде случаев используется и для крупных системШаблон:Переход. С 2010-х годов для применения в серверных Linux-системах с байтоадресуемой энергонезависимой памятью заменяется на более общую технологию — DAXШаблон:Переход.

Для функционирования технологии её поддержка должна быть реализована на трёх уровнях: храненияШаблон:Переход, в операционной системеШаблон:Переход, и самих исполняемых программахШаблон:Переход.

Устройства хранения

Впервые в явном виде поддержка технологии на стороне устройств хранения, а также её аббревиатура и расшифровка, описаны в спецификации PCMCIA 1990 года, и в большей степени нацелена на применение с неперезаписываемыми устройствами[1]. Изначально технология ассоциировалась только с PCMCIA и её особой спецификацией, в которой определялись правила размещения бинарного кода и порядок его чтения и выполнения[2], но по мере реализации подобной техники для других интерфейсов и накопителей, укрепилось для всех устройств хранения.

Для работы режима XIP на накопителе, на котором расположена программа, должен быть реализован интерфейс, сходный с тем, по которому центральный процессор обращается к оперативной памяти. Для этого поддержка реализуется либо на уровне промежуточного программного обеспечения, либо средствами файловой системы. Среди промежуточных средств, обеспечивающих работу в режиме XIP — подсистема Шаблон:Нп2, соответственно, файловые системы, работающие над MTD мимо блочного уровня, должны поддерживать соответствующие вызовы для работы XIP. При этом не все работающие через MTD файловые системы поддерживают XIP, поскольку многие из них, изначально ориентированные на портативную технику, реализовывали сжатие, в связи с этим реализация XIP в них нетривиальна, к числу таких файловых систем относятся JFFS2, YAFFS2, LogFS, UBIFSШаблон:Sfn. Тем не менее, существуют работающие над MTD сжимающие файловые системы с поддержкой XIP, такова, например, Шаблон:Iw, функционирование режима XIP в которой подчёркивается как определяющая особенность (Шаблон:Lang-en)Шаблон:Sfn. Основные сжимающие файловые системы блочного уровня для постоянных запоминающих устройств — cramfs и squashfs — не поддерживают XIP, но для cramfs существует патч, обеспечивающий поддержку XIP без сжатия, и большинство мобильных телефонов с системой на базе Linux использовали этот вариант cramfsШаблон:Sfn.

Среди файловых систем общего назначения, работающих поверх блочного уровня, поддержка реализована в Ext2 и Ext3; в Ext4 был начат перенос поддержки XIP, но в 2014 году она заменена более общими методами прямого доступа — DAXШаблон:Переход[3].

Операционные системы

Несмотря на то, что технология применялась во встраиваемых системах, в микропрограммном обеспечении и ряде операционных систем реального времени задолго до 2000-х годовШаблон:Sfn, на стороне операционных систем общего назначения поддержка впервые реализована в ядре Linux версии 2.6 в 2005 годуШаблон:Sfn.

В 2006 году технология поддержана для мейнфреймов IBM zSeries, где имелась необходимость запускать множество различных экземпляров Шаблон:Iw из среды z/VM с общим ядром и общими разделяемыми библиотеками, но с различными областями данных[4]. Если подобная возможность для z/OS существовала и ранее, то непосредственная реализация её для Linux потребовала бы существенных изменений в коде ядра операционной системы, поэтому в ветку ядра для архитектуры s390 перенесена поддержка XIP, а также поддержан ряд дополнительных возможностей, в том числе, поддержка на стороне Ext2[5]. Более того, считается, что именно потребность IBM в поддержке технологии для мейнфреймов и была движущей силой реализации XIP в Linux[6].

В 2010 году технология поддержана в NetBSDШаблон:Sfn, где реализация оказалась относительно простой за счёт особенностей подсистемы управления виртуальной памяти и буферного кэша, притом прозрачной для файловых систем (то есть, не требующей специальной поддержки с их стороны).

Компиляция

Для того, чтобы программа могла работать в режиме XIP требуется на этапе компиляции сообщить о возможности разделения областей для Шаблон:Iw и Шаблон:Iw (поскольку сегмент данных должен быть создан в оперативной памяти, а сегмент кода остаться в файловой системе). В GCC для этого используются опция -msep-data, и, кроме того, для XIP-программ обычно требуется опция -mid-shared-library, предписывающая сгенерировать код, допускающий вызов библиотек по идентификатору[7]. Установка любой из этих опций влечёт поднятие флага -fPIC — позиционно-независимой компиляции.

Эффекты

Основное предназначение технологии — экономия оперативной памяти устройства. Наиболее значительный эффект экономии оперативной памяти достигается при необходимости запуска нескольких экземпляров программы, в этом случае одно и то же пространство на постоянном запоминающем устройстве используется для обслуживания всех запусков, вместо того, чтобы выделять для каждого экземпляра область в оперативной памяти. Ещё одним эффектом оказывается снижение энергопотребления устройства за счёт уменьшения числа обращений к энергозависимой оперативной памятиШаблон:Sfn.

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

При использовании флеш-накопителей наибольший эффект от XIP достигается с устройствами с байтовой адресацией, таких как NOR-флешШаблон:Sfn (тогда как NAND-флеш, как и жёсткие диски, адресуются блочно, и доступ к отдельной инструкции означает чтение как правило 4 Кбайт, как минимум — 512 байтов). Этим же объясняется применение NOR-флеша для загрузочных постоянных запоминающих устройств и во встраиваемых системах, несмотря на его более высокую стоимость и более низкую плотность записи (в условиях 2010-х годов).

Ещё один эффект — возможность использования устройств постоянного хранения в качестве разделяемой памяти для выполняемых программ без задействования ресурсов основной памяти узла и разделением сегментов программы и данных, как реализовано в мейнфреймахШаблон:Переход.

DAX

Шаблон:Falseredirect В 2014 году на базе кода XIP в ядре Linux (с версии 3.14) реализована более общая технология — DAX (Шаблон:Lang-en), объединяющая как возможности XIP, так и обеспечивающая необходимые вызовы для прямого доступа к данным, минуя Шаблон:Iw[6]. Из файловых систем впервые технология реализована для Ext4, впоследствии появилась поддержка для XFS.

Основным мотивом для такого обобщения стало появление в середине 2010-х годов ёмких байтоадресуемых энергонезависимых устройств Шаблон:Iw и 3D XPoint для серверных систем, в связи с чем проявилась актуальность как запуска программного кода без переноса в основную память, так и прямого доступа к данным без промежуточного копирования в оперативную память. В файловых системах, ориентированных на такого рода устройства, таких как Шаблон:Iw, PMFS, SCMFS, Aerie[8], поддержка DAX реализуется изначально и эта возможность считается одной из ключевых их особенностей.

Примечания

Шаблон:Примечания

Литература

Ссылки

  1. Шаблон:Статья
  2. Шаблон:Статья «XIP is PCMCIA’s own specification, that allows program code in read-only memory to execute without being first loaded into main system … XIP standard defines how programs encoded on ROM cars are to read and execueted»
  3. Шаблон:Cite web
  4. Шаблон:Cite web
  5. Шаблон:Cite web
  6. 6,0 6,1 Шаблон:Cite web
  7. Шаблон:Книга
  8. Шаблон:Статья