В информатике, выполнить на месте (XIP ) - это метод выполнения программ непосредственно из долговременного хранилища, а не их копирование в RAM. Это расширение использования разделяемой памяти для уменьшения общего объема необходимой памяти.
Его общий эффект заключается в том, что текст программы не потребляет доступную для записи память, сохраняя его для динамических данных, и что все экземпляры программы запускаются из одной копии.
Для того, чтобы это работало, должно быть выполнено несколько критериев:
Требования к хранилищу обычно удовлетворяются с помощью флэш-памяти ИЛИ-ИЛИ или EEPROM, которые можно адресовать как отдельные слова для операций чтения, хотя это немного медленнее, чем обычная системная ОЗУ в большинстве настроек.
Как правило, загрузчик первой ступени представляет собой программу XIP, которая связана для запуска по адресу, по которому микросхемы флэш-памяти отображаются при включении питания, и содержит минимальную программу для настройки системной ОЗУ (которая зависит от компонентов используется на отдельных платах и не может быть достаточно обобщенным, чтобы правильная последовательность могла быть встроена в аппаратное обеспечение процессора), а затем загружает загрузчик второго этапа или ядро ОС в ОЗУ.
Во время этой инициализации перезаписываемая память может быть недоступна, поэтому все вычисления должны выполняться в регистрах процессора. По этой причине загрузчики первого этапа обычно пишутся на языке ассемблера и делают только минимум, чтобы обеспечить нормальную среду выполнения для следующей программы. Некоторые процессоры либо встраивают небольшой объем SRAM в сам чип, либо позволяют использовать встроенную кэш-память в качестве ОЗУ, чтобы упростить запись загрузчика первого этапа с использованием языка высокого уровня.
Для ядра или загрузчика адресное пространство обычно назначается изнутри, поэтому для использования XIP для них достаточно указать компоновщику разместить неизменяемые и изменяемые данные по другому адресу. диапазонов и предоставить механизм для копирования изменяемых данных в записываемую память перед запуском любого кода, который предполагает, что к данным можно получить доступ в обычном режиме. Это можно сделать как часть предыдущего этапа или в небольшом сегменте кода в начале программы.
Если адресное пространство назначается извне, например, в прикладной программе, которая выполняется в системе, которая не предоставляет виртуальную память, компилятору необходимо получить доступ ко всем изменяемым данным, добавив смещение на указатель на личную копию области данных. В этом случае внешний загрузчик отвечает за настройку конкретных областей памяти экземпляра.
BIOS и UEFI используют XIP для инициализации основной памяти.
XIP предъявляет требования к файловым системам, которые часто трудно удовлетворить.. В системах без таблицы страниц весь файл должен храниться в последовательных байтах и не должен быть фрагментирован, в то время как файловые системы на основе флеш-памяти часто стремятся распределить данные по секторам флеш-чипа, которые имеют наименьшее количество циклов стирания. и выравнивают износ чипа, продлевая его срок службы.
Все эти сложности и компромисс скорости означают, что XIP обычно используется только для загрузчиков первой ступени или когда ОЗУ очень мало. В частности, игровые приставки второго-четвертого поколений подключают адрес и шину данных картриджа ROM к шине данных консоли, что позволяет (например) Atari 2600 работать только с 128 байт ОЗУ в интерфейсе джойстика IC.
Относительно новая файловая система для Linux, называемая AXFS (Advanced XIP File System), направлена на устранение некоторых недостатков, связанных с XIP, особенно в отношении выполнения на месте приложений пользовательского пространства. Это позволяет, например, разделить исполняемый двоичный файл на «области XIP», избегая, таким образом, ограничения фрагментации, упомянутого выше.
A Реализация NetBSD также находится в стадии разработки.