Операционная система UNIX. Руководство программиста

     

Описание конфигурации памяти


Предложение MEMORY используется для указания:

  • Общего размера виртуальной памяти целевого компьютера.
  • Конфигурируемых и неконфигурируемых областей виртуальной памяти.

Если предложения MEMORY отсутствуют, вся память считается конфигурируемой. Подразумеваемый размер памяти зависит от целевого компьютера.

Предложение MEMORY позволяет дать любому диапазону виртуальных адресов произвольное имя длиной не более восьми символов, которое в дальнейшем можно использовать для связывания выходных секций с адресами из поименованного диапазона. Имена областей памяти могут состоять из прописных и строчных букв, цифр и специальных символов $, ., _. Эти имена используются только в процессе работы редактора связей и не включаются ни в заголовки выходного объектного файла, ни в его таблицу имен.

При наличии предложений MEMORY вся явно не описанная в них память считается неконфигурируемой. Редактор связей не использует для размещения неконфигурируемые области памяти, поэтому с ними могут быть связаны только DSECT-секции.

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

В настоящее время возможные атрибуты таковы:

R   Память, допускающая чтение.
  W   Память, допускающая запись.
  Х   Память, в которой могут размещаться выполняемые команды.
  I   Инициализируемая память. Например, память, отводимая под стек, обычно не инициализируется.

В дальнейшем, если понадобится, будут добавлены новые атрибуты. Если атрибуты не указаны в предложениях MEMORY, либо этих предложений нет вообще, то по умолчанию области памяти получают атрибуты R, W, Х и I.

Cинтаксис предложения MEMORY таков:

MEMORY { имя1 (атрибуты) : origin = n1, length = n2 имя2 (атрибуты) : origin = n3, length = n4 . . . }

После ключевого слова origin (которое можно сократить до org или o) указывается начальный адрес области памяти. После ключевого слова length (или, короче, len или l) указывается размер области. Операнд слова origin должен быть допустимым виртуальным адресом. Значения начального адреса и длины указываются в виде десятичной, восьмеричной или шестнадцатеричной константы, записанной по правилам языка C. Предложения MEMORY, а также спецификации origin и length внутри них, должны отделяться друг от друга пробелами, символами табуляции, переводами строк или запятыми.

Пользуясь предложением MEMORY, можно указать редактору связей, что конфигурация памяти отличается от подразумеваемой. Например, пусть нужно не допустить связывания объектов с адресами в пределах первых 0x10000 слов. Этого можно добиться посредством следующего предложения MEMORY:

MEMORY { valid: org = 0x10000, len = 0xFE0000 }



Содержание раздела