В информатике , выполнять на месте ( XIP ) представляет собой способ выполнения программ непосредственно из долговременного хранения , а не копировать его в ОЗУ . Это расширение использования общей памяти для уменьшения общего объема необходимой памяти.
Его общий эффект заключается в том, что текст программы не потребляет доступную для записи память, сохраняя его для динамических данных, и что все экземпляры программы запускаются из одной копии.
Чтобы это сработало, необходимо соответствие нескольким критериям:
- Хранилище должно обеспечивать аналогичный интерфейс с ЦП, что и обычная память (или должен присутствовать адаптивный уровень).
- Этот интерфейс должен обеспечивать достаточно быстрые операции чтения с шаблоном произвольного доступа .
- Файловая система , если она используется, необходимо выставить соответствующие функции отображения.
- Программа должна быть либо связана, чтобы знать адрес хранилища в системе, либо быть независимой от позиции .
- Программа не должна изменять данные в загруженном изображении.
Требования к хранилищу обычно удовлетворяются за счет использования флэш-памяти NOR или EEPROM , которые можно адресовать как отдельные слова для операций чтения, хотя в большинстве настроек это немного медленнее, чем обычная системная RAM.
XIP во время загрузочной загрузки
Как правило, загрузчик первого уровня представляет собой программу XIP, которая связана для запуска по адресу, по которому микросхемы флэш-памяти отображаются при включении питания, и содержит минимальную программу для настройки системной ОЗУ (которая зависит от компонентов используется на отдельных платах и не может быть достаточно обобщенным, чтобы правильная последовательность могла быть встроена в аппаратное обеспечение процессора), а затем загружает загрузчик второго этапа или ядро ОС в ОЗУ.
Во время этой инициализации доступная для записи память может быть недоступна, поэтому все вычисления должны выполняться в регистрах процессора. По этой причине загрузчики первого этапа обычно пишутся на языке ассемблера и делают только минимум, чтобы обеспечить нормальную среду выполнения для следующей программы. Некоторые процессоры либо встраивают небольшой объем SRAM в сам чип [1], либо позволяют использовать встроенную кэш-память в качестве RAM [2], чтобы упростить запись загрузчика первого этапа с использованием языка высокого уровня.
Для ядра или загрузчика адресное пространство обычно назначается внутренне, поэтому для использования XIP для них достаточно указать компоновщику, чтобы он размещал неизменяемые и изменяемые данные в разных диапазонах адресов и предоставил механизм для копирования изменяемых данных. в доступную для записи память перед запуском любого кода, который предполагает, что к данным можно получить доступ в обычном режиме. Это можно сделать как часть предыдущего этапа или в небольшом сегменте кода в начале программы.
Если адресное пространство назначается извне, например, в прикладной программе, которая выполняется в системе, которая не предоставляет виртуальную память , компилятору необходимо получить доступ ко всем изменяемым данным, добавив смещение к указателю на частную копию области данных. В этом случае внешний загрузчик отвечает за настройку конкретных областей памяти экземпляра.
BIOS и UEFI используют XIP для инициализации основной памяти .
XIP как файловая система
XIP предъявляет требования к файловым системам, которые часто трудно удовлетворить. В системах без таблицы страниц , весь файл должен быть сохранен в течение последовательных байтов и не должны быть фрагментированы, в то время как файловые системы флэш - основе , часто стремятся распространять данные в секторах флэш - памяти , которые имеют наименьшее количество циклов стирания и даже из износа на чип, продлевающий срок его службы.
Все эти сложности и компромисс скорости означают, что XIP обычно используется только для загрузчиков первой ступени или когда ОЗУ крайне не хватает. В частности, игровые приставки второго-четвертого поколений подключают адрес картриджа ПЗУ и шину данных к шине консоли, [3] что позволяет (например) Atari 2600 работать только с 128 байтами ОЗУ в интерфейсе джойстика. IC .
Относительно новая файловая система для Linux, называемая AXFS ( Advanced XIP File System ), направлена на преодоление некоторых недостатков, связанных с XIP, особенно в отношении выполнения приложений пользовательского пространства на месте . Это позволяет, например, разбить исполняемый двоичный файл на «области XIP», избегая, таким образом, ограничения фрагментации, упомянутого выше.
Смотрите также
Рекомендации
- ^ Samsung S3C2416X имеет 64 КБ встроенной SRAM, доступной на системной шине.
- ^ Broadcom BCM2835 использует кэш 2-го уровня в качестве ОЗУ загрузчика перед инициализацией SDRAM.
- ^ Патент США 4485457A , Ричард К. Balaska, Роберт Л. Хантер и Скотт С. Робинсон, «Система памяти , включая ОЗУ и ПЗУ страницу переключаемой», выданную 1984-11-27, назначен CBS Inc.
- ^ Uebayashi, Масао (2010-04-05). «Поддержка eXecute-In-Place (XIP) для NetBSD» (PDF) . BSDCan .
Внешние ссылки
- Берд, Тим Р. (2004). «Методы увеличения времени загрузки в Linux» (PDF) . Оттавский симпозиум по Linux .
- Халберт, Джаред (2008). «Введение в расширенную файловую систему XIP» (PDF) . Оттавский симпозиум по Linux .
- Уилшир, Фил (2002-08-28). «Обзор eXecute In Place (XIP)» . uCdot . Архивировано из оригинала на 2007-10-20 . Проверено 25 сентября 2007 .
- Веллхёфер, Сорен (17 сентября 2009 г.). «Приложение eXecute-In-Place (XIP) с Linux и AXFS» . Проверено 17 сентября 2009 .
- «Настроить Linux для XIP (выполнение на месте) на PowerPC» . Разработка программного обеспечения DENX.
- «Ядро XIP» . Встроенный Linux Wiki .
- «Приложение для Linux XIP» . Встроенный Linux Wiki .
- «Выполнить на месте драйвер файловой системы - xip2fs» . Linux для S / 390 .