Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Топ:
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Интересное:
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Дисциплины:
2022-10-05 | 19 |
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; // не отмеченная в файле конфигурации.
|
|
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!