Interested Article - XIP

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

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

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

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

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

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

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

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

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

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

Компиляция

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

Эффекты

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

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

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

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

DAX

В 2014 году на базе кода XIP в ядре Linux (с версии 3.14) реализована более общая технология — DAX ( англ. direct access ), объединяющая как возможности XIP, так и обеспечивающая необходимые вызовы для прямого доступа к данным, минуя . Из файловых систем впервые технология реализована для Ext4 , впоследствии появилась поддержка для XFS .

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

Примечания

  1. Mark Brownstein. (англ.) // InfoWorld . — 1990. — Vol. 12 , no. 36 .
  2. Winn Rosh. (англ.) // PC Mag . — 1993. — Vol. 12 , no. 2 . — P. 321—326 . «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. .
  4. Jonathan Corbet. . LWN.net (2 сентября 2014). Дата обращения: 26 мая 2018. Архивировано из 21 декабря 2018 года.
  5. .
  6. .
  7. (англ.) . SC34-2594-01 . IBM (1 марта 2010). Дата обращения: 26 мая 2018. 20 января 2022 года.
  8. . Linux documentation. Filesystems (13 ноября 2008). Дата обращения: 26 мая 2018. 15 апреля 2022 года.
  9. Jake Edge. (англ.) . LWN.net (26 марта 2014). Дата обращения: 26 мая 2018. 27 мая 2018 года.
  10. Richard Stallman . Using the GNU Compiler Collection. For GCC version 4.1.2. — Boston: GNU Press, 2005. — С. 153. — 470 с.
  11. .
  12. Jian Xu, Steven Swanson. (англ.) // Proceedigns of 14th USENIX Conference on File and Storage Technologies (FAST ’16). — Santa Clara, CA : USENIX , 2016. — P. 323—328 . — ISBN 978-1-931971-28-7 .

Литература

  • Tony Benavides, Justin Treon, Jared Hulbert, Weide Chang. The Enabling of an Execute-In-Place Architecture to Reduce the Embedded System Memory Footprint and Boot Time (англ.) // Journal of Computers. — 2008. — Vol. 3 , no. 1 . — P. 79—89 .
  • Jared Hulbert. (англ.) // Proceedings of the Linux Symposium. — 2008. — Vol. 1 . — P. 211—218 .
  • Masao Uebayashi. // Proceedings of BSD Canada (BSDCan’2010). — 2010.

Ссылки

  • Jonathan Corbet. (англ.) . LWN.net (11 мая 2005).
Источник —

Same as XIP