10.2.2 Позиционно независимый код (PIC)

Предыдущая  Содержание  Следующая V*D*V

В этом случае компилятор создаёт позиционно независимый код с помощью программного счётчика - относительно текстовых адресов. (* Например, вызов функции будет использовать “call 0x500”, означающий вызов функции, расположенный по адресу PC+0x500 или “jmp 0x20”, означающий переход по адресу PC+0x20.) Относительная адресация требует аппаратной поддержки, инструкций, которые способны интерпретировать адресацию относительно PC (Program Counter, счётчик команд, программный счётчик). Все данные адресуются с помощью таблицы, называемой глобальной таблицей смещений (Global Offset Table, GOT). GOT помещается в начало сегмента данных и содержит указатели адресов данных, используемых в коде. На некоторых архитектурах, таких как m68k, размер GOT ограничен.

 

Выполнение на месте (eXecute In Place, XIP)

 

Режим PIC также подходит для реализации выполнения на месте (eXecute-In-Place, XIP). В отличие от случая смены адресов, когда текст и данные необходимо перед исполнением скопировать в память (для модификации адресов переходов и вызовов), в двоичных файлов на основе PIC ничего исправлять не нужно. Программа может начать выполнение сразу, как только был настроен сегмент данных. (* Заметим, что для этого сегменты данных и текста должны быть разделены с помощью соответствующих аргументов компилятора.) XIP использует это свойство и работает с текстом непосредственно на флеш/ПЗУ, на месте. Несколько экземпляров программы просто создают новые сегменты данных, а текстовый сегмент фактически является общим для всех экземпляров. В Таблице 10.1 приведены различия между FRB и PIC.

 

Table 10.1 Сравнение FRB и PIC

 

Полностью перемещаемый бинарный файл

Позиционно независимый код

XIP не возможен.

XIP возможен.

Несколько экземпляров одной программы приводят к потере памяти, так как для каждого экземпляра текстовые сегменты должны быть скопированы в память.

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

Время запуска большое, так как до запуска должны быть  модифицированы адреса.

Небольшое время запуска.

Работает на всех платформах.

PIC требует поддержки на данной платформе(относительный режим адресации).

 

Предыдущая  Содержание  Следующая