Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Топ:
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Интересное:
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Существует несколько вариантов распределения сегментов в пределах банка памяти:
· распределение сегментов заданных размеров. В этом случае редактор связей располагает сегменты в порядке их следования, приведенном в файле конфигурации. Сегменты ложатся один за другим с учетом констант выравнивания, заданных для каждого сегмента. Если места в банке окажется недостаточно, редактор связей выдаст соответствующую ошибку. Реальные адреса сегментов будут вычислены после того, как процесс размещения будет окончен,
· распределение сегментов, когда один из них имеет заранее определенный адрес и размер. Если этот сегмент не первый в списке, то банк разбивается на две части. В первую часть добавляются сегменты в порядке, определенном в файле конфигурации. Сегмент с определенным адресом пропускается. Если для очередного сегмента не хватает места, он помещается после сегмента с определенным адресом. Образовавшееся свободное пространство остается незаполненным,
· распределение сегментов, когда один из них имеет плавающий размер. Независимо ни от чего, сначала в банке размещаются все сегменты, размеры которых определяются только секциями, описанными в файле конфигурации. Далее в сегменты добавляются загружаемые секции, не упомянутые в файле конфигурации. Если первым в списке стоит сегмент с плавающим размером, то все эти секции добавляются в него. При этом осуществляется проверка на превышение размеров банка памяти. Если первым стоит сегмент заданного размера, то в него добавляются секции, пока его реальный не превысит заданного порога. Тогда остальные секции будут добавляться в следующие сегменты по той же схеме,
· распределение сегментов, когда два из них имеют плавающий размер. Ситуация почти не отличается от предыдущего пункта. Все дополнительные секции будут добавлены в первый сегмент плавающего размера, поэтому наличие плавающего размера у второго сегмента роли не играет, он реально ничем не будет отличаться от сегментов с ограниченным максимальным размером,
· распределение сегментов, когда сегмент с плавающим размером располагается перед сегментом с определенным адресом. В этом случае первый сегмент может увеличиваться до определенной границы, то есть его размер ограничивается адресным пространством от начала банка, до начала сегмента с определенным адресом. Дальнейший механизм добавления секций остается без изменений.
Секция SECTIONS
В SECTIONS содержится описание загружаемых секций, входящих в состав объектного файла. Каждая секция может иметь следующие атрибуты:
| Имя | - имя секции. Для задания имени могут использоваться символы: A-Z, a-z, _. Не допускаются пробелы внутри имен. Как и в языке ассемблера, имя секции не должно предваряться точкой, то есть имена секций в ассемблере и в файле конфигурации совпадают. |
| Align page | - выравнивание по началу страницы памяти. Это означает, что секция должна начинаться с адреса, кратного размеру страницы памяти данного банка, с который она попадает (по умолчанию все загружаемые секции выравниваются по границе 64-х разрядного слова). |
| executable | - содержит исполняемый код. Этот флаг принудительно устанавливается для секций.text***,.init***,.fini***, tss |
| writable | - содержит перезаписываемые данные. Этот флаг принудительно устанавливается для секций.data***,.bss***,.common***,.stack***,.heap***, |
Секция всегда входит в состав того или иного сегмента (речь идет только об абсолютных исполняемых файлах). Если несколько секций принадлежат одному и тому же сегменту, то они размещаются в порядке, определенном в файле конфигурации. Секции, не упомянутые в файле конфигурации, но являющиеся загружаемыми также добавляются в сегменты по правилам, описанным в подпункте 4.11.2.1.
Задание абсолютного адреса секции вручную: at 0x80000000; адрес, начиная с которого размещается описываемая секция. В этом случае для данной секции заводится собственный сегмент с определенным адресом и размером, равным размеру секции.
Приведем пример секции SECTIONS:
SECTIONS /* Размещение секций по сегментам */
{
text in name2;
data in name1;
text1 in name1, align page;
nobits in name2, align page;
heap at 0x10020000;
stack at 0x00010000;
}
Последовательность секций в сегменте определяется несколькими факторами:
· общий порядок размещения секций в сегменте, когда сначала располагаются секции инициализированных, а затем неинициализированных данных,
· сначала в сегменте расположены секции, приведенные в файле конфигурации, а затем остальные с флагом загрузки.
Следующий пример показывает, как редактор связей расположит секции в сегменте.
· объектный файл содержит следующие загружаемые секции:
textProc; (секция инициализированных данных)
bss.dataVector; (секция не инициализированных данных)
dataVector; (секция инициализированных данных)
textMain; (секция инициализированных данных)
dataProc; (секция инициализированных данных)
bss.dataProc; (секция не инициализированных данных)
textProc1; (секция инициализированных данных)
· файл конфигурации задает расположение некоторых из них в сегменте VECTORS:
SECTIONS
{
dataVector in VECTORS;
bss.dataVector in VECTORS;
textMain in VECTORS, align page;
textProc1 in VECTORS;
}
· реальное расположение секций в сегменте, установленное редактором связей:
// секции инициализированных данных.
dataVector; // из файла конфигурации.
textProc; // не отмеченная в файле конфигурации.
textMain; // из файла конфигурации.
textProc1; // из файла конфигурации.
dataProc; // не отмеченная в файле конфигурации.
// секции неинициализированных данных.
bss.dataVector; // из файла конфигурации.
bss.dataProc1; // не отмеченная в файле конфигурации.
Однако реальный порядок секций в сегменте может быть отличным от приведенного выше. А повлиять на него способно выравнивание секций по границе страницы памяти. Например, если в результате выравнивания секций, между секциями dataVector и textMain образуется неиспользуемый участок памяти, то редактор связей может поместить в него одну из секций, не упомянутых в файле конфигурации. Это зависит от размера вставляемой секции и от требования по ее выравниванию в памяти. Если секция textProc с учетом выравнивания имеет размер меньший размера неиспользуемого участка, то окончательное расположение секций в сегменте будет следующим:
// секции инициализированных данных.
dataVector; // из файла конфигурации.
textProc; // не отмеченная в файле конфигурации.
textMain; // из файла конфигурации.
textProc1; // из файла конфигурации.
dataProc; // не отмеченная в файле конфигурации.
|
|
|
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!