stringtranslate.com

Выполнить на месте

В информатике , выполнение на месте ( XIP ) — это метод выполнения программ непосредственно из долговременного хранилища, а не копирования их в ОЗУ . Это расширение использования общей памяти для уменьшения общего объема требуемой памяти.

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

Чтобы это работало, необходимо соблюдение нескольких критериев:

Требования к хранению обычно удовлетворяются с помощью флэш-памяти NOR или EEPROM , которая может иметь побайтовую адресацию для операций чтения, хотя в большинстве установок она немного медленнее обычной системной оперативной памяти.

XIP во время загрузки

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

Во время этой инициализации записываемая память может быть недоступна, поэтому все вычисления должны выполняться в регистрах процессора. По этой причине загрузчики первой стадии, как правило, пишутся на языке ассемблера и выполняют только минимум, чтобы обеспечить нормальную среду выполнения для следующей программы. Некоторые процессоры либо встраивают небольшой объем SRAM в сам чип, [1] либо позволяют использовать встроенную кэш-память в качестве RAM, [2] чтобы упростить написание загрузчика первой стадии с использованием языка высокого уровня.

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

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

В системах x86 BIOS / UEFI ROM обычно отображается на фиксированное пространство памяти при включении питания, [3] а BIOS / UEFI в системах x86 использует XIP для инициализации основной памяти . Во встраиваемых системах ARM и RISC-V обычно встроенное в SoC Boot ROM отображается на фиксированное пространство памяти при включении питания, и Boot ROM может найти и загрузить встроенный загрузчик, такой как Das U-Boot, из флэш-памяти NAND , и этот процесс загрузки не использует выделенную микросхему EEPROM .

XIP как файловая система

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

Все эти сложности и компромисс скорости означают, что XIP обычно используется только для загрузчиков первой стадии или когда ОЗУ крайне не хватает. В частности, игровые приставки второго-четвертого поколения подключают адрес картриджа ROM и шину данных к шине консоли, [4] что позволяет (например) Atari 2600 работать только со 128 байтами ОЗУ в интерфейсе джойстика IC .

Относительно новая файловая система для Linux, называемая AXFS ( Advanced XIP File System ), направлена ​​на преодоление некоторых недостатков, связанных с XIP, особенно в отношении выполнения приложений пользовательского пространства на месте . Например, она позволяет разделить исполняемый двоичный файл на «регионы XIP», тем самым избегая ограничения фрагментации, о котором упоминалось выше.

Реализация NetBSD также находится в стадии разработки. [5]

Смотрите также

Ссылки

  1. ^ Samsung S3C2416X имеет 64 КБ встроенной SRAM, доступной на системной шине.
  2. ^ Broadcom BCM2835 использует кэш 2-го уровня в качестве ОЗУ загрузчика перед инициализацией SDRAM.
  3. ^ «Чувак, где мои 4 гигабайта оперативной памяти?». Coding Horror . 2007-03-08 . Получено 2024-08-31 .
  4. Патент США 4485457, Ричард К. Баласка, Роберт Л. Хантер и Скотт С. Робинсон, «Система памяти, включающая ОЗУ и ПЗУ с переключением страниц», выдан 27 ноября 1984 г., передан CBS Inc. 
  5. ^ Уэбаяси, Масао (2010-04-05). "Поддержка eXecute-In-Place (XIP) для NetBSD" (PDF) . BSDCan.

Внешние ссылки